elanous 0.2.9 → 0.2.11

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 (694) 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/Y4zKzL62sakG5momz3SoQ/_buildManifest.js +1 -0
  4. package/apps/pwa/out/_next/static/chunks/1159-0c5ef8bc21cb6afb.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1394-556de6d71bbdb0fb.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1452.93700483b9d4fc61.js +9 -0
  7. package/apps/pwa/out/_next/static/chunks/{6062-73e68343a9814f6a.js → 1829-b453a1b22d3999bb.js} +1 -1
  8. package/apps/pwa/out/_next/static/chunks/2176-c379e3ebce874151.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/2310-7a59f043f6db207e.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/2426.8c6ee0c668d53def.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/2548-6e316138d347cefe.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/3170-7ec60a56fa0e4728.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/3278-ae6ef084769f6195.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/3454-988a53dac60a1763.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/3638-aa80b4641ea439db.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/3735-fe3402553ac1c9c6.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/3869-a39d1d9921e10d43.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/390.c373e31b3b9d0c41.js +5 -0
  19. package/apps/pwa/out/_next/static/chunks/3992-2e522a8ac5f2afde.js +25 -0
  20. package/apps/pwa/out/_next/static/chunks/4215-c9d91dd644ec1719.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/4508-5d0161d1e724d735.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/4685-c3c1c625b71accd1.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/4733-623a79345b171e1c.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/4883.3bd969ea1d3aaaff.js +2 -0
  25. package/apps/pwa/out/_next/static/chunks/507-5acd98bd6dab2d8a.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/5445-745eb795c5963d79.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/5532.6899a12958a89b72.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/5845-e6c003ce8d5fd36a.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/5978-b27004c677119115.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/{8046cadf-211ca3c0e00f2b72.js → 5cd7e3a9-404fd6b8d0ecd44c.js} +1 -1
  31. package/apps/pwa/out/_next/static/chunks/6048-4c5c33579bc4ef78.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/6303-422dbf0f67c72aac.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/6751-bb3595948b2e311b.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/7274-19b7279f18b47ab3.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/{4323.c5dfb6f503304775.js → 7334.a6679d9168f37aa8.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/7551-a0e0707b79164ddd.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/7777-79f845045aa1ed86.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/79f8be9e-957d68913b590b08.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/8025-cc24ee5d8f2fb6f8.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/8039-df92e08fede5de8f.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/8206-c6684dcde12be721.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/8421-1c4acfb1395a0edf.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/8605-ea5bee9dfae512c7.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/8725.bf46bb1395dd0fa2.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/8734-252d511cd276c0dc.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/8834-ca1cb09c1cb1a6bf.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{2415.ed6428ff334c7ce2.js → 9269.d2a4795bc6812717.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/9538-2816b90923606459.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/9656-c1540088f5859c80.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d16993889b125c42.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/approvals/page-1dcdc58fc2de2454.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-6a061bd97f0b9398.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/board/page-cb95a7432c9ee744.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-f972fc1c00a62e88.js → page-b12b6d2f8d2d1aea.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/app/bots/page-b9efe868bfd36255.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/chat/page-7c97dcdfe2e37a60.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/consult/page-8fd36984f549270a.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/control/page-5721537ca8a3598c.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/design-check/page-b654240a572e4c48.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/editor/page-b9750abc897508c3.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/exec/page-4cd1de371f8ad048.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/field/page-d99f89657828421c.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/healthz/route-d16993889b125c42.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/inside/page-50cb2a0eb15e6c83.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/intake/page-c8b1ccda6ba7ae98.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/layout-d6b1d156fb95e74b.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/live/page-2a9932ddb62d76bd.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/market/page-9688f5b4f1ff950f.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6b15dd6456c5df09.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/morning/{page-adfbd2ba9598e59a.js → page-35414e0a007b4082.js} +1 -1
  72. package/apps/pwa/out/_next/static/chunks/app/not-found-e7a529e0507ac86c.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/observatory/page-e001823c35c9dd67.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-371423d1a573d64b.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4b764b125339ac17.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cdf8e4b01067bcf1.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/outputs/page-3a24072b35470157.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/page-94c82eb0ae5abb32.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/reflection/page-0be8d4b2ced75ba0.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d37cb0d52f9b6bd5.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/sessions/page-686da0df9bf23e5c.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4dc614f3ce043e63.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/settings/page-53f80edc6b8dc07c.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-d02c782fc792e2af.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/app/setup/layout-d16993889b125c42.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/app/setup/page-239c17b911b84e72.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/app/share/page-dc6a79fb003f746c.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/app/showroom/page-0fffb84cafdc9da6.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/app/tasks/page-1218753c82d585f6.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/app/term/page-4b5935e67531efb5.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/app/today/page-3285bc87caf1eaa5.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/app/trace/page-ad553b0e06505ecd.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/app/vault/page-fca096e3e860306f.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9ebfa78f0d9885c3.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/app/workflows/page-3dc5f21f7e39622d.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/app/workspace/page-c6da2b468454532d.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-93bc70e36f595414.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/{2ea96958-e8c7e112de50b067.js → f48170cc-d05d28bf87a43bf4.js} +1 -1
  99. package/apps/pwa/out/_next/static/chunks/framework-172630e6aa5e2d7f.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/main-app-f0fe2d7477845181.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/main-fc98ac70b44eccb0.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/pages/_app-5bd7f10271f72413.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/pages/_error-97d0d85ea05fef9b.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/webpack-9e4d02d567b98240.js +1 -0
  105. package/apps/pwa/out/_next/static/css/543f56bcb1f79fca.css +1 -0
  106. package/apps/pwa/out/approvals/index.html +1 -1
  107. package/apps/pwa/out/approvals/index.txt +23 -23
  108. package/apps/pwa/out/autopilot/index.html +1 -1
  109. package/apps/pwa/out/autopilot/index.txt +23 -23
  110. package/apps/pwa/out/board/index.html +1 -1
  111. package/apps/pwa/out/board/index.txt +23 -23
  112. package/apps/pwa/out/botlab/index.html +1 -1
  113. package/apps/pwa/out/botlab/index.txt +22 -22
  114. package/apps/pwa/out/bots/index.html +1 -1
  115. package/apps/pwa/out/bots/index.txt +22 -22
  116. package/apps/pwa/out/chat/index.html +1 -1
  117. package/apps/pwa/out/chat/index.txt +22 -22
  118. package/apps/pwa/out/consult/index.html +1 -1
  119. package/apps/pwa/out/consult/index.txt +23 -23
  120. package/apps/pwa/out/control/index.html +1 -1
  121. package/apps/pwa/out/control/index.txt +23 -23
  122. package/apps/pwa/out/design-check/index.html +1 -1
  123. package/apps/pwa/out/design-check/index.txt +23 -23
  124. package/apps/pwa/out/editor/index.html +1 -1
  125. package/apps/pwa/out/editor/index.txt +23 -23
  126. package/apps/pwa/out/exec/index.html +1 -1
  127. package/apps/pwa/out/exec/index.txt +23 -23
  128. package/apps/pwa/out/field/index.html +1 -1
  129. package/apps/pwa/out/field/index.txt +23 -23
  130. package/apps/pwa/out/healthz +1 -1
  131. package/apps/pwa/out/index.html +1 -1
  132. package/apps/pwa/out/index.txt +22 -22
  133. package/apps/pwa/out/inside/index.html +1 -0
  134. package/apps/pwa/out/inside/index.txt +31 -0
  135. package/apps/pwa/out/intake/index.html +1 -1
  136. package/apps/pwa/out/intake/index.txt +23 -23
  137. package/apps/pwa/out/live/index.html +1 -1
  138. package/apps/pwa/out/live/index.txt +23 -23
  139. package/apps/pwa/out/market/index.html +1 -1
  140. package/apps/pwa/out/market/index.txt +22 -22
  141. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  142. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  143. package/apps/pwa/out/morning/index.html +1 -1
  144. package/apps/pwa/out/morning/index.txt +23 -23
  145. package/apps/pwa/out/observatory/index.html +1 -1
  146. package/apps/pwa/out/observatory/index.txt +23 -23
  147. package/apps/pwa/out/ops/checklist/index.html +1 -1
  148. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  149. package/apps/pwa/out/ops/release/index.html +1 -1
  150. package/apps/pwa/out/ops/release/index.txt +22 -22
  151. package/apps/pwa/out/ops/seats/index.html +1 -0
  152. package/apps/pwa/out/ops/seats/index.txt +30 -0
  153. package/apps/pwa/out/outputs/index.html +1 -0
  154. package/apps/pwa/out/outputs/index.txt +30 -0
  155. package/apps/pwa/out/reflection/index.html +1 -1
  156. package/apps/pwa/out/reflection/index.txt +23 -23
  157. package/apps/pwa/out/scheduler/index.html +1 -1
  158. package/apps/pwa/out/scheduler/index.txt +23 -23
  159. package/apps/pwa/out/sessions/index.html +1 -1
  160. package/apps/pwa/out/sessions/index.txt +22 -22
  161. package/apps/pwa/out/settings/devices/index.html +1 -1
  162. package/apps/pwa/out/settings/devices/index.txt +23 -23
  163. package/apps/pwa/out/settings/index.html +1 -1
  164. package/apps/pwa/out/settings/index.txt +23 -23
  165. package/apps/pwa/out/setup/done/index.html +1 -1
  166. package/apps/pwa/out/setup/done/index.txt +23 -23
  167. package/apps/pwa/out/setup/index.html +1 -1
  168. package/apps/pwa/out/setup/index.txt +23 -23
  169. package/apps/pwa/out/share/index.html +1 -1
  170. package/apps/pwa/out/share/index.txt +23 -23
  171. package/apps/pwa/out/showroom/index.html +1 -1
  172. package/apps/pwa/out/showroom/index.txt +22 -22
  173. package/apps/pwa/out/tasks/index.html +1 -1
  174. package/apps/pwa/out/tasks/index.txt +23 -23
  175. package/apps/pwa/out/term/index.html +1 -1
  176. package/apps/pwa/out/term/index.txt +23 -24
  177. package/apps/pwa/out/today/index.html +1 -0
  178. package/apps/pwa/out/today/index.txt +33 -0
  179. package/apps/pwa/out/trace/index.html +1 -1
  180. package/apps/pwa/out/trace/index.txt +23 -23
  181. package/apps/pwa/out/vault/index.html +1 -1
  182. package/apps/pwa/out/vault/index.txt +23 -23
  183. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  184. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  185. package/apps/pwa/out/workflows/index.html +1 -1
  186. package/apps/pwa/out/workflows/index.txt +23 -23
  187. package/apps/pwa/out/workspace/index.html +1 -1
  188. package/apps/pwa/out/workspace/index.txt +23 -24
  189. package/apps/pwa/out/worktrees/index.html +1 -1
  190. package/apps/pwa/out/worktrees/index.txt +23 -23
  191. package/graphs/drafts/draft-cleanup.yaml +19 -0
  192. package/graphs/drafts/recipes.yaml +23 -0
  193. package/graphs/field/field-feed.yaml +2 -0
  194. package/graphs/implement-loop.yaml +1 -1
  195. package/graphs/intake/intake-daily.yaml +2 -1
  196. package/graphs/ops/recipes.yaml +3 -0
  197. package/graphs/ops/secret-exposure.yaml +24 -0
  198. package/graphs/release/recipes.yaml +3 -0
  199. package/graphs/release/release-loop.yaml +4 -1
  200. package/graphs/video/explainer-line.yaml +2 -2
  201. package/package.json +2 -1
  202. package/plugins/card-followup/graphs/run-step.ts +48 -13
  203. package/plugins/doc-draft/graphs/doc-draft.yaml +3 -3
  204. package/plugins/doc-draft/graphs/run-step.ts +13 -6
  205. package/plugins/elanous-hwp/README.md +25 -0
  206. package/plugins/elanous-hwp/cli.ts +22 -0
  207. package/plugins/elanous-hwp/converter.ts +237 -0
  208. package/plugins/elanous-hwp/fixtures/fixed-controls.hwpx +0 -0
  209. package/plugins/elanous-hwp/fixtures/fixed-table-controls.hwpx +0 -0
  210. package/plugins/elanous-hwp/fixtures/fixed.hwpx +0 -0
  211. package/plugins/elanous-hwp/plugin.json +16 -0
  212. package/plugins/elanous-hwp/plugin.ts +40 -0
  213. package/scripts/ci-public-export-leak-gate.ts +75 -14
  214. package/scripts/ci-public-leak-gate.ts +44 -9
  215. package/scripts/ci-pwa-build-gate.ts +160 -0
  216. package/scripts/context-hooks/claude-stop.sh +4 -0
  217. package/scripts/context-hooks/emit.ts +24 -0
  218. package/scripts/context-hooks/post-tool-use.sh +4 -0
  219. package/scripts/coord-channel-watch.sh +54 -8
  220. package/scripts/coord-digest.ts +199 -0
  221. package/scripts/coord-post.sh +60 -3
  222. package/scripts/coord-requests-bridge.ts +143 -0
  223. package/scripts/field-feed/lib.ts +4 -0
  224. package/scripts/fleet/node-setup.sh +20 -3
  225. package/scripts/homebrew-formula-bump.ts +69 -0
  226. package/scripts/install.ps1 +68 -9
  227. package/scripts/install.sh +39 -12
  228. package/scripts/lib/pwa-scenarios/scenarios.ts +20 -0
  229. package/scripts/lib/tui-regress-checks.ts +146 -0
  230. package/scripts/marketing/measure-site-numbers.ts +169 -0
  231. package/scripts/measure-gate-shards.ts +309 -0
  232. package/scripts/memory-lifecycle-cycle.ts +2 -2
  233. package/scripts/mission-request-judge.ts +31 -1
  234. package/scripts/morning-report.ts +2 -2
  235. package/scripts/opportunity-scan.ts +1 -1
  236. package/scripts/ops-now-probe.ts +327 -0
  237. package/scripts/publish-internal-dist.ts +11 -1
  238. package/scripts/release-loop/auto-approve-node.ts +21 -4
  239. package/scripts/release-loop/cut-branch.ts +84 -0
  240. package/scripts/release-loop/cutoff.ts +19 -8
  241. package/scripts/release-loop/gate-node.ts +14 -13
  242. package/scripts/release-loop/mac-smoke-node.ts +229 -0
  243. package/scripts/release-loop/node-verdict.ts +3 -3
  244. package/scripts/release-loop/ops-upgrade-node.ts +72 -16
  245. package/scripts/release-loop/release-readiness.ts +9 -0
  246. package/scripts/release-loop/tui-node-checks.ts +42 -0
  247. package/scripts/release-loop/tui-sim-node.ts +32 -8
  248. package/scripts/release-loop/unattended-release.ts +5 -3
  249. package/scripts/release-loop/version-node.ts +112 -13
  250. package/scripts/repo-watch-cycle.ts +1 -1
  251. package/scripts/retro-cycle.ts +2 -2
  252. package/scripts/schedule-health-report.ts +1 -1
  253. package/scripts/signal-digest-cycle.ts +2 -7
  254. package/scripts/signal-digest-photo.ts +11 -0
  255. package/scripts/storyboard/storyboard.ts +5 -161
  256. package/scripts/tech1-public-measure.ts +94 -0
  257. package/scripts/test-diet/lib.ts +30 -1
  258. package/scripts/test-diet/node.ts +83 -8
  259. package/scripts/test-timeout-audit.ts +114 -0
  260. package/scripts/tree-sync-alert.ts +1 -1
  261. package/scripts/tui-regress.ts +71 -0
  262. package/scripts/ux/demo-rehearsal.ts +243 -0
  263. package/scripts/ux/lib/rehearsal-verdict.ts +73 -0
  264. package/scripts/waitlist-daily-digest.ts +1 -1
  265. package/skills/diagram-master/SKILL.md +366 -0
  266. package/skills/diagram-master/references/engines/excalidraw/color-palette.md +67 -0
  267. package/skills/diagram-master/references/engines/excalidraw/element-templates.md +182 -0
  268. package/skills/diagram-master/references/engines/excalidraw/json-schema.md +71 -0
  269. package/skills/diagram-master/references/engines/excalidraw/render_excalidraw.py +189 -0
  270. package/skills/diagram-master/references/engines/excalidraw/render_template.html +57 -0
  271. package/skills/diagram-master/references/engines/matplotlib/matplotlib-patterns.md +235 -0
  272. package/skills/diagram-master/references/engines/matplotlib/render_matplotlib.py +184 -0
  273. package/skills/diagram-master/references/engines/mermaid/domain-templates.md +435 -0
  274. package/skills/diagram-master/references/engines/mermaid/render_mermaid.py +116 -0
  275. package/skills/diagram-master/references/engines/mermaid/syntax-reference.md +2247 -0
  276. package/skills/diagram-master/references/engines/nanobannana/render_nanobannana2.py +168 -0
  277. package/skills/diagram-master/references/engines/svg/color-palette.md +188 -0
  278. package/skills/diagram-master/references/engines/svg/html-base-template.html +332 -0
  279. package/skills/diagram-master/references/engines/svg/interactivity-patterns.md +435 -0
  280. package/skills/diagram-master/references/engines/svg/render_interactive_svg.py +212 -0
  281. package/skills/diagram-master/references/engines/svg/svg-element-templates.md +349 -0
  282. package/skills/diagram-master/references/examples/README.md +69 -0
  283. package/skills/diagram-master/references/examples/ref_grid_architecture.png +0 -0
  284. package/skills/diagram-master/references/examples/ref_layered_flow.png +0 -0
  285. package/skills/diagram-master/references/pyproject.toml +16 -0
  286. package/skills/diagram-master/references/quality-checklist.md +33 -0
  287. package/skills/diagram-master/references/routing-guide.md +164 -0
  288. package/skills/diagram-master/references/uv.lock +1356 -0
  289. package/skills/explainer-video/SKILL.md +4 -0
  290. package/skills/explainer-video/engine/reel.mjs +18 -13
  291. package/skills/explainer-video/engine/reel.sh +24 -5
  292. package/skills/explainer-video/engine/stitch.mjs +145 -0
  293. package/skills/google-workspace/SKILL.md +33 -0
  294. package/skills/google-workspace/scripts/gws-safe.sh +177 -0
  295. package/skills/grill-me/SKILL.md +1 -1
  296. package/skills/lecture-note-digitizer/SKILL.md +926 -0
  297. package/skills/lecture-note-digitizer/references/convert_to_pdf.py +30 -0
  298. package/skills/lecture-note-digitizer/references/extract_slide_diagram.py +73 -0
  299. package/skills/lecture-note-digitizer/references/html-template.md +167 -0
  300. package/skills/lecture-note-digitizer/references/katex-style-guide.md +165 -0
  301. package/skills/omni-crawl/SKILL.md +21 -11
  302. package/skills/omni-crawl/scripts/main.ts +6 -6
  303. package/skills/omni-crawl/src/router.ts +3 -3
  304. package/skills/omni-digest/SKILL.md +17 -9
  305. package/skills/omni-digest/digest.md +2 -2
  306. package/skills/omni-digest/src/fetch.ts +30 -3
  307. package/skills/pitch-deck/SKILL.md +36 -0
  308. package/skills/pitch-deck/template.html +80 -0
  309. package/skills/youtube-master/SKILL.md +163 -0
  310. package/skills/youtube-master/package-lock.json +558 -0
  311. package/skills/youtube-master/package.json +13 -0
  312. package/skills/youtube-master/references/study-note-template.md +124 -0
  313. package/skills/youtube-master/scripts/main.ts +435 -0
  314. package/skills/youtube-master/scripts/transcribe-local.ts +24 -0
  315. package/skills/youtube-master/src/audio.ts +63 -0
  316. package/skills/youtube-master/src/domain-staging.ts +50 -0
  317. package/skills/youtube-master/src/env.ts +36 -0
  318. package/skills/youtube-master/src/obsidian.ts +155 -0
  319. package/skills/youtube-master/src/router.ts +110 -0
  320. package/skills/youtube-master/src/stt.ts +199 -0
  321. package/skills/youtube-master/src/study-note.ts +175 -0
  322. package/skills/youtube-master/src/summarize.ts +358 -0
  323. package/skills/youtube-master/src/transcript.ts +76 -0
  324. package/skills/youtube-master/src/types.ts +91 -0
  325. package/skills/youtube-master/src/util.ts +93 -0
  326. package/skills/youtube-master/src/youtube.ts +70 -0
  327. package/skills/youtube-master/tsconfig.json +13 -0
  328. package/src/acp/codex-approval-adapter.ts +9 -3
  329. package/src/acp/core-turn-bridge.ts +117 -18
  330. package/src/acp/fact-question.ts +11 -0
  331. package/src/acp/server.ts +53 -9
  332. package/src/acp/tool-approval.ts +126 -0
  333. package/src/acp/turn-runner.ts +36 -0
  334. package/src/agent/monad-agent-turn.ts +8 -0
  335. package/src/agent-mission/driver.ts +80 -10
  336. package/src/agent-mission/pty-decision.ts +71 -0
  337. package/src/agent-mission/review-loop.ts +30 -0
  338. package/src/ask-user-question/pending-questions.ts +25 -10
  339. package/src/ask-user-question/types.ts +9 -0
  340. package/src/auth/setup-link-tokens.ts +16 -5
  341. package/src/autopilot/build/integrity-gate.ts +12 -0
  342. package/src/autopilot/build/llm-conflict-merge.ts +16 -3
  343. package/src/autopilot/tool-registry.ts +2 -0
  344. package/src/boot/daemon-prompt-turn.ts +8 -0
  345. package/src/boot/daemon-runtime.ts +9 -3
  346. package/src/boot/daemon-tools/index.ts +8 -0
  347. package/src/boot/daemon-tools/types.ts +2 -0
  348. package/src/boot/daemon-tools/web-search.ts +4 -0
  349. package/src/card-followup/core.ts +109 -0
  350. package/src/chat/ctrl-c-in-input.ts +14 -0
  351. package/src/chat/index.ts +53 -0
  352. package/src/chat/pickers/state.ts +6 -2
  353. package/src/cli/agent-cli.ts +7 -0
  354. package/src/cli/decisions-cli.ts +25 -3
  355. package/src/cli/doctor-bundle-upload.ts +68 -0
  356. package/src/cli/doctor-cli.ts +38 -4
  357. package/src/cli/drive-input-jail.ts +101 -0
  358. package/src/cli/hooks-cli.ts +17 -3
  359. package/src/cli/make-cli.ts +43 -0
  360. package/src/cli/ops-cli.ts +20 -0
  361. package/src/cli/persona-cli.ts +90 -4
  362. package/src/cli/plugin-cli.ts +31 -22
  363. package/src/cli/pod-cli.ts +61 -2
  364. package/src/cli/pr-cli.ts +82 -17
  365. package/src/cli/pty-drive-cli.ts +41 -7
  366. package/src/cli/pty-drive-verdict.ts +40 -0
  367. package/src/cli/pwa-stop.ts +163 -13
  368. package/src/cli/pwa-test.ts +3 -0
  369. package/src/cli/release-cli.ts +80 -24
  370. package/src/cli/self-update.ts +14 -0
  371. package/src/cli/setup-cli.ts +43 -1
  372. package/src/cli/skills-cli.ts +17 -1
  373. package/src/cli/storyboard-cli.ts +37 -0
  374. package/src/cli/test-state-dir-flag.ts +11 -4
  375. package/src/connectors/linear.ts +146 -0
  376. package/src/context-bus/claude-hooks-install.ts +10 -0
  377. package/src/context-bus/context-now-surfaces.ts +48 -0
  378. package/src/context-bus/context-now.ts +104 -0
  379. package/src/context-bus/coord-events.ts +115 -0
  380. package/src/context-bus/external-events.ts +52 -0
  381. package/src/context-bus/long-term-memory.ts +108 -0
  382. package/src/dashboard/dashboard-boot-fixture.ts +23 -0
  383. package/src/dashboard/index.ts +63 -21
  384. package/src/dashboard/slash-runtime/dashboard-handlers.ts +14 -1
  385. package/src/dashboard/slash-runtime/help-from-registry.ts +43 -28
  386. package/src/decisions/decision-cards.ts +58 -3
  387. package/src/decisions/decision-ledger.ts +85 -6
  388. package/src/decisions/decision-linear-projection.ts +157 -0
  389. package/src/decisions/web-push-decision-cards.ts +50 -0
  390. package/src/directive/interpretation-card.ts +36 -0
  391. package/src/discord/sprint21-runtime.ts +5 -1
  392. package/src/discord-self-message.ts +32 -0
  393. package/src/discord-slash-wire.ts +5 -1
  394. package/src/discord.ts +19 -2
  395. package/src/domains/coo-admin-tool.ts +62 -0
  396. package/src/domains/core-tools.ts +13 -4
  397. package/src/domains/elanous-card.ts +29 -0
  398. package/src/domains/ops-facts-tool.ts +76 -0
  399. package/src/domains/outbound-alert.ts +46 -13
  400. package/src/domains/release-tool.ts +168 -0
  401. package/src/domains/telegram-kind-route.ts +65 -9
  402. package/src/exec-requests/default-outputs.ts +25 -0
  403. package/src/exec-requests/planner.ts +106 -28
  404. package/src/exec-requests/runner.ts +123 -12
  405. package/src/exec-requests/store.ts +11 -2
  406. package/src/execution-loop/launch-gate.ts +100 -0
  407. package/src/field/field-media.ts +10 -7
  408. package/src/field/field-reel.ts +19 -5
  409. package/src/field-note/index.ts +201 -0
  410. package/src/field-note/transcribe.ts +248 -0
  411. package/src/git-fs/worktree.ts +45 -6
  412. package/src/graph-kinds/registry.ts +3 -3
  413. package/src/graph-runner/graph-approval-card.ts +113 -0
  414. package/src/graph-runner/graph-cli.ts +189 -4
  415. package/src/graph-runner/graph-grow-llm.ts +37 -0
  416. package/src/graph-runner/graph-grow.ts +47 -0
  417. package/src/graph-runner/graph-notify.ts +25 -3
  418. package/src/graph-runner/runner.ts +453 -35
  419. package/src/grok/agent-search.ts +8 -2
  420. package/src/guardian/secret-exposure-scan.ts +101 -0
  421. package/src/harness/browser-verify.ts +25 -2
  422. package/src/harness/harness-cli-command.ts +478 -42
  423. package/src/harness/harness-incidents-writer.fixture.ts +24 -0
  424. package/src/harness/harness-incidents.ts +129 -0
  425. package/src/harness/harness-pod-dispatch.ts +43 -23
  426. package/src/harness/harness-seams.ts +38 -4
  427. package/src/harness/harness-stop.ts +75 -6
  428. package/src/harness/launch-registry.ts +91 -0
  429. package/src/harness/process-garbage.ts +5 -3
  430. package/src/hitl/clarification-policy.ts +3 -1
  431. package/src/hooks/dispatch.ts +82 -0
  432. package/src/hooks/expose.ts +254 -0
  433. package/src/hooks/github-shadow.ts +108 -0
  434. package/src/hooks/providers.ts +71 -5
  435. package/src/hooks/queue.ts +1 -1
  436. package/src/hooks/receiver.ts +21 -20
  437. package/src/index.ts +206 -49
  438. package/src/intake-plane/author-goals.ts +37 -4
  439. package/src/intake-plane/categorize.ts +18 -46
  440. package/src/intake-plane/check.ts +3 -0
  441. package/src/intake-plane/discord-seat-work.ts +57 -2
  442. package/src/intake-plane/front-route-classifier.ts +33 -39
  443. package/src/intake-plane/persona-answer.ts +30 -0
  444. package/src/intake-plane/runtime-callables.ts +8 -1
  445. package/src/intake-plane/seat-doc-route.ts +170 -6
  446. package/src/intake-plane/telegram-seat-work.ts +80 -4
  447. package/src/intake-plane/telegram-work.ts +1 -0
  448. package/src/intake-plane/wish-folder.ts +67 -0
  449. package/src/intent-gate/gate.ts +30 -10
  450. package/src/live/detail-switch.ts +5 -0
  451. package/src/llm/difficulty.ts +57 -0
  452. package/src/llm/judge-layer.ts +101 -0
  453. package/src/llm/mission-router.ts +33 -19
  454. package/src/loops/contract/examples/cmo-seat.loop.yaml +51 -0
  455. package/src/loops/contract/examples/orchestrator.loop.yaml +57 -0
  456. package/src/loops/contract/examples/steward.loop.yaml +50 -0
  457. package/src/loops/contract/loop-agent.schema.json +138 -0
  458. package/src/loops/contract/validate.ts +64 -0
  459. package/src/loops/registry.ts +20 -6
  460. package/src/market/signed-index.ts +4 -0
  461. package/src/maturity/bot-command-maturity.ts +45 -0
  462. package/src/maturity/cli-maturity.ts +34 -0
  463. package/src/maturity/feature-maturity.ts +120 -1
  464. package/src/maturity/tui-slash-maturity.ts +31 -0
  465. package/src/memory.ts +32 -4
  466. package/src/model-tier/index.ts +2 -2
  467. package/src/model-tier/tier-resolver.ts +20 -20
  468. package/src/model-tier/types.ts +6 -6
  469. package/src/mss/logging/log-store.ts +15 -0
  470. package/src/nexus/api/config-model-tier.ts +5 -4
  471. package/src/nexus/api/exec-requests.ts +33 -3
  472. package/src/nexus/api/fabric-plans.ts +53 -0
  473. package/src/nexus/api/harness-api.ts +5 -1
  474. package/src/nexus/api/health.ts +2 -0
  475. package/src/nexus/api/http-server.ts +89 -1
  476. package/src/nexus/api/inside-events.ts +226 -0
  477. package/src/nexus/api/meta-api.ts +32 -8
  478. package/src/nexus/api/missions.ts +6 -1
  479. package/src/nexus/api/ops-api.ts +10 -1
  480. package/src/nexus/api/ops-seats-sources.ts +37 -7
  481. package/src/nexus/api/ops-seats.ts +49 -6
  482. package/src/nexus/api/outputs-route.ts +44 -0
  483. package/src/nexus/api/seat-requests.ts +132 -10
  484. package/src/nexus/api/sessions-store.ts +42 -0
  485. package/src/nexus/api/setup-codex-login.ts +160 -0
  486. package/src/nexus/api/sub-seat-charters.ts +34 -0
  487. package/src/nexus/api/tabs-mutations.ts +3 -1
  488. package/src/nexus/api/trace.ts +18 -6
  489. package/src/nexus/api/usage-api.ts +102 -0
  490. package/src/nexus/api/workflow-run-event-bridge.ts +1 -0
  491. package/src/nexus/api/workflows.ts +80 -6
  492. package/src/nexus/index.ts +47 -4
  493. package/src/nexus/kinds/webterm.ts +2 -1
  494. package/src/nexus/webterm/pty.ts +6 -2
  495. package/src/onboarding/cli-auth-status.ts +80 -0
  496. package/src/onboarding/first-run.ts +89 -0
  497. package/src/onboarding/lan-address.ts +45 -0
  498. package/src/onboarding/voice-ai.ts +3 -3
  499. package/src/onboarding/web-first.ts +119 -24
  500. package/src/onboarding.ts +4 -0
  501. package/src/ops-now/ops-now-refresh.ts +100 -0
  502. package/src/org/seat-budget.ts +48 -0
  503. package/src/org/stall-escalation.ts +63 -0
  504. package/src/outputs/ledger.ts +120 -0
  505. package/src/persona/persona-todo.ts +79 -0
  506. package/src/persona/presets.ts +116 -2
  507. package/src/persona/team-set.ts +155 -0
  508. package/src/plugins/install/plugin-install.ts +14 -0
  509. package/src/plugins/maker/market-bundle.ts +109 -0
  510. package/src/plugins/maker/plugin-maker.ts +254 -11
  511. package/src/plugins/maker/wizard-generate.ts +103 -0
  512. package/src/pod-lease/admission.ts +150 -0
  513. package/src/pod-lease/dependency-state.ts +85 -0
  514. package/src/pod-lease/host-lease.ts +127 -0
  515. package/src/project/project-store.ts +115 -0
  516. package/src/project/project-suggestion.ts +16 -0
  517. package/src/project/session-context.ts +24 -0
  518. package/src/release-loop/checklist.ts +79 -5
  519. package/src/release-loop/feature-store.ts +159 -24
  520. package/src/release-loop/next-md-merge.ts +58 -0
  521. package/src/release-loop/release-note.ts +59 -4
  522. package/src/release-loop/release-schedule.ts +53 -0
  523. package/src/repl/index.ts +7 -0
  524. package/src/seat-dispatch/ceo-commands.ts +41 -8
  525. package/src/seat-dispatch/ceo-intent.ts +38 -0
  526. package/src/seat-dispatch/seat-ask.ts +130 -0
  527. package/src/seat-dispatch/seat-questions.ts +100 -0
  528. package/src/seat-loop/seat-loop.ts +750 -0
  529. package/src/seat-loop/seat-report.ts +99 -0
  530. package/src/self-dev/decompose.ts +66 -11
  531. package/src/self-dev/dev-cli.ts +4 -1
  532. package/src/self-dev/dev-pipeline.ts +37 -1
  533. package/src/self-dev/draft-sweep.ts +38 -33
  534. package/src/self-dev/draft-triage-rules.ts +8 -5
  535. package/src/self-dev/fabric-plan-core.ts +297 -0
  536. package/src/self-dev/orchestrate.ts +36 -4
  537. package/src/self-dev/release-path-guard.ts +62 -0
  538. package/src/self-dev/run-store.ts +10 -1
  539. package/src/self-dev/shard-aggregate.ts +230 -0
  540. package/src/self-dev/shard-placement.ts +60 -0
  541. package/src/self-dev/shard-plan.ts +48 -0
  542. package/src/self-dev/shard-pod-run.ts +77 -0
  543. package/src/self-dev/shard-run.ts +105 -0
  544. package/src/self-implement/execution-clarification.ts +115 -0
  545. package/src/self-implement/gate-baseline.ts +1 -1
  546. package/src/self-implement/gate-cli.ts +46 -4
  547. package/src/self-implement/gate-scope.ts +37 -7
  548. package/src/self-implement/graph-variant.ts +171 -0
  549. package/src/self-implement/harness-policy-gates.ts +1 -1
  550. package/src/self-implement/headless-elanous-driver.ts +22 -3
  551. package/src/self-implement/host-regate.ts +22 -1
  552. package/src/self-implement/importer-test-index.ts +2 -1
  553. package/src/self-implement/l8-merge-queue.ts +130 -0
  554. package/src/self-implement/orchestrator.ts +279 -12
  555. package/src/self-implement/pipeline-shape.ts +1 -1
  556. package/src/self-implement/route-consumer-test-index.ts +122 -0
  557. package/src/self-implement/run-status-mapping.ts +5 -3
  558. package/src/self-implement/seams.ts +72 -11
  559. package/src/self-implement/test-seams.ts +1 -0
  560. package/src/self-implement/uncommitted-work.ts +59 -0
  561. package/src/session/chat.ts +2 -0
  562. package/src/session/index.ts +45 -13
  563. package/src/shell-env-bootstrap.ts +17 -0
  564. package/src/skills/gift-install.ts +215 -0
  565. package/src/skills/tools/web-search.ts +4 -1
  566. package/src/steward/directive.ts +51 -2
  567. package/src/steward/launch.ts +266 -0
  568. package/src/steward/outcome-notify.ts +115 -0
  569. package/src/steward/steward-cards.ts +25 -11
  570. package/src/steward/triage-plan.ts +32 -4
  571. package/src/steward/triage.ts +129 -13
  572. package/src/steward/working-backwards.ts +64 -0
  573. package/src/storyboard/storyboard.ts +141 -0
  574. package/src/task-cards/card-cli.ts +25 -1
  575. package/src/task-cards/card-store.ts +2 -2
  576. package/src/task-orchestrator/mission.ts +5 -0
  577. package/src/task-orchestrator/store.ts +12 -3
  578. package/src/task-orchestrator/surfaces/pod-command-job.ts +29 -7
  579. package/src/task-orchestrator/surfaces/pod-lease.ts +397 -0
  580. package/src/task-orchestrator/surfaces/pod-pool.ts +127 -26
  581. package/src/task-orchestrator/surfaces/self-implement-pod.ts +214 -40
  582. package/src/task-orchestrator/surfaces/self-implement.ts +15 -2
  583. package/src/task-orchestrator/types.ts +2 -0
  584. package/src/telegram-card-followup.ts +153 -0
  585. package/src/telegram-commands.ts +10 -1
  586. package/src/telegram-project-command.ts +71 -0
  587. package/src/telegram-report.ts +29 -19
  588. package/src/telegram-run.ts +7 -0
  589. package/src/telegram.ts +58 -11
  590. package/src/tool-runtime/self-cognition-runtimes.ts +13 -3
  591. package/src/tool-runtime/types.ts +4 -0
  592. package/src/tui-client/dashboard-session.ts +2 -0
  593. package/src/user-config.ts +216 -27
  594. package/src/version/packed-revision.json +1 -1
  595. package/src/web-push/notify-exec-request.ts +32 -0
  596. package/src/web-search/grok.ts +7 -1
  597. package/src/web-search/index.ts +28 -1
  598. package/src/web-search/provider.ts +4 -0
  599. package/src/web-search/x-intent.ts +5 -0
  600. package/src/workflow-runtime/executor.ts +277 -47
  601. package/src/workflow-runtime/index.ts +1 -0
  602. package/src/workflow-runtime/nodes/subworkflow.ts +60 -0
  603. package/src/workflow-runtime/plugin-kind-node.ts +1 -1
  604. package/src/workflow-runtime/schema.ts +79 -4
  605. package/src/workflow-runtime/types.ts +35 -4
  606. package/apps/pwa/out/_next/static/bFI5EEwg7T6aG88ibX4Zq/_buildManifest.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/2375-cb6debea56cce4fb.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +0 -1
  615. package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +0 -25
  617. package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +0 -5
  618. package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/5080-1613752891fcadb4.js +0 -10
  622. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/6090-85a3f05f954e5697.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/6284-69db415193d5f8bd.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/7032-f4ef698518fba61c.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +0 -1
  634. package/apps/pwa/out/_next/static/chunks/8067-d976b441a104ab74.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/8519-5632377cce994f86.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/8630-cdfc61e82c653ffc.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/8894-e263b332208e3957.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/9454-139040d37c79dbc9.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/9740-8f5ff96c522b5f55.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/app/approvals/page-fb7c2d458f32fcad.js +0 -1
  647. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-35e2713597dd24d1.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/app/board/page-918b656f064577ba.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/app/bots/page-5f30e00693527ebd.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/app/chat/page-7fbae173b3c103a7.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/app/consult/page-3b4edcce364062ea.js +0 -1
  652. package/apps/pwa/out/_next/static/chunks/app/control/page-c5794f484c251f44.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/app/design-check/page-1130d8eefcd87e76.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/app/editor/page-973996d584f008c1.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/app/exec/page-016e2bda04eecb1f.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/app/field/page-b4d6d9a3b56f2940.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/app/intake/page-ec49a466121233ba.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/app/layout-f72db356744ceade.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/app/live/page-a6fd9b50d1b85378.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/app/market/page-8b0402a46a749a3d.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-037f83e2a1edc8e2.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/app/not-found-46fedff57d4bec67.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/app/observatory/page-0cf318e9dcee2bbf.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-899b327cb8b6845c.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-6c1e6ba743a29dfe.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/app/page-1a8e4807292f6b17.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/app/reflection/page-28deba6bcb834916.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-de68e2205794037d.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/app/sessions/page-c71c33a573230672.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-0df30e0c7e50148a.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/settings/page-4fc56790fe0d2682.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-59df2aebb38a7c1e.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/setup/page-4647be5dbcbd0795.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/share/page-e025892bda74b743.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/showroom/page-a0955de73b89f078.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/tasks/page-369846d2921af584.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/term/page-72cbc1c8cdd0f65d.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/app/trace/page-77b28bfb0996d5ea.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/app/vault/page-3220c4934f49c6c2.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-90670589b87abea8.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/app/workflows/page-7df9243ed021a4cc.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/app/workspace/page-4498c3853f4f688d.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-35bedde6d885f08f.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/main-app-6870f30ea99f8346.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +0 -1
  691. package/apps/pwa/out/_next/static/chunks/webpack-e5bea36f183b25e6.js +0 -1
  692. package/apps/pwa/out/_next/static/css/f92f63a5df0ba229.css +0 -1
  693. package/src/dashboard/turn-typeahead-echo.ts +0 -23
  694. /package/apps/pwa/out/_next/static/{bFI5EEwg7T6aG88ibX4Zq → Y4zKzL62sakG5momz3SoQ}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2548],{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()},43468:(e,t,r)=>{"use strict";r.d(t,{M1:()=>d,Qj:()=>c,tI:()=>i});var n=r(54456),l=r(60500),a=r(40324),s=r(59405);let o=(0,l.createContext)(null);function i(e){let{client:t,queryClient:r,defaultStaleTimeMs:i,children:d}=e,c=(0,l.useMemo)(()=>null!=r?r:new a.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,l.useContext)(o);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,l.useContext)(o)}},49464:(e,t,r)=>{"use strict";r.d(t,{N:()=>t$});var n=r(54456);let l=/^[a-z0-9]+(-[a-z0-9]+)*$/;function a(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:a(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),m=r(47341),x=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+) \* \* \*$/,P=/^(\d+) (\d+) \* \* 1-5$/,L=/^(\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 l=P.exec(t);if(l)return{text:"Every weekday at ".concat(F(Number(l[2])),":").concat(F(Number(l[1]))),matched:!0};let a=L.exec(t);if(a){let e=z[Number(a[3])];return{text:"Every ".concat(e," at ").concat(F(Number(a[2])),":").concat(F(Number(a[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 q=[{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 U(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"==typeof e?e:t}function G(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 $(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=$(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,l,a,s,o,i,d,c,u,p;let m=[],x=[],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=G(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==(l=f.if)?void 0:l.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!=(a=null==e?void 0:e.value)?a:"").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=U(e.cron),r=U(e.timezone),n=W(t),l=!1===e.enabled?" \xb7 disabled":"",a="number"==typeof e.max_runs?" \xb7 max ".concat(e.max_runs," runs"):"";return"⏰ ".concat(n.text).concat(r?" ".concat(r):"").concat(a).concat(l)}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=U(e.method,"POST"),r=U(e.path),n=e.auth&&"object"==typeof e.auth?e.auth:null,l=n?" \xb7 ".concat(U(n.type)):"";return"\uD83D\uDD17 ".concat(t," ").concat(r).concat(l)}(t.webhookTrigger);case"http":return function(e){if(!e)return"\uD83C\uDF10 http";let t=U(e.method,"GET"),r=U(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=U(e.kind,"message"),r=[],n=U(e.channel);return n&&r.push("#".concat(n)),U(e.user)&&r.push("@".concat(U(e.user))),U(e.pattern)&&r.push("/".concat(U(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=U(r.kind,"message"),l=[];return U(r.chat)&&l.push("@".concat(U(r.chat))),"command"===n&&U(r.command)&&l.push("/".concat(U(r.command))),U(r.user)&&l.push("from:".concat(U(r.user))),U(r.pattern)&&l.push("/".concat(U(r.pattern),"/")),l.push(n),"✈️ ".concat(l.join(" \xb7 "));case"manualTrigger":var a=t.manualTrigger;let s=U(null==a?void 0:a.description);return s?"▶ ".concat(s):"▶ Manual \xb7 explicit run";case"chatTrigger":return function(e){if(!e)return"\uD83D\uDCAD Chat";let t=U(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&&$(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(m.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&&x.push({id:"".concat(r,"->").concat(f.id),source:r,target:f.id})}return{nodes:m,edges:x}}(e),l=function(e){var t,r,n;let l=null!=(t=e.direction)?t:"LR",a=new _.Ay.graphlib.Graph;for(let t of(a.setDefaultEdgeLabel(()=>({})),a.setGraph({rankdir:l,ranksep:null!=(r=e.rankSep)?r:"LR"===l?100:80,nodesep:null!=(n=e.nodeSep)?n:"LR"===l?40:60,marginx:20,marginy:20}),e.nodes))a.setNode(t.id,{width:200,height:64});for(let t of e.edges)a.setEdge(t.source,t.target);_.Ay.layout(a);let s=e.nodes.map(e=>{var t,r,n,l;let s=a.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!=(l=null==s?void 0:s.height)?l: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}:{}}),a=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(a).length)return l;let s=0,o=0;return{nodes:l.nodes.map(e=>{let t=a[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:l.edges,bounds:{width:s,height:o}}}var Y=r(10641);function B(e,t){var r;let n=new Set((null!=(r=e.nodes)?r:[]).map(e=>e.id)),l="unknown"===t?"node":t;for(let e=1;e<1e4;e+=1){let t="".concat(l,"-").concat(e);if(!n.has(t))return t}return"".concat(l,"-").concat(Date.now())}function X(e,t,r){var n,l;let a=null!=(n=null==r?void 0:r.id)?n:B(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,a);return{...e,nodes:[...null!=(l=e.nodes)?l:[],s]}}function Q(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 V(e,t,r){var n,l;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let a=e._meta&&"object"==typeof e._meta?{...e._meta}:{},s=a.layout&&"object"==typeof a.layout?{...a.layout}:{},o=new Set((null!=(l=e.nodes)?l:[]).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)},a.layout=s,{...e,_meta:a}}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,Y.As)(r,{lineWidth:0,defaultStringType:"PLAIN",singleQuote:!1})}function et(e){try{let t=(0,Y.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"}},el={all:"\uD83D\uDCE3",modal:"\uD83D\uDDA5",terminal:"⌨",telegram:"\uD83D\uDCF2",discord:"\uD83D\uDCAC",pushcut:"\uD83D\uDD14"},ea="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"),l=n.nodes.at(-1).id;return{def:V(t.core?n:{...n,nodes:[...n.nodes.slice(0,-1),{id:l,kind:t.kind,inputs:{}}]},l,r),id:l}}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:l}=e;return{id:t,x:r,y:n,text:l}})}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 em={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 ex(e,t){if(!Array.from(e.dataTransfer.types).includes(ea))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(ea));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:l,editable:a,onChangeYaml:s,onNodeClick:i,nodeStatuses:d,nodeIssues:c,cycleNodeIds:u,focusNodeId:p,focusNonce:m,onRun:x}=e,[h,f]=(0,o.useState)(null!=l?l: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==l?void 0:l.name)?e:null,items:(null==l?void 0:l.name)?ed(l.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(!a||!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)},[a,N]),A=(0,o.useCallback)(()=>{var e,t;if(!a||!N)return;let r=null==(e=v.current)?void 0:e.getBoundingClientRect(),n=y.current,l=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(l))?t:r?{x:r.width/2,y:r.height/2}:l;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,a,N]),[T,M]=(0,o.useState)([]),{record:_,undo:R,redo:I,canUndo:O,canRedo:P}=(0,er.U)(),L=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(l){f(l),b(!1);return}let e=!1;return(async()=>{let t=await ep(r);e||(f(t),b(null===t))})(),()=>{e=!0}},[r,l]);let D=(0,o.useCallback)(e=>{var t;if(!s)return;let n=null!=(t=et(r))?t:h;if(!n)return;let l=e(n);try{let e=ee(l);if(e===r)return;_(r),f(l),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]),q=(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),l=(null!=(r=e.nodes)?r:[]).filter(e=>n.has(e.id));if(0===l.length)return null;let a=new Set(l.map(e=>e.id)),s=new Map(J(e).nodes.map(e=>[e.id,e.position])),o={};for(let e of l){let t=s.get(e.id);t&&(o[e.id]={...t})}return{nodes:l.map(e=>{let t=structuredClone(e);if(Array.isArray(t.depends_on)){let e=t.depends_on.filter(e=>a.has(e));e.length>0?t.depends_on=e:delete t.depends_on}return t}),layout:o}}(t,T);n&&(L.current=n)},[r,h,T]),U=(0,o.useCallback)(()=>{L.current&&s&&D(e=>(function(e,t){var r,n;if(0===t.nodes.length)return e;let l=null!=(r=e.nodes)?r:[],a=[],s=new Map;for(let r of t.nodes){let t=B({...e,nodes:[...l,...a]},G(r));s.set(r.id,t),a.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<a.length;e+=1){let r=a[e],l=null==(n=r.depends_on)?void 0:n.map(e=>s.get(e)).filter(e=>void 0!==e);(null==l?void 0:l.length)?r.depends_on=l: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:[...l,...a],...Object.keys(o).length>0?{_meta:o}:{}}})(e,L.current))},[D,s]),$=(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==$?void 0:$.nodes)?e:[]).map(e=>{var t,r;let n=null!=(t=null==u?void 0:u.has(e.id))&&t,l=null==c?void 0:c[e.id],a=null==d?void 0:d[e.id],s=(r=null==a?void 0:a.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:a,issues:l,inCycle:n},className:s,style:{background:"var(--surface, #0f1117)",color:"var(--text-primary, #e5e7eb)",border:n?"2px dashed #ef4444":"1.5px solid ".concat(em[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===a,onTextChange:t=>S(r=>ec(r,e.id,{text:t})),onRemove:()=>S(t=>eu(t,e.id))},draggable:!0===a,selectable:!1,style:{padding:0,border:0,background:"transparent",width:200}}))]},[$,d,c,u,C,a,S]),K=(0,o.useMemo)(()=>({workflow:eC,note:eg}),[]),Y=(0,o.useMemo)(()=>$?$.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}}}):[],[$,u]),en=(0,o.useCallback)(e=>{a&&e.source&&e.target&&D(t=>(function(e,t,r){var n;if(t===r)return e;let l=(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:l}})(t,e.source,e.target))},[a,D]),el=(0,o.useCallback)(e=>{if(!a)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 l=r.filter(e=>!e.id.startsWith("annotation:"));l.length>0&&D(e=>l.reduce((e,t)=>Q(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)=>V(e,t.id,t.position),e))},[a,D,C,S]),es=(0,o.useCallback)(e=>{if(!a)return;let t=e.filter(e=>"remove"===e.type);0!==t.length&&D(e=>t.reduce((e,t)=>{var r;let[n,l]=t.id.split("->");if(!n||!l)return e;let a=(null!=(r=e.nodes)?r:[]).map(e=>{if(e.id!==l||!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:a}},e))},[a,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:B(t,"unknown"),kind:e.kind,inputs:{}}]})},[D]);var eE,eM,e_,eR,eI,eO=(0,o.useMemo)(()=>{if(!a)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:q},{key:"v",metaOrCtrl:!0,handler:U}),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 l=(null!=(r=e.nodes)?r:[]).find(e=>e.id===t);if(!l)return e;let a=B(e,G(l)),{id:s,depends_on:o,...i}=l,d={...i,id:a};return{...e,nodes:[...null!=(n=e.nodes)?n:[],d]}})(t,e))}}),e.push({key:"F2",handler:()=>{let e=T[0];e&&i&&i(e)}}),x&&e.push({key:"Enter",metaOrCtrl:!0,handler:()=>x()}),e},[a,D,q,i,U,W,x,F,T]),eP={enabled:!0===a};let eL=null==(e_=null==eP?void 0:eP.enabled)||e_;return((0,o.useEffect)(()=>{if(!eL||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)},[eL,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==$?void 0:$.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=>{a&&Array.from(e.dataTransfer.types).includes(ea)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{if(!a)return;let r=ex(e,t);r&&(e.preventDefault(),D(e=>eo(e,r,{x:0,y:0}).def))},children:[a&&(0,n.jsx)(ey,{palette:t,editable:!0===a,onAdd:eT}),a&&(0,n.jsx)(eb,{canUndo:O,canRedo:P,onUndo:F,onRedo:W}),a&&(0,n.jsx)(ef,{onAdd:A}),a?"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:[a&&(0,n.jsx)(ey,{palette:t,editable:!0===a,onAdd:eT}),a&&(0,n.jsx)(eb,{canUndo:O,canRedo:P,onUndo:F,onRedo:W}),a&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ef,{onAdd:A}),(0,n.jsx)(ek,{onTidy:()=>D(e=>Z(e))})]}),a&&eh&&(0,n.jsx)(eN,{onPick:eA,onClose:()=>eS(!1)}),(0,n.jsxs)(E.Gc,{nodes:H,edges:Y,nodeTypes:K,nodesDraggable:null!=a&&a,nodesConnectable:null!=a&&a,elementsSelectable:null!=a&&a,deleteKeyCode:a?["Backspace","Delete"]:null,onConnect:a?en:void 0,onNodesChange:a?el:void 0,onEdgesChange:a?es:void 0,onInit:e=>{y.current=e},onDragOver:e=>{a&&Array.from(e.dataTransfer.types).includes(ea)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{let r=y.current;if(!a||!r)return;let n=ex(e,t);if(!n)return;e.preventDefault();let l=r.screenToFlowPosition({x:e.clientX,y:e.clientY});D(e=>eo(e,n,l).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:a?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!=m?m: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:l,onRedo:a}=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:l,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:a,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:l}=e,a=[{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:a.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(ea,JSON.stringify(e)),t.dataTransfer.effectAllowed="copy"},onClick:()=>l(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=a.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:l,toY:a}=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(l-60,",").concat(a," ").concat(l,",").concat(a),fill:"none",stroke:"var(--accent, #8b5cf6)",strokeWidth:1.8,strokeDasharray:"4 3"}),(0,n.jsx)("circle",{cx:l,cy:a,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,[l,a]=(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(l.toLowerCase())||e.help.toLowerCase().includes(l.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:l,onChange:e=>a(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:em[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:l,issues:a}=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:l}):function(e,t,r){var l,a,s,o;let i=t?en[t.status]:null,d=(s=e.approvalDelivery)&&null!=(o=el[s])?o:null,c=t?"Last run: ".concat(null!=(l=null==i?void 0:i.label)?l: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!=(a=null==r?void 0:r.length)?a: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:em[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,l,a),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,l=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:em[t.variant],color:"white"},children:t.badge}),(0,n.jsx)("span",{style:{fontSize:11,fontWeight:500},children:t.id}),l&&(0,n.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:l.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:l}=e,[a,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 m=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 l=await e.text();if(r!==u.current)return;let a=s({name:e.name,size:e.size,text:l});if(!a.ok)return void c(a.reason);t(a.yaml,a.suggestedName),x()}catch(e){r===u.current&&c("파일을 읽지 못했습니다. 다시 선택해 주세요.")}},x=()=>{u.current++,l()},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:x,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:x,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"===a,onClick:()=>{u.current++,i("template")},icon:(0,n.jsx)(eE.A,{className:"h-3 w-3"}),children:"Template"}),(0,n.jsx)(eI,{active:"blank"===a,onClick:()=>{u.current++,i("blank")},icon:(0,n.jsx)(eM.A,{className:"h-3 w-3"}),children:"Blank"}),(0,n.jsx)(eI,{active:"file"===a,onClick:()=>i("file"),icon:(0,n.jsx)(eE.A,{className:"h-3 w-3"}),children:"파일"}),(0,n.jsx)(eI,{active:"ai"===a,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"===a&&(0,n.jsx)(eO,{query:h,onPick:e=>{t(e.yaml,e.id),x()}}),"blank"===a&&(0,n.jsx)(eP,{onCreate:()=>{t(e_,"my-workflow"),x()}}),"file"===a&&(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;m(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"===a&&(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:l,children:a}=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:[l,a]})}function eO(e){var t,r;let{query:l,onPick:a}=e;if(l.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(l.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=l.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:()=>a(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 eP(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"})})]})}var eL=r(9394),eD=r(35448),ez=r(39681),eF=r(3389);function eW(e){var t;let{result:r,onApply:l,onRefine:a,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)(eD.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:a,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)(ez.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&&l(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)(eF.A,{className:"h-3 w-3"}),"Apply"]})]})]})]})})}function eq(e){let{currentYaml:t,skills:r,onGenerated:l,onClose:a}=e,[s,i]=(0,o.useState)(""),[d,c]=(0,o.useState)(""),[u,p]=(0,o.useState)(null),m=(0,A.up)(),x=(0,A.hM)(),h=!!(t&&t.trim().length>0),f=m.error instanceof Error?m.error.message:x.error instanceof Error?x.error.message:m.isError||x.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:a,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()||x.isPending)return;let e={intent:s.trim(),preview:!0};h&&t&&(e.context="current yaml:\n".concat(t)),x.mutate(e,{onSuccess:e=>p(e)})},disabled:!s.trim()||x.isPending||m.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:x.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)(eL.A,{className:"h-3 w-3"}),"Synth (trigger-aware)"]})}),(0,n.jsx)("button",{type:"button",onClick:()=>{if(!s.trim()||m.isPending)return;let e={prompt:s.trim()};d&&(e.provider=d),r&&r.length>0&&(e.skills=r),h&&t&&(e.currentYaml=t),m.mutate(e,{onSuccess:e=>{l(e)}})},disabled:!s.trim()||m.isPending||x.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:m.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)(eD.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{children:f})]}),u&&(0,n.jsx)(eW,{result:u,onApply:(e,t)=>{p(null),l({yaml:e,warnings:[],raw:e,definition:void 0})},onRefine:()=>p(null),onCancel:()=>p(null)}),m.data&&m.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:m.data.warnings.slice(0,5).map((e,t)=>(0,n.jsxs)("li",{className:"flex items-start gap-1",children:[(0,n.jsx)(eD.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:l,children:a}=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!=l?l:r})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 px-3 py-3 md:grid-cols-2",children:a})]})}function e$(e){let{label:t,full:r,hint:l,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,l&&(0,n.jsx)("span",{className:"text-[10px] text-text-tertiary",children:l})]})}function eH(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 eK(e){var t,r,l,a,s,i;let{definition:d,nodeId:c,onChange:u}=e,p=(null!=(t=d.nodes)?t:[]).find(e=>e.id===c),m=eH(p),[x,h]=(0,o.useState)(m.type),[f,g]=(0,o.useState)(null!=(r=m.cron)?r:"0 9 * * *"),[b,y]=(0,o.useState)(String(null!=(l=m.interval)?l:36e5)),[v,j]=(0,o.useState)(null!=(a=m.timezone)?a:"Asia/Seoul"),[w,k]=(0,o.useState)(String(null!=(s=m.jitter_seconds)?s:"")),[N,C]=(0,o.useState)(String(null!=(i=m.max_runs)?i:"")),[S,A]=(0,o.useState)(!1!==m.enabled);(0,o.useEffect)(()=>{let e=eH(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:x,cron:"cron"===x?f.trim():void 0,interval:"interval"===x&&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}},[x,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 l={type:r.type};"cron"===r.type&&r.cron&&(l.cron=r.cron),"interval"===r.type&&"number"==typeof r.interval&&(l.interval=r.interval),r.timezone&&(l.timezone=r.timezone),"number"==typeof r.jitter_seconds&&(l.jitter_seconds=r.jitter_seconds),"number"==typeof r.max_runs&&(l.max_runs=r.max_runs),"boolean"==typeof r.enabled&&(l.enabled=r.enabled);let a=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,scheduleTrigger:l}:e);return{...e,nodes:a}}(d,c,T()))},500),()=>{E.current&&clearTimeout(E.current)}},[p,c,d,T,u]);let M="cron"===x?W(f):null,_=Number(b)/1e3,R=S&&("cron"!==x||(null==M?void 0:M.matched))?"valid":"warning",I=S?"cron"===x?(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)(e$,{label:"type",children:(0,n.jsxs)("select",{value:x,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)(e$,{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"===x&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e$,{label:"presets",full:!0,children:(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:q.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)(e$,{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"===x&&(0,n.jsx)(e$,{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)(e$,{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)(e$,{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)(e$,{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 eJ=["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=eJ.includes(t.method)?t.method:"POST",n="string"==typeof t.path?t.path:"/hooks/example",l=t.auth&&"object"==typeof t.auth?t.auth:null;return l&&"bearer"===l.type?{method:r,path:n,auth:"bearer",token:"string"==typeof l.token?l.token:""}:l&&"basic"===l.type?{method:r,path:n,auth:"basic",username:"string"==typeof l.username?l.username:"",password:"string"==typeof l.password?l.password:""}:{method:r,path:n,auth:"none"}}function eB(e){var t,r,l,a;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=eY(c),[p,m]=(0,o.useState)(u.method),[x,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!=(l=u.username)?l:""),[w,k]=(0,o.useState)(null!=(a=u.password)?a:"");(0,o.useEffect)(()=>{var e,t,r;let n=eY(c);m(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:x,auth:f,token:b,username:v,password:w}),[p,x,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,l,a;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!=(l=r.password)?l:""});let o=(null!=(a=e.nodes)?a:[]).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=x.trim()?x.startsWith("/")?/\s/.test(x)?{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(x);return(0,n.jsxs)(eG,{variantLabel:"Webhook",validationStatus:A,validationMessage:S.message,children:[(0,n.jsx)(e$,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>m(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eJ.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(e$,{label:"path",hint:"URL: ".concat(T),children:(0,n.jsx)("input",{value:x,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)(e$,{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)(e$,{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)(e$,{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)(e$,{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 eX=["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=eX.includes(t.method)?t.method:"GET",n="string"==typeof t.url?t.url:"",l=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}}),a="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:l,body:a,auth:"bearer",token:"string"==typeof o.token?o.token:"",timeoutMs:s}:o&&"basic"===o.type?{method:r,url:n,headers:l,body:a,auth:"basic",username:"string"==typeof o.username?o.username:"",password:"string"==typeof o.password?o.password:"",timeoutMs:s}:{method:r,url:n,headers:l,body:a,auth:"none",timeoutMs:s}}function eV(e){var t,r,l,a;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=eQ(c),[p,m]=(0,o.useState)(u.method),[x,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!=(l=u.username)?l:""),[S,A]=(0,o.useState)(null!=(a=u.password)?a:""),[T,E]=(0,o.useState)(u.timeoutMs);(0,o.useEffect)(()=>{var e,t,r;let n=eQ(c);m(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:x,headers:f,body:b,auth:v,token:w,username:N,password:S,timeoutMs:T}),[p,x,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,l,a;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!=(l=r.password)?l:""}),r.timeoutMs&&3e4!==r.timeoutMs&&(s.timeout=r.timeoutMs);let o=(null!=(a=e.nodes)?a:[]).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"}}}(x),I=R.ok?"valid":"error",O=(e,t,r)=>{g(n=>n.map((n,l)=>l===e?{key:t,value:r}:n))};return(0,n.jsxs)(eG,{variantLabel:"HTTP",validationStatus:I,validationMessage:R.message,children:[(0,n.jsx)(e$,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>m(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eX.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(e$,{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)(e$,{label:"url",full:!0,hint:"supports $ARGUMENTS variable",children:(0,n.jsx)("input",{value:x,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)(e$,{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)(e$,{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)(e$,{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)(e$,{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)(e$,{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)(e$,{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 eZ=["message","mention","reaction"];function e0(e){let t=null==e?void 0:e.discordTrigger;return t&&"object"==typeof t?{kind:eZ.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 e1(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 e2(e){var t,r,l,a;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=e0(c),[p,m]=(0,o.useState)(u.kind),[x,h]=(0,o.useState)(null!=(r=u.channel)?r:""),[f,g]=(0,o.useState)(null!=(l=u.user)?l:""),[b,y]=(0,o.useState)(null!=(a=u.pattern)?a:"");(0,o.useEffect)(()=>{var e,t,r;let n=e0(c);m(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:x,user:f,pattern:b}),[p,x,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,l,a,s;let o={kind:r.kind};(null==(n=r.channel)?void 0:n.trim())&&(o.channel=r.channel.trim()),(null==(l=r.user)?void 0:l.trim())&&(o.user=r.user.trim()),(null==(a=r.pattern)?void 0:a.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=e1(b),k=[x&&"#".concat(x),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)(e$,{label:"kind",children:(0,n.jsx)("select",{value:p,onChange:e=>m(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eZ.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(e$,{label:"channel (name or id)",hint:"e.g. ops \xb7 1234567890",children:(0,n.jsx)("input",{value:x,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)(e$,{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)(e$,{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 e3=["message","command","callback_query"];function e5(e){let t=null==e?void 0:e.telegramTrigger;return t&&"object"==typeof t?{kind:e3.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 e4(e){var t,r,l,a,s;let{definition:i,nodeId:d,onChange:c}=e,u=(null!=(t=i.nodes)?t:[]).find(e=>e.id===d),p=e5(u),[m,x]=(0,o.useState)(p.kind),[h,f]=(0,o.useState)(null!=(r=p.chat)?r:""),[g,b]=(0,o.useState)(null!=(l=p.user)?l:""),[y,v]=(0,o.useState)(null!=(a=p.command)?a:""),[j,w]=(0,o.useState)(null!=(s=p.pattern)?s:"");(0,o.useEffect)(()=>{var e,t,r,n;let l=e5(u);x(l.kind),f(null!=(e=l.chat)?e:""),b(null!=(t=l.user)?t:""),v(null!=(r=l.command)?r:""),w(null!=(n=l.pattern)?n:"")},[d,u]);let k=(0,o.useCallback)(()=>({kind:m,chat:h,user:g,command:y,pattern:j}),[m,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,l,a,s,o;let i={kind:r.kind};(null==(n=r.chat)?void 0:n.trim())&&(i.chat=r.chat.trim()),(null==(l=r.user)?void 0:l.trim())&&(i.user=r.user.trim()),"command"===r.kind&&(null==(a=r.command)?void 0:a.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=e1(j),S=[h&&"@".concat(h),g&&"from:".concat(g),"command"===m&&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)(e$,{label:"kind",children:(0,n.jsx)("select",{value:m,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:e3.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(e$,{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"===m&&(0,n.jsx)(e$,{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)(e$,{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)(e$,{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 e6(e){let t=null==e?void 0:e.manualTrigger;return t&&"object"==typeof t?{description:"string"==typeof t.description?t.description:void 0}:{}}function e9(e){var t,r;let{definition:l,nodeId:a,onChange:s}=e,i=(null!=(t=l.nodes)?t:[]).find(e=>e.id===a),d=e6(i),[c,u]=(0,o.useState)(null!=(r=d.description)?r:"");(0,o.useEffect)(()=>{var e;u(null!=(e=e6(i).description)?e:"")},[a,i]);let p=(0,o.useCallback)(()=>({description:c}),[c]),m=(0,o.useRef)(null);return(0,o.useEffect)(()=>{if(i)return m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{s(function(e,t,r){var n,l;let a={};(null==(n=r.description)?void 0:n.trim())&&(a.description=r.description.trim());let s=(null!=(l=e.nodes)?l:[]).map(e=>e.id===t?{...e,manualTrigger:a}:e);return{...e,nodes:s}}(l,a,p()))},500),()=>{m.current&&clearTimeout(m.current)}},[i,a,l,p,s]),(0,n.jsxs)(eG,{variantLabel:"Manual",validationStatus:"valid",validationMessage:"explicit run only",children:[(0,n.jsx)(e$,{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)(e$,{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 e8(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,l=n&&"bearer"===n.type?"bearer":"none",a=n&&"bearer"===n.type&&"string"==typeof n.token?n.token:"";return{path:r,auth:l,token:a,sessionMode:"per-session"===t.sessionMode?"per-session":"stateless",streaming:!0===t.streaming}}function e7(e){var t,r;let{definition:l,nodeId:a,onChange:s}=e,i=(null!=(t=l.nodes)?t:[]).find(e=>e.id===a),d=e8(i),[c,u]=(0,o.useState)(d.path),[p,m]=(0,o.useState)(d.auth),[x,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=e8(i);u(t.path),m(t.auth),h(null!=(e=t.token)?e:""),g(t.sessionMode),y(t.streaming)},[a,i]);let v=(0,o.useCallback)(()=>({path:c,auth:p,token:x,sessionMode:f,streaming:b}),[c,p,x,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 l={path:r.path};"bearer"===r.auth&&r.token&&(l.auth={type:"bearer",token:r.token}),"stateless"!==r.sessionMode&&(l.sessionMode=r.sessionMode),r.streaming&&(l.streaming=!0);let a=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,chatTrigger:l}:e);return{...e,nodes:a}}(l,a,v()))},500),()=>{j.current&&clearTimeout(j.current)}},[i,a,l,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)(e$,{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)(e$,{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)(e$,{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:()=>m(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===p&&(0,n.jsx)(e$,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:x,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)(e$,{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)(e$,{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 te=new Set(["type","title","description","default","enum","format","writeOnly","x-multiline","properties","required","items","minLength","maxLength","pattern","minimum","maximum","minItems","maxItems"]),tt=new Set(["string","number","integer","boolean","object","array"]);function tr(e){return null===e||"object"!=typeof e||Array.isArray(e)?null:e}function tn(e){let t=e.type;return"string"==typeof t&&tt.has(t)?t:null}function tl(e,t){return e?"".concat(e,".").concat(t):t}function ta(e,t,r){let[n,...l]=t.split("."),a={...e};if(0===l.length)return void 0===r?delete a[n]:a[n]=r,a;let s=a[n],o=null===s||"object"!=typeof s||Array.isArray(s)?{}:s;return a[n]=ta(o,l.join("."),r),a}function ts(e,t){if(""!==t){if("number"===e.type||"integer"===e.type){let e=Number(t);return Number.isFinite(e)?e:t}return t}}function to(e){let{schema:t,value:r,onChange:l}=e,a=(0,o.useMemo)(()=>(function(e){let t=[],r=[],n=new Set;return!function e(l,a,s,o){let i=tr(l);if(!i||n.has(i))return void r.push(a||"(root)");for(let e of(n.add(i),Object.keys(i)))te.has(e)||r.push(tl(a,e));let d=tn(i);void 0===i.type||d||r.push(tl(a,"type"));let c=null!=d?d:void 0===i.type?tr(i.properties)||Array.isArray(i.required)?"object":void 0!==i.items?"array":null:null;if(a&&c&&t.push({path:a,type:c,label:"string"==typeof i.title?i.title:a.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 l=null!=(n=r.split(".").at(-1))?n:"",a="string"==typeof t.title?t.title:"";return/markdown|body|text/i.test(l)||/markdown|본문/i.test(a)}(c,i,a),secret:"password"===i.format||"secret"===i.format||!0===i.writeOnly}),s<6){if(("object"===d||void 0===i.type)&&tr(i.properties)){let t=new Set(Array.isArray(i.required)?i.required:[]);for(let[r,n]of Object.entries(i.properties))e(n,tl(a,r),s+1,t.has(r))}("array"===d||void 0===i.type)&&void 0!==i.items&&e(i.items,"".concat(a,"[]"),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}})(a.fields),[a]),d=(0,o.useMemo)(()=>(function(e,t){let r=[],n=new Set;return!function e(t,l,a,s){let o=tr(t);if(!o||n.has(o))return;n.add(o);let i=tn(o);if(i&&!("object"===i?null!==tr(l):"array"===i?Array.isArray(l):"integer"===i?"number"==typeof l&&Number.isInteger(l):"number"===i?"number"==typeof l&&Number.isFinite(l):typeof l===i)){r.push({path:a,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=tr(t),l=tr(r);if(!n||!l)return!1;let a=Object.keys(n);return a.length===Object.keys(l).length&&a.every(t=>Object.hasOwn(l,t)&&e(n[t],l[t]))})(e,l))&&r.push({path:a,message:"Must be one of the allowed values."}),"string"==typeof l){let e=Array.from(l).length;if("number"==typeof o.minLength&&e<o.minLength&&r.push({path:a,message:"Must have at least ".concat(o.minLength," characters.")}),"number"==typeof o.maxLength&&e>o.maxLength&&r.push({path:a,message:"Must have at most ".concat(o.maxLength," characters.")}),"string"==typeof o.pattern)try{new RegExp(o.pattern).test(l)||r.push({path:a,message:"Does not match the required pattern."})}catch(e){}}"number"==typeof l&&("number"==typeof o.minimum&&l<o.minimum&&r.push({path:a,message:"Must be at least ".concat(o.minimum,".")}),"number"==typeof o.maximum&&l>o.maximum&&r.push({path:a,message:"Must be at most ".concat(o.maximum,".")})),Array.isArray(l)&&("number"==typeof o.minItems&&l.length<o.minItems&&r.push({path:a,message:"Must have at least ".concat(o.minItems," items.")}),"number"==typeof o.maxItems&&l.length>o.maxItems&&r.push({path:a,message:"Must have at most ".concat(o.maxItems," items.")}));let d=tr(l);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(a,e),message:"Required."});if(s<6){let t=tr(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(a,r),s+1)}}s<6&&("array"===i||void 0===o.type)&&Array.isArray(l)&&void 0!==o.items&&l.forEach((t,r)=>e(o.items,t,"".concat(a,"[").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:[a.unsupported.length>0&&(0,n.jsxs)("p",{className:"text-[11px] text-warning","data-schema-unsupported":!0,children:["이 노드의 설정 일부는 폼이 다루지 않습니다(",a.unsupported.slice(0,3).join(", "),a.unsupported.length>3?" 외 ".concat(a.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,a;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==(a=d.find(e=>e.path===t))?void 0:a.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=>l(ta(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);l(ta(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=>l(ta(r,e.path,ts(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=>l(ta(r,e.path,ts(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 ti=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,td=/^[A-Za-z_][A-Za-z0-9_]*$/;function tc(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 l=t-n[0].length;return l>0&&/[\\$]/.test(e[l-1])?null:{start:l,typed:n[0]}}function tu(e){let{definition:t,nodeId:r,value:l,onChange:a,className:s,spellCheck:i,placeholder:d,rows:c,multiline:u=!1}=e,p=(0,o.useRef)(null),m=(0,o.useRef)(null),[x,h]=(0,o.useState)(null),[f,g]=(0,o.useState)(!1),[b,y]=(0,o.useState)(0),v=f?null:tc(l,x),j=v?function(e,t,r){var n,l;if(!/^\$[A-Za-z0-9_.-]*$/.test(r))return[];let a=new Map((null!=(n=e.nodes)?n:[]).map(e=>[e.id,e])),s=a.get(t),o=new Set(["$ARGUMENTS","$ARTIFACTS_DIR"]),i=new Set([t]),d=[...null!=(l=null==s?void 0:s.depends_on)?l:[]];for(;d.length;){let e=d.pop();if(i.has(e))continue;i.add(e);let t=a.get(e);if(!t||(d.push(...Array.isArray(t.depends_on)?t.depends_on:[]),!ti.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))td.test(t)&&o.add("$".concat(e,".output.").concat(t))}return[...o].filter(e=>e.startsWith(r))}(t,r,v.typed):[];(0,o.useLayoutEffect)(()=>{null!==m.current&&p.current&&(p.current.focus(),p.current.setSelectionRange(m.current,m.current),m.current=null)},[l]);let w=e=>{h(e.target.selectionStart),g(!1),y(0),a(e)},k=e=>{var t,r,n;let s=p.current,o=null!=(r=null==s?void 0:s.selectionStart)?r:x;if(!s||null===o)return;let i=function(e,t,r,n){let l=tc(e,t);return l?{value:e.slice(0,l.start)+n+e.slice(r),cursor:l.start+n.length}:null}(l,o,null!=(n=s.selectionEnd)?n:o,e);if(!i)return;let{value:d,cursor:c}=i,f=null==(t=Object.getOwnPropertyDescriptor(u?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,"value"))?void 0:t.set;f&&(m.current=c,f.call(s,d),a({target:s,currentTarget:s,type:"change",nativeEvent:new Event("input"),preventDefault:()=>{},stopPropagation:()=>{}}),h(c),g(!0))},N=e=>{"Escape"===e.key&&j.length?(e.preventDefault(),g(!0)):j.length&&("ArrowDown"===e.key||"ArrowUp"===e.key)?(e.preventDefault(),y(t=>(t+("ArrowDown"===e.key?1:-1)+j.length)%j.length)):j.length&&("Enter"===e.key||"Tab"===e.key)&&(e.preventDefault(),k(j[Math.min(b,j.length-1)]))},C={ref:e=>{p.current=e},value:l,spellCheck:i,className:s,"aria-autocomplete":"list","aria-expanded":j.length>0};return(0,n.jsxs)("span",{className:"relative block w-full",children:[u?(0,n.jsx)("textarea",{...C,rows:c,placeholder:d,onChange:w,onKeyDown:N,onFocus:e=>h(e.target.selectionStart),onSelect:e=>h(e.currentTarget.selectionStart),onBlur:()=>h(null),onClick:()=>g(!1)}):(0,n.jsx)("input",{...C,type:"text",placeholder:d,onChange:w,onKeyDown:N,onFocus:e=>h(e.target.selectionStart),onSelect:e=>h(e.currentTarget.selectionStart),onBlur:()=>h(null),onClick:()=>g(!1)}),j.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:j.map((e,t)=>(0,n.jsx)("button",{type:"button",role:"option","aria-selected":t===b,className:"block w-full px-2 py-1 text-left font-mono text-xs hover:bg-surface ".concat(t===b?"bg-surface":""),onMouseDown:e=>e.preventDefault(),onClick:()=>k(e),children:e},e))})]})}function tp(e){var t;let{plugin:r,client:l}=e,[a,s]=(0,o.useState)(null),[i,d]=(0,o.useState)({}),[c,u]=(0,o.useState)(0),[p,m]=(0,o.useState)(null),[x,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!==l)&&(w.current={plugin:r,client:l});let k=w.current;async function N(e){h(!0),g(null);try{await l.putPluginCredentials(r,e)}catch(e){w.current===k&&(g("자격 정보를 저장하지 못했습니다. 다시 시도해 주세요."),h(!1));return}if(w.current===k){d({}),u(e=>e+1),m(null),j(!0);try{let e=await l.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),m(null),g(null),h(!1),y(!0),l.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)}},[l,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==a?void 0:a.fields.length)===0&&(0,n.jsx)("p",{children:"필요한 자격 항목이 없습니다."}),a&&a.fields.length>0&&(0,n.jsxs)("form",{onSubmit:function(e){if(e.preventDefault(),x||!a)return;let t={};for(let e of a.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:[a.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:x,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:x,onClick:()=>void N({[e.name]:null}),children:"지우기 확인"}),(0,n.jsx)("button",{type:"button",disabled:x,onClick:()=>m(null),children:"취소"})]}):(0,n.jsx)("button",{type:"button",disabled:x,onClick:()=>m(e.name),children:"지우기"}))]},e.name)),(0,n.jsx)("button",{type:"submit",disabled:x||!Object.values(i).some(e=>e.trim()),children:x?"저장 중…":"저장"})]})]})}function tm(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 tx(e){var t,r,l,a;let{definition:s,nodeId:i,skills:d,onChange:c,onClose:u,onDelete:p,palette:m,credentialsClient:x}=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?G(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!=(l=null==M?void 0:M.delivery)?l:"modal"),[P,L]=(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=tm(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 l=h.approval&&"object"==typeof h.approval?h.approval:null;R(null!=(e=null==l?void 0:l.message)?e:""),O(null!=(t=null==l?void 0:l.delivery)?t:"modal"),L("string"==typeof h.when?h.when:""),z(Array.isArray(h.depends_on)?[...h.depends_on]:[])},[i,h]);let 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==m||null==(e=m.find(e=>e.kind===r))?void 0:e.plugin)?t:null},[h,m]),U=(0,o.useMemo)(()=>{var e,t;let r="string"==typeof(null==h?void 0:h.kind)?h.kind:null;return r&&null!=(t=null==m||null==(e=m.find(e=>e.kind===r&&e.schema))?void 0:e.schema)?t:null},[h,m]),$=(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)($);(0,o.useEffect)(()=>{J($)},[i,$]),(0,o.useEffect)(()=>{if(!h||!U||JSON.stringify(K)===JSON.stringify($))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,$,U,h,i,s,c]);let Y=(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})}P!==("string"==typeof h.when?h.when:"")&&(r.when=P.trim()?P: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,P,D]),B=(0,o.useRef)(null);if((0,o.useEffect)(()=>{if(h)return B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{var e,t;let r=Y();if(0===Object.keys(r).length)return;let n=function(e,t,r){var n,l;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let a=e,s=t;r.id&&r.id!==t&&(s=(a=function(e,t,r){var n,l;if(t===r||new Set((null!=(n=e.nodes)?n:[]).map(e=>e.id)).has(r))return e;let a=(null!=(l=e.nodes)?l:[]).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:a}}(e,t,r.id))===e?t:r.id);let o=(null!=(l=a.nodes)?l:[]).map(e=>{if(e.id!==s)return e;let t={...e},n=G(e),l=["bash","prompt","skill","cft","approval"].find(e=>void 0!==r[e]);return l&&l!==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{...a,nodes:o}}(s,i,r);n!==s&&(W.current=tm(null!=(t=(null!=(e=n.nodes)?e:[]).find(e=>e.id===("string"==typeof r.id?r.id:i)))?t:null),c(n))},500),()=>{B.current&&clearTimeout(B.current)}},[h,i,s,Y,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)(eK,{definition:s,nodeId:i,onChange:c}),"webhookTrigger"===f&&(0,n.jsx)(eB,{definition:s,nodeId:i,onChange:c}),"http"===f&&(0,n.jsx)(eV,{definition:s,nodeId:i,onChange:c}),"discordTrigger"===f&&(0,n.jsx)(e2,{definition:s,nodeId:i,onChange:c}),"telegramTrigger"===f&&(0,n.jsx)(e4,{definition:s,nodeId:i,onChange:c}),"manualTrigger"===f&&(0,n.jsx)(e9,{definition:s,nodeId:i,onChange:c}),"chatTrigger"===f&&(0,n.jsx)(e7,{definition:s,nodeId:i,onChange:c})]})]});let X=(null!=(a=s.nodes)?a:[]).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)(th,{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)(th,{label:"when (gating expression)",children:(0,n.jsx)(tu,{definition:s,nodeId:i,value:P,onChange:e=>L(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"))}),U&&(0,n.jsx)(to,{schema:U,value:K,onChange:J}),q&&x&&(0,n.jsx)(th,{label:"자격",full:!0,children:(0,n.jsx)(tp,{plugin:q,client:x})}),"bash"===f&&(0,n.jsx)(th,{label:"bash",full:!0,children:(0,n.jsx)(tu,{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)(th,{label:"prompt",full:!0,children:(0,n.jsx)(tu,{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)(th,{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)(th,{label:"arguments",full:!0,children:(0,n.jsx)(tu,{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)(th,{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)(th,{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)(th,{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)(th,{label:"depends_on",full:!0,children:(0,n.jsx)(tf,{value:D,options:X.map(e=>e.id),onChange:z})})]})]})}function th(e){let{label:t,full:r,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]})}function tf(e){let{value:t,options:r,onChange:l}=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)?l(t.filter(t=>t!==e)):l([...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 tg=r(59405),tb=r(23869),ty=r(3472),tv=r(89762);let tj=e=>["nexus","workflow-pins",e];function tw(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 tk(e){var t,r,l,a,s,i,d;let{workflowName:c,nodeId:u,events:p,readOnly:m}=e,x=tw(p,u),h=function(e){let t=(0,T.M1)();return(0,eA.I)({queryKey:tj(e),queryFn:()=>t.getWorkflowPins(e),enabled:e.length>0})}(c),f=function(){let e=(0,T.M1)(),t=(0,tg.jE)();return(0,tv.n)({mutationFn:t=>{let{name:r,nodeId:n,value:l,note:a}=t;return e.putWorkflowPin(r,n,l,a)},onSuccess:(e,r)=>{let{name:n}=r;return t.invalidateQueries({queryKey:tj(n)})}})}(),g=function(){let e=(0,T.M1)(),t=(0,tg.jE)();return(0,tv.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:tj(n)})}})}(),[b,y]=(0,o.useState)(!1),v=null==(t=h.data)?void 0:t.pins[u],j=null==x?void 0:x.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,tg.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:!m&&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 P=null!=(d=R[I])?d:null,L=(0,A.uz)(!m&&M?P:null);(0,o.useEffect)(()=>{var e;(null==(e=L.data)?void 0:e.mode)==="only"&&I+1<R.length&&O(I+1)},[null==(l=L.data)?void 0:l.mode,I,R.length]);let D=void 0!==L.data&&"only"!==L.data.mode&&(null==(a=L.data)?void 0:a.events)&&(null==(s=tw(L.data.events,u))?void 0:s.ok)===!1,[z,F]=(0,o.useState)(!1),[W,q]=(0,o.useState)(null),U=async e=>{if(!m&&M&&!z&&("retry"!==e||P&&D)){F(!0),q(null);try{(await S.runWorkflow(c,"","test"===e?{onlyNode:u}:{fromNode:u,fromRunId:P})).mode!==("test"===e?"only":"from")&&q("서버가 전체 실행으로 처리했습니다"),await E.invalidateQueries({queryKey:ty.AF.workflowRuns()})}catch(e){e instanceof tb.I7?q("먼저 고정하거나 한 번 전체 실행이 필요한 노드: ".concat(e.nodes.join(", "))):q("실행 실패: ".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]}),x?(0,n.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,n.jsxs)("p",{className:x.ok?"text-success":"text-error",children:[x.ok?"성공":"실패",void 0!==x.durationMs?" \xb7 ".concat((x.durationMs/1e3).toFixed(2),"초"):""]}),!x.ok&&x.error&&(0,n.jsx)("p",{role:"alert",className:"break-words text-error",children:x.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:"아직 실행 기록이 없습니다"}),!m&&(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 U("test"),className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"이 노드만 시험"}),(0,n.jsx)("button",{type:"button",disabled:!M||z||!P||!D,onClick:()=>void U("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:"고정됨"}),!m&&!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),!m&&C&&(0,n.jsxs)("p",{role:"alert",className:"mt-1 text-error",children:["고정 변경 실패: ",C.message]})]})]})}var tN=r(36581),tC=r(50733),tS=r(60287);let tA="미리보기 권한이 없습니다 — 채팅 트리거의 hostedUi 설정을 확인하세요";function tT(e){let{workflow:t,onClose:r}=e,{config:l}=(0,tN.Q)(),[a]=(0,o.useState)(()=>crypto.randomUUID()),[s,i]=(0,o.useState)({kind:"loading"}),[d,c]=(0,o.useState)([]),[u,p]=(0,o.useState)(""),[m,x]=(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=l.baseUrl.replace(/\/$/,"");(0,o.useEffect)(()=>{g.current=!0;let e=!1;return i({kind:"loading"}),(0,tS.XQ)(t,{origin:v}).then(r=>{if(!e){if(!(null==r?void 0:r.path)){i({kind:"unavailable"}),(0,tC.cY)("workflows.chat-preview",{workflow:t,outcome:"no-trigger",chars:0});return}i({kind:"ready",config:r}),(0,tC.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,tC.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||m||!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),x(!0);let i="";try{let r=await (0,tS.gJ)({origin:v,chatPath:s.config.path,message:e,sessionId:a,bearer:l.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,tC.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?tA:"메시지를 보내지 못했습니다"),(0,tC.cY)("workflows.chat-preview",{workflow:t,outcome:r?"forbidden":"send-error",chars:0})}}finally{g.current&&x(!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:tA}),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:m,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:m||!u.trim(),className:"rounded-md bg-primary px-3 py-1 text-xs text-primary-foreground disabled:opacity-50",children:"보내기"})]})]})}var tE=r(52360);let tM={running:"Running",orphaned:"Orphaned",done:"Done",failed:"Failed",unknown:"Unknown"},t_={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 tR(e){let{onSelect:t,selectedRunId:r,enabled:l}=e,a=(0,A.b_)({enabled:null==l||l}),[s,i]=(0,o.useState)("all"),d=(0,o.useMemo)(()=>{var e,t;let r=null!=(t=null==(e=a.data)?void 0:e.runs)?t:[];return"all"===s?r:r.filter(e=>e.status===s)},[a.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=a.data)?void 0:e.runs)?t:[])r.all+=1,n.status in r&&(r[n.status]+=1);return r},[a.data]);return a.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…"]}):a.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: ",a.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)(tI,{label:"all"===e?"all":tM[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(tM[s].toLowerCase()," runs.")}):(0,n.jsx)("ul",{className:"flex-1 overflow-y-auto",children:d.map(e=>(0,n.jsx)(tO,{run:e,selected:e.runId===r,onSelect:()=>t(e.runId,e.workflowName)},e.runId))})]})}function tI(e){let{label:t,count:r,active:l,onClick:a}=e;return(0,n.jsxs)("button",{type:"button",onClick:a,className:"rounded-md px-1.5 py-0.5 text-[10px] transition-colors ".concat(l?"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 tO(e){let{run:t,selected:r,onSelect:l}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:l,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)(tP,{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(t_[t.status]),children:tM[t.status]})]})})}function tP(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)(tE.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 tL(e){var t,r;let{runId:l,message:a,onDismiss:s,onResolved:i}=e,[d,c]=(0,o.useState)(""),u=(0,A.Yk)(),p=(0,A.Ux)(),m=u.isPending||p.isPending;(0,o.useEffect)(()=>{let e=e=>{"Escape"!==e.key||m||s()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[m,s]);let x=async()=>{try{await u.mutateAsync({runId:l,response:d.trim()?d:void 0}),null==i||i("approved")}catch(e){}},h=async()=>{try{await p.mutateAsync({runId:l,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:m,"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:l.slice(0,28)})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-[13px] leading-snug",children:a}),(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:m,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:m,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:x,disabled:m,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 tD="elanous.workflows.layout",tz={leftCollapsed:!1,rightCollapsed:!1,canvasOnly:!1,leftWidthPx:240,rightWidthPx:320};function tF(e,t){return Number.isFinite(e)?e<160?160:e>640?640:Math.round(e):t}let tW="(max-width: 639px)";function tq(e){if(!window.matchMedia)return()=>{};let t=window.matchMedia(tW);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function tU(){var e,t;return!!(null==(e=(t=window).matchMedia)?void 0:e.call(t,tW).matches)}let tG={project:"Project",global:"Global",builtin:"Built-in"};function t$(){let{palette:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,T.Qj)()?(0,n.jsx)(tK,{palette:e}):(0,n.jsx)(tH,{})}function tH(){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 tK(e){var t,r,s,N,C,S,E,M,_,R,I,O,P,L,D,z,F;let{palette:W}=e,q=(0,T.M1)(),U=(0,A.mP)(),[G,$]=(0,o.useState)(null),H=(0,o.useSyncExternalStore)(tq,tU,()=>!1),[K,J]=(0,o.useState)(null),Y=null!=K?K:G?"canvas":"list",[B,X]=(0,o.useState)(null),[V,Z]=(0,o.useState)(""),[er,en]=(0,o.useState)(null),[el,ea]=(0,o.useState)(""),[es,eo]=(0,o.useState)(null),[ei,ed]=(0,o.useState)(!1),[ec,eu]=(0,o.useState)(!1),[ep,em]=(0,o.useState)(""),[ex,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)(null),[eC,eS]=(0,o.useState)(null),eA=(0,A.j3)(null!=G?G:"",{enabled:!!G&&!ei}),eT=(0,A.yM)(),eE=(0,A.oE)(),eM=(0,A.xd)(),e_=(0,A.XL)(),eI=(0,A.b_)(),eO=(0,o.useMemo)(()=>{var e,t,r;return G&&(null==(e=eI.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}(eI.data.runs,G))?void 0:t.runId)?r:null},[G,null==(t=eI.data)?void 0:t.runs]),eP=null!=es?es:eO,eL=(0,A.uz)(eP),eD=(0,o.useMemo)(()=>{var e;if(null==(e=eL.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}(eL.data.events)},[null==(r=eL.data)?void 0:r.events]),ez=(0,A.zD)();(0,A.Ck)();let eF=(0,o.useMemo)(()=>{var e,t,r;return null!=(r=(null!=(t=null==(e=ez.data)?void 0:e.pending)?t:[]).find(e=>e.runId===es))?r:null},[ez.data,es]),eW=null!=(P=null==(s=ez.data)?void 0:s.pending.length)?P:0,[eU,eG]=(0,o.useState)(new Set);(0,o.useEffect)(()=>{eG(new Set)},[es]),(0,o.useEffect)(()=>{var e;ei||(null==(e=eA.data)?void 0:e.yaml)!==void 0&&eA.data.name===G&&(Z(eA.data.yaml),en(G))},[null==(N=eA.data)?void 0:N.yaml,null==(C=eA.data)?void 0:C.name,ei,G]);let e$=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!V.trim())return;let e=setTimeout(()=>{var e;null==(e=e$.current)||e.abort();let t=new AbortController;e$.current=t,eM.mutateAsync({yaml:V,signal:t.signal}).catch(()=>void 0)},600);return()=>{var t;clearTimeout(e),null==(t=e$.current)||t.abort()}},[V]);let eH=(0,o.useMemo)(()=>{var e,t;let r={project:[],global:[],builtin:[]};for(let n of null!=(t=null==(e=U.data)?void 0:e.workflows)?t:[])r[n.source].push(n);return r},[null==(S=U.data)?void 0:S.workflows]),eK=null==(E=eM.data)?void 0:E.validation,eJ=eK&&!eK.ok?eK.issues:[],eY=(0,o.useMemo)(()=>V.trim()?et(V):null,[V]),eB=!!(null==eY?void 0:eY.nodes.some(e=>null!==e.chatTrigger&&"object"==typeof e.chatTrigger&&!Array.isArray(e.chatTrigger))),eX=(0,o.useMemo)(()=>{if(eY&&0!==eJ.length)return function(e,t){let r={},n=[];for(let l 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 l=Array.isArray(t.nodes)?t.nodes:[];if(n>=l.length)return null;let a=l[n];return a&&"string"==typeof a.id&&0!==a.id.length?a.id:null}(l.path,t);e?(r[e]||(r[e]=[]),r[e].push(l)):n.push(l)}return{byNodeId:r,rootIssues:n}}(eJ,eY).byNodeId},[eY,eJ]),eQ=(0,o.useMemo)(()=>{if(!eY)return;let e=function(e){var t,r;let n=Array.isArray(e.nodes)?e.nodes:[],l=new Set,a=new Map;for(let e of n)e&&"string"==typeof e.id&&0!==e.id.length&&l.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||!l.has(r))continue;let n=null!=(t=a.get(r))?t:[];n.push(e.id),a.set(r,n)}let s=new Set,o=new Map,i=[];for(let e of l)(null!=(r=o.get(e))?r:0)===0&&function e(t){var r,n;for(let l of(o.set(t,1),i.push(t),null!=(r=a.get(t))?r:[])){let t=null!=(n=o.get(l))?n:0;if(1===t){let e=i.lastIndexOf(l);if(e>=0)for(let t=e;t<i.length;t++)s.add(i[t])}else 0===t&&e(l)}o.set(t,2),i.pop()}(e);return s}(eY);return e.size>0?e:void 0},[eY]),eV=e=>{X(null),en(null),$(e),J("canvas"),ev(!1),ed(!1),eo(null),eN(null)},eZ=async()=>{if(ef(null),ei){let e=ep.trim()?l.test(ep.trim())?null:"이름은 소문자\xb7숫자와 하이픈(-)만 쓸 수 있습니다. 예: weekly-report":"워크플로 이름을 먼저 적어 주세요.";if(e)return void ef(e)}let e=ei?ep.trim():G;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)}(V,e):V;t!==V&&Z(t);try{await eT.mutateAsync({name:e,body:{yaml:t,scope:"project"}}),ed(!1),$(e),en(e)}catch(e){ef(function(e){var t,r,n,l;let a="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===a||403===a?"저장 권한이 없습니다. 설정에서 연결 토큰을 확인해 주세요.":/name mismatch/i.test(o)?"이름 칸과 워크플로 이름이 달라 저장하지 못했습니다. 다시 저장해 주세요.":i.length?"저장하지 못했습니다: ".concat(String(null!=(l=null==(r=i[0])?void 0:r.message)?l:"").slice(0,120)):409===a?"같은 이름의 워크플로가 이미 있습니다. 다른 이름을 적어 주세요.":"저장하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}(e))}},e0=async()=>{if(G)try{let e=await e_.mutateAsync({name:G,args:el});eo(e.runId)}catch(e){}},e1=async()=>{var e,t;if(!G||(null==(e=eA.data)?void 0:e.source)==="builtin")return;let r=(null==(t=eA.data)?void 0:t.source)==="global"?"global":"project";try{await eE.mutateAsync({name:G,scope:r}),$(null),J("list"),X(null),en(null),Z("")}catch(e){}},e2=(null==(M=eA.data)?void 0:M.source)==="builtin",e3=eM.isPending?"pending":eK?eK.ok?"ok":"error":"idle",e5=function(){let[e,t]=(0,o.useState)(()=>tz),r=(0,o.useRef)(!1);(0,o.useEffect)(()=>{t(function(){try{var e,t,r;let n=window.localStorage.getItem(tD);if(!n)return{...tz};return(e=JSON.parse(n))&&"object"==typeof e?{leftCollapsed:"boolean"==typeof e.leftCollapsed?e.leftCollapsed:tz.leftCollapsed,rightCollapsed:"boolean"==typeof e.rightCollapsed?e.rightCollapsed:tz.rightCollapsed,canvasOnly:"boolean"==typeof e.canvasOnly?e.canvasOnly:tz.canvasOnly,leftWidthPx:tF(null!=(t=e.leftWidthPx)?t:tz.leftWidthPx,tz.leftWidthPx),rightWidthPx:tF(null!=(r=e.rightWidthPx)?r:tz.rightWidthPx,tz.rightWidthPx)}:{...tz}}catch(e){return{...tz}}}()),r.current=!0},[]),(0,o.useEffect)(()=>{if(r.current)try{window.localStorage.setItem(tD,JSON.stringify(e))}catch(e){}},[e]);let n=(0,o.useCallback)(()=>{t(e=>({...e,leftCollapsed:!e.leftCollapsed}))},[]),l=(0,o.useCallback)(()=>{t(e=>({...e,rightCollapsed:!e.rightCollapsed}))},[]),a=(0,o.useCallback)(()=>{t(e=>({...e,canvasOnly:!e.canvasOnly}))},[]),s=(0,o.useCallback)(e=>{t(t=>({...t,leftWidthPx:tF(e,t.leftWidthPx)}))},[]),i=(0,o.useCallback)(e=>{t(t=>({...t,rightWidthPx:tF(e,t.rightWidthPx)}))},[]),d=(0,o.useCallback)(()=>{t({...tz})},[]);return(0,o.useMemo)(()=>({...e,toggleLeft:n,toggleRight:l,toggleCanvasOnly:a,setLeftWidth:s,setRightWidth:i,reset:d}),[e,n,l,a,s,i,d])}(),e4=H?"list"===Y:!e5.canvasOnly,e6=H?"run"===Y:!e5.canvasOnly,e9=e5.leftCollapsed?40:e5.leftWidthPx,e8=e5.rightCollapsed?40:e5.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(),e5.toggleCanvasOnly())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[e5]);let e7=(0,o.useCallback)((e,t)=>{let r="left"===e?e5.leftWidthPx:e5.rightWidthPx,n="left"===e?e5.setLeftWidth:e5.setRightWidth,l="left"===e?1:-1;try{t.target.setPointerCapture(t.pointerId)}catch(e){}let a=e=>{n(r+l*(e.clientX-t.clientX))},s=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",s);try{t.target.releasePointerCapture(t.pointerId)}catch(e){}};window.addEventListener("pointermove",a),window.addEventListener("pointerup",s)},[e5]);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!=(L=null==(_=U.data)?void 0:_.workflows.length)?L: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:e5.toggleLeft,title:e5.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:e5.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:e5.toggleCanvasOnly,title:e5.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(e5.canvasOnly?"border-accent/50 bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface-elevated"),children:e5.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:e5.toggleRight,title:e5.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:e5.rightCollapsed?(0,n.jsx)(m.A,{className:"h-3 w-3"}):(0,n.jsx)(x.A,{className:"h-3 w-3"})})]}),eW>0&&(0,n.jsxs)("button",{type:"button",onClick:()=>{var e;if(eF&&eU.has(eF.runId))return void(eF&&eG(e=>{let t=new Set(e);return t.delete(eF.runId),t}));let t=null==(e=ez.data)?void 0:e.pending[0];t&&t.runId!==es&&eo(t.runId)},title:eF&&eU.has(eF.runId)?"Re-open approval modal for this run":"".concat(eW," 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:eW}),(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:()=>ew(e=>!e),title:ej?"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(ej?"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":Y===t,onClick:()=>{J(t),"canvas"===t&&ev(!1)},className:"min-w-0 flex-1 px-2 py-2 text-xs font-medium ".concat(Y===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:[e4&&(0,n.jsx)("aside",{style:H?void 0:{width:e9},className:"shrink-0 overflow-y-auto border-r border-border ".concat(H?"w-full min-w-0":""),children:!H&&e5.leftCollapsed?(0,n.jsx)("button",{type:"button",onClick:e5.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)(tJ,{label:tG[e],entries:eH[e],selected:G,onSelect:eV},e))}),!H&&e4&&!e5.leftCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize workflow list",onPointerDown:e=>e7("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"===Y)&&(0,n.jsx)("section",{className:"flex flex-1 flex-col overflow-hidden min-w-0",children:ey?(0,n.jsx)(tR,{selectedRunId:es,onSelect:(e,t)=>{eo(e),X(null),en(null),$(t),ed(!1),ev(!1),H&&J("run")}}):(0,n.jsxs)(n.Fragment,{children:[ej&&(0,n.jsx)(eq,{currentYaml:V,onClose:()=>ew(!1),onGenerated:e=>{var t;e.yaml&&(Z(e.yaml),(null==(t=e.definition)?void 0:t.name)&&(ed(!0),X(null),en(null),$(null),em(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=>em(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&&G&&(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:G}),e2&&(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)(tY,{mode:eg,onChange:eb})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[er===G&&(null==(R=eA.data)?void 0:R.name)===G&&eB&&(0,n.jsx)("button",{type:"button",onClick:()=>{X(G),H?J("run"):e5.rightCollapsed&&e5.toggleRight()},className:"rounded-md border border-border px-2 py-1 text-xs text-text-primary hover:bg-surface-elevated",children:"대화 미리보기"}),(0,n.jsx)(tB,{status:e3})]})]}),"graph"===eg&&V.trim()?(0,n.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden bg-surface",children:[(0,n.jsx)("div",{className:ek?"flex-1 min-h-[180px] overflow-hidden":"flex-1 overflow-hidden",children:(0,n.jsx)(eh,{palette:W,yaml:V,editable:!e2,onChangeYaml:Z,onNodeClick:e=>eN(e),nodeStatuses:eD,nodeIssues:eX,cycleNodeIds:eQ,focusNodeId:null!=(D=null==eC?void 0:eC.id)?D:null,focusNonce:null!=(z=null==eC?void 0:eC.nonce)?z:0,onRun:G&&!ei?e0:void 0})}),ek&&(null==eY?void 0:eY.nodes.some(e=>e.id===ek))&&(0,n.jsxs)("div",{className:"max-h-[50%] shrink-0 overflow-y-auto border-t border-border",children:[!e2&&(0,n.jsx)(tx,{definition:eY,nodeId:ek,palette:W,credentialsClient:q,onChange:e=>Z(ee(e)),onClose:()=>eN(null),onDelete:()=>{Z(ee(Q(eY,ek))),eN(null)}}),G&&!ei&&(0,n.jsx)(tk,{workflowName:G,nodeId:ek,events:null!=(F=null==(I=eL.data)?void 0:I.events)?F:[],readOnly:e2},"".concat(G,":").concat(ek))]})]}):(0,n.jsx)("textarea",{value:V,onChange:e=>Z(e.target.value),readOnly:e2,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"}),eJ.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:eJ.slice(0,8).map((e,t)=>{var r,l;let a=eY&&null!=(l=eX&&(null==(r=Object.entries(eX).find(t=>{let[,r]=t;return r.includes(e)}))?void 0:r[0]))?l:null,s=!!a;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"),eS(e=>{var t;return{id:a,nonce:(null!=(t=null==e?void 0:e.nonce)?t:0)+1}})},role:"button",tabIndex:0}:{},title:s?'Jump to node "'.concat(a,'"'):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:[ex&&(0,n.jsx)("p",{role:"alert",className:"mr-auto text-[11px] text-error",children:ex}),G&&!e2&&!ei&&(0,n.jsxs)("button",{type:"button",onClick:e1,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(!V.trim())return;let e=URL.createObjectURL(new Blob([V],{type:"application/x-yaml"}));try{var t;let r=document.createElement("a");r.href=e,t=ei?ep:null!=G?G:"",r.download="".concat(a(t)||"workflow",".yaml"),document.body.appendChild(r);try{r.click()}finally{r.remove()}}finally{URL.revokeObjectURL(e)}},disabled:!V.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:eZ,disabled:!G&&!ei||e2||eT.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:[eT.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&&e6&&!e5.rightCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize run panel",onPointerDown:e=>e7("right",{clientX:e.clientX,pointerId:e.pointerId,target:e.currentTarget}),className:"w-1 shrink-0 cursor-col-resize bg-transparent hover:bg-accent/30"}),e6&&(0,n.jsx)("aside",{style:H?void 0:{width:e8},className:"flex shrink-0 flex-col overflow-hidden border-l border-border ".concat(H?"w-full min-w-0":""),children:!H&&e5.rightCollapsed?(0,n.jsx)("button",{type:"button",onClick:e5.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)(m.A,{className:"h-4 w-4"})}):B&&B===G&&er===G&&(null==(O=eA.data)?void 0:O.name)===G&&eB&&!ei?(0,n.jsx)(tT,{workflow:B,onClose:()=>X(null)},B):(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:el,onChange:e=>ea(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:e0,disabled:!G||ei||e_.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:[e_.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&&eL.data&&(0,n.jsx)(tX,{runId:es,events:eL.data.events,ok:eL.data.ok,outputs:eL.data.outputs})]})]})})]}),ec&&(0,n.jsx)(eR,{onApply:(e,t)=>{X(null),en(null),ed(!0),J("canvas"),$(null),em(null!=t?t:""),Z(e),eo(null),eN(null),ev(!1),ef(null)},onOpenAI:()=>{eu(!1),ev(!1),ew(!0)},onClose:()=>eu(!1)}),eF&&!eU.has(eF.runId)&&(0,n.jsx)(tL,{runId:eF.runId,message:eF.message,onDismiss:()=>eG(e=>{let t=new Set(e);return t.add(eF.runId),t})})]})}function tJ(e){let{label:t,entries:r,selected:l,onSelect:a}=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:()=>a(e.name),className:["block w-full px-3 py-1.5 text-left text-xs transition-colors",l===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 tY(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 tB(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 tX(e){let{runId:t,events:r,ok:l,outputs:a}=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,l;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!=(l=e.result.error)?l:"failed"]})]})]},t)})}),!0===l&&(0,n.jsxs)("div",{className:"rounded-md bg-success/10 px-2 py-1 text-[10px] text-success",children:["completed \xb7 ",Object.keys(a).length," node output",1===Object.keys(a).length?"":"s"]}),!1===l&&(0,n.jsx)("div",{className:"rounded-md bg-error/10 px-2 py-1 text-[10px] text-error",children:"failed"}),Object.keys(a).length>0&&(0,n.jsx)(tQ,{outputs:a})]})}function tQ(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)})})]})}},50053:(e,t,r)=>{"use strict";r.d(t,{F:()=>y});var n=r(54456),l=r(60500),a=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),m=r(83253),x=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,a.jE)(),[R,I]=(0,l.useState)(null),[O,P]=(0,l.useState)(null),[L,D]=(0,l.useState)(null),[z,F]=(0,l.useState)("note"),[W,q]=(0,l.useState)(x.DN[0]),[U,G]=(0,l.useState)("read-only"),[$,H]=(0,l.useState)(""),[K,J]=(0,l.useState)("pass"),[Y,B]=(0,l.useState)(""),[X,Q]=(0,l.useState)(null),[V,Z]=(0,l.useState)([]),[ee,et]=(0,l.useState)(null),er=(0,u.U)(),en=(0,s.I)({queryKey:["run-graphs"],queryFn:()=>M.getRunGraphs()}),el=(0,s.I)({queryKey:["graph-kinds","harness"],queryFn:()=>M.getGraphKinds("harness"),enabled:!T,retry:!1}),ea=null!=(N=null!=T?T:(null==(e=el.data)?void 0:e.kinds.length)?el.data.kinds:null)?N:x.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),es=ea.some(e=>e.kind===W)?W:null!=(C=null==(t=ea[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?L:(null==(j=eu.data)?void 0:j.id)===eo&&"mine"===eu.data.source&&eu.data.editable?eu.data.yaml:null:null,em=(0,l.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,l]=r;return{id:"".concat(t,":").concat(e.from,":").concat(n),source:e.from,target:l,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 m.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);m.Ay.layout(r);let n=new Set(e.terminal_nodes);return{nodes:e.nodes.map(l=>{let a=r.node(l.node_id),s=t.filter(e=>e.source===l.node_id),o=t.filter(e=>e.target===l.node_id);return{id:l.node_id,position:{x:a.x-95,y:a.y-a.height/2},data:{label:l.node_id,kind:l.kind,recipe:l.recipe,maxVisits:l.max_visits,entry:e.entry_node===l.node_id,terminal:n.has(l.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:a.height}}}),edges:t}}(ed.data):null,[ed.data,eo]),ex=(0,l.useMemo)(()=>{var e;return null!=(e=null==em?void 0:em.nodes.map(e=>({...e,type:"run"})))?e:[]},[em]);function eh(e){if(ec&&eo&&null!==ep&&!eb.isPending)try{let t=e(ep);if(t===ep)return;er.record(ep),P(eo),D(t),Q(null),Z([]),et(null)}catch(e){Q(b(e))}}function ef(e){if(!ec||!eo||null===ep||eb.isPending)return;let t=er[e](ep);null!==t&&(P(eo),D(t),Q(null),Z([]),et(null))}let eg=(0,o.n)({mutationFn:()=>M.cloneRunGraph(eo,"".concat(eo,"-mine")),onSuccess:async e=>{er.reset(),P(null),D(null),Q(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&&(Q(null),er.reset(),P(null),D(null),await _.invalidateQueries({queryKey:["run-graph",e.id]}),await _.invalidateQueries({queryKey:["run-graph-yaml",e.id]}))},onError:e=>Q(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(),P(null),D(null)),I(e.id),Q(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=>q(e.target.value),className:"ml-1 text-xs",children:ea.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:U,onChange:e=>G(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,x.lu)(e);return(0,x.bC)(t,{nodeId:z,kind:es,recipe:U}),(0,x.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,x.lu)(e);return(0,x.qd)(t,z),(0,x.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,x.lu)(e);return(0,x.gc)(t,z,es),(0,x.ji)(t,z,U),(0,x.ys)(t)}),children:"kind/recipe"}),(0,n.jsx)("input",{"aria-label":"간선 from",value:$,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:Y,onChange:e=>B(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,x.lu)(e);return(0,x.W3)(t,{from:$,outcome:K,to:Y}),(0,x.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,x.lu)(e);return(0,x.ns)(t,$,K),(0,x.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&&el.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}),V.length>0&&(0,n.jsxs)("p",{role:"status",className:"px-3 py-1 text-xs text-warning",children:["무시되는 키: ",V.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:"불러오는 중…"}),em&&(0,n.jsxs)(i.Gc,{nodes:ex,edges:em.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]:{},l=null!=(t=n.fetchImpl)?t:fetch,a="".concat(null!=(r=n.origin)?r:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),s=await l(a);if(404===s.status)return null;if(!s.ok)throw Error("chat-config ".concat(s.status));return await s.json()}async function l(e){var t,r,n,l,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:a(u.body)};let p=await u.json();return{kind:"buffered",response:null!=(l=p.response)?l:"",runId:null!=(s=p.runId)?s:""}}async function*a(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{value:e,done:l}=await t.read();if(l)break;let a=(n+=r.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==a;){let e=n.slice(0,a);n=n.slice(a+2);let t=s(e);t&&(yield t),a=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 l=e.indexOf(":");if(-1===l)continue;let a=e.slice(0,l),s=e.slice(l+1).replace(/^ /,"");"event"===a?t=s:"data"===a&&r.push(s)}return 0===r.length?null:{event:t,data:r.join("\n")}}r.d(t,{XQ:()=>n,gJ:()=>l})},65338:(e,t,r)=>{"use strict";r.d(t,{U:()=>a});var n=r(60500);class l{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 a(){let e=(0,n.useRef)(new l),[,t]=(0,n.useReducer)(e=>e+1,0),r=(0,n.useCallback)(r=>{e.current.record(r),t()},[]),a=(0,n.useCallback)(r=>{let n=e.current.undo(r);return null!==n&&t(),n},[]);return{record:r,undo:a,redo:(0,n.useCallback)(r=>{let n=e.current.redo(r);return null!==n&&t(),n},[]),reset:(0,n.useCallback)(()=>{e.current=new l,t()},[]),canUndo:e.current.canUndo,canRedo:e.current.canRedo}}},93477:(e,t,r)=>{"use strict";r.d(t,{CF:()=>a,DN:()=>l,W3:()=>w,bC:()=>g,gc:()=>y,ji:()=>v,lu:()=>h,ns:()=>k,qd:()=>b,ys:()=>C});var n=r(10641);let l=["agent","gate","git","judge","observe","hitl","subgraph"],a=["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 l=null==(r=d(e,t))?void 0:r.value;return(0,n.oP)(l)?l: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 m(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 x(e,t,r){var n;let l=o(null==(n=d(e,t))?void 0:n.value);if(l){l.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 l=s(e);if(!l)throw Error("graph yaml root is not a map");let a=c(l,"nodes");if(a||(l.set("nodes",[]),a=c(l,"nodes")),!a)throw Error("nodes is not a sequence");if(m(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),a.add(o)}function b(e,t){let r=s(e),n=r?c(r,"nodes"):null;if(!n)return;let l=n.items.findIndex(e=>{let r=u(e);return!!r&&p(r,"node_id")===t});l>=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[l]),n.delete(l))}function y(e,t,r){let n=m(e,t);if(!n)throw Error("node not found: ".concat(t));x(n,"kind",r)}function v(e,t,r){let n=m(e,t);if(!n)throw Error("node not found: ".concat(t));x(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 l=c(r,"edges");if(l||(r.set("edges",[]),l=c(r,"edges")),!l)throw Error("edges is not a sequence");let a=j(e).find(e=>p(e,"from")===t.from&&d(e,"map"));a||((a=new n.CA).set("from",t.from),l.add(a)),(function(e){var t;let r=null==(t=d(e,"map"))?void 0:t.value;if((0,n.jh)(r))return r;let l=new n.CA;return e.set("map",l),l})(a).set(t.outcome,t.to)}function k(e,t,r){for(let x of j(e)){var l,a,s,o,c,u,m;if(p(x,"from")!==t)continue;let h=null==(l=d(x,"map"))?void 0:l.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==(a=t.key.range)?void 0:a[0])?u:null==(s=t.value.range)?void 0:s[0],n=null!=(m=null==(o=t.value.range)?void 0:o[2])?m: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 l=[],a=t=>{if((0,n.oP)(t))return void t.items.forEach((e,s)=>{if((0,n.jh)(e)&&!e.range){var o,i;let a=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),l=e.value,a=l&&"object"==typeof l&&"value"in l?String(l.value):String(e.value);return" ".concat(r,": ").concat(a)}),c=null!=(i=null==(o=d[0])?void 0:o.slice(2))?i:"";l.push({start:a,end:a,text:"\n- ".concat(c).concat(d.length>1?"\n".concat(d.slice(1).join("\n")):"")})}else a(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());l.push({start:e,end:e,text:"\n".concat(r)})}else a(s.value);continue}let c=o(s.value);if(!d||!c)continue;if(!c.range&&t.range){let e=t.range[1];l.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&&l.push({start:c.range[0],end:c.range[1],text:p})}};for(let[t,r]of(a(e.contents),f(e)))l.push({start:t,end:r,text:""});f(e).length=0;let s=r;for(let e of l.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:()=>{}}]);