elanous 0.2.18 → 0.2.19

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 (404) 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/{P6YTVgzuZz5oTZhY4Din_ → J5H7BvqgSI8DUjtRRcA_S}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1157-cba0e8553d35a980.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/{726.83532d69452ee24b.js → 1470.98a6ab61ccb4131c.js} +1 -1
  7. package/apps/pwa/out/_next/static/chunks/171-23a877ed11720de9.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/2336-e830c777eb6bce04.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/{9247-269e4464cc4b491c.js → 2375-e061bb24cd2b5cde.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/2415.ed6428ff334c7ce2.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/{211-9c9090c59e2c5907.js → 2977-e38442e86289f1d3.js} +1 -1
  14. package/apps/pwa/out/_next/static/chunks/{f6b7c9ba.64a895b8b2fedbdc.js → 2ea96958.e8c7e112de50b067.js} +1 -1
  15. package/apps/pwa/out/_next/static/chunks/3094.67339318c7f72a3a.js +2 -0
  16. package/apps/pwa/out/_next/static/chunks/338-ceb956612dcfaa86.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/3395-835e4ceaa6335ba4.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +5 -0
  19. package/apps/pwa/out/_next/static/chunks/3441-be82e3595aef3a20.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/3689-89905039bf3e7257.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/3822-6f268bc26c6a84ac.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/{1268.0840ff91e083fcbd.js → 4323.c5dfb6f503304775.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/4457-d7df81c90f9d0268.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/4551-77dadae76f6cbace.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/{6110.1297d4093fdfbb0d.js → 4847.56f5bc454fbcc827.js} +2 -2
  28. package/apps/pwa/out/_next/static/chunks/4978.6fd93b974441e87f.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/5012-f746f6549b869f91.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/{7327-2d69fb321ba73389.js → 6062-73e68343a9814f6a.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/62-5bfed1e23790b745.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/6320-9bc8561fde416e07.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/649-ca96d1c5d09e02b8.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/6726-85a7db59b288c53f.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/6735-33267c4630d0d963.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/7633-141682015873beb6.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/{935.4ddaa99fc1d1126c.js → 7647.2fcd30d894d5ee30.js} +1 -1
  42. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/{f6231284-45726550aba08fca.js → 8046cadf-211ca3c0e00f2b72.js} +1 -1
  45. package/apps/pwa/out/_next/static/chunks/8067-143791231c99bd02.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/8430-a10cfba8ef282d4e.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/8870-9614a213b990b10b.js +25 -0
  49. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/9454-12c2f30dea62291c.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/976-4a9b4ebdca7c739a.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/9989-15cdf568bafa9fc8.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/ae787e4c-e5b1ef00b2dbceca.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/approvals/page-deef5ee191830f14.js +1 -0
  56. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-b193da485f9a14b2.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/board/page-b6e1a79df0e214f4.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/botlab/page-e84df4d907f703c7.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/bots/page-a5fb9a5db89ae4ea.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/ceo/page-1499f481d7fc52d6.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/chat/page-c7cf753aeb648790.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/consult/page-4118469e514e10fd.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/control/page-e968f7630654332a.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/decisions/page-505915052f947022.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/design-check/page-c2f962fb4a3b06c6.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/editor/page-7b5ed0bd8a589ec4.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/exec/page-cf8193250dd42dd4.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/field/page-cf3f5dfa35dea8e9.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/inside/page-5b29d9b06ceadade.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/intake/page-a15e7fcc283e9ca7.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/app/layout-d2915e7b70ff3d0e.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/live/page-b70cd005d9169e25.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/loops/page-2595f0eba29f57e1.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/market/page-c776322454156e36.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-77bbd17f4435aa10.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/morning/page-049689e611ecc936.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/not-found-85954a4fb09c44eb.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/observatory/page-e773e552e1068ee6.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-5633c4bfa7684b4a.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d829b92bd01b4994.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-061c317fc771becf.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/outputs/page-3a45ece8865ed4b6.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/app/page-0be990618c0d56bd.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/app/reflection/page-bfea4865dc244b73.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-0d6ba8e337741484.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/app/sessions/page-76a88b55d816482e.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-bba1542df59f61ce.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/app/settings/page-4185c95689bb372e.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-b699e1a8d5d34b8b.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/app/setup/page-c225e338c31bf274.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/app/share/page-449353f70507ca1f.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/app/showroom/page-90b889714102476d.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f1ee7fbeb7f96ddc.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/app/term/page-d59a95e1434dfaa0.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/app/today/page-71491a23414d1a47.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/app/trace/page-de7112bdb65fa4fe.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/app/vault/page-feb4d0d88079660d.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-f17d887b40dd6b1d.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/app/workflows/page-8da77be2192bcd5d.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/app/workspace/page-72c3b9a5e9582b29.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c3afe4c8d0c48c39.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/main-app-b9308f2d8a931531.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/webpack-6f35f9d892fa630b.js +1 -0
  110. package/apps/pwa/out/_next/static/css/{e99e3cff94ced78a.css → 599369d853c61df7.css} +1 -1
  111. package/apps/pwa/out/_next/static/css/85f53c6f35d11382.css +1 -0
  112. package/apps/pwa/out/_next/static/css/d3427996da11e480.css +1 -0
  113. package/apps/pwa/out/approvals/index.html +1 -1
  114. package/apps/pwa/out/approvals/index.txt +23 -23
  115. package/apps/pwa/out/autopilot/index.html +1 -1
  116. package/apps/pwa/out/autopilot/index.txt +23 -23
  117. package/apps/pwa/out/board/index.html +1 -1
  118. package/apps/pwa/out/board/index.txt +23 -23
  119. package/apps/pwa/out/botlab/index.html +1 -1
  120. package/apps/pwa/out/botlab/index.txt +22 -22
  121. package/apps/pwa/out/bots/index.html +1 -1
  122. package/apps/pwa/out/bots/index.txt +22 -22
  123. package/apps/pwa/out/ceo/index.html +1 -1
  124. package/apps/pwa/out/ceo/index.txt +23 -23
  125. package/apps/pwa/out/chat/index.html +1 -1
  126. package/apps/pwa/out/chat/index.txt +22 -22
  127. package/apps/pwa/out/consult/index.html +1 -1
  128. package/apps/pwa/out/consult/index.txt +23 -23
  129. package/apps/pwa/out/control/index.html +1 -1
  130. package/apps/pwa/out/control/index.txt +23 -23
  131. package/apps/pwa/out/decisions/index.html +1 -1
  132. package/apps/pwa/out/decisions/index.txt +22 -22
  133. package/apps/pwa/out/design-check/index.html +1 -1
  134. package/apps/pwa/out/design-check/index.txt +23 -23
  135. package/apps/pwa/out/editor/index.html +1 -1
  136. package/apps/pwa/out/editor/index.txt +25 -24
  137. package/apps/pwa/out/exec/index.html +1 -1
  138. package/apps/pwa/out/exec/index.txt +23 -23
  139. package/apps/pwa/out/field/index.html +1 -1
  140. package/apps/pwa/out/field/index.txt +23 -23
  141. package/apps/pwa/out/healthz +1 -1
  142. package/apps/pwa/out/index.html +1 -1
  143. package/apps/pwa/out/index.txt +22 -22
  144. package/apps/pwa/out/inside/index.html +1 -1
  145. package/apps/pwa/out/inside/index.txt +24 -23
  146. package/apps/pwa/out/intake/index.html +1 -1
  147. package/apps/pwa/out/intake/index.txt +23 -23
  148. package/apps/pwa/out/live/index.html +1 -1
  149. package/apps/pwa/out/live/index.txt +23 -23
  150. package/apps/pwa/out/loops/index.html +1 -1
  151. package/apps/pwa/out/loops/index.txt +28 -27
  152. package/apps/pwa/out/market/index.html +1 -1
  153. package/apps/pwa/out/market/index.txt +22 -22
  154. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  155. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  156. package/apps/pwa/out/morning/index.html +1 -1
  157. package/apps/pwa/out/morning/index.txt +23 -23
  158. package/apps/pwa/out/observatory/index.html +1 -1
  159. package/apps/pwa/out/observatory/index.txt +23 -23
  160. package/apps/pwa/out/ops/checklist/index.html +1 -1
  161. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  162. package/apps/pwa/out/ops/release/index.html +1 -1
  163. package/apps/pwa/out/ops/release/index.txt +22 -22
  164. package/apps/pwa/out/ops/seats/index.html +1 -1
  165. package/apps/pwa/out/ops/seats/index.txt +22 -22
  166. package/apps/pwa/out/outputs/index.html +1 -1
  167. package/apps/pwa/out/outputs/index.txt +22 -22
  168. package/apps/pwa/out/reflection/index.html +1 -1
  169. package/apps/pwa/out/reflection/index.txt +23 -23
  170. package/apps/pwa/out/scheduler/index.html +1 -1
  171. package/apps/pwa/out/scheduler/index.txt +23 -23
  172. package/apps/pwa/out/sessions/index.html +1 -1
  173. package/apps/pwa/out/sessions/index.txt +22 -22
  174. package/apps/pwa/out/settings/devices/index.html +1 -1
  175. package/apps/pwa/out/settings/devices/index.txt +23 -23
  176. package/apps/pwa/out/settings/index.html +1 -1
  177. package/apps/pwa/out/settings/index.txt +23 -23
  178. package/apps/pwa/out/setup/done/index.html +1 -1
  179. package/apps/pwa/out/setup/done/index.txt +23 -23
  180. package/apps/pwa/out/setup/index.html +1 -1
  181. package/apps/pwa/out/setup/index.txt +23 -23
  182. package/apps/pwa/out/share/index.html +1 -1
  183. package/apps/pwa/out/share/index.txt +23 -23
  184. package/apps/pwa/out/showroom/index.html +1 -1
  185. package/apps/pwa/out/showroom/index.txt +22 -22
  186. package/apps/pwa/out/tasks/index.html +1 -1
  187. package/apps/pwa/out/tasks/index.txt +23 -23
  188. package/apps/pwa/out/term/index.html +1 -1
  189. package/apps/pwa/out/term/index.txt +23 -23
  190. package/apps/pwa/out/today/index.html +1 -1
  191. package/apps/pwa/out/today/index.txt +23 -23
  192. package/apps/pwa/out/trace/index.html +1 -1
  193. package/apps/pwa/out/trace/index.txt +23 -23
  194. package/apps/pwa/out/vault/index.html +1 -1
  195. package/apps/pwa/out/vault/index.txt +23 -23
  196. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  197. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  198. package/apps/pwa/out/workflows/index.html +1 -1
  199. package/apps/pwa/out/workflows/index.txt +23 -23
  200. package/apps/pwa/out/workspace/index.html +1 -1
  201. package/apps/pwa/out/workspace/index.txt +23 -23
  202. package/apps/pwa/out/worktrees/index.html +1 -1
  203. package/apps/pwa/out/worktrees/index.txt +23 -23
  204. package/graphs/ops/guardian.yaml +26 -0
  205. package/graphs/ops/recipes.yaml +3 -0
  206. package/package.json +1 -1
  207. package/scripts/coord-channel-watch.sh +2 -2
  208. package/scripts/discord-seat-probe.ts +3 -1
  209. package/scripts/lib/pch-regress-map.ts +23 -0
  210. package/scripts/morning-report.ts +18 -4
  211. package/scripts/pch-regress.ts +88 -0
  212. package/scripts/release-loop/gate-diff.ts +18 -0
  213. package/scripts/release-loop/gate-node.ts +338 -46
  214. package/scripts/release-loop/gate-partial.ts +106 -0
  215. package/scripts/release-loop/gate-timing.ts +120 -0
  216. package/scripts/release-loop/resume-release.ts +64 -5
  217. package/scripts/release-loop/shard-plan.ts +65 -0
  218. package/scripts/release-loop/unattended-release.ts +2 -0
  219. package/scripts/video/scene-table.ts +159 -0
  220. package/src/acp/core-turn-bridge.ts +39 -2
  221. package/src/away/presence.ts +40 -0
  222. package/src/away/release-watch.ts +255 -0
  223. package/src/chat/index.ts +2 -1
  224. package/src/chat/short-question.ts +3 -40
  225. package/src/cli/away-cli.ts +68 -0
  226. package/src/cli/guardian-cli.ts +49 -0
  227. package/src/cli/intake-cli.ts +13 -7
  228. package/src/cli/log-event-names.ts +1 -0
  229. package/src/cli/pod-cli.ts +5 -1
  230. package/src/cli/pty-drive-cli.ts +14 -3
  231. package/src/cli/release-cli.ts +32 -7
  232. package/src/cli/setup-cli.ts +31 -1
  233. package/src/cli/tasks-cli.ts +104 -11
  234. package/src/context-bus/context-now-public.ts +1 -1
  235. package/src/context-bus/context-now-surfaces.ts +16 -6
  236. package/src/context-bus/context-now.ts +97 -3
  237. package/src/core-turn/short-question.ts +100 -0
  238. package/src/dashboard/dashboard-status-lines.ts +24 -4
  239. package/src/dashboard/index.ts +50 -5
  240. package/src/dashboard/input/slash-executor.ts +6 -2
  241. package/src/dashboard/slash-runtime/dashboard-handlers.ts +63 -36
  242. package/src/dashboard/slash-runtime/decide-slash.ts +60 -0
  243. package/src/dashboard/slash-runtime/help-from-registry.ts +21 -8
  244. package/src/dashboard/slash-runtime/help-groups.ts +44 -0
  245. package/src/dashboard/slash-runtime/model-choices.ts +125 -0
  246. package/src/domains/guardian-tick.ts +138 -0
  247. package/src/domains/outbound-alert.ts +44 -13
  248. package/src/domains/schedule-registry.ts +23 -0
  249. package/src/domains/telegram-kind-route.ts +39 -0
  250. package/src/domains/watch-default-scheduler.ts +95 -0
  251. package/src/esc-abort-gate.ts +44 -0
  252. package/src/graph-runner/runner.ts +25 -5
  253. package/src/harness/harness-cli-command.ts +2 -0
  254. package/src/harness/harness-salvage-cli.ts +78 -0
  255. package/src/harness/harness-worktree-add.ts +68 -0
  256. package/src/harness/ledger-write-guard.ts +6 -16
  257. package/src/hq/hq.ts +6 -1
  258. package/src/index.ts +52 -3
  259. package/src/instance/test-write-guard-spy-first.fixture.ts +13 -0
  260. package/src/instance/test-write-guard.ts +200 -0
  261. package/src/intake-plane/digest.ts +39 -15
  262. package/src/intake-plane/harness-target.ts +4 -3
  263. package/src/intake-plane/intake-sources.ts +1 -0
  264. package/src/intake-plane/items.ts +1 -0
  265. package/src/loops/orchestrator/degradation.ts +57 -0
  266. package/src/loops/orchestrator/finish-rate.ts +33 -3
  267. package/src/loops/orchestrator/tick.ts +166 -45
  268. package/src/maturity/feature-maturity.ts +6 -4
  269. package/src/maturity/tui-slash-maturity.ts +1 -0
  270. package/src/mss/logging/log-store.ts +3 -0
  271. package/src/nexus/api/http-server.ts +16 -5
  272. package/src/nexus/api/loop-edges.ts +290 -17
  273. package/src/nexus/api/ops-api.ts +96 -28
  274. package/src/nexus/index.ts +7 -0
  275. package/src/release-loop/checklist.ts +2 -0
  276. package/src/release-loop/feature-store.ts +54 -7
  277. package/src/release-loop/light-rc.ts +173 -0
  278. package/src/release-loop/placement.ts +51 -17
  279. package/src/release-loop/rubric.ts +57 -1
  280. package/src/self-dev/dev-cli.ts +36 -0
  281. package/src/self-dev/orchestrate.ts +1 -0
  282. package/src/self-dev/pr-preview.ts +179 -0
  283. package/src/self-dev/shard-run.ts +23 -7
  284. package/src/self-implement/gate-cli.ts +29 -8
  285. package/src/self-implement/goal-author-clarification.ts +88 -13
  286. package/src/self-implement/goal-clarification-escalation.ts +2 -0
  287. package/src/self-implement/orchestrator.ts +2 -1
  288. package/src/self-implement/salvage-branches.ts +254 -0
  289. package/src/task-agent/actions.ts +63 -2
  290. package/src/task-agent/board.ts +132 -0
  291. package/src/task-agent/card-evidence.ts +203 -0
  292. package/src/task-agent/completion-evidence.ts +126 -0
  293. package/src/task-agent/judge.ts +18 -0
  294. package/src/task-agent/live-moves.ts +176 -0
  295. package/src/task-agent/mission.ts +32 -6
  296. package/src/task-agent/shadow.ts +183 -15
  297. package/src/task-agent/task-hand.ts +117 -15
  298. package/src/task-orchestrator/surfaces/pod-command-job.ts +64 -4
  299. package/src/task-orchestrator/surfaces/pod-lease.ts +142 -13
  300. package/src/task-orchestrator/surfaces/pod-pool.ts +13 -5
  301. package/src/task-orchestrator/surfaces/self-implement-pod.ts +2 -2
  302. package/src/telegram-away-command.ts +38 -0
  303. package/src/telegram-commands.ts +11 -0
  304. package/src/telegram-report-log-probe.ts +21 -0
  305. package/src/telegram-report.ts +27 -3
  306. package/src/tui-client/dashboard-session.ts +1 -0
  307. package/src/user-config.ts +134 -2
  308. package/src/version/packed-revision.json +1 -1
  309. package/apps/pwa/out/_next/static/chunks/1307-30dff22c9e1f3073.js +0 -1
  310. package/apps/pwa/out/_next/static/chunks/1826-5d279da64bbbc2de.js +0 -1
  311. package/apps/pwa/out/_next/static/chunks/1844-9ec4b1d12f6e80eb.js +0 -1
  312. package/apps/pwa/out/_next/static/chunks/1866-e7a6999f25548b30.js +0 -1
  313. package/apps/pwa/out/_next/static/chunks/1948.15f356b15a625597.js +0 -5
  314. package/apps/pwa/out/_next/static/chunks/195-fb1d7690bf30bab4.js +0 -1
  315. package/apps/pwa/out/_next/static/chunks/1986-33e13d648a9df765.js +0 -1
  316. package/apps/pwa/out/_next/static/chunks/2196-4700653d12a44b40.js +0 -1
  317. package/apps/pwa/out/_next/static/chunks/224-798346143007ff65.js +0 -1
  318. package/apps/pwa/out/_next/static/chunks/2537-6c289376caa88ca1.js +0 -1
  319. package/apps/pwa/out/_next/static/chunks/2699-325cc923ba7b8631.js +0 -1
  320. package/apps/pwa/out/_next/static/chunks/2957-96ffab3d521fb08f.js +0 -1
  321. package/apps/pwa/out/_next/static/chunks/311.e685738f92e6e2ec.js +0 -1
  322. package/apps/pwa/out/_next/static/chunks/3194-807b212fb8eae065.js +0 -1
  323. package/apps/pwa/out/_next/static/chunks/3324-d1d2979821dfa845.js +0 -1
  324. package/apps/pwa/out/_next/static/chunks/3558-bbb5ab553a0471d3.js +0 -1
  325. package/apps/pwa/out/_next/static/chunks/3857-4f936cdb30322aa6.js +0 -1
  326. package/apps/pwa/out/_next/static/chunks/3916-3d02dd1fc257dd3c.js +0 -1
  327. package/apps/pwa/out/_next/static/chunks/4144-a0041c8dc3be57ac.js +0 -1
  328. package/apps/pwa/out/_next/static/chunks/4554-5761612531d0146b.js +0 -1
  329. package/apps/pwa/out/_next/static/chunks/4565-3d7e3fdeb43686a8.js +0 -1
  330. package/apps/pwa/out/_next/static/chunks/4795-f372490b178583fc.js +0 -1
  331. package/apps/pwa/out/_next/static/chunks/5360-be1f1d8f9fcc9755.js +0 -1
  332. package/apps/pwa/out/_next/static/chunks/5977-a11f37254196b659.js +0 -1
  333. package/apps/pwa/out/_next/static/chunks/5994-ae92c0de046ab9ba.js +0 -1
  334. package/apps/pwa/out/_next/static/chunks/6158.af2e93b7adff709b.js +0 -2
  335. package/apps/pwa/out/_next/static/chunks/6877-74399f69c7da1433.js +0 -1
  336. package/apps/pwa/out/_next/static/chunks/7290-f09c928a06c52e2d.js +0 -1
  337. package/apps/pwa/out/_next/static/chunks/7797-df5aa0381fdc078f.js +0 -1
  338. package/apps/pwa/out/_next/static/chunks/8060-cc008cc6fedfa818.js +0 -1
  339. package/apps/pwa/out/_next/static/chunks/8085-d065d0393c1760f5.js +0 -1
  340. package/apps/pwa/out/_next/static/chunks/8401-8615a660c84cdb03.js +0 -1
  341. package/apps/pwa/out/_next/static/chunks/8682-7061dd4fa7bd62ed.js +0 -1
  342. package/apps/pwa/out/_next/static/chunks/8695-846034ce44852c70.js +0 -1
  343. package/apps/pwa/out/_next/static/chunks/8868-10a3a4440fb0ccd8.js +0 -25
  344. package/apps/pwa/out/_next/static/chunks/9070.067c106528ec1ae6.js +0 -1
  345. package/apps/pwa/out/_next/static/chunks/9103-60fbef33e66f0a46.js +0 -1
  346. package/apps/pwa/out/_next/static/chunks/a9f2b54d-7865aba0f4d2ee49.js +0 -1
  347. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c1a96669158471ec.js +0 -1
  348. package/apps/pwa/out/_next/static/chunks/app/approvals/page-d92f7ee3994e84c7.js +0 -1
  349. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-4733c967b56a4277.js +0 -1
  350. package/apps/pwa/out/_next/static/chunks/app/board/page-d22fd849cc22f104.js +0 -1
  351. package/apps/pwa/out/_next/static/chunks/app/botlab/page-bb742f995c6769e7.js +0 -1
  352. package/apps/pwa/out/_next/static/chunks/app/bots/page-02b073a2ac793b83.js +0 -1
  353. package/apps/pwa/out/_next/static/chunks/app/ceo/page-60c3da708f9a0ccc.js +0 -1
  354. package/apps/pwa/out/_next/static/chunks/app/chat/page-8a9b3594bc23289b.js +0 -1
  355. package/apps/pwa/out/_next/static/chunks/app/consult/page-a0eb02638b1e6f31.js +0 -1
  356. package/apps/pwa/out/_next/static/chunks/app/control/page-308111abadf35670.js +0 -1
  357. package/apps/pwa/out/_next/static/chunks/app/decisions/page-6eaf7bac37830c21.js +0 -1
  358. package/apps/pwa/out/_next/static/chunks/app/design-check/page-5d97b2901e0d1ea6.js +0 -1
  359. package/apps/pwa/out/_next/static/chunks/app/editor/page-c39554c321576982.js +0 -1
  360. package/apps/pwa/out/_next/static/chunks/app/exec/page-8c3d8e63ae2e1c98.js +0 -1
  361. package/apps/pwa/out/_next/static/chunks/app/field/page-9b72a07d424701c6.js +0 -1
  362. package/apps/pwa/out/_next/static/chunks/app/healthz/route-c1a96669158471ec.js +0 -1
  363. package/apps/pwa/out/_next/static/chunks/app/inside/page-bd5d586429167fea.js +0 -1
  364. package/apps/pwa/out/_next/static/chunks/app/intake/page-a572f58cd3ca5864.js +0 -1
  365. package/apps/pwa/out/_next/static/chunks/app/layout-59b7834d497c2255.js +0 -1
  366. package/apps/pwa/out/_next/static/chunks/app/live/page-be5ea965a07fbc41.js +0 -1
  367. package/apps/pwa/out/_next/static/chunks/app/loops/page-c130b63862437814.js +0 -1
  368. package/apps/pwa/out/_next/static/chunks/app/market/page-fa244bd146a00ae8.js +0 -1
  369. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-44d56d6391965a6a.js +0 -1
  370. package/apps/pwa/out/_next/static/chunks/app/morning/page-83a700d4c754d802.js +0 -1
  371. package/apps/pwa/out/_next/static/chunks/app/not-found-7b3170f374f77b9d.js +0 -1
  372. package/apps/pwa/out/_next/static/chunks/app/observatory/page-5f23d0c66a3b4793.js +0 -1
  373. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-a3c58f5c72a5f3f9.js +0 -1
  374. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a2c4625596f8d69c.js +0 -1
  375. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-0e9099531d239f11.js +0 -1
  376. package/apps/pwa/out/_next/static/chunks/app/outputs/page-e8e1ecaea7cd71d2.js +0 -1
  377. package/apps/pwa/out/_next/static/chunks/app/page-a1b7ffed710a93e0.js +0 -1
  378. package/apps/pwa/out/_next/static/chunks/app/reflection/page-1467047104141297.js +0 -1
  379. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-2da6f9b8a38c6978.js +0 -1
  380. package/apps/pwa/out/_next/static/chunks/app/sessions/page-102310930791197a.js +0 -1
  381. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-f331e38fefc00393.js +0 -1
  382. package/apps/pwa/out/_next/static/chunks/app/settings/page-6ed0b73bae8351d8.js +0 -1
  383. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-44d5f767491692bf.js +0 -1
  384. package/apps/pwa/out/_next/static/chunks/app/setup/layout-c1a96669158471ec.js +0 -1
  385. package/apps/pwa/out/_next/static/chunks/app/setup/page-43336055451f6e37.js +0 -1
  386. package/apps/pwa/out/_next/static/chunks/app/share/page-3cc47dca0922ab9a.js +0 -1
  387. package/apps/pwa/out/_next/static/chunks/app/showroom/page-a77ee355a2304ff0.js +0 -1
  388. package/apps/pwa/out/_next/static/chunks/app/tasks/page-b17cd46cf0e9b8cf.js +0 -1
  389. package/apps/pwa/out/_next/static/chunks/app/term/page-61553851aa606146.js +0 -1
  390. package/apps/pwa/out/_next/static/chunks/app/today/page-a1f585e154e61c59.js +0 -1
  391. package/apps/pwa/out/_next/static/chunks/app/trace/page-7bf54c9bb9274af8.js +0 -1
  392. package/apps/pwa/out/_next/static/chunks/app/vault/page-5150ef17b5383a57.js +0 -1
  393. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b9d8ce70792c1672.js +0 -1
  394. package/apps/pwa/out/_next/static/chunks/app/workflows/page-a5a3de231f2cc7d5.js +0 -1
  395. package/apps/pwa/out/_next/static/chunks/app/workspace/page-134da468538baf48.js +0 -1
  396. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31ac4afa2dcd915c.js +0 -1
  397. package/apps/pwa/out/_next/static/chunks/framework-5c169757551134ed.js +0 -1
  398. package/apps/pwa/out/_next/static/chunks/main-59fe95fed40c7a01.js +0 -1
  399. package/apps/pwa/out/_next/static/chunks/main-app-4ca74dbbee7057c6.js +0 -1
  400. package/apps/pwa/out/_next/static/chunks/pages/_app-13a0a886df4d97a1.js +0 -1
  401. package/apps/pwa/out/_next/static/chunks/pages/_error-6af8591cd3a3f038.js +0 -1
  402. package/apps/pwa/out/_next/static/chunks/webpack-c2782b330447ffb6.js +0 -1
  403. package/apps/pwa/out/_next/static/css/7fa358fec7da7c47.css +0 -1
  404. /package/apps/pwa/out/_next/static/{P6YTVgzuZz5oTZhY4Din_ → J5H7BvqgSI8DUjtRRcA_S}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9084],{13221:(e,t,n)=>{"use strict";function r(e,t){if(!e.enabled||"off"===e.scheduleState)return"off";if("failed"===e.lastStatus||"error"===e.lastStatus||"failure"===e.lastStatus||"abandoned"===e.lastStatus||"expired"===e.lastStatus)return"failed";if("stale"===e.scheduleState)return"late";let n=null===e.lastRunAt?NaN:Date.parse(e.lastRunAt);if(void 0!==e.secondDueAt){let r=null===e.secondDueAt?NaN:Date.parse(e.secondDueAt);return Number.isFinite(n)&&Number.isFinite(t)&&Number.isFinite(r)&&r>n&&t>r?"late":"alive"}return Number.isFinite(t)&&Number.isFinite(n)&&null!==e.intervalMs&&Number.isFinite(e.intervalMs)&&e.intervalMs>0&&t-n>2*e.intervalMs?"late":"alive"}n.d(t,{u:()=>r})},25241:(e,t,n)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)&&(void 0===e.startedAt||null===e.startedAt||s(e.startedAt))&&(void 0===e.endedAt||null===e.endedAt||s(e.endedAt))}function i(e){return r(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function o(e){return r(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}n.d(t,{HG:()=>v,Kh:()=>y,Nn:()=>p,oc:()=>f});let u=e=>Number.isInteger(e)&&e>=0;function d(e){return r(e)&&s(e.id)&&s(e.title)&&(null===e.open||u(e.open))&&(null===e.landed||u(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)))}function c(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||r(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&u(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||u(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(t=>u(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(d))}async function m(e,t,n){try{let r=await e.fetchResponse(t,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let s=n(await r.json());return null===s?{kind:"error",status:r.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function p(e,t){return m(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>r(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(c)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,t){return m(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(i)?e:null)}function y(e,t,n){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(n),"/log"),e=>r(e)&&s(e.log)?{log:e.log}:null)}function v(e,t){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,n,a,i;if(!(r(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(o)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let u={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in u&&u[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:u.green,yellow:null!=(n=e.yellow)?n:u.yellow,red:null!=(a=e.red)?a:u.red,done:null!=(i=e.done)?i:u.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},27775:(e,t,n)=>{"use strict";n.d(t,{QK:()=>a,i6:()=>l,Pz:()=>o,Em:()=>i,Yy:()=>u});var r=n(13221);let s={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"},l="/v1/schedules?includeOff=1",a="/v1/dashboard/loops";async function i(e,t){var n,i,o,d,c,m,p,f;let[y,v]=await Promise.allSettled([e(l),e(a)]),h="fulfilled"===y.status?null==(n=y.value)?void 0:n.schedules:null,b="fulfilled"===v.status?null==(o=v.value)||null==(i=o.loops)?void 0:i.loops:null;if(!Array.isArray(h)&&!Array.isArray(b))throw Error("loop registries unavailable");if(!Array.isArray(h))throw Error("스케줄 레지스트리 조회 실패");if(!Array.isArray(b))throw Error("루프 레지스트리 조회 실패");let g=u(h,t).map(e=>({...e,id:"schedule:".concat(e.id)}));for(let e of b){let n=e.last?Date.parse(e.last.at):NaN,l=(0,r.u)({enabled:!1!==e.armed,lastRunAt:null!=(m=null==(d=e.last)?void 0:d.at)?m:null,lastStatus:null!=(p=null==(c=e.last)?void 0:c.status.toLowerCase())?p:null,intervalMs:null},t);g.push({id:"loop:".concat(e.name),name:e.label,layer:null!=(f=e.category)?f:"루프",owner:"미지정",mode:null===e.armed?"관측":e.armed?"armed":"off",lastRun:Number.isFinite(n)?e.last.at:null,verdict:"alive"===l?"판정 불가":s[l]})}return g}function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now,r=0,s=!0;return{async refresh(){let l=++r;try{let a=await i(e,n());s&&l===r&&t({rows:a,state:"ready"})}catch(e){s&&l===r&&t({rows:[],state:"error"})}},dispose(){s=!1}}}function u(e,t){return e.map(e=>{var n,l,a,i,o,u,d;let c=e.lastRun?Date.parse(e.lastRun.at):NaN,m=(0,r.u)({enabled:"off"!==e.state,lastRunAt:null!=(u=null==(n=e.lastRun)?void 0:n.at)?u:null,lastStatus:(null==(l=e.lastRun)?void 0:l.exit)!=null&&0!==e.lastRun.exit?"failed":(null==(a=e.lastRun)?void 0:a.status)==null||["ok","success","completed"].includes(e.lastRun.status.toLowerCase())?null!=(d=null==(o=e.lastRun)||null==(i=o.status)?void 0:i.toLowerCase())?d:null:"failed",intervalMs:e.cron?null:e.intervalMs,...e.cron?{scheduleState:e.state}:{}},t),p=!e.cron&&!(e.intervalMs&&e.intervalMs>0),f="alive"===m&&(!Number.isFinite(c)||p)?"판정 불가":s[m];return{id:e.id,name:e.name,layer:e.domain||e.category||e.source,owner:"미지정",mode:e.runVia||e.source,lastRun:Number.isFinite(c)?e.lastRun.at:null,verdict:f}})}},27813:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>a,f6:()=>s,oD:()=>l});let r="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function l(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let t=s();return localStorage.setItem(r,t),t}function a(){let e=s();return localStorage.setItem(r,e),e}},35390:(e,t,n)=>{"use strict";n.d(t,{D:()=>r,F:()=>s});let r="/loops?view=interact";function s(e){return(null==e?void 0:e.get("view"))==="interact"?"interact":"status"}},38519:(e,t,n)=>{"use strict";n.d(t,{C:()=>u,DaemonProvider:()=>d,Q:()=>c});var r=n(41121),s=n(91269),l=n(49536),a=n(27813),i=n(45012),o=n(51215);let u=(0,s.createContext)(null);function d(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[d,c]=(0,s.useState)(n),[m,p]=(0,s.useState)(""),[f]=(0,s.useState)(()=>new i.ki(n));(0,s.useEffect)(()=>{let e=(0,l.Fp)();c(e),f.updateConfig(e),p((0,a.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();f.updateConfig(t),c(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let y=e=>{c(t=>{let n={...t,...e};return(0,l.Qc)(e),f.updateConfig(n),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},v=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:d,setConfig:y,client:f,sessionId:m,setSessionId:v}),[d,f,m]);return(0,r.jsx)(u.Provider,{value:h,children:t})}function c(){let e=(0,s.useContext)(u);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},57117:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>j});var r=n(41121),s=n(45609),l=n.n(s),a=n(91269),i=n(38519),o=n(27775),u=n(35390),d=n(79474),c=n(25241);let m={release:void 0,loops:void 0,decisions:void 0,merged:void 0,risks:void 0,grid:void 0},p=e=>"string"==typeof e&&Number.isFinite(Date.parse(e)),f=e=>!!e&&"object"==typeof e&&!Array.isArray(e);function y(e){return null!==e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.name&&"string"==typeof e.source&&(null===e.category||"string"==typeof e.category)&&(null===e.domain||"string"==typeof e.domain)&&(null===e.runVia||"string"==typeof e.runVia)&&["live","firing","stale","off"].includes(e.state)&&(null===e.cron||"string"==typeof e.cron)&&(null===e.intervalMs||"number"==typeof e.intervalMs&&Number.isFinite(e.intervalMs))&&Array.isArray(e.next)&&e.next.every(e=>"string"==typeof e)&&(null===e.lastRun||"object"==typeof e.lastRun&&null!==e.lastRun&&"string"==typeof e.lastRun.at&&(null===e.lastRun.status||"string"==typeof e.lastRun.status)&&(null===e.lastRun.exit||"number"==typeof e.lastRun.exit))}async function v(e){try{var t;let n=await e.fetchResponse(o.i6);if(!n.ok)return null;let r=await n.json();if(null===r||"object"!=typeof r||!("schedules"in r))return null;let s=r.schedules;if(!Array.isArray(s)||!s.every(y))return null;let l=(0,o.Yy)(s,Date.now()),a={};for(let e of l)a[e.verdict]=(null!=(t=a[e.verdict])?t:0)+1;let i=l.flatMap((e,t)=>"실패"===e.verdict&&p(e.lastRun)?[{id:"loop:".concat(e.id),kind:"실패 루프",title:e.name,at:s[t].lastRun.at}]:[]);return{summary:a,risks:i}}catch(e){return null}}async function h(e){try{let t=await e.fetchResponse(o.QK);if(!t.ok)return null;let n=await t.json();if(!f(n)||!f(n.loops)||!Array.isArray(n.loops.loops))return null;let r=n.loops.loops;if(!r.every(e=>f(e)&&"string"==typeof e.name&&"string"==typeof e.label&&(null===e.last||f(e.last)&&p(e.last.at)&&"string"==typeof e.last.status)))return null;return r.flatMap(e=>e.last&&["error","failed","failure","abandoned"].includes(e.last.status.toLowerCase())?[{id:"loop:".concat(e.name),kind:"실패 루프",title:e.label,at:e.last.at}]:[])}catch(e){return null}}async function b(e,t){try{let n=await e.fetchResponse("/v1/harness/runs?finishedSince=".concat(t)),r=n.ok?await n.json():null,s=f(r)?r.landed:null;return f(r)&&(void 0===r.landedTruncated||!1===r.landedTruncated)&&null==r.landedError&&Array.isArray(s)&&s.every(e=>f(e)&&"number"==typeof e.number&&p(e.mergedAt))?new Set(s.filter(e=>Date.parse(e.mergedAt)>=t).map(e=>e.number)).size:null}catch(e){return null}}async function g(e,t){try{let n=await e.fetchResponse("/v1/harness/runs?finishedSince=".concat(t-6048e5)),r=n.ok?await n.json():null;if(!f(r))return null;let s=r.finished,l=r.entries;return"complete"===r.completeness&&Array.isArray(s)&&Array.isArray(l)&&f(r.finishedObservation)&&Number.isInteger(r.finishedObservation.skippedFiles)&&0===r.finishedObservation.skippedFiles&&s.every(e=>f(e)&&"string"==typeof e.runId&&"string"==typeof e.status&&p(e.endedAt))&&l.every(e=>f(e)&&"string"==typeof e.runId&&"string"==typeof e.status)?[...s.filter(e=>"human-stop"===e.status||"failed"===e.status||"parked"===e.status||"cancelled"===e.status&&"soft-stopped"===e.stage).map(e=>({id:"run:".concat(e.runId),kind:"멈춘 하니스 런",title:"string"==typeof e.objective&&e.objective?e.objective:e.runId,at:e.endedAt})),...l.filter(e=>"ended-unclosed"===e.status&&p(e.lastActivityTimestamp)&&!s.some(t=>t.runId===e.runId)).map(e=>({id:"run:".concat(e.runId),kind:"멈춘 하니스 런",title:"string"==typeof e.objective&&e.objective?e.objective:e.runId,at:e.lastActivityTimestamp}))]:null}catch(e){return null}}async function x(e,t){try{let n=await (0,d.q)(e);if(!Array.isArray(n)||!n.every(e=>f(e)&&"string"==typeof e.id))return null;return{count:n.length,risks:n.flatMap(e=>p(e.dueAt)&&Date.parse(e.dueAt)<t?[{id:"decision:".concat(e.id),kind:"기한 지난 결정",title:"string"==typeof e.title?e.title:e.id,at:e.dueAt}]:[])}}catch(e){return null}}async function w(e){try{let t=await e.fetchResponse("/v1/grid");if(!t.ok)return null;let n=await t.json();if(!f(n)||!f(n.hq)||!Array.isArray(n.members)||null!==n.poolReason&&"string"!=typeof n.poolReason)return null;let r=n.hq;if(null!==r.record&&(!f(r.record)||"string"!=typeof r.record.holder)||null!==r.ageSeconds&&("number"!=typeof r.ageSeconds||!Number.isFinite(r.ageSeconds))||null!==r.expired&&"boolean"!=typeof r.expired||null!==r.reason&&"string"!=typeof r.reason||!n.members.every(e=>f(e)&&"string"==typeof e.context&&"number"==typeof e.capacity&&Number.isFinite(e.capacity)&&(null===e.occupied||"number"==typeof e.occupied&&Number.isFinite(e.occupied))))return null;return n}catch(e){return null}}function k(e,t){return new Promise(n=>{let r=setTimeout(()=>n(t),15e3);e.then(e=>{clearTimeout(r),n(e)},()=>{clearTimeout(r),n(t)})})}function A(e){let{title:t,children:n}=e;return(0,r.jsxs)("section",{"aria-label":t,className:"min-w-0 rounded-xl border border-border bg-card p-3 sm:p-4",children:[(0,r.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:t}),(0,r.jsx)("div",{className:"mt-2 text-lg font-semibold leading-snug tabular-nums sm:text-xl",children:n})]})}function j(){var e,t;let{client:n}=(0,i.Q)(),[s,o]=(0,a.useState)(m);return(0,a.useEffect)(()=>{let e=!0;return o(m),!function(e,t){let n=Date.now(),r=function(e){let t=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(e);return Date.parse("".concat(t,"T00:00:00+09:00"))}(new Date(n)),s=k((0,c.Nn)(e),{kind:"error",status:0}),l=k(v(e),null),a=k(h(e),null),i=k(x(e,n),null),o=k(b(e,r),null),u=k(g(e,r),null),d=k(w(e),null);s.then(e=>{var n;return t({release:"ready"===e.kind?4!==(n=e.data).seats.length||n.seats.some(e=>null===e.checklist)?null:{green:n.seats.reduce((e,t)=>e+t.checklist.green,0),yellow:n.seats.reduce((e,t)=>e+t.checklist.yellow,0)}:null})}),l.then(e=>{var n;return t({loops:null!=(n=null==e?void 0:e.summary)?n:null})}),i.then(e=>{var n;return t({decisions:null!=(n=null==e?void 0:e.count)?n:null})}),o.then(e=>t({merged:e})),d.then(e=>t({grid:e})),Promise.all([l,a,i,u]).then(e=>{let[n,r,s,l]=e;t({risks:n&&r&&s&&l?[...new Map([...n.risks,...r,...s.risks,...l].sort((e,t)=>Date.parse(e.at)-Date.parse(t.at)).map(e=>[e.id,e])).values()].sort((e,t)=>Date.parse(t.at)-Date.parse(e.at)||e.id.localeCompare(t.id)).slice(0,5):null})})}(n,t=>{e&&o(e=>({...e,...t}))}),()=>{e=!1}},[n]),(0,r.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-3xl px-3 py-4 text-foreground sm:px-6",children:[(0,r.jsxs)("header",{className:"mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"운영 \xb7 오늘"}),(0,r.jsx)("h1",{className:"text-xl font-semibold",children:"대표 조망판"})]}),(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-4","aria-label":"대표 조망 카드",children:[(0,r.jsxs)(A,{title:"릴리스 판 진행",children:[void 0===s.release?"불러오는 중…":s.release?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("span",{className:"text-emerald-600",children:["green ",s.release.green]}),(0,r.jsxs)("span",{className:"block text-amber-600",children:["노랑 ",s.release.yellow]})]}):"못 읽음",(0,r.jsx)(l(),{href:"/ops/release",className:"mt-1 block rounded text-xs font-medium text-primary underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"발행 현황 보기 — 운영 › 릴리스",children:"발행 현황 보기 →"})]}),(0,r.jsxs)(A,{title:"루프 판정",children:[void 0===s.loops?"불러오는 중…":null===s.loops?"못 읽음":0===Object.keys(s.loops).length?"등록 0":(0,r.jsx)("div",{className:"flex flex-wrap gap-1 text-xs font-medium",children:Object.entries(s.loops).map(e=>{let[t,n]=e;return(0,r.jsxs)("span",{className:"rounded-full bg-muted px-2 py-1",children:[t," ",n]},t)})}),(0,r.jsx)(l(),{href:u.D,className:"mt-1 block rounded text-xs font-medium text-primary underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"루프 상호작용 보기 — 운영 › 루프 상호작용",children:"루프 상호작용 보기 →"})]}),(0,r.jsx)(A,{title:"결정 대기 카드",children:(0,r.jsx)(l(),{href:"/decisions",className:"rounded underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"결정 대기 카드 보기",children:void 0===s.decisions?"불러오는 중…":null!=(e=s.decisions)?e:"못 읽음"})}),(0,r.jsx)(A,{title:"오늘 병합 PR",children:void 0===s.merged?"불러오는 중…":null!=(t=s.merged)?t:"못 읽음"})]}),(0,r.jsxs)("div",{className:"mt-2 grid min-w-0 grid-cols-2 gap-2 sm:mt-4 sm:gap-4","aria-label":"위험과 그리드 카드",children:[(0,r.jsxs)("section",{"aria-label":"위험\xb7막힘 톱 5",className:"min-w-0 rounded-xl border border-border bg-card p-2 sm:p-4",children:[(0,r.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:"위험\xb7막힘 톱 5"}),void 0===s.risks?(0,r.jsx)("p",{className:"mt-2 text-sm",children:"불러오는 중…"}):null===s.risks?(0,r.jsx)("p",{className:"mt-2 text-sm",children:"못 읽음"}):0===s.risks.length?(0,r.jsx)("p",{className:"mt-2 text-sm",children:"해당 없음"}):(0,r.jsx)("ol",{className:"mt-2 space-y-1 text-xs",children:s.risks.map(e=>(0,r.jsxs)("li",{className:"min-w-0 border-b border-border pb-1 last:border-0",children:[(0,r.jsxs)("span",{className:"block text-muted-foreground",children:[e.kind," \xb7 ",(0,r.jsx)("time",{dateTime:e.at,children:e.at.slice(0,16).replace("T"," ")})]}),(0,r.jsx)("span",{className:"block truncate",title:e.title,children:e.title})]},e.id))})]}),(0,r.jsxs)("section",{"aria-label":"그리드",className:"min-w-0 rounded-xl border border-border bg-card p-2 sm:p-4",children:[(0,r.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:"그리드"}),void 0===s.grid?(0,r.jsx)("p",{className:"mt-2 text-sm",children:"불러오는 중…"}):null===s.grid?(0,r.jsx)("p",{className:"mt-2 text-sm",children:"못 읽음"}):(0,r.jsxs)("div",{className:"mt-2 space-y-2 text-xs",children:[(0,r.jsxs)("p",{className:"min-w-0 break-words",children:["본부 \xb7 ",s.grid.hq.reason?"본부 못 읽음":s.grid.hq.record?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{title:s.grid.hq.record.holder,children:s.grid.hq.record.holder}),null!==s.grid.hq.ageSeconds&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",Math.floor(s.grid.hq.ageSeconds/60),"분 전"]}),s.grid.hq.expired&&(0,r.jsx)("span",{className:"ml-1 font-semibold text-red-600",children:"만료"})]}):"임대 없음"]}),s.grid.poolReason&&(0,r.jsxs)("p",{className:"break-words text-amber-700",title:s.grid.poolReason,children:["풀 못 읽음 \xb7 ",s.grid.poolReason.slice(0,40)]}),(0,r.jsx)("ul",{className:"space-y-1",children:s.grid.members.map(e=>{var t;return(0,r.jsxs)("li",{className:"min-w-0",children:[(0,r.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-1",children:[(0,r.jsx)("span",{className:"min-w-0 truncate",title:e.context,children:e.context}),(0,r.jsx)("span",{className:"shrink-0 tabular-nums",children:null===e.occupied?"측정 불가":"".concat(e.occupied,"/").concat(e.capacity)})]}),(0,r.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",role:"meter","aria-label":"".concat(e.context," 칸 사용"),"aria-valuemin":0,"aria-valuemax":Math.max(e.capacity,null!=(t=e.occupied)?t:0,1),...null===e.occupied?{}:{"aria-valuenow":e.occupied},children:null!==e.occupied&&(0,r.jsx)("div",{className:"h-full rounded-full bg-emerald-600",style:{width:"".concat(e.capacity>0?Math.min(100,Math.max(0,e.occupied/e.capacity*100)):0,"%")}})})]},e.context)})}),(0,r.jsxs)("p",{className:"font-medium tabular-nums",children:["칸 사용 ",s.grid.poolReason||s.grid.members.some(e=>null===e.occupied)?"측정 불가":s.grid.members.reduce((e,t)=>e+t.occupied,0),"/",s.grid.members.reduce((e,t)=>e+t.capacity,0)]})]})]})]})]})}},79474:(e,t,n)=>{"use strict";async function r(e){let t=await e.fetchResponse("/v1/decisions?status=open");if(!t.ok)throw Error("decisions list failed: ".concat(t.status));return(await t.json()).decisions}async function s(e,t,n,r){let s=await e.fetchResponse("/v1/decisions/".concat(encodeURIComponent(t),"/decide"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({choice:n,...void 0===r?{}:{note:r}})});if(!s.ok)throw Error("decision failed: ".concat(s.status));return s.json()}n.d(t,{L:()=>s,q:()=>r})},81752:(e,t,n)=>{Promise.resolve().then(n.bind(n,57117))}},e=>{e.O(0,[7990,5012,2367,6725,7358],()=>e(e.s=81752)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8457],{4956:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])},24721:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]])},28353:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]])},31014:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},59062:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var i=r(41121);r(91269);var l=r(94114),a=r(82157);function n(e){let{className:t,type:r,...n}=e;return(0,i.jsx)(l.p,{type:r,"data-slot":"input",className:(0,a.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...n})}},67089:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},71079:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("hand",[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]])},85576:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(89117).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},89117:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var i=r(91269);let l=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let s=(0,i.createContext)({}),d=(0,i.forwardRef)((e,t)=>{var r,a,d;let{color:c,size:u,strokeWidth:o,absoluteStrokeWidth:h,className:p="",children:y,iconNode:k,...f}=e,{size:v=24,strokeWidth:g=2,absoluteStrokeWidth:b=!1,color:m="currentColor",className:x=""}=null!=(r=(0,i.useContext)(s))?r:{},w=(null!=h?h:b)?24*Number(null!=o?o:g)/Number(null!=u?u:v):null!=o?o:g;return(0,i.createElement)("svg",{ref:t,...n,width:null!=(a=null!=u?u:v)?a:n.width,height:null!=(d=null!=u?u:v)?d:n.height,stroke:null!=c?c:m,strokeWidth:w,className:l("lucide",x,p),...!y&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...k.map(e=>{let[t,r]=e;return(0,i.createElement)(t,r)}),...Array.isArray(y)?y:[y]])}),c=(e,t)=>{let r=(0,i.forwardRef)((r,n)=>{let{className:s,...c}=r;return(0,i.createElement)(d,{ref:n,iconNode:t,className:l("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...c})});return r.displayName=a(e),r}},98119:(e,t,r)=>{Promise.resolve().then(r.bind(r,62336))}},e=>{e.O(0,[2977,216,7990,6062,4114,2330,976,5012,8067,3441,3689,3822,649,2336,2367,6725,7358],()=>e(e.s=98119)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3933],{27813:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>n,oD:()=>r});let a="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function r(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=n();return localStorage.setItem(a,t),t}function l(){let e=n();return localStorage.setItem(a,e),e}},38519:(e,t,s)=>{"use strict";s.d(t,{C:()=>i,DaemonProvider:()=>d,Q:()=>m});var a=s(41121),n=s(91269),r=s(49536),l=s(27813),o=s(45012),c=s(51215);let i=(0,n.createContext)(null);function d(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[d,m]=(0,n.useState)(s),[u,p]=(0,n.useState)(""),[x]=(0,n.useState)(()=>new o.ki(s));(0,n.useEffect)(()=>{let e=(0,r.Fp)();m(e),x.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,r.Fp)();x.updateConfig(t),m(t),(0,c.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let f=e=>{m(t=>{let s={...t,...e};return(0,r.Qc)(e),x.updateConfig(s),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,n.useMemo)(()=>({config:d,setConfig:f,client:x,sessionId:u,setSessionId:h}),[d,x,u]);return(0,a.jsx)(i.Provider,{value:g,children:t})}function m(){let e=(0,n.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},84543:(e,t,s)=>{Promise.resolve().then(s.bind(s,85944))},85944:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>c});var a=s(41121),n=s(91269),r=s(38519);let l="user@elanvital.ai",o={name:"이름",org:"회사명",kind:"회사/개인",interest:"관심 분야",contact:"연락처",consent:"동의"};function c(){let{client:e}=(0,r.Q)(),[t,s]=(0,n.useState)(""),[c,i]=(0,n.useState)(""),[d,m]=(0,n.useState)("personal"),[u,p]=(0,n.useState)("A"),[x,f]=(0,n.useState)(""),[h,g]=(0,n.useState)(!1),[b,y]=(0,n.useState)(!1),[j,v]=(0,n.useState)(""),[k,N]=(0,n.useState)(!1);async function w(s){if(s.preventDefault(),!h||b)return;let a={name:t.trim(),..."company"===d?{org:c.trim()}:{},kind:d,interest:u,contact:x.trim(),consent:!0},n=a.name?"company"!==d||a.org?a.contact?null:"contact":"org":"name";if(n){N(!0),v("".concat(o[n]," 항목을 입력해 주세요."));return}y(!0),v("");try{let t=await e.submitConsultRequest(a);if("receiptId"in t)N(!1),v("접수했습니다 \xb7 ".concat(t.receiptId," — 곧 연락드리겠습니다"));else{var r;N(!0),v("".concat(null!=(r=o[t.field])?r:"필수"," 항목을 확인해 주세요."))}}catch(e){N(!0),v("접수하지 못했습니다. 연결 상태를 확인하고 다시 보내 주세요.")}finally{y(!1)}}return(0,a.jsxs)("main",{className:"mx-auto w-full max-w-xl px-5 py-10 sm:py-16",children:[(0,a.jsxs)("header",{className:"mb-8",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium text-primary",children:"AX \xb7 상담 문의"}),(0,a.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"어떤 도움이 필요하신가요?"}),(0,a.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"도입 상담이나 교육 과정에 대해 남겨 주세요. 확인 후 연락드리겠습니다."}),(0,a.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["메일로 바로 문의: ",(0,a.jsx)("a",{className:"underline",href:"mailto:".concat(l),children:l})]})]}),(0,a.jsxs)("form",{onSubmit:w,noValidate:!0,className:"space-y-6 rounded-xl border border-border bg-card p-5 sm:p-8",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-name",className:"block text-sm font-medium",children:"이름"}),(0,a.jsx)("input",{id:"consult-name",name:"name",required:!0,autoComplete:"name",value:t,onChange:e=>s(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("fieldset",{className:"space-y-2",children:[(0,a.jsx)("legend",{className:"text-sm font-medium",children:"회사/개인"}),(0,a.jsxs)("div",{className:"flex gap-5 text-sm",children:[(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"kind",value:"company",checked:"company"===d,onChange:()=>m("company")}),"회사"]}),(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"kind",value:"personal",checked:"personal"===d,onChange:()=>m("personal")}),"개인"]})]})]}),"company"===d&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-org",className:"block text-sm font-medium",children:"회사명"}),(0,a.jsx)("input",{id:"consult-org",name:"org",required:!0,autoComplete:"organization",value:c,onChange:e=>i(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("fieldset",{className:"space-y-2",children:[(0,a.jsx)("legend",{className:"text-sm font-medium",children:"관심 분야"}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 text-sm",children:[(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"interest",value:"A",checked:"A"===u,onChange:()=>p("A")}),"A \xb7 AX 도입 상담"]}),(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"interest",value:"B",checked:"B"===u,onChange:()=>p("B")}),"B \xb7 과정\xb7교육 문의"]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-contact",className:"block text-sm font-medium",children:"연락처 (메일 또는 전화)"}),(0,a.jsx)("input",{id:"consult-contact",name:"contact",required:!0,value:x,onChange:e=>f(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("label",{className:"flex items-start gap-3 text-sm leading-6",children:[(0,a.jsx)("input",{type:"checkbox",name:"consent",checked:h,onChange:e=>g(e.target.checked),className:"mt-1"}),(0,a.jsx)("span",{children:"입력한 정보는 상담 연락을 위해 서버로 전송하며, 상담 연락에만 사용합니다"})]}),j&&(0,a.jsx)("p",{role:k?"alert":"status",className:k?"text-sm text-destructive":"text-sm text-primary",children:j}),(0,a.jsx)("button",{type:"submit",disabled:!h||b,className:"w-full rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground disabled:cursor-not-allowed disabled:opacity-50",children:b?"보내는 중…":"보내기"})]})]})}}},e=>{e.O(0,[5012,2367,6725,7358],()=>e(e.s=84543)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2580],{7509:(e,t,r)=>{"use strict";r.d(t,{U:()=>m});var a=r(41121),n=r(91269),s=r(38519),o=r(72030),i=r(59062);function l(e){let{items:t}=e;return 0===t.length?(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,a.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,s,o,i;let l=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(s=e.scope)?void 0:s.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,a.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,a.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(o=e.source)?o:"unknown"," \xb7 ",l]}),(0,a.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class c{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,a]=e;a&&t.set(r,a)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(66062),p=r(51215);function m(){var e,t,r,m;let{client:g}=(0,s.Q)(),x=(0,n.useMemo)(()=>new c(g),[g]),[v,f]=(0,n.useState)({items:[]}),[b,h]=(0,n.useState)(!1),[y,w]=(0,n.useState)(""),[k,j]=(0,n.useState)(""),[N,S]=(0,n.useState)(""),[C,z]=(0,n.useState)(""),[I,E]=(0,n.useState)(""),[U,D]=(0,n.useState)(""),[_,O]=(0,n.useState)("normal"),[P,J]=(0,n.useState)("operator"),[R,Y]=(0,n.useState)(""),[M,V]=(0,n.useState)(""),[$,F]=(0,n.useState)(""),[L,Q]=(0,n.useState)(""),[T,q]=(0,n.useState)(!1),A=(0,n.useCallback)(async()=>{(0,p.cY)("webterm.control.list.refresh",{kind:y,surface:k,minUrgency:N,sessionId:C,limit:I}),h(!0);try{let e=await x.list({kind:y||void 0,surface:k||void 0,minUrgency:N||void 0,sessionId:C||void 0,limit:I||void 0});f(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{h(!1)}},[x,y,k,N,C,I]);(0,n.useEffect)(()=>{A()},[A]);let B=async e=>{if(e.preventDefault(),!U.trim())return void u.oR.error("kind required");let t={};if(L.trim())try{t=JSON.parse(L)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:U.trim(),urgency:_,source:P.trim()||"operator",mayPreempt:T,payload:t,scope:{...R?{surface:R}:{},...M?{channel:M}:{},...$?{sessionId:$}:{}}};(0,p.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{h(!0),await x.emit(r),u.oR.success("signal emitted"),Q(""),await A()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{h(!1)}},K=null!=(e=v.countsByKind)?e:{};return(0,a.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=v.total)?t:0]}),(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=v.latest)?r:"-"]}),Object.entries(K).map(e=>{let[t,r]=e;return(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),A()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)(i.p,{value:y,onChange:e=>w(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:k,onChange:e=>j(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,a.jsxs)("select",{value:N,onChange:e=>S(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,a.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsx)(i.p,{value:C,onChange:e=>z(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:I,onChange:e=>E(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,a.jsx)(o.$,{type:"submit",size:"sm",disabled:b,children:"Filter"})]}),(0,a.jsxs)("form",{onSubmit:B,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(i.p,{value:U,onChange:e=>D(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,a.jsx)("select",{value:_,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&O(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))}),(0,a.jsx)(i.p,{value:P,onChange:e=>J(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:R,onChange:e=>Y(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:M,onChange:e=>V(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:$,onChange:e=>F(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:T,onChange:e=>q(e.target.checked)}),"mayPreempt"]})]}),(0,a.jsx)("textarea",{value:L,onChange:e=>Q(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,a.jsx)(o.$,{type:"submit",size:"sm",disabled:b,children:"Emit"})]}),(0,a.jsx)(l,{items:null!=(m=v.items)?m:[]})]})}},27813:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o,f6:()=>n,oD:()=>s});let a="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=n();return localStorage.setItem(a,t),t}function o(){let e=n();return localStorage.setItem(a,e),e}},38519:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var a=r(41121),n=r(91269),s=r(49536),o=r(27813),i=r(45012),l=r(51215);let d=(0,n.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,n.useState)(r),[p,m]=(0,n.useState)(""),[g]=(0,n.useState)(()=>new i.ki(r));(0,n.useEffect)(()=>{let e=(0,s.Fp)();u(e),g.updateConfig(e),m((0,o.oD)()),(0,l.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[g]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();g.updateConfig(t),u(t),(0,l.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&m(t=>t===e.newValue?t:((0,l.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g]);let x=e=>{u(t=>{let r={...t,...e};return(0,s.Qc)(e),g.updateConfig(r),(0,l.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},v=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,l.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,n.useMemo)(()=>({config:c,setConfig:x,client:g,sessionId:p,setSessionId:v}),[c,g,p]);return(0,a.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,n.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},58956:(e,t,r)=>{Promise.resolve().then(r.bind(r,72361))},59062:(e,t,r)=>{"use strict";r.d(t,{p:()=>o});var a=r(41121);r(91269);var n=r(94114),s=r(82157);function o(e){let{className:t,type:r,...o}=e;return(0,a.jsx)(n.p,{type:r,"data-slot":"input",className:(0,s.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...o})}},72030:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var a=r(41121),n=r(72524),s=r(49155),o=r(82157);let i=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:t,variant:r="default",size:s="default",...l}=e;return(0,a.jsx)(n.$,{"data-slot":"button",className:(0,o.cn)(i({variant:r,size:s,className:t})),...l})}},72361:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var a=r(41121),n=r(7509);function s(){return(0,a.jsx)(n.U,{})}},82157:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var a=r(3511),n=r(97043);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,n.QP)((0,a.$)(t))}}},e=>{e.O(0,[2977,216,6062,4114,5012,2367,6725,7358],()=>e(e.s=58956)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1422],{27813:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>a,f6:()=>r,oD:()=>l});let s="elanous.daemon.sessionId";function r(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function l(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(s,e),e):localStorage.getItem(s)}();if(e)return e;let t=r();return localStorage.setItem(s,t),t}function a(){let e=r();return localStorage.setItem(s,e),e}},38519:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var s=n(41121),r=n(91269),l=n(49536),a=n(27813),i=n(45012),o=n(51215);let d=(0,r.createContext)(null);function c(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[c,u]=(0,r.useState)(n),[m,p]=(0,r.useState)(""),[x]=(0,r.useState)(()=>new i.ki(n));(0,r.useEffect)(()=>{let e=(0,l.Fp)();u(e),x.updateConfig(e),p((0,a.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,r.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();x.updateConfig(t),u(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let h=e=>{u(t=>{let n={...t,...e};return(0,l.Qc)(e),x.updateConfig(n),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},f=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,r.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:f}),[c,x,m]);return(0,s.jsx)(d.Provider,{value:b,children:t})}function u(){let e=(0,r.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},42932:(e,t,n)=>{Promise.resolve().then(n.bind(n,83005))},79474:(e,t,n)=>{"use strict";async function s(e){let t=await e.fetchResponse("/v1/decisions?status=open");if(!t.ok)throw Error("decisions list failed: ".concat(t.status));return(await t.json()).decisions}async function r(e,t,n,s){let r=await e.fetchResponse("/v1/decisions/".concat(encodeURIComponent(t),"/decide"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({choice:n,...void 0===s?{}:{note:s}})});if(!r.ok)throw Error("decision failed: ".concat(r.status));return r.json()}n.d(t,{L:()=>r,q:()=>s})},83005:(e,t,n)=>{"use strict";n.d(t,{DecisionBoard:()=>d});var s=n(41121),r=n(91269),l=n(38519),a=n(79474);let i=e=>new Intl.DateTimeFormat("ko-KR",{timeZone:"Asia/Seoul",year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(e)),o=e=>(null==e?void 0:e.trim())||"(비움)";function d(){let{client:e}=(0,l.Q)(),[t,n]=(0,r.useState)({items:[],error:null,loading:!0}),[d,c]=(0,r.useState)({}),[u,m]=(0,r.useState)(null),[p,x]=(0,r.useState)(null),[h,f]=(0,r.useState)({}),[b,g]=(0,r.useState)({}),j=(0,r.useRef)(null),v=(0,r.useRef)(0),y=(0,r.useRef)(e);y.current=e,(0,r.useEffect)(()=>{let t=!0;j.current=null;let s=++v.current;return n({items:[],error:null,loading:!0}),c({}),m(null),x(null),f({}),g({}),(0,a.q)(e).then(e=>{t&&v.current===s&&n({items:[...e].sort((e,t)=>{var n,s;return(e.dueAt?Date.parse(e.dueAt):1/0)-(t.dueAt?Date.parse(t.dueAt):1/0)||(null!=(n=e.raisedAt)?n:"").localeCompare(null!=(s=t.raisedAt)?s:"")||e.id.localeCompare(t.id)}),error:null,loading:!1})}).catch(e=>{t&&v.current===s&&n({items:[],error:e instanceof Error?e.message:String(e),loading:!1})}),()=>{t=!1,++v.current}},[e]);let w=async function(t,n){let s=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(j.current||h[t.id])return;if(t.irreversible&&(!s||(null==u?void 0:u.id)!==t.id||u.key!==n))return void m({id:t.id,key:n});let r=v.current;j.current=t.id,x(t.id),m(null),g(e=>({...e,[t.id]:""}));try{var l,i,o;let s=await (0,a.L)(e,t.id,n,(null!=(i=d[t.id])?i:"").replace(/\s+/g," ").trim().slice(0,300)||void 0);if(y.current!==e||v.current!==r)return;let c=null!=(o=null==(l=t.options.find(e=>e.id===n))?void 0:l.label)?o:n;f(e=>({...e,[t.id]:{label:c,at:s.decidedAt}}))}catch(s){if(y.current!==e||v.current!==r)return;let n=s instanceof Error?s.message:String(s);g(e=>({...e,[t.id]:n.includes("decision failed: 409")?"이미 결정됨":n.includes("decision failed: 404")?"사라진 결정":"결정 실패 \xb7 ".concat(n)}))}finally{y.current===e&&v.current===r&&(j.current=null,x(null))}};return(0,s.jsxs)("main",{className:"mx-auto w-full max-w-3xl px-3 py-5 text-foreground sm:px-6",children:[(0,s.jsxs)("header",{className:"mb-5",children:[(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"운영 \xb7 결정"}),(0,s.jsx)("h1",{className:"text-xl font-semibold",children:"결정 대기 카드"})]}),t.loading?(0,s.jsx)("p",{role:"status",children:"읽는 중"}):t.error?(0,s.jsxs)("p",{role:"alert",children:["못 읽음 \xb7 ",t.error]}):0===t.items.length?(0,s.jsx)("p",{children:"열린 결정이 없습니다."}):(0,s.jsx)("ol",{className:"space-y-4",children:t.items.map(e=>{var t,n,r,l,a,x,f,g,j,v;let y=h[e.id],k=(null==u?void 0:u.id)===e.id?e.options.find(e=>e.id===u.key):void 0,N=e.recommendation;return(0,s.jsx)("li",{className:"min-w-0 rounded-xl border border-border bg-card p-4",children:y?(0,s.jsxs)("details",{children:[(0,s.jsxs)("summary",{className:"cursor-pointer font-medium",children:["결정됨: ",y.label," \xb7 ",y.at?"".concat(i(y.at)," KST"):"시각 미상"]}),(0,s.jsx)("p",{className:"mt-2 text-sm",children:e.title})]}):(0,s.jsxs)("article",{"aria-label":e.title,className:"space-y-3 break-words",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:e.title}),(0,s.jsxs)("p",{className:"text-sm text-muted-foreground",children:["올린 자리: ",null!=(x=null==(t=e.raisedBy)?void 0:t.agent)?x:"(비움)",(null==(n=e.raisedBy)?void 0:n.track)?"(".concat(e.raisedBy.track,")"):""]}),e.category&&(0,s.jsxs)("p",{className:"text-sm text-muted-foreground",children:["분류: ",e.category]}),e.irreversible&&(0,s.jsx)("p",{className:"font-medium text-amber-700",children:"⚠️ 되돌릴 수 없음"})]}),(0,s.jsx)("dl",{className:"space-y-1 text-sm",children:["s","c","q","a"].map(t=>{var n,r;return(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsxs)("dt",{className:"font-semibold",children:[t.toUpperCase(),":"]}),(0,s.jsx)("dd",{className:"min-w-0 whitespace-pre-wrap",children:o(null!=(r=null==(n=e.scqa)?void 0:n[t])?r:"s"===t?e.situation:void 0)})]},t)})}),(0,s.jsx)("p",{className:"text-sm font-medium",children:"skipped"in N?"권고 없음: ".concat(N.reason):"권고: ".concat(null!=(f=null==(r=e.options.find(e=>e.id===N.option))?void 0:r.label)?f:N.option," — ").concat(N.why)}),e.alternative&&(0,s.jsxs)("p",{className:"text-sm",children:["대안: ",null!=(g=null==(l=e.options.find(t=>t.id===e.alternative))?void 0:l.label)?g:e.alternative]}),(0,s.jsx)("ul",{className:"space-y-2",children:e.options.map(t=>(0,s.jsxs)("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border p-2 text-sm",children:[(0,s.jsxs)("span",{children:[t.id.toUpperCase(),") ",t.label," — ",o(t.consequence)]}),(0,s.jsxs)("button",{type:"button",disabled:null!==p,onClick:()=>{w(e,t.id)},className:"rounded-md border border-border px-3 py-1 font-medium hover:bg-muted disabled:opacity-50",children:[t.label," 선택"]})]},t.id))}),(0,s.jsx)("p",{className:"text-sm",children:(null==(a=e.crossCheck)?void 0:a.length)?"교차 확인: ".concat(e.crossCheck.map(e=>"".concat(e.seat," ✓ ").concat(e.note).concat(e.at?" \xb7 ".concat(i(e.at)," KST"):"")).join(" \xb7 ")):"교차 확인 없음(".concat(null!=(j=e.crossCheckSkipped)?j:"미기재",")")}),e.dissent&&(0,s.jsxs)("p",{className:"text-sm",children:["이견: ",e.dissent]}),e.dueAt&&(0,s.jsxs)("p",{className:"text-sm",children:["기한: ",(0,s.jsxs)("time",{dateTime:e.dueAt,children:[i(e.dueAt)," KST"]})]}),e.pendingQuestion&&(0,s.jsxs)("details",{className:"text-sm",children:[(0,s.jsx)("summary",{className:"cursor-pointer",children:"대기 질문 전문"}),(0,s.jsx)("p",{className:"mt-2 whitespace-pre-wrap",children:e.pendingQuestion})]}),(0,s.jsxs)("label",{className:"block text-sm",children:["한 줄 의견 (최대 300자)",(0,s.jsx)("input",{type:"text",maxLength:300,value:null!=(v=d[e.id])?v:"",onChange:t=>c(n=>({...n,[e.id]:t.target.value.slice(0,300)})),className:"mt-1 block w-full rounded-md border border-border bg-background px-3 py-2"})]}),k&&(0,s.jsxs)("div",{role:"alert",className:"rounded-md border border-amber-600 p-2 text-sm",children:[(0,s.jsxs)("p",{children:["되돌릴 수 없습니다 — 이것으로 정할까요? (",k.label,")"]}),(0,s.jsx)("button",{type:"button",disabled:null!==p,onClick:()=>{w(e,k.id,!0)},className:"mr-3 underline",children:"예, 결정"}),(0,s.jsx)("button",{type:"button",onClick:()=>m(null),className:"underline",children:"취소"})]}),p===e.id&&(0,s.jsx)("p",{role:"status",children:"기록 중"}),b[e.id]&&(0,s.jsx)("p",{role:"alert",children:b[e.id]})]})},e.id)})})]})}}},e=>{e.O(0,[5012,2367,6725,7358],()=>e(e.s=42932)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6348],{6015:(e,t,s)=>{"use strict";s.d(t,{n:()=>d});var n=s(91269),r=s(95817),i=s(83026),a=s(37963),l=s(98883),o=class extends a.Q{#e;#t=void 0;#s;#n;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#r()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,l.f8)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#s,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,l.EN)(t.mutationKey)!==(0,l.EN)(this.options.mutationKey)?this.reset():this.#s?.state.status==="pending"&&this.#s.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#s?.removeObserver(this)}onMutationUpdate(e){this.#r(),this.#i(e)}getCurrentResult(){return this.#t}reset(){this.#s?.removeObserver(this),this.#s=void 0,this.#r(),this.#i()}mutate(e,t){return this.#n=t,this.#s?.removeObserver(this),this.#s=this.#e.getMutationCache().build(this.#e,this.options),this.#s.addObserver(this),this.#s.execute(e)}#r(){let e=this.#s?.state??(0,r.$)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#i(e){i.jG.batch(()=>{if(this.#n&&this.hasListeners()){let t=this.#t.variables,s=this.#t.context,n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#n.onSuccess?.(e.data,t,s,n)}catch(e){Promise.reject(e)}try{this.#n.onSettled?.(e.data,null,t,s,n)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#n.onError?.(e.error,t,s,n)}catch(e){Promise.reject(e)}try{this.#n.onSettled?.(void 0,e.error,t,s,n)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},c=s(24818);function d(e,t){let s=(0,c.jE)(t),[r]=n.useState(()=>new o(s,e));n.useEffect(()=>{r.setOptions(e)},[r,e]);let a=n.useSyncExternalStore(n.useCallback(e=>r.subscribe(i.jG.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),d=n.useCallback((e,t)=>{r.mutate(e,t).catch(l.lQ)},[r]);if(a.error&&(0,l.GU)(r.options.throwOnError,[a.error]))throw a.error;return{...a,mutate:d,mutateAsync:a.mutate}}},11635:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(89117).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},42310:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(89117).A)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]])},51215:(e,t,s)=>{"use strict";let n;s.d(t,{cY:()=>d,x8:()=>l});let r={debug:0,info:1,warn:2,error:3},i="/v1/debug-logs/batch",a=null;function l(e){a=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(r[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<r[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,s=JSON.stringify({records:e});try{var n,r;t=await (n=this.fetchFn(s),r=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(r,"ms"))),r);n.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&a)try{await a(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let i=this.lastOkAt;this.lastOkAt=Date.now();let l=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:i},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(i,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",s=1e4,n=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=n,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(i,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function d(e,t){if("undefined"==typeof console)return;let s=new Date().toISOString();if(void 0!==t){let n="";try{let e=new WeakSet;n=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){n="[unserializable: ".concat(String(e),"]")}n&&n.length>800&&(n=n.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(n),t),u(s,e,n)}else console.debug("[".concat(s,"] ").concat(e)),u(s,e,void 0)}function u(e,t,s){let r,i=function(){if(void 0!==n)return n;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return n=null,null;let t=new o(c,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return n=t,t}();if(!i)return;let a=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{r=JSON.parse(s)}catch(e){r=s}i.push({ts:e,category:t,event:a,...void 0!==r?{data:r}:{},source:{platform:"pwa"}})}},56788:(e,t,s)=>{Promise.resolve().then(s.bind(s,82301))},67842:(e,t,s)=>{"use strict";s.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()},82301:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var n=s(41121),r=s(93981),i=s(11635);let a=(0,s(89117).A)("circle-dashed",[["path",{d:"M10.1 2.182a10 10 0 0 1 3.8 0",key:"5ilxe3"}],["path",{d:"M13.9 21.818a10 10 0 0 1-3.8 0",key:"11zvb9"}],["path",{d:"M17.609 3.721a10 10 0 0 1 2.69 2.7",key:"1iw5b2"}],["path",{d:"M2.182 13.9a10 10 0 0 1 0-3.8",key:"c0bmvh"}],["path",{d:"M20.279 17.609a10 10 0 0 1-2.7 2.69",key:"1ruxm7"}],["path",{d:"M21.818 10.1a10 10 0 0 1 0 3.8",key:"qkgqxc"}],["path",{d:"M3.721 6.391a10 10 0 0 1 2.7-2.69",key:"1mcia2"}],["path",{d:"M6.391 20.279a10 10 0 0 1-2.69-2.7",key:"1fvljs"}]]);var l=s(42310),o=s(99608),c=s(91269),d=s(91514),u=s(42012),h=s(24818),m=s(6015),p=s(67842),g=s(42375);function f(e){let{available:t,declared:s,onPick:r,pendingId:i,previews:a,onPreview:l}=e,{systems:o,themes:c}=function(e){let t=[],s=[];for(let n of e)("design-system"===n.source?t:s).push(n);return{systems:t,themes:s}}(t);return(0,n.jsxs)("div",{className:"space-y-4",children:[o.length>0&&(0,n.jsx)(x,{title:"Design systems",hint:"Web \xb7 copies tokens.css and DESIGN.md into design/system/",items:o,declared:s,onPick:r,pendingId:i,previews:a,onPreview:l}),c.length>0&&(0,n.jsx)(x,{title:"Terminal themes",hint:"One line in DESIGN.md",items:c,declared:s,onPick:r,pendingId:i,previews:a,onPreview:l})]})}function x(e){let{title:t,hint:s,items:r,declared:i,onPick:a,pendingId:l,previews:o,onPreview:c}=e;return(0,n.jsxs)("section",{className:"space-y-2","aria-label":t,children:[(0,n.jsxs)("h3",{className:"flex items-baseline gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[t,(0,n.jsxs)("span",{className:"normal-case tracking-normal",children:[r.length," \xb7 ",s]})]}),(0,n.jsx)("ul",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-3",children:r.map(e=>(0,n.jsx)(b,{direction:e,chosen:e.id===i,onPick:a,pending:l===e.id,busy:null!==l,hasPreview:(null==o?void 0:o.has(e.id))===!0&&void 0!==c,onPreview:c},e.id))})]})}function b(e){var t,s,r,a,l,o,c,d,u;let{direction:h,chosen:m,onPick:p,pending:g,busy:f,hasPreview:x,onPreview:b}=e,y=null!=(r=h.swatch.bg)?r:h.isDark?"#111111":"#ffffff",v=null!=(a=h.swatch.fg)?a:h.swatch.text,w=null!=(o=null!=(l=null==(t=h.typography)?void 0:t.display)?l:null==(s=h.typography)?void 0:s.body)?o:null;return(0,n.jsxs)("li",{"data-direction":h.id,"data-direction-id":h.id,className:"flex flex-col gap-2 rounded-md border p-3 text-sm ".concat(m?"border-primary ring-1 ring-primary":""),children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5","aria-hidden":!0,children:[[y,v,h.swatch.accent].map((e,t)=>(0,n.jsx)("span",{className:"h-5 w-5 rounded-full border",style:{backgroundColor:e,borderColor:h.swatch.muted}},t)),h.category&&(0,n.jsx)("span",{className:"ml-auto truncate text-[11px] text-muted-foreground",children:h.category})]}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("p",{className:"truncate font-medium",children:null!=(c=h.label)?c:h.id}),(0,n.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[(0,n.jsx)("code",{children:h.id}),w?" \xb7 ".concat(w):""]}),(0,n.jsx)("p",{className:"mt-1 line-clamp-2 text-xs text-muted-foreground",children:h.mood})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[x&&(0,n.jsx)("button",{type:"button",onClick:()=>null==b?void 0:b(h.id),className:"self-start rounded-md border px-2.5 py-1 text-xs hover:bg-muted","aria-label":"Preview ".concat(null!=(d=h.label)?d:h.id),children:"Preview"}),m?(0,n.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-primary",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0}),"Selected"]}):(0,n.jsx)("button",{type:"button",disabled:f,onClick:()=>p(h.id),className:"self-start rounded-md border px-2.5 py-1 text-xs hover:bg-muted disabled:opacity-50","aria-label":"Select ".concat(null!=(u=h.label)?u:h.id),children:g?"Selecting…":"Select"})]})]})}let y=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;function v(e){return e.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean)}function w(e,t){if("undefined"==typeof document)return t;let s=document.getElementById(e);return s&&"value"in s&&"string"==typeof s.value?s.value:t}function k(e){let{onCreate:t,onSelect:s,pending:r,result:i,error:a}=e,[l,o]=(0,c.useState)("url"),[d,u]=(0,c.useState)(""),[h,m]=(0,c.useState)(""),[p,g]=(0,c.useState)(""),f=v(h).filter(e=>y.test(e)),x=v(h).length,b=x>=2&&x<=6&&p.trim().length>0&&f.length===x;return(0,n.jsxs)("section",{className:"rounded-md border p-3","aria-label":"Make my system","data-make-my-system":"",children:[(0,n.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"Make my system"}),(0,n.jsxs)("div",{className:"flex gap-1",role:"tablist",children:[(0,n.jsx)("button",{type:"button",role:"tab","aria-selected":"url"===l,className:"rounded-md px-2 py-1 text-xs ".concat("url"===l?"bg-muted":""),onClick:()=>o("url"),children:"From a website"}),(0,n.jsx)("button",{type:"button",role:"tab","aria-selected":"colors"===l,className:"rounded-md px-2 py-1 text-xs ".concat("colors"===l?"bg-muted":""),onClick:()=>o("colors"),children:"From colors"})]})]}),(0,n.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"Reference, not a copy — logos, names, images and text are not taken."}),"url"===l?(0,n.jsxs)("form",{className:"mt-2 flex flex-col gap-2 sm:flex-row",onSubmit:e=>{e.preventDefault();let s=d.trim();s&&!r&&t({kind:"url",url:s})},children:[(0,n.jsx)("label",{className:"sr-only",htmlFor:"make-system-url",children:"Website URL"}),(0,n.jsx)("input",{id:"make-system-url",type:"url",value:d,disabled:r,placeholder:"https://example.com",onChange:e=>u(e.target.value),className:"min-w-0 flex-1 rounded-md border bg-transparent px-2 py-1.5 text-sm"}),(0,n.jsx)("button",{type:"button",disabled:r,onClick:()=>{let e=w("make-system-url",d).trim();e&&!r&&t({kind:"url",url:e})},className:"rounded-md border px-3 py-1.5 text-sm hover:bg-muted disabled:opacity-50",children:r?"Measuring…":"Make it"})]}):(0,n.jsxs)("form",{className:"mt-2 space-y-2",onSubmit:e=>{e.preventDefault(),b&&!r&&t({kind:"palette",colors:f,id:p.trim()})},children:[(0,n.jsx)("label",{className:"block text-xs text-muted-foreground",htmlFor:"make-system-colors",children:"2–6 colors"}),(0,n.jsx)("input",{id:"make-system-colors",value:h,disabled:r,placeholder:"#f4efe6, #1f3a2e, #c8553d",onChange:e=>m(e.target.value),className:"w-full rounded-md border bg-transparent px-2 py-1.5 text-sm"}),f.length>0&&(0,n.jsx)("ul",{className:"flex gap-1","aria-label":"Color preview",children:f.map(e=>(0,n.jsx)("li",{className:"h-6 w-6 rounded-sm border",style:{backgroundColor:e},title:e},e))}),(0,n.jsx)("label",{className:"block text-xs text-muted-foreground",htmlFor:"make-system-id",children:"id"}),(0,n.jsx)("input",{id:"make-system-id",value:p,disabled:r,placeholder:"stumptowncoffee",onChange:e=>g(e.target.value),className:"w-full rounded-md border bg-transparent px-2 py-1.5 text-sm"}),(0,n.jsx)("button",{type:"button",disabled:r,onClick:()=>{let e=v(w("make-system-colors",h)).filter(e=>y.test(e)),s=w("make-system-id",p).trim();r||e.length<2||e.length>6||0===s.length||t({kind:"palette",colors:e,id:s})},className:"rounded-md border px-3 py-1.5 text-sm hover:bg-muted disabled:opacity-50",children:r?"Measuring…":"Make it"})]}),r&&(0,n.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"Measuring…"}),a&&(0,n.jsx)("p",{className:"mt-2 text-sm text-error",role:"alert",children:a}),i&&(0,n.jsxs)("div",{className:"mt-2 space-y-1 text-sm",children:[(0,n.jsxs)("p",{children:["Made ",i.id," — ",i.tokens.length," tokens \xb7 ",i.unread," unread"]}),i.warnings.map(e=>(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:e},e)),(0,n.jsx)("button",{type:"button",onClick:()=>s(i.id),className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted",children:"Select it"})]})]})}let j={missing:"Missing",declared:"Declared",available:"Not declared"},N={missing:"bg-error/10 text-error",declared:"bg-green-600/10 text-green-700",available:"bg-muted text-muted-foreground"},S={missing:r.A,declared:i.A,available:a};function C(){return(0,d.Qj)()?(0,n.jsx)(M,{}):(0,n.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Design check"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to see this repository's craft rulebooks."})]})}function M(){let{data:e,isLoading:t,error:s,refetch:i,isFetching:a}=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designCheck(),queryFn:()=>s.getDesignCheck(),enabled:null==(e=t.enabled)||e,refetchInterval:3e4})}();return(0,n.jsxs)("div",{className:"mx-auto max-w-3xl space-y-4 p-6",children:[(0,n.jsxs)("header",{className:"flex items-start justify-between gap-4",children:[(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,n.jsx)(l.A,{className:"h-5 w-5","aria-hidden":!0}),"Design check"]}),(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["Craft rulebooks declared by this repository's ",(0,n.jsx)("code",{children:"DESIGN.md"}),"."]})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>void i(),className:"inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm hover:bg-muted","aria-label":"Refresh design check",children:[(0,n.jsx)(o.A,{className:"h-4 w-4 ".concat(a?"animate-spin":""),"aria-hidden":!0}),"Refresh"]})]}),t&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading…"}),s&&(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["Could not reach the daemon: ",s instanceof Error?s.message:String(s)]}),e&&!1===e.ok&&(0,n.jsxs)("div",{className:"space-y-2 rounded-md border border-warning/40 bg-warning/5 p-4",children:[(0,n.jsxs)("p",{className:"flex items-center gap-2 text-sm font-medium",children:[(0,n.jsx)(r.A,{className:"h-4 w-4 text-warning","aria-hidden":!0}),"Design check blocked"]}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:function(e,t){switch(e){case"no-repository":return"The daemon is not running inside a git checkout, so there is no DESIGN.md to check.";case"craft-directory":return"elanous's craft rulebook directory could not be read: ".concat(null!=t?t:"(unknown path)");case"design-document":return"This repository has no readable DESIGN.md: ".concat(null!=t?t:"(unknown path)");default:return"The design check is blocked (".concat(e,").")}}(e.blockedOn,e.path)})]}),e&&!0===e.ok&&(0,n.jsx)(F,{data:e})]})}function F(e){let{data:t}=e,s=function(e){let t=new Set(e.unavailableRulebooks),s=new Map;for(let t of e.availableRulebooks)s.set(t,"available");for(let n of e.declaredRulebooks)s.set(n,t.has(n)?"missing":"declared");let n={missing:0,declared:1,available:2};return[...s.entries()].map(e=>{let[t,s]=e;return{name:t,status:s}}).sort((e,t)=>n[e.status]-n[t.status]||e.name.localeCompare(t.name))}(t),r=t.unavailableRulebooks.length;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"rounded-md p-3 text-sm ".concat(r?"bg-error/10 text-error":"bg-green-600/10 text-green-700"),children:r?"".concat(r," declared rulebook").concat(1===r?"":"s"," could not be found."):"All ".concat(t.declaredRulebooks.length," declared rulebook").concat(1===t.declaredRulebooks.length?"":"s"," resolve.")}),(0,n.jsxs)("dl",{className:"grid grid-cols-1 gap-1 text-xs text-muted-foreground sm:grid-cols-2",children:[(0,n.jsxs)("div",{className:"truncate sm:col-span-2",children:[(0,n.jsx)("dt",{className:"inline font-medium",children:"Repository: "}),(0,n.jsxs)("dd",{className:"inline",children:[(0,n.jsx)("code",{children:t.repoRoot}),t.repoSource&&(0,n.jsxs)("span",{className:"ml-1",children:["(","config"===t.repoSource?"harness.defaultRepo":"daemon folder",")"]})]})]}),(0,n.jsxs)("div",{className:"truncate",children:[(0,n.jsx)("dt",{className:"inline font-medium",children:"Document: "}),(0,n.jsx)("dd",{className:"inline",children:(0,n.jsx)("code",{children:t.documentPath})})]}),(0,n.jsxs)("div",{className:"truncate",children:[(0,n.jsx)("dt",{className:"inline font-medium",children:"Rulebooks: "}),(0,n.jsx)("dd",{className:"inline",children:(0,n.jsx)("code",{children:t.craftDirectory})})]})]}),(0,n.jsx)(O,{data:t}),0===s.length?(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"elanous ships no craft rulebooks and this document declares none."}):(0,n.jsx)("ul",{className:"divide-y rounded-md border",children:s.map(e=>{let t=S[e.status];return(0,n.jsxs)("li",{className:"flex items-center justify-between gap-3 px-3 py-2",children:[(0,n.jsxs)("span",{className:"flex items-center gap-2 text-sm",children:[(0,n.jsx)(t,{className:"h-4 w-4 shrink-0","aria-hidden":!0}),(0,n.jsx)("code",{children:e.name})]}),(0,n.jsx)("span",{className:"shrink-0 rounded-full px-2 py-0.5 text-xs ".concat(N[e.status]),children:j[e.status]})]},e.name)})})]})}function O(e){var t,s,r,i;let{data:a}=e,l=function(){let e=(0,d.M1)(),t=(0,h.jE)();return(0,m.n)({mutationFn:t=>e.setDesignDirection(t),onSuccess:()=>t.invalidateQueries({queryKey:p.AF.designCheck()})})}(),o=function(){let e=(0,d.M1)(),t=(0,h.jE)();return(0,m.n)({mutationFn:t=>e.createDesignSystem(t),onSuccess:()=>t.invalidateQueries({queryKey:p.AF.designCheck()})})}(),x=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designPreviews(),queryFn:()=>s.listDesignPreviews(),enabled:null==(e=t.enabled)||e,refetchInterval:3e4})}(),[b,y]=(0,c.useState)(null),[v,w]=(0,c.useState)(null),j=a.directions;if((0,c.useEffect)(()=>{if(!v||!j)return;let e=document.querySelector('[data-direction-id="'.concat(v.replace(/"/g,""),'"]'));null==e||e.scrollIntoView({block:"nearest"})},[v,j]),!j)return null;let N=l.isPending&&null!=(s=l.variables)?s:null;return(0,n.jsxs)("section",{className:"space-y-2",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"Design direction"}),(0,n.jsx)(k,{pending:o.isPending,result:null!=(r=o.data)?r:null,error:o.isError?function(e){switch(e instanceof g.Iu&&e.body&&"object"==typeof e.body?e.body.reason:void 0){case"bad-url":return"That address is not an http or https URL.";case"bad-id":return"The id may only use lowercase letters, digits, and hyphens.";case"id-taken":return"That id is already taken.";case"extract-failed":return"The page could not be measured.";case"no-colors":return"Give between 2 and 6 colors.";case"busy":return"Another system is being made — wait for it to finish.";default:if(e instanceof g.Iu&&401===e.status)return"Only the owner can make a system — sign in first.";return"Could not make the system: ".concat(e instanceof Error?e.message:String(e))}}(o.error):null,onCreate:e=>{o.mutate(e,{onSuccess:e=>w(e.id)})},onSelect:e=>{w(e),l.mutate(e)}}),j.unavailable&&(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-sm text-error",children:["Declared direction ",(0,n.jsx)("code",{children:j.unavailable})," is not registered."]}),null===j.declared&&!j.unavailable&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"None declared — pick one below."}),l.isError&&(0,n.jsx)("p",{className:"rounded-md bg-error/10 p-2 text-sm text-error",children:function(e){switch(e instanceof g.Iu&&e.body&&"object"==typeof e.body?e.body.reason:void 0){case"unknown-direction":return"The daemon does not know this direction.";case"no-repository":return"The daemon has no repository to write to (set harness.defaultRepo).";case"conflicting-system-file":return"design/system/ already holds a file the daemon will not overwrite.";case"cannot-read":return"The DESIGN.md could not be read.";case"cannot-write":return"The DESIGN.md could not be written.";default:if(e instanceof g.Iu&&401===e.status)return"Only the owner can pick a direction — sign in first.";return"Could not set the direction: ".concat(e instanceof Error?e.message:String(e))}}(l.error)}),b&&(0,n.jsx)(A,{system:b,onClose:()=>y(null),onSelect:()=>l.mutate(b),selecting:N===b,busy:null!==N,alreadySelected:j.declared===b}),(0,n.jsx)(f,{available:j.available,declared:j.declared,pendingId:N,previews:new Set((null!=(i=null==(t=x.data)?void 0:t.previews)?i:[]).map(e=>e.system)),onPreview:e=>y(e),onPick:e=>l.mutate(e)})]})}function A(e){let{system:t,onClose:s,onSelect:r,selecting:i,busy:a,alreadySelected:l}=e,o=function(e){let t=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designPreview(null!=e?e:""),queryFn:()=>t.getDesignPreview(e),enabled:null!==e&&""!==e})}(t);return(0,n.jsxs)("div",{className:"space-y-2 rounded-md border p-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsxs)("p",{className:"text-sm font-medium",children:["Preview \xb7 ",(0,n.jsx)("code",{children:t})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[l?(0,n.jsx)("span",{className:"text-xs text-primary",children:"Selected"}):(0,n.jsx)("button",{type:"button",disabled:a,onClick:r,className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted disabled:opacity-50","aria-label":"Select ".concat(t),children:i?"Selecting…":"Select"}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted","aria-label":"Close preview",children:"Close"})]})]}),o.isLoading&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading preview…"}),o.isError&&(0,n.jsxs)("p",{className:"text-sm text-error",children:["Could not load the preview: ",o.error instanceof Error?o.error.message:String(o.error)]}),o.data&&(0,n.jsx)("iframe",{sandbox:"",srcDoc:o.data.html,title:"Preview \xb7 ".concat(t),className:"h-80 w-full rounded-md border bg-white"})]})}function E(){return(0,n.jsx)(C,{})}},91514:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>d,tI:()=>o});var n=s(41121),r=s(91269),i=s(19855),a=s(24818);let l=(0,r.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:c}=e,d=(0,r.useMemo)(()=>null!=s?s:new i.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,n.jsx)(l.Provider,{value:t,children:(0,n.jsx)(a.Ht,{client:d,children:c})})}function c(){let e=(0,r.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function d(){return(0,r.useContext)(l)}},91644:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>a,SI:()=>o,dJ:()=>l});let n="elanous:auth-required",r=null,i=!1;function a(e){null===r&&(r=e,window.dispatchEvent(new CustomEvent(n,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(n,s),null===r||i||e({path:r}),()=>t.removeEventListener(n,s)}function o(){i=!0}},93981:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(89117).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},99608:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(89117).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])}},e=>{e.O(0,[920,6998,2375,2367,6725,7358],()=>e(e.s=56788)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6766],{27813:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o,f6:()=>n,oD:()=>a});let s="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(s,e),e):localStorage.getItem(s)}();if(e)return e;let t=n();return localStorage.setItem(s,t),t}function o(){let e=n();return localStorage.setItem(s,e),e}},34730:(e,t,r)=>{Promise.resolve().then(r.bind(r,99785))},38519:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var s=r(41121),n=r(91269),a=r(49536),o=r(27813),l=r(45012),i=r(51215);let c=(0,n.createContext)(null);function d(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[d,u]=(0,n.useState)(r),[m,p]=(0,n.useState)(""),[x]=(0,n.useState)(()=>new l.ki(r));(0,n.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,o.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();x.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let f=e=>{u(t=>{let r={...t,...e};return(0,a.Qc)(e),x.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,n.useMemo)(()=>({config:d,setConfig:f,client:x,sessionId:m,setSessionId:h}),[d,x,m]);return(0,s.jsx)(c.Provider,{value:b,children:t})}function u(){let e=(0,n.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},99785:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>x});var s=r(41121),n=r(91269),a=r(42012),o=r(9050),l=r(91514),i=r(45546),c=r(51757),d=r(52423);function u(e){let{palette:t,fallback:r}=e;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)("strong",{children:"노드 팔레트"}),t.map(e=>{var t;return(0,s.jsxs)("span",{title:e.description,className:"rounded border border-border px-2 py-0.5",children:[e.kind," ",e.plugin&&(0,s.jsx)("small",{className:"rounded bg-accent/15 px-1 text-accent",children:e.plugin})]},"".concat(null!=(t=e.plugin)?t:"core",":").concat(e.kind))})]}),r&&(0,s.jsx)("p",{role:"status",className:"mt-1 text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."})]})}function m(e){let{palette:t,fallback:r}=e;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("details",{className:"border-b border-border px-3 py-2 text-xs min-[640px]:hidden","aria-label":"노드 팔레트",children:[(0,s.jsxs)("summary",{className:"cursor-pointer",children:["노드 더하기 (",t.length,")"]}),(0,s.jsx)("div",{className:"mt-2",children:(0,s.jsx)(u,{palette:t,fallback:r})})]}),(0,s.jsx)("div",{className:"hidden border-b border-border px-3 py-2 text-xs min-[640px]:block","aria-label":"노드 팔레트",children:(0,s.jsx)(u,{palette:t,fallback:r})})]})}function p(){let e="harness"===(0,o.useSearchParams)().get("mode")?"harness":"workflow",t=(0,l.Qj)(),r=(0,a.I)({queryKey:["graph-kinds",e],queryFn:()=>t.getGraphKinds(e),enabled:null!==t,retry:!1}),u=(0,n.useMemo)(()=>{var t;return(null==(t=r.data)?void 0:t.kinds.length)?r.data.kinds:("harness"===e?d.DN:d.CF).map(t=>({graph:e,kind:t,plugin:null,description:"",schema:{},core:!0}))},[r.data,e]),p=r.isError||r.isSuccess&&!r.data.kinds.length;return(0,s.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,s.jsxs)("header",{className:"flex flex-wrap items-center justify-between gap-2 border-b border-border px-4 py-2",children:[(0,s.jsx)("h1",{className:"text-sm font-semibold",children:"편집기"}),(0,s.jsx)("nav",{"aria-label":"그래프 편집 모드",className:"flex gap-1",children:["workflow","harness"].map(t=>(0,s.jsx)("a",{href:"/app/editor/?mode=".concat(t),"aria-current":e===t?"page":void 0,className:"rounded px-3 py-1 text-xs ".concat(e===t?"bg-accent/15 text-text-primary":"text-text-tertiary hover:bg-surface-elevated"),children:"workflow"===t?"워크플로":"실행 그래프"},t))})]}),(0,s.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[t&&(0,s.jsx)(m,{palette:u,fallback:p}),"workflow"===e?(0,s.jsx)(i.N,{palette:u}):t?(0,s.jsx)(c.F,{palette:u}):(0,s.jsx)("p",{className:"p-4 text-sm text-text-tertiary",children:"Daemon 연결이 설정되지 않았습니다. Settings 에서 Base URL 을 입력하세요."})]})]})}function x(){return(0,s.jsx)(n.Suspense,{fallback:(0,s.jsx)("p",{className:"p-4 text-sm",children:"편집기를 불러오는 중…"}),children:(0,s.jsx)(p,{})})}}},e=>{e.O(0,[5848,2285,6987,920,6998,5609,171,8870,5012,2375,5791,8430,2367,6725,7358],()=>e(e.s=34730)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[650],{13146:(e,t,r)=>{Promise.resolve().then(r.bind(r,55740))},27813:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function l(){let e=s();return localStorage.setItem(n,e),e}},38519:(e,t,r)=>{"use strict";r.d(t,{C:()=>i,DaemonProvider:()=>u,Q:()=>d});var n=r(41121),s=r(91269),a=r(49536),l=r(27813),o=r(45012),c=r(51215);let i=(0,s.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,s.useState)(r),[m,p]=(0,s.useState)(""),[f]=(0,s.useState)(()=>new o.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();d(e),f.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();f.updateConfig(t),d(t),(0,c.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let x=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),f.updateConfig(r),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,s.useMemo)(()=>({config:u,setConfig:x,client:f,sessionId:m,setSessionId:h}),[u,f,m]);return(0,n.jsx)(i.Provider,{value:b,children:t})}function d(){let e=(0,s.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},38550:(e,t,r)=>{"use strict";r.d(t,{a:()=>o});var n=r(41121),s=r(91269),a=r(67028);let l=e=>JSON.stringify([e.graphId,e.runId]);function o(e){let{client:t,approvals:r,onDecided:o,onPendingChange:c}=e,i=(0,s.useMemo)(()=>(0,a.ll)({client:t}),[t]),[u,d]=(0,s.useState)([]),[m,p]=(0,s.useState)({}),[f,x]=(0,s.useState)(null),[h,b]=(0,s.useState)(""),g=(0,s.useRef)(0),y=r.map(l).join("|");function v(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m;d(e),c(r.filter(r=>!t[l(r)]&&e.some(e=>l(e)===l(r))).length)}async function j(e,t){let n=l(e);if(f||m[n]||!r.some(e=>l(e)===n)||!u.some(e=>l(e)===n))return;let s=g.current;x(n),b("");try{if(await i.decide(e.graphId,e.runId,t),g.current!==s)return;let r={...m,[n]:t};p(r),v(u,r),o();let a=await i.list();g.current===s&&v(a.items,r)}catch(e){g.current===s&&b((0,a.LP)(e,"decide"))}finally{g.current===s&&x(null)}}return((0,s.useEffect)(()=>{let e=++g.current;return(d([]),b(""),y)?(i.list().then(t=>{g.current===e&&v(t.items)}).catch(t=>{g.current===e&&b((0,a.LP)(t,"list"))}),()=>{g.current+=1}):(c(0),()=>{g.current+=1})},[i,y]),0===r.length)?null:(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"게시 승인"}),h&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:h}),(0,n.jsx)("ul",{className:"space-y-2",children:r.map(e=>{let t=l(e),r=u.some(e=>l(e)===t);return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsx)("p",{children:e.message}),m[t]?(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"approved"===m[t]?"승인됨":"보류됨"}):r?(0,n.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"approved"),className:"rounded-lg bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"승인"}),(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"rejected"),className:"rounded-lg border border-border px-3 py-1 disabled:opacity-50",children:"보류"})]}):(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"대기 중인 승인이 아닙니다."})]},t)})})]})}},55740:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var n=r(41121),s=r(91269),a=r(38519),l=r(38550);let o={report:"보고서",pdf:"PDF",video:"영상",image:"그림",text:"글",link:"링크"};function c(e,t){if(e.startsWith("/v1/exec-requests/".concat(encodeURIComponent(t),"/files/")))return{url:e,daemonFile:!0};try{let t=new URL(e);if(("https:"===t.protocol||"http:"===t.protocol)&&!t.username&&!t.password)return{url:t.href,daemonFile:!1}}catch(e){}return null}function i(e){let{client:t,id:r,result:a}=e,[l,i]=(0,s.useState)(""),[u,d]=(0,s.useState)(!1),[m,p]=(0,s.useState)(null),f=c(a.url,r),x=a.title||o[a.kind],h=(null==f?void 0:f.daemonFile)&&("video"===a.kind||"image"===a.kind);if((0,s.useEffect)(()=>{let e;if(!h||!f)return;let r=!0;return p(null),i(""),t.fetchResponse(f.url).then(async t=>{if(!t.ok)throw Error("HTTP ".concat(t.status));let n=await t.blob();r&&p(e=URL.createObjectURL(n))}).catch(()=>{r&&i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}),()=>{r=!1,e&&URL.revokeObjectURL(e)}},[t,h,null==f?void 0:f.url]),!f)return null;async function b(){if(!(null==f?void 0:f.daemonFile)||u)return;let e="pdf"===a.kind?window.open("","_blank"):null;if("pdf"===a.kind&&!e)return void i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.");e&&(e.opener=null),d(!0),i("");try{let n=await t.fetchResponse(f.url);if(!n.ok)throw Error("HTTP ".concat(n.status));let s=URL.createObjectURL(await n.blob());if(e)e.closed?URL.revokeObjectURL(s):(e.location.replace(s),setTimeout(()=>URL.revokeObjectURL(s),6e4));else{var r;let e=document.createElement("a");e.href=s,e.download=decodeURIComponent(null!=(r=f.url.split("/").at(-1))?r:x),document.body.appendChild(e),e.click(),e.remove(),setTimeout(()=>URL.revokeObjectURL(s),6e4)}}catch(t){null==e||e.close(),i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}finally{d(!1)}}return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"font-medium",children:x}),m&&("video"===a.kind?(0,n.jsx)("video",{controls:!0,src:m,"aria-label":x,className:"mt-2 max-w-full"}):(0,n.jsx)("img",{src:m,alt:x,className:"mt-2 max-w-full"}))]}):f.daemonFile?(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:u,className:"font-medium text-primary underline underline-offset-4 disabled:opacity-50",children:u?"여는 중…":x}):(0,n.jsx)("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"font-medium text-primary underline underline-offset-4",children:x}),(0,n.jsxs)("span",{className:"ml-2 text-muted-foreground",children:[a.seat.toUpperCase()," \xb7 ",o[a.kind]]}),a.sources&&a.sources.length>0&&(0,n.jsx)("ul",{className:"mt-2 flex flex-wrap gap-2","aria-label":"출처",children:a.sources.slice(0,3).map((e,t)=>{let s=c(e.url,r);return s&&!s.daemonFile?(0,n.jsx)("li",{children:(0,n.jsx)("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline underline-offset-4",children:e.title})},"".concat(e.url,":").concat(t)):null})}),l&&(0,n.jsx)("p",{role:"alert",className:"mt-1 text-destructive",children:l})]})}function u(e){switch(e){case"planning":return"계획 중";case"running":return"진행 중";case"done":return"완료";case"failed":return"멈춤"}}function d(e){switch(e){case"waiting":return"대기";case"running":return"진행 중";case"done":return"완료";case"failed":return"못 함"}}function m(){var e,t,r,o;let{client:c}=(0,a.Q)(),[m,p]=(0,s.useState)(""),[f,x]=(0,s.useState)(!1),[h,b]=(0,s.useState)([]),[g,y]=(0,s.useState)(!1),[v,j]=(0,s.useState)(""),[N,w]=(0,s.useState)(""),[k,R]=(0,s.useState)(null),[S,U]=(0,s.useState)(null),[C,I]=(0,s.useState)(""),[E,L]=(0,s.useState)(0),[O,P]=(0,s.useState)(null),D=(0,s.useRef)(new Map),F=(0,s.useRef)(0),T=(0,s.useRef)(k);T.current=k;let _=(0,s.useRef)(null),H=(0,s.useRef)(0),M=h.some(e=>"planning"===e.status||"running"===e.status),q=null==(e=h.find(e=>e.id===k))?void 0:e.status,Y=(null==S?void 0:S.id)===k&&(null===O?S.approvals.length>0:O>0);(0,s.useEffect)(()=>{var e,t;return F.current+=1,H.current+=1,_.current=null,D.current=new Map,p(""),x(!1),b([]),y(!1),j(""),w(""),R(new URLSearchParams(null!=(t=null==(e=window.location)?void 0:e.search)?t:"").get("request")),U(null),I(""),P(null),()=>{F.current+=1}},[c]),(0,s.useEffect)(()=>{let e=!0,t=!1;async function r(){if(!t){t=!0;try{let t=await c.listExecRequests();if(!e)return;for(let e of t.items)D.current.delete(e.id);b([...D.current.values(),...t.items].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)||t.id.localeCompare(e.id))),j("")}catch(t){e&&j("맡긴 일을 읽지 못했습니다. 연결을 확인해 주세요.")}finally{t=!1,e&&y(!0)}}}r();let n=M?setInterval(()=>void r(),5e3):null;return()=>{e=!1,n&&clearInterval(n)}},[c,M]);let A=(0,s.useCallback)(async()=>{if(!k)return;let e=F.current,t=H.current,r="".concat(e,":").concat(t,":").concat(k);if(_.current!==r){_.current=r;try{let r=await c.getExecRequest(k);if(F.current!==e||H.current!==t||T.current!==k)return;U(r),I("")}catch(r){F.current===e&&H.current===t&&T.current===k&&I("상세를 읽지 못했습니다. 잠시 뒤 다시 시도해 주세요.")}finally{_.current===r&&(_.current=null)}}},[c,k]);async function V(e){e.preventDefault();let t=m.trim();if(!t||f)return;let r=F.current;x(!0),w("");try{let e=await c.submitExecRequest(t);if(F.current!==r)return;let n={id:e.id,text:t,createdAt:new Date().toISOString(),status:e.status,seats:[],resultCount:0};D.current.set(n.id,n),b(e=>[n,...e.filter(e=>e.id!==n.id)]),p("")}catch(e){F.current===r&&w("보내지 못했습니다. 연결을 확인하고 다시 시도해 주세요.")}finally{F.current===r&&x(!1)}}(0,s.useEffect)(()=>{k&&A()},[A,E]),(0,s.useEffect)(()=>{if(!k||"planning"!==q&&"running"!==q&&!Y)return;let e=setInterval(()=>void A(),5e3);return()=>clearInterval(e)},[k,q,Y,A]);let z=h.find(e=>e.id===k),J=(null==S?void 0:S.id)===k?S:null;return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-2xl space-y-8 px-5 py-10 sm:py-14",children:[(0,n.jsxs)("section",{"aria-labelledby":"exec-compose",className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{id:"exec-compose",className:"text-2xl font-semibold tracking-tight",children:"COO 에게 맡기기"}),(0,n.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"할 일을 한 줄로 적어 보내세요. 자리별 진행과 결과를 여기서 볼 수 있습니다."})]}),(0,n.jsxs)("form",{onSubmit:V,className:"flex gap-2",children:[(0,n.jsx)("label",{htmlFor:"exec-text",className:"sr-only",children:"한 줄로 맡길 일"}),(0,n.jsx)("input",{id:"exec-text",name:"text",value:m,onChange:e=>p(e.target.value),placeholder:"한 줄로 맡길 일",className:"min-w-0 flex-1 rounded-lg border border-input bg-background px-3 py-2 text-sm"}),(0,n.jsx)("button",{type:"submit",disabled:!m.trim()||f,className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50",children:f?"보내는 중…":"보내기"})]}),N&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:N})]}),(0,n.jsxs)("section",{"aria-labelledby":"exec-list",className:"space-y-3",children:[(0,n.jsx)("h2",{id:"exec-list",className:"text-xl font-semibold",children:"맡긴 일"}),v&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:v}),!g&&0===h.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"불러오는 중…"}),g&&0===h.length&&!v&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 맡긴 일이 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:h.map(e=>{var t;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>{k!==e.id&&(H.current+=1,R(e.id),U(null),I(""),P(null))},"aria-expanded":k===e.id,className:"w-full rounded-xl border border-border bg-card p-4 text-left hover:border-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",children:[(0,n.jsxs)("span",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("span",{className:"min-w-0 truncate text-sm font-semibold",children:null!=(t=e.text.trim().split(/\r?\n/,1)[0])?t:""}),(0,n.jsx)("span",{className:"shrink-0 text-sm font-medium text-primary",children:u(e.status)})]}),e.seats.length>0&&(0,n.jsx)("span",{className:"mt-2 block truncate text-xs text-muted-foreground",children:e.seats.map(e=>"".concat(e.seat.toUpperCase()," ").concat(d(e.status))).join(" \xb7 ")}),e.resultCount>0&&(0,n.jsxs)("span",{className:"mt-1 block text-xs text-muted-foreground",children:["결과 ",e.resultCount,"개"]})]})},e.id)})})]}),k&&(0,n.jsxs)("section",{"aria-labelledby":"exec-detail",className:"space-y-5 rounded-xl border border-border bg-card p-5",children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("h2",{id:"exec-detail",className:"text-lg font-semibold",children:"맡긴 일 상세"}),(0,n.jsx)("button",{type:"button",onClick:()=>{H.current+=1,R(null),U(null),P(null)},className:"text-sm text-primary underline underline-offset-4",children:"닫기"})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-sm",children:null!=(t=null==J?void 0:J.text)?t:null==z?void 0:z.text}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:u(null!=(o=null!=(r=null==J?void 0:J.status)?r:null==z?void 0:z.status)?o:"planning")}),C&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:C}),!J&&!C&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"상세 불러오는 중…"}),J&&(0,n.jsxs)(n.Fragment,{children:[J.summary&&(0,n.jsx)("p",{className:"text-sm",children:J.summary}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"이렇게 나눠 맡겼습니다"}),0===J.seats.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"planning"===J.status?"COO 가 나누는 중입니다":"맡은 자리가 없습니다"}),(0,n.jsx)("ul",{className:"space-y-2",children:J.seats.map(e=>(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,n.jsxs)("span",{className:"font-semibold",children:[e.seat.toUpperCase()," \xb7 ",e.title]}),(0,n.jsx)("span",{className:"shrink-0 text-muted-foreground",children:d(e.status)})]}),"failed"===e.status&&e.reason&&(0,n.jsxs)("p",{className:"mt-2 text-destructive",children:["못 한 이유 \xb7 ",e.reason]})]},"".concat(e.seat,":").concat(e.title)))})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"결과"}),0===J.results.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 결과가 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:J.results.map(e=>(0,n.jsx)(i,{client:c,id:J.id,result:e},e.url))})]}),(0,n.jsx)(l.a,{client:c,approvals:J.approvals,onDecided:()=>L(e=>e+1),onPendingChange:P},J.id)]})]})]})}},67028:(e,t,r)=>{"use strict";function n(e){return{slides:e.slides.map(e=>{let{image:t,caption:r,include:n}=e;return{image:t,caption:r,include:n}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}r.d(t,{$Y:()=>l,LP:()=>c,Mz:()=>n,ll:()=>u,rH:()=>o});class s extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let a={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},l="/app/settings/#bearer-token";function o(e){return e instanceof s&&(401===e.status||403===e.status)}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof s?401===e.status||403===e.status?"".concat(a[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let i="/v1/graph-approvals";function u(e){var t,r;let n=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),a=null!=(r=e.fetchImpl)?r:fetch;async function l(t,r){let l={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,l):await a("".concat(n).concat(t),l),c=await o.json().catch(()=>null);if(!o.ok){let e=c&&"object"==typeof c&&"error"in c&&"string"==typeof c.error?c.error:"request-failed";throw new s(o.status,e)}return c}return{list:()=>l(i),decide:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:r})}),saveFeedDraft:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(r)}),feedMedia:async(t,r,l)=>{let o="".concat(i,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/media?path=").concat(encodeURIComponent(l)),c={headers:e.authHeader?{authorization:e.authHeader}:{}},u=e.client?await e.client.fetchResponse(o,c):await a("".concat(n).concat(o),c);if(!u.ok)throw new s(u.status,"media-failed");return u.blob()}}}}},e=>{e.O(0,[5012,2367,6725,7358],()=>e(e.s=13146)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[141],{27813:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>n,f6:()=>l,oD:()=>a});let s="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(s,e),e):localStorage.getItem(s)}();if(e)return e;let t=l();return localStorage.setItem(s,t),t}function n(){let e=l();return localStorage.setItem(s,e),e}},38519:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>u,Q:()=>d});var s=r(41121),l=r(91269),a=r(49536),n=r(27813),o=r(45012),i=r(51215);let c=(0,l.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,l.useState)(r),[m,f]=(0,l.useState)(""),[p]=(0,l.useState)(()=>new o.ki(r));(0,l.useEffect)(()=>{let e=(0,a.Fp)();d(e),p.updateConfig(e),f((0,n.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();p.updateConfig(t),d(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let x=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:u,setConfig:x,client:p,sessionId:m,setSessionId:h}),[u,p,m]);return(0,s.jsx)(c.Provider,{value:b,children:t})}function d(){let e=(0,l.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},76377:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var s=r(41121),l=r(91269),a=r(38519);let n=/^[a-z0-9][a-z0-9._-]{0,63}$/;function o(e){var t,r,o;let{event:i,refreshKey:c=0}=e,{client:u}=(0,a.Q)(),[d,m]=(0,l.useState)(null),[f,p]=(0,l.useState)(null),x=(null==d?void 0:d.event)===i&&d.refreshKey===c?d:null,h=(null==f?void 0:f.event)===i&&f.refreshKey===c?f.message:"";return((0,l.useEffect)(()=>{let e;if(!n.test(i))return;let t=!0,r="";m(null),p(null);let s=e=>{t&&m(t=>(null==t?void 0:t.event)===i&&t.refreshKey===c?{...t,...e}:t)};async function l(e){try{let l=await u.fetchResponse(e);if(!l.ok)throw Error("HTTP ".concat(l.status));let a=await l.blob();if(!t)return;r=URL.createObjectURL(a),s({videoUrl:r})}catch(e){s({error:"영상을 열지 못했습니다: ".concat(String(e))})}}async function a(){try{let r=await u.fieldReelStatus(i);if(!t)return;s({reel:{status:r.state,url:r.url},reelError:"failed"===r.state?r.error:void 0,error:void 0}),"done"===r.state&&r.url?await l(r.url):"done"!==r.state&&"failed"!==r.state&&(e=setTimeout(a,5e3))}catch(r){s({error:"영상 상태를 읽지 못했습니다: ".concat(String(r))}),t&&(e=setTimeout(a,5e3))}}return u.fetchJson("/v1/field/uploads?event=".concat(encodeURIComponent(i))).then(e=>{t&&(m({...e,event:i,refreshKey:c}),e.reel&&("done"===e.reel.status&&e.reel.url?l(e.reel.url):a()))}).catch(e=>{t&&p({event:i,refreshKey:c,message:"폴더 상태를 읽지 못했습니다: ".concat(String(e))})}),()=>{t=!1,e&&clearTimeout(e),r&&URL.revokeObjectURL(r)}},[u,i,c]),n.test(i))?(0,s.jsxs)("section",{"aria-label":"행사 폴더 상태",className:"space-y-3 rounded-xl border border-border bg-card p-5",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:i}),h&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:h}),!x&&!h&&(0,s.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"폴더 상태를 읽는 중…"}),x&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("p",{className:"text-sm",children:["폴더에 ",x.count,"개 \xb7 영상 ",(null==(t=x.reel)?void 0:t.status)==="done"?"완료":(null==(r=x.reel)?void 0:r.status)==="failed"?"만들지 못함":x.reel?"만드는 중":"없음"]}),(null==(o=x.reel)?void 0:o.status)==="failed"&&x.reelError&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:x.reelError}),x.error&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:x.error}),x.videoUrl&&(0,s.jsx)("video",{controls:!0,playsInline:!0,src:x.videoUrl,className:"mx-auto aspect-[9/16] max-h-[70vh] w-full max-w-xs rounded-lg bg-black","aria-label":"현장 세로 영상"})]})]}):null}let i=/^[a-z0-9][a-z0-9._-]{0,63}$/;function c(){let{client:e}=(0,a.Q)(),[t,r]=(0,l.useState)(""),n=(0,l.useRef)(!1),[c,u]=(0,l.useState)([]),[d,m]=(0,l.useState)(null),f=(0,l.useRef)(null),[p,x]=(0,l.useState)(""),[h,b]=(0,l.useState)(!1),[v,g]=(0,l.useState)(0),[y,j]=(0,l.useState)(0),[w,N]=(0,l.useState)("");(0,l.useEffect)(()=>{let t=!0;return e.fieldDefaultEvent().then(e=>{let{defaultEvent:s}=e;t&&i.test(s)&&!n.current&&r(s)}).catch(e=>{t&&N("행사 폴더를 불러오지 못했습니다: ".concat(String(e)))}),()=>{t=!1}},[e]);let k=i.test(t),S=t&&k?"":"영문 소문자\xb7숫자로 시작하고 영문 소문자\xb7숫자\xb7점\xb7밑줄\xb7하이픈만 사용해 주세요 (최대 64자).";async function U(r){if(r.preventDefault(),!h){if(!k)return void N(S);if(!c.length)return void N("사진\xb7영상을 먼저 골라 주세요.");b(!0),g(0),N("");try{await e.uploadField(t,c,p,g),g(100),j(e=>e+1),u([]),m(null),f.current&&(f.current.value=""),x("")}catch(e){N("올리지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{b(!1)}}}return(0,s.jsxs)("main",{className:"mx-auto w-full max-w-xl space-y-6 px-5 py-10 sm:py-16",children:[(0,s.jsxs)("header",{className:"space-y-2",children:[(0,s.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"현장 올리기"}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"사진\xb7영상을 행사 폴더에 모으면 세로 영상이 만들어집니다."})]}),(0,s.jsxs)("form",{onSubmit:U,noValidate:!0,className:"space-y-5 rounded-xl border border-border bg-card p-5 sm:p-8",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-event",className:"block text-sm font-medium",children:"행사 폴더"}),(0,s.jsx)("input",{id:"field-event",name:"event",value:t,onChange:e=>{n.current=!0,r(e.target.value)},"aria-invalid":!k,"aria-describedby":k?void 0:"field-slug-error",autoCapitalize:"none",autoCorrect:"off",className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm"}),!k&&(0,s.jsx)("p",{id:"field-slug-error",className:"text-sm text-destructive",children:S})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-files",className:"block text-sm font-medium",children:"사진\xb7영상 고르기"}),(0,s.jsx)("input",{ref:f,id:"field-files",name:"files",type:"file",multiple:!0,accept:"image/*,video/*",onChange:function(e){var t;let r=function(e){let t=[],r=0,s=0,l=0,a=0;for(let n of e){if(n.size>0x6400000){r+=1;continue}if(t.length>=20){l+=1;continue}if(a+n.size>262144e3){s+=1;continue}t.push(n),a+=n.size}let n=[r?"".concat(r,"개는 한 개가 100MB 를 넘습니다"):"",l?"".concat(l,"개는 한 번에 ").concat(20,"개를 넘습니다"):"",s?"".concat(s,"개는 합계 250MB 를 넘습니다"):""].filter(Boolean),o=r+l+s;return{kept:t,note:o?"".concat(o,"개는 빠집니다 — ").concat(n.join(" \xb7 ")):null}}(Array.from(null!=(t=e.target.files)?t:[]));u(r.kept),m(r.note),N("")},className:"block w-full rounded-md border border-input bg-background px-3 py-2 text-sm file:mr-3 file:rounded-md file:border-0 file:bg-primary file:px-3 file:py-1 file:text-primary-foreground"}),c.length>0&&(0,s.jsxs)("p",{className:"text-sm text-muted-foreground",children:[c.length,"개 골랐습니다"]}),d&&(0,s.jsx)("p",{role:"status",className:"text-sm text-orange-600 dark:text-orange-400",children:d})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-caption",className:"block text-sm font-medium",children:"한 줄 설명(첫 장 자막 \xb7 선택)"}),(0,s.jsx)("input",{id:"field-caption",name:"caption",value:p,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),w&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:w}),(0,s.jsx)("button",{type:"submit",disabled:h||!k||!c.length,className:"w-full rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground disabled:cursor-not-allowed disabled:opacity-50",children:h?"올리는 중…":"올리기"}),h&&(0,s.jsxs)("div",{role:"status",className:"space-y-1 text-sm","aria-live":"polite",children:[(0,s.jsxs)("label",{htmlFor:"field-progress",children:["올리기 ",v,"%"]}),(0,s.jsx)("progress",{id:"field-progress",value:v,max:100,className:"w-full"})]})]}),k&&(0,s.jsx)(o,{event:t,refreshKey:y})]})}},98579:(e,t,r)=>{Promise.resolve().then(r.bind(r,76377))}},e=>{e.O(0,[5012,2367,6725,7358],()=>e(e.s=98579)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3787,6815,9492],{27559:()=>{}},_=>{_.O(0,[2367,6725,7358],()=>_(_.s=27559)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8891],{35481:(e,t,s)=>{Promise.resolve().then(s.bind(s,42241))},42241:(e,t,s)=>{"use strict";s.d(t,{InsidePage:()=>P});var n=s(41121),r=s(91269),a=s(9050),l=s(98149);let i=[{id:"mission-fabric",title:"미션 패브릭",oneLine:"들어온 일을 미션으로 정하고 실행에 잇습니다.",docs:["docs/manual/MANUAL-mission-fabric-integration-2026-09-03.md"],code:["src/mission-loop/composite-cycle.ts","src/harness/mission-solve-loop.ts"]},{id:"graph-engineering",title:"그래프 엔지니어링",oneLine:"실행의 노드와 경로를 그래프로 읽습니다.",docs:["docs/manual/MANUAL-graph-operations-2026-09-10.md"],code:["src/self-implement/graph-templates.ts","src/self-implement/graph-authority.ts"]},{id:"pty-intelligence",title:"PTY 인텔리전스",oneLine:"에이전트가 터미널의 실행과 관측을 연결합니다.",docs:["docs/manual/MANUAL-external-agent-pty-missions-2026-08-11.md"],code:["src/self-dev/dev-cli.ts"]},{id:"loop-agent",title:"루프 에이전트",oneLine:"일을 반복 관측하고 다음 행동을 고릅니다.",docs:["docs/manual/MANUAL-execution-and-landing-loops-2026-09-29.md"],code:["src/harness/mission-solve-loop.ts","src/mission-loop/composite-cycle.ts"]},{id:"observation",title:"바닥 \xb7 관측\xb7인지\xb7힐링",oneLine:"본 것을 이해하고 스스로 고치는 바닥입니다.",docs:["docs/manual/MANUAL-self-cognition-observability-2026-07-14.md"],code:["src/self-implement/orchestrator.ts"]},{id:"harness",title:"받침 \xb7 하니스",oneLine:"구현과 검증이 지나가는 실행 받침입니다.",docs:["docs/TECH-harness-execution-anatomy-current-state-2026-08-10.md"],code:["src/self-implement/orchestrator.ts","src/self-dev/dev-cli.ts"]}];var o=s(87065);function d(e){let{entry:t}=e,[s,a]=(0,r.useState)(!1);return(0,n.jsxs)("details",{open:s,style:{minWidth:0,border:"1px solid #68788f",borderRadius:12,padding:18,background:"#16263b"},children:[(0,n.jsx)("summary",{onClick:e=>{e.preventDefault(),a(e=>!e)},style:{cursor:"pointer",fontWeight:700,overflowWrap:"anywhere"},children:(0,o.t)(t.title)}),(0,n.jsx)("p",{children:(0,o.t)(t.oneLine)}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"문서"}),(0,n.jsx)("ul",{children:t.docs.map(e=>(0,n.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))}),(0,n.jsx)("strong",{children:"코드"}),(0,n.jsx)("ul",{children:t.code.map(e=>(0,n.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))})]})]})}function c(){return(0,n.jsxs)("div",{"data-architecture-scene":!0,style:{width:"100%",maxWidth:1600,margin:"auto",display:"grid",gap:20,fontSize:18},children:[(0,n.jsx)("h2",{style:{fontSize:28,margin:0},children:"엘라누스의 구조"}),(0,n.jsx)("div",{"aria-label":"네 기둥",style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 240px), 1fr))",gap:16},children:i.slice(0,4).map(e=>(0,n.jsx)(d,{entry:e},e.id))}),(0,n.jsx)("div",{"aria-label":"받침",style:{width:"100%",maxWidth:480,justifySelf:"center"},children:(0,n.jsx)(d,{entry:i[5]})}),(0,n.jsx)("div",{"aria-label":"바닥",children:(0,n.jsx)(d,{entry:i[4]})})]})}var u=s(38519),p=s(44130);let m={currentMissionId:null,missions:{}},h=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),f=e=>"string"==typeof e&&e.trim().length>0;function g(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if(!t||"object"!=typeof t||Array.isArray(t))return null;let s=t;if("wizard.step"!==s.category||"wizard.step"!==s.event||!s.data||"object"!=typeof s.data||Array.isArray(s.data))return null;let n=s.data;return"string"==typeof n.ts&&Number.isFinite(Date.parse(n.ts))&&"string"==typeof n.wizardId&&n.wizardId&&["request","research","draft","validate","install","done"].includes(n.step)&&"string"==typeof n.text?{ts:n.ts,wizardId:n.wizardId,step:n.step,text:n.text,...void 0===n.detail?{}:{detail:n.detail}}:null}function x(e,t){let s=e.logsStreamUrl({exactCategory:"wizard.step"});return s?(0,p.BX)(s,{events:{log:e=>{let s=g(e.data);s&&t(s)}}}):()=>{}}let b={currentRunId:null,runs:{}},y={start:"border-sky-400 bg-sky-500/15 text-sky-200",ok:"border-green-500 bg-green-500/15 text-green-300",fail:"border-red-500 bg-red-500/15 text-red-300"};function v(e){let{state:t,now:s,receivedAt:r,lastSettlement:a,lastActivityTs:l=null,activityStatus:i="loading",wizardSteps:d=[]}=e,c=t.currentRunId?t.runs[t.currentRunId]:null,u=!c||s-r>6e4,p=null==c?void 0:c.order.some(e=>"start"===c.nodes[e].phase),m=a&&!p&&s-a.receivedAt<15e3,h=a&&!p&&s-a.receivedAt>=15e3,f=c?Math.max(0,Math.floor((s-Date.parse(c.startedAt))/1e3)):0,g=c&&a?Math.max(0,Math.floor((Date.parse(a.ts)-Date.parse(c.startedAt))/1e3)):0,x=h?"fail"===a.phase?"실패 \xb7 ".concat(a.nodeId):"완료 \xb7 ".concat(g,"초"):null;return(0,n.jsxs)("section",{"aria-label":"라이브 트레이스",className:"min-w-0 space-y-6 p-6 text-lg leading-relaxed",children:[d.length>0&&(0,n.jsx)("ol",{"aria-label":"플러그인 마법사 흐름",children:d.map(e=>(0,n.jsxs)("li",{children:["마법사 ",e.step," \xb7 ",(0,o.t)(e.text)]},"".concat(e.wizardId,":").concat(e.step)))}),u?(0,n.jsxs)("div",{className:"space-y-4 text-muted-foreground",children:[(0,n.jsx)("p",{children:"지금 도는 런이 없습니다"}),(0,n.jsxs)("p",{role:"status",children:["마지막 활동: ",l&&Number.isFinite(Date.parse(l))?(0,n.jsxs)("time",{dateTime:l,children:[new Date(l).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"})," KST"]}):"loading"===i?"확인 중":"unavailable"===i?"못 읽음":"기록 없음"]}),(0,n.jsx)("button",{type:"button",className:"rounded-lg border border-border px-5 py-3 text-lg",disabled:!0,children:"녹화 보기"})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"flex flex-wrap items-center gap-x-5 gap-y-2 break-all text-lg",children:[(0,n.jsx)("h2",{className:"font-semibold",children:c.graphId}),(0,n.jsxs)("span",{children:["런 ",c.runId.slice(0,6)]}),(0,n.jsxs)("span",{children:["경과 ",f,"초"]}),x&&(0,n.jsx)("span",{role:"status",children:x})]}),(0,n.jsxs)("div",{role:"list","aria-label":"노드 흐름",className:"flex flex-wrap gap-3",children:[m&&(0,n.jsx)("span",{className:"rounded-lg border border-border bg-muted px-3 py-1 text-sm text-muted-foreground",children:"다음 단계 준비 중"}),c.order.map(e=>{let t=c.nodes[e];return(0,n.jsxs)("div",{role:"listitem",className:"min-w-0 max-w-full break-all rounded-lg border px-5 py-3 ".concat(y[t.phase]),children:[(0,n.jsxs)("span",{className:"start"===t.phase?"animate-pulse":"",children:[t.nodeId," \xb7 ","start"===t.phase?"진행 중":"ok"===t.phase?"ok":"fail"]}),t.retries>0&&(0,n.jsxs)("span",{className:"ml-3","aria-label":"다시 ".concat(t.retries,"회"),children:["↻",t.retries]})]},e)})]})]})]})}function w(){let{client:e,config:t}=(0,u.Q)(),[s,a]=(0,r.useState)(()=>({client:e,baseUrl:t.baseUrl,token:t.token,state:b,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"})),[l,i]=(0,r.useState)(0),[o,d]=(0,r.useState)([]),c=s.client===e&&s.baseUrl===t.baseUrl&&s.token===t.token;return(0,r.useEffect)(()=>{let s=!0;a({client:e,baseUrl:t.baseUrl,token:t.token,state:b,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"}),d([]),e.listLogs({category:"graph.run",event:"node",limit:"1"}).then(n=>{s&&a(s=>{var r,a;if(s.client!==e||s.baseUrl!==t.baseUrl||s.token!==t.token)return s;let l=null==(a=n.logs)||null==(r=a[0])?void 0:r.ts,i="string"==typeof l&&Number.isFinite(Date.parse(l))?l:null,o=i&&(!s.lastActivityTs||Date.parse(i)>Date.parse(s.lastActivityTs))?i:s.lastActivityTs;return{...s,lastActivityTs:o,activityStatus:n.ok&&Array.isArray(n.logs)?"ready":"unavailable"}})}).catch(()=>{s&&a(s=>s.client===e&&s.baseUrl===t.baseUrl&&s.token===t.token?{...s,activityStatus:"unavailable"}:s)});let n=x(e,e=>{s&&d(t=>"request"===e.step?[e]:[...t.filter(t=>t.wizardId===e.wizardId),e].slice(-6))}),r=function(e,t){let s=e.logsStreamUrl({category:"graph.run"});return s?(0,p.BX)(s,{events:{log:e=>{let s=function(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if("object"!=typeof t||null===t||Array.isArray(t))return null;let s=t;if("graph.run"!==s.category||"node"!==s.event)return null;let n=s.data;return"object"!=typeof n||null===n||Array.isArray(n)?null:["graphId","runId","nodeId"].every(e=>"string"==typeof n[e]&&n[e].trim().length>0)&&("start"===n.phase||"ok"===n.phase||"fail"===n.phase)&&"string"==typeof s.ts&&Number.isFinite(Date.parse(s.ts))&&(void 0===n.seconds||"number"==typeof n.seconds&&Number.isFinite(n.seconds)&&!(n.seconds<0))?{kind:"node",graphId:n.graphId,runId:n.runId,nodeId:n.nodeId,phase:n.phase,ts:s.ts,...void 0===n.seconds?{}:{seconds:n.seconds}}:null}(e.data);s&&t(s)}}}):()=>{}}(e,n=>{if(!s)return;let r=Date.now();a(a=>{var l,i;if(!s)return a;let o=a.client===e&&a.baseUrl===t.baseUrl&&a.token===t.token,d=o?a.state:b,c=d.currentRunId===n.runId&&"start"!==n.phase&&(null==(i=d.runs[n.runId])||null==(l=i.nodes[n.nodeId])?void 0:l.phase)===n.phase,u=d.currentRunId!==n.runId&&d.runs[n.runId]?a.lastSettlement:"start"===n.phase||d.currentRunId!==n.runId?null:c?a.lastSettlement:{receivedAt:r,nodeId:n.nodeId,phase:n.phase,ts:n.ts},p=!o||!a.lastActivityTs||Date.parse(n.ts)>Date.parse(a.lastActivityTs)?n.ts:a.lastActivityTs;return{client:e,baseUrl:t.baseUrl,token:t.token,receivedAt:r,lastSettlement:u,lastActivityTs:p,activityStatus:o?a.activityStatus:"loading",state:function(e,t){var s,n,r,a;let l=Object.hasOwn(e.runs,t.runId)?e.runs[t.runId]:void 0,i=l&&Object.hasOwn(l.nodes,t.nodeId)?l.nodes[t.nodeId]:void 0,o={nodeId:t.nodeId,phase:t.phase,retries:(null!=(s=null==i?void 0:i.retries)?s:0)+("start"===t.phase&&i?1:0)},d={graphId:t.graphId,runId:t.runId,startedAt:null!=(n=null==l?void 0:l.startedAt)?n:t.ts,order:i?l.order:[...null!=(r=null==l?void 0:l.order)?r:[],t.nodeId],nodes:{...null==l?void 0:l.nodes,[t.nodeId]:o}};return{currentRunId:l&&null!=(a=e.currentRunId)?a:t.runId,runs:{...e.runs,[t.runId]:d}}}(d,n)}}),i(r)}),l=setInterval(()=>i(Date.now()),1e3);return()=>{s=!1,r(),n(),clearInterval(l)}},[e,t.baseUrl,t.token]),(0,n.jsx)(v,{state:c?s.state:b,now:l,receivedAt:s.receivedAt,lastSettlement:c?s.lastSettlement:null,lastActivityTs:c?s.lastActivityTs:null,activityStatus:c?s.activityStatus:"loading",wizardSteps:c?o:[]})}var j=s(51757),k=s(45546),I=s(52423);let A=I.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),S=I.CF.map(e=>({graph:"workflow",kind:e,plugin:null,description:"",schema:{},core:!0}));function N(){let{GraphEditor:e=j.F,WorkflowEditor:t=k.N}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[s,a]=(0,r.useState)("harness");return(0,n.jsxs)("section",{"aria-label":"그래프 편집기",className:"flex h-full min-h-[640px] min-w-0 flex-col",children:[(0,n.jsx)("div",{role:"tablist","aria-label":"그래프 편집 모드",className:"flex shrink-0 gap-2 border-b border-border px-4 py-3",children:["harness","workflow"].map(e=>(0,n.jsx)("button",{type:"button",role:"tab",id:"inside-editor-tab-".concat(e),"aria-controls":"inside-editor-panel-".concat(e),"aria-selected":s===e,onClick:()=>a(e),className:"rounded-lg px-4 py-2 text-lg min-[1440px]:text-[22px] ".concat(s===e?"bg-accent/15 text-text-primary":"text-text-tertiary hover:bg-surface-elevated"),children:"harness"===e?"실행 그래프":"워크플로"},e))}),(0,n.jsx)("div",{id:"inside-editor-panel-harness",role:"tabpanel","aria-labelledby":"inside-editor-tab-harness",hidden:"harness"!==s,className:"harness"===s?"min-h-0 min-w-0 flex-1 overflow-x-auto":"hidden",children:(0,n.jsx)("div",{className:"flex h-full min-h-[640px] min-w-[700px] flex-col min-[700px]:min-w-0",children:(0,n.jsx)(e,{palette:A,initialGraphId:"self-implement"})})}),(0,n.jsx)("div",{id:"inside-editor-panel-workflow",role:"tabpanel","aria-labelledby":"inside-editor-tab-workflow",hidden:"workflow"!==s,className:"workflow"===s?"min-h-0 min-w-0 flex-1 overflow-x-auto":"hidden",children:(0,n.jsx)("div",{className:"flex h-full min-h-[640px] min-w-[700px] flex-col min-[700px]:min-w-0",children:(0,n.jsx)(t,{palette:S})})})]})}var T=s(44457);let D=/^\s*(승인|거부|반려|보류|허용|차단|중단|취소)(?=$|[\s.,!?;:])/;function z(e){let{decisions:t,now:s=Date.now()}=e,r=Object.values(t.missions).flat().filter(e=>"answer"===e.step).sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts)||t.seq-e.seq),a=r[0],l=a?Math.max(0,Math.floor((s-Date.parse(a.ts))/6e4)):null,i=r.flatMap(e=>{var t;let n=null==(t=D.exec(e.detail.answer))?void 0:t[1];return n&&s-Date.parse(e.ts)<3e5?[{item:e,outcome:n}]:[]});return(0,n.jsxs)("section",{"aria-label":"PTY 인텔리전스",className:"min-w-0 rounded-xl border border-slate-600 p-5 text-lg leading-relaxed min-[1440px]:text-[22px]",children:[(0,n.jsx)("h2",{className:"mb-5 font-semibold",children:"PTY 판단"}),0===i.length?(0,n.jsxs)("p",{role:"status",children:["지금 PTY 판단이 없습니다 — 마지막 판단 ",null===l?"기록 없음":"".concat(l,"분 전")]}):(0,n.jsx)("ol",{"aria-label":"최근 PTY 판단",className:"space-y-4",children:i.slice(0,3).map(e=>{let{item:t,outcome:s}=e;return(0,n.jsxs)("li",{className:"min-w-0 rounded-lg border border-slate-600 p-4",children:[(0,n.jsx)("time",{dateTime:t.ts,children:(0,o.t)(t.ts)})," \xb7 ",(0,o.t)(s)]},"".concat(t.missionId,":").concat(t.seq))})})]})}let U=[{step:"request",label:"요청"},{step:"research",label:"조사"},{step:"draft",label:"초안"},{step:"validate",label:"검증"},{step:"install",label:"설치"},{step:"done",label:"끝"}],C={done:"border-green-500 bg-green-500/15 text-green-300",now:"border-sky-400 bg-sky-500/15 text-sky-200",todo:"border-slate-500 bg-slate-500/15 text-slate-300",failed:"border-red-500 bg-red-500/15 text-red-300"},E={done:"완료",now:"진행 중",todo:"대기",failed:"실패"};function L(e){let{events:t}=e,s=function(e){if(0===e.length)return[];let t=e[e.length-1].wizardId,s=e.filter(e=>e.wizardId===t),n=s[s.length-1],r=U.findIndex(e=>e.step===n.step);return U.map((e,t)=>{let{step:a,label:l}=e,i=s.findLast(e=>e.step===a),o=(null==i?void 0:i.detail)!=null&&"object"==typeof i.detail&&!Array.isArray(i.detail)&&!1===i.detail.ok;return{step:a,label:l,state:"done"===n.step?"done":o?"failed":t<r?"done":t===r?"now":"todo",...i?{text:i.text,at:i.ts}:{}}})}(t);return(0,n.jsx)("section",{"aria-label":"마법사 → 마켓",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:0===s.length?(0,n.jsxs)("p",{children:["마법사가 아직 돌지 않았습니다 — ",(0,n.jsx)("code",{children:'elanous plugin make "<한 줄>"'})," 로 시작"]}):(0,n.jsx)("ol",{"aria-label":"마법사 단계",className:"grid grid-cols-1 gap-3 min-[900px]:grid-cols-6",children:s.map(e=>(0,n.jsxs)("li",{"data-wizard-step":e.step,"data-state":e.state,className:"min-w-0 rounded-xl border p-4 ".concat(C[e.state]),children:[(0,n.jsxs)("div",{className:"font-semibold",children:[e.label," ",(0,n.jsxs)("span",{className:"font-normal",children:["\xb7 ",E[e.state]]})]}),e.text&&(0,n.jsx)("p",{className:"mt-3 overflow-hidden text-ellipsis whitespace-nowrap",title:(0,o.t)(e.text),children:(0,o.t)(e.text)})]},e.step))})})}let M=e=>"".concat(e.wizardId,":").concat(e.step,":").concat(e.ts,":").concat(e.text);function K(){let{client:e}=(0,u.Q)(),[t,s]=(0,r.useState)(()=>({client:e,events:[]}));return(0,r.useEffect)(()=>{let t=!0;s({client:e,events:[]});let n=n=>{t&&n.length&&s(t=>({client:e,events:function(e,t){let s=new Map;for(let n of[...e,...t])s.set(M(n),n);return[...s.values()].sort((e,t)=>e.ts.localeCompare(t.ts)).slice(-50)}(t.client===e?t.events:[],n)}))},r=e.fetchJson;"function"==typeof r&&r.call(e,"/v1/logs?exactCategory=wizard.step&limit=".concat(50)).then(e=>{let t=null==e?void 0:e.logs;n(Array.isArray(t)?t.map(g).filter(e=>null!==e):[])}).catch(()=>{});let a=x(e,e=>n([e]));return()=>{t=!1,a()}},[e]),(0,n.jsx)(L,{events:t.client===e?t.events:[]})}let R=["문서 아키텍처","라이브 트레이스","루프 에이전트","그래프 편집기","마법사 → 마켓","PTY 인텔리전스"],q=R.length,O="elanous.inside.demo";function F(e){return null!==e&&/^[1-9]$/.test(e)&&Number(e)<=q?Number(e):1}function P(){let e=(0,a.useSearchParams)();return(0,n.jsx)(W,{search:e})}function W(e){let{search:t,liveTrace:s=(0,n.jsx)(w,{}),editorScene:a=(0,n.jsx)(N,{}),loopScene:i=(0,n.jsx)(T.p1,{}),wizardScene:d=(0,n.jsx)(K,{}),ptyScene:u=(0,n.jsx)(Y,{})}=e,[p,m]=(0,r.useState)(()=>F(t.get("scene"))),[h,f]=(0,r.useState)(()=>"1"===t.get("demo")),g=(0,r.useRef)(null),x=(0,r.useRef)(p),b=(0,r.useRef)(h);x.current=p,b.current=h;let y=(0,r.useCallback)(e=>{let t=new URL(window.location.href);for(let[s,n]of Object.entries(e))t.searchParams.set(s,n);window.history.replaceState(window.history.state,"",t.toString())},[]),v=(0,r.useCallback)(e=>{e<1||e>q||(x.current=e,m(e),y({scene:String(e)}))},[y]),j=(0,r.useCallback)(()=>{let e=!b.current;b.current=e,f(e),y({demo:e?"1":"0"});try{window.localStorage.setItem(O,e?"1":"0")}catch(e){}},[y]);return(0,r.useEffect)(()=>{let e=t.get("demo"),s="1"===e;if(null===e)try{s="1"===window.localStorage.getItem(O)}catch(e){}else try{window.localStorage.setItem(O,s?"1":"0")}catch(e){}b.current=s,f(s);let n=F(t.get("scene"));x.current=n,m(n)},[t]),(0,r.useEffect)(()=>{window.dispatchEvent(new window.Event("elanous:inside-demo"))},[h]),(0,r.useEffect)(()=>{let e=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey||(0,l._i)(e.target))){if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowRight"===e.key?1:-1;v(Math.min(q,Math.max(1,x.current+t)))}else if("d"===e.key.toLowerCase())j();else if("f"===e.key.toLowerCase()){var t;"function"==typeof(null==(t=g.current)?void 0:t.requestFullscreen)&&g.current.requestFullscreen().catch(()=>{})}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v,j]),(0,n.jsxs)("main",{ref:g,"data-inside-page":!0,style:{width:"100%",minHeight:"100vh",minWidth:0,padding:20,boxSizing:"border-box",background:"#0c1828",color:"#f1f5fa",fontSize:18},children:[(0,n.jsx)("style",{children:'@media (min-width: 1440px) {\n [data-inside-page] h1 { font-size: 40px !important; }\n [data-inside-page] nav button { font-size: 22px !important; }\n [data-inside-page] [data-inside-scene="1"] [data-architecture-scene],\n [data-inside-page] [data-inside-scene="2"] section,\n [data-inside-page] [data-inside-scene="2"] header,\n [data-inside-page] [data-inside-scene="2"] button,\n [data-inside-page] [data-inside-scene="2"] .text-sm { font-size: 22px !important; }\n }'}),(0,n.jsxs)("header",{style:{display:"flex",alignItems:"center",gap:16},children:[(0,n.jsx)("h1",{style:{fontSize:28,margin:0},children:"엘라누스 안쪽"}),h&&(0,n.jsx)("span",{"aria-label":"시연 모드",style:{fontSize:18},children:"시연"})]}),(0,n.jsx)("nav",{"aria-label":"장면 선택",style:{display:"flex",minHeight:48,overflowX:"auto",gap:8,margin:"18px 0",whiteSpace:"nowrap"},children:R.map((e,t)=>(0,n.jsx)("button",{type:"button","aria-current":p===t+1?"page":void 0,onClick:()=>v(t+1),style:{flexShrink:0,minHeight:48,padding:"8px 16px",fontSize:18,borderRadius:8,border:"1px solid #7188a5",color:"#fff",background:p===t+1?"#22558b":"#203147"},children:(0,o.t)("".concat(t+1," ").concat(e))},e))}),R.map((e,t)=>(0,n.jsx)("section",{"data-inside-scene":t+1,hidden:p!==t+1,"aria-label":(0,o.t)("".concat(t+1," ").concat(e)),style:{minWidth:0},children:0===t?(0,n.jsx)(c,{}):1===t?s:2===t?i:3===t?a:4===t?d:u},e))]})}function Y(){let{client:e}=(0,u.Q)(),[t,s]=(0,r.useState)(()=>({client:e,decisions:m})),[a,l]=(0,r.useState)(()=>Date.now());return(0,r.useEffect)(()=>{let e=setInterval(()=>l(Date.now()),6e4);return()=>clearInterval(e)},[]),(0,r.useEffect)(()=>{let t=!0;s({client:e,decisions:m});let n=function(e,t){let s=e.logsStreamUrl({exactCategory:"pty.decision"});return s?(0,p.BX)(s,{events:{log:e=>{let s;try{s=JSON.parse(e.data)}catch(e){return}if(!s||"object"!=typeof s||Array.isArray(s))return;let n=s;if("pty.decision"!==n.category)return;let r=function(e){if(!h(e))return null;let{ts:t,missionId:s,seq:n,sessionId:r,terminalId:a,agent:l,step:i,text:o,detail:d}=e;if(!f(t)||!Number.isFinite(Date.parse(t))||!f(s)||!Number.isSafeInteger(n)||n<0||!f(r)||!f(a)||!f(l)||!f(o)||void 0!==d&&!h(d)||h(d)&&(void 0!==d.keys&&"string"!=typeof d.keys||void 0!==d.row&&(!Number.isSafeInteger(d.row)||d.row<0)))return null;let c={ts:t,missionId:s,seq:n,sessionId:r,terminalId:a,agent:l,text:o},u=h(d)?{...void 0!==d.keys?{keys:d.keys}:{},...void 0!==d.row?{row:d.row}:{}}:{};return"answer"===i?h(d)&&f(d.question)&&f(d.answer)?{...c,step:i,detail:{...u,question:d.question,answer:d.answer}}:null:"recover"===i?h(d)&&f(d.blocked)&&f(d.action)?{...c,step:i,detail:{...u,blocked:d.blocked,action:d.action}}:null:"done"===i?h(d)&&h(d.result)&&f(d.result.ref)&&("pr"===d.result.kind||"file"===d.result.kind||"text"===d.result.kind)?{...c,step:i,detail:{...u,result:{kind:d.result.kind,ref:d.result.ref}}}:null:"read"===i||"judge"===i||"input"===i?{...c,step:i,...void 0!==d?{detail:u}:{}}:null}(n.data);r&&n.event===r.step&&t(r)}}}):()=>{}}(e,n=>{t&&s(t=>({client:e,decisions:function(e,t){let s=Object.hasOwn(e.missions,t.missionId)?e.missions[t.missionId]:[];if(s.some(e=>e.seq===t.seq))return e;let n=[...s,t].sort((e,t)=>e.seq-t.seq),r={...e.missions,[t.missionId]:n},a=e.currentMissionId?r[e.currentMissionId]:void 0,l=n.at(-1),i=null==a?void 0:a.at(-1);return{missions:r,currentMissionId:!i||Date.parse(l.ts)>Date.parse(i.ts)?t.missionId:e.currentMissionId}}(t.client===e?t.decisions:m,n)}))});return()=>{t=!1,n()}},[e]),(0,n.jsx)(z,{decisions:t.client===e?t.decisions:m,now:a})}},98149:(e,t,s)=>{"use strict";function n(e){return e.metaKey||e.ctrlKey}function r(e){let t=e.key.toLowerCase();return!n(e)||e.shiftKey||e.altKey||"k"!==t?n(e)&&e.shiftKey&&!e.altKey&&"j"===t?e.fromEditable?null:"toggle-role-judge":n(e)&&e.shiftKey&&!e.altKey&&"m"===t?e.fromEditable?null:"toggle-voice":n(e)&&e.shiftKey&&!e.altKey&&"y"===t?e.fromEditable?null:"toggle-tts":"?"!==e.key||n(e)||e.altKey?null:e.fromEditable?null:"open-help":"focus-broadcast-input"}function a(e){var t;if(!e)return!1;let s=e.tagName;if(!s)return!1;if("INPUT"===s||"TEXTAREA"===s||"SELECT"===s)return!0;let n=null==(t=e.getAttribute)?void 0:t.call(e,"contenteditable");return""===n||"true"===n}s.d(t,{ZQ:()=>r,_i:()=>a,nm:()=>l});let l=[{id:"focus-broadcast-input",combo:"⌘K / Ctrl+K",effect:"Focus broadcast input"},{id:"toggle-role-judge",combo:"⌘⇧J / Ctrl+⇧J",effect:"Toggle role-judge backend"},{id:"toggle-voice",combo:"⌘⇧M / Ctrl+⇧M",effect:"Toggle voice mode (mic)"},{id:"toggle-tts",combo:"⌘⇧Y / Ctrl+⇧Y",effect:"Toggle TTS mute"},{id:"open-help",combo:"?",effect:"Open this help overlay"}]}},e=>{e.O(0,[5848,2285,6987,920,6998,5609,171,8870,5012,2375,4551,5791,8430,4457,2367,6725,7358],()=>e(e.s=35481)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{18756:(e,t,r)=>{"use strict";r.d(t,{Gm:()=>u,IH:()=>s,PM:()=>o,ZJ:()=>l,cE:()=>a,dy:()=>c,qI:()=>i,sg:()=>d});let n=/https?:\/\/[^\s<>"']+/g;function a(e){return e.slice(0,40)}async function s(e,t){let r=function(e){var t;let r=null!=(t=e.match(n))?t:[];return 0===r.length?[{text:e}]:r.map(e=>({url:e}))}(t),a=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:r,source:"pwa"})});return{ids:a.ids,added:a.added,merged:a.merged}}function i(e,t,r,n){return e.fetchJson("/v1/task-cards/wish",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,sessionId:r,ref:n})})}async function l(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function o(e,t){return e.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(t)))}function c(e,t){return e.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(t)))}function u(e,t){return e.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(t)))}function d(e,t,r){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==r?void 0:r.classify)!==void 0?{classify:r.classify}:{}})})}},19973:(e,t,r)=>{Promise.resolve().then(r.bind(r,88832))},27813:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>i,f6:()=>a,oD:()=>s});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=a();return localStorage.setItem(n,t),t}function i(){let e=a();return localStorage.setItem(n,e),e}},38519:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>u,Q:()=>d});var n=r(41121),a=r(91269),s=r(49536),i=r(27813),l=r(45012),o=r(51215);let c=(0,a.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,a.useState)(r),[p,f]=(0,a.useState)(""),[h]=(0,a.useState)(()=>new l.ki(r));(0,a.useEffect)(()=>{let e=(0,s.Fp)();d(e),h.updateConfig(e),f((0,i.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();h.updateConfig(t),d(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let m=e=>{d(t=>{let r={...t,...e};return(0,s.Qc)(e),h.updateConfig(r),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},v=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,a.useMemo)(()=>({config:u,setConfig:m,client:h,sessionId:p,setSessionId:v}),[u,h,p]);return(0,n.jsx)(c.Provider,{value:g,children:t})}function d(){let e=(0,a.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},53220:(e,t,r)=>{"use strict";r.d(t,{V5:()=>s,tV:()=>i});var n=r(94387);class a extends Error{constructor(e,t,r){super(r||t),this.status=e,this.error=t,this.reason=r,this.name="MergeApprovalsApiError"}}function s(e,t){return e instanceof a?401===e.status||"unauthorized"===e.error?{text:"이 기기에 소유자 토큰이 없어 승인 목록을 못 읽었습니다 — 이미 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙이면 바로 보입니다.",href:"/app/settings/#bearer-token"}:"gh-failed"===e.error?{text:"데몬이 GitHub 를 읽지 못했습니다(데몬 기계의 gh 로그인\xb7네트워크) — 잠시 뒤 다시 열어 보세요.".concat(e.reason?" 사유: ".concat(e.reason.split("\n")[0].slice(0,160)):"")}:"gh-invalid-response"===e.error?{text:"GitHub 응답을 해석하지 못했습니다 — 잠시 뒤 다시 열어 보세요."}:"approvals-repo-unknown"===e.error?{text:"승인할 저장소를 모릅니다 — 데몬 설정 intake.approvals.repo(예: owner/repo)를 채워 주세요.",href:"/app/settings/"}:e.reason?{text:e.reason}:{text:"".concat(t," (").concat(e.status," ").concat(e.error,")")}:e instanceof TypeError?{text:"데몬에 닿지 못했습니다 — 데몬이 켜져 있는지, 이 기기가 같은 네트워크(tailnet)에 있는지 확인하세요."}:{text:e instanceof Error&&e.message?e.message:t}}function i(e){var t,r;let s=null!=(t=e.fetchImpl)?t:fetch,i=(null!=(r=e.baseUrl)?r:"").replace(/\/+$/,"");async function l(t,r){let n={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},l=e.client?await e.client.fetchResponse(t,n):await s("".concat(i).concat(t),n),o=await l.json().catch(()=>null);if(!l.ok){var c;let e=o&&"object"==typeof o?o:{};throw new a(l.status,null!=(c=e.error)?c:"request-failed",e.reason)}return o}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return l("merged"===e?"".concat(n.r5,"?state=merged"):n.r5)},get:e=>l("".concat(n.r5,"/").concat(e)),check:(e,t)=>l("".concat(n.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>l("".concat(n.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},72030:(e,t,r)=>{"use strict";r.d(t,{$:()=>o});var n=r(41121),a=r(72524),s=r(49155),i=r(82157);let l=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function o(e){let{className:t,variant:r="default",size:s="default",...o}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,i.cn)(l({variant:r,size:s,className:t})),...o})}},78845:(e,t,r)=>{"use strict";r.d(t,{SY:()=>b});var n=r(41121),a=r(91269),s=r(38519),i=r(72030),l=r(18756);let o=["absorbed","discarded","routed","checked"],c={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function u(e){var t,r,n;return null===e?{label:"찾을 수 없음",settled:!1,noteRef:null}:{label:Object.hasOwn(c,e.status)?c[e.status]:e.status,settled:o.includes(e.status),noteRef:null!=(n=null==(r=e.outputs)||null==(t=r.find(e=>"note"===e.kind))?void 0:t.ref)?n:null}}let d={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function p(e){var t,r,n,a,s;let i=e.at(-1),l=e.find(e=>"run-terminal"===e.event),o=null==l||null==(t=l.payload)?void 0:t.runStatus;return{stage:i?null!=(n=d[i.event])?n:i.event:null,lastEventAt:null!=(a=null==i?void 0:i.ts)?a:null,done:void 0!==l,outcome:l?"completed"===o||"failed"===o?o:"unknown":null,error:null!=(s=null==l||null==(r=l.payload)?void 0:r.error)?s:null}}let f="elanous.intake.recent",h={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function m(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function v(e){try{var t;let r=null==(t=m(e))?void 0:t.getItem(f);if(!r)return[];let n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(e){return[]}}async function g(e,t,r){let n=(0,l.cE)(r);return"absorb"===t?{absorbIds:(await (0,l.IH)(e,r)).ids,recentPreview:n}:{acceptanceId:(await (0,l.ZJ)(e,r)).acceptanceId,recentPreview:n}}function b(){var e,t;let{state:r,deps:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:c,sessionId:d}=(0,s.Q)(),[b,x]=(0,a.useState)(""),[y,k]=(0,a.useState)(!1),[w,I]=(0,a.useState)(null),[j,S]=(0,a.useState)(null),[N,E]=(0,a.useState)(null),[O,z]=(0,a.useState)(null),[C,T]=(0,a.useState)({}),[R,J]=(0,a.useState)(null),P=(0,a.useRef)(null),[U,D]=(0,a.useState)([]),[M,_]=(0,a.useState)({}),A=(0,a.useRef)(M),V=(0,a.useMemo)(()=>[...new Set(U.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[U]),$=(0,a.useRef)(V);$.current=V;let Y=(0,a.useRef)(()=>{}),[H,q]=(0,a.useState)(null),[F,G]=(0,a.useState)(!1),Q=(0,a.useRef)(!1),B=(0,a.useRef)(0),L=(0,a.useRef)(b);L.current=b;let W=(0,a.useRef)(null),Z=(0,a.useRef)(C),K=(0,a.useRef)(U),X=(0,a.useMemo)(()=>[...new Set([...U.filter(e=>"graph"===e.track).map(e=>e.runId),null==O?void 0:O.runId].filter(e=>!!e))],[U,null==O?void 0:O.runId]);(0,a.useEffect)(()=>{D(v(o))},[o]),(0,a.useEffect)(()=>{K.current=U},[U]),(0,a.useEffect)(()=>{let e=!1,t=new Map,r=async n=>{var a;if(e||!$.current.includes(n)||u(null!=(a=A.current[n])?a:null).settled)return;let s=null;try{s=await (0,l.Gm)(c,n)}catch(e){}e||(A.current={...A.current,[n]:s},_(A.current),$.current.includes(n)&&!u(s).settled?t.set(n,setTimeout(()=>{r(n)},6e4)):t.delete(n))};return Y.current=e=>{var n;t.has(e)||u(null!=(n=A.current[e])?n:null).settled||(t.set(e,null),r(e))},$.current.forEach(Y.current),()=>{for(let r of(e=!0,t.values()))null!==r&&clearTimeout(r);t.clear(),Y.current=()=>{}}},[c]),(0,a.useEffect)(()=>{V.forEach(Y.current)},[V]);let ee=(0,a.useCallback)(e=>{var t,r;D(function(e,t){let r=[e,...v(t)].slice(0,20);try{var n;null==(n=m(t))||n.setItem(f,JSON.stringify(r))}catch(e){}return r}({...e,at:null!=(r=null==o||null==(t=o.now)?void 0:t.call(o))?r:new Date().toISOString()},o))},[o]),et=(0,a.useCallback)(async()=>{let e=b.trim();if(e&&!y){k(!0),I(null),S(null);try{var t;let r=await g(c,"absorb",e);S(null!=(t=r.absorbIds)?t:[]),ee({track:"absorb",preview:r.recentPreview,ids:r.absorbIds})}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}}},[y,c,ee,b]),er=(0,a.useCallback)(async()=>{var e;let t=b.trim();if(!t||y||!d)return;let r=null!=(e=P.current)?e:crypto.randomUUID();P.current=r,k(!0),I(null),J(null);try{let e=await (0,l.qI)(c,t,d,r);P.current=null,J(e.cardId),ee({track:"split",preview:(0,l.cE)(t),cardId:e.cardId})}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}},[y,c,ee,d,b]),en=(0,a.useCallback)(async()=>{let e=b.trim();if(e&&!y){k(!0),I(null),E(null),z(null);try{var t;let r=await g(c,"graph",e);E(null!=(t=r.acceptanceId)?t:null),W.current=Date.now(),ee({track:"graph",preview:r.recentPreview,acceptanceId:r.acceptanceId})}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}}},[y,c,ee,b]);(0,a.useEffect)(()=>{let e=++B.current;if(q(null),!b.trim())return;let t=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},n=e.trim();if(!n)return()=>{};let a=r.setTimeout(()=>t(n),500);return()=>r.clearTimeout(a)}(b,t=>{(0,l.sg)(c,t).then(t=>{B.current===e&&q(t)},()=>{B.current===e&&q(null)})});return()=>{++B.current,t()}},[c,b]);let ea=(0,a.useCallback)(async()=>{let e=b.trim();if(!e||Q.current||y||(null==H?void 0:H.reason)!=="rule-unknown")return;let t=++B.current;Q.current=!0,G(!0);try{let r=await (0,l.sg)(c,e,{classify:!0});B.current===t&&L.current.trim()===e&&q(r)}catch(r){B.current===t&&L.current.trim()===e&&q({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{Q.current=!1,G(!1)}},[y,c,null==H?void 0:H.reason,b]);(0,a.useEffect)(()=>{if(!N)return;let e=!1,t=async()=>{var t,r;if(e)return;let n=null!=(t=W.current)?t:Date.now();if(!(Date.now()-n>3e5))try{let t=await (0,l.PM)(c,N);if(!e&&(z(t),t.runId&&K.current.some(e=>"graph"===e.track&&e.acceptanceId===N&&e.runId!==t.runId))){let e=K.current.map(e=>"graph"===e.track&&e.acceptanceId===N?{...e,runId:t.runId}:e);K.current=e;try{null==(r=m(o))||r.setItem(f,JSON.stringify(e))}catch(e){}D(e)}}catch(e){}};t();let r=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(r)}},[N,c,o]),(0,a.useEffect)(()=>{Z.current=C},[C]),(0,a.useEffect)(()=>{let e;if(0===X.length)return;let t=!1,r=!1,n=async()=>{if(t||r)return;let a=X.filter(e=>{var t;return!p(null!=(t=Z.current[e])?t:[]).done});if(0!==a.length){r=!0;try{let e=await Promise.allSettled(a.map(e=>(0,l.dy)(c,e)));if(t)return;let r={};e.forEach((e,t)=>{"fulfilled"===e.status&&(r[a[t]]=e.value)}),Object.keys(r).length>0&&(Z.current={...Z.current,...r},T(Z.current))}finally{r=!1,!t&&X.some(e=>{var t;return!p(null!=(t=Z.current[e])?t:[]).done})&&(e=setTimeout(()=>{n()},3e4))}}};return n(),()=>{t=!0,e&&clearTimeout(e)}},[c,X]);let es=null!=r?r:{text:b,busy:y,error:w,absorbIds:j,acceptanceId:N,graph:O,runEvents:C,wishCardId:R,recent:U,route:H},ei=(0,a.useMemo)(()=>{var e,t;return es.acceptanceId?{acceptanceId:es.acceptanceId,phase:null==(e=es.graph)?void 0:e.phase,runId:null==(t=es.graph)?void 0:t.runId}:null},[es.acceptanceId,es.graph]),el=0===es.text.trim().length,eo=null!=(e=es.route)?e:null,ec=eo?"absorb"===(t=eo.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,eu=e=>ec===e?"ring-2 ring-ring":void 0;return(0,n.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,n.jsx)("header",{className:"space-y-1",children:(0,n.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,n.jsx)("textarea",{value:es.text,onChange:e=>{P.current=null,x(e.target.value)},rows:6,disabled:es.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),eo&&(0,n.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,n.jsx)("p",{"data-testid":"intake-route-chip-label",children:h[eo.track]}),"classifier"===eo.decidedBy&&(0,n.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*eo.confidence),"%"]}),(0,n.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,r;let n=e.reason.slice(26);return"분류기 추정: ".concat(null!=(r=null==(t=h[n])?void 0:t.slice(2))?r:n," (확신 낮음)")}return e.reason}(eo)}),"rule-unknown"===eo.reason&&(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"outline",disabled:F||es.busy||el,onClick:()=>void ea(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(i.$,{type:"button",size:"sm",className:eu("absorb"),"aria-pressed":"absorb"===ec,disabled:el||es.busy,onClick:()=>void et(),"data-testid":"intake-absorb","data-emphasized":"absorb"===ec?"true":"false",children:"흡수"}),(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"outline",className:eu("split"),"aria-pressed":"split"===ec,disabled:el||es.busy||!d,onClick:()=>void er(),"data-testid":"intake-split","data-emphasized":"split"===ec?"true":"false",children:"작업으로 나누기"}),(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"secondary",className:eu("graph"),"aria-pressed":"graph"===ec,disabled:el||es.busy,onClick:()=>void en(),"data-testid":"intake-graph","data-emphasized":"graph"===ec?"true":"false",children:"그래프로 실행"})]}),es.absorbIds&&(0,n.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,n.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,n.jsx)("ul",{children:es.absorbIds.map(e=>(0,n.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),ei&&(0,n.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,n.jsx)("p",{"data-testid":"intake-acceptance-id",children:ei.acceptanceId}),ei.phase&&(0,n.jsx)("p",{"data-testid":"intake-graph-phase",children:ei.phase}),ei.runId&&(0,n.jsx)("p",{"data-testid":"intake-graph-run",children:ei.runId})]}),es.error&&(0,n.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:es.error}),es.wishCardId&&(0,n.jsxs)("p",{className:"text-sm","data-testid":"intake-wish-card-id",children:["소원 카드 ",es.wishCardId]}),es.recent.length>0&&(0,n.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:es.recent.map((e,t)=>{var r;let a=(e=>{var t,r,n;let a=null!=(r=e.runId)?r:e.acceptanceId===es.acceptanceId?null==ei?void 0:ei.runId:void 0;return a?p(null!=(n=null==(t=es.runEvents)?void 0:t[a])?n:[]):null})(e);return(0,n.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(r=e.ids)?void 0:r.map(e=>{var t,r;let a=Object.hasOwn(M,e)?u(null!=(t=M[e])?t:null):null;return(0,n.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 흡수: ",null!=(r=null==a?void 0:a.label)?r:"조회 중",(null==a?void 0:a.noteRef)?" \xb7 ".concat(a.noteRef):""]},e)})),e.cardId?" \xb7 카드 ".concat(e.cardId):"",e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==a?void 0:a.stage)&&(0,n.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",a.stage]}),(null==a?void 0:a.lastEventAt)&&(0,n.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:a.lastEventAt,children:[" \xb7 마지막 사건: ",a.lastEventAt]}),(null==a?void 0:a.done)&&(0,n.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===a.outcome?"완료":"failed"===a.outcome?"실패":"결과 미상",a.error?" \xb7 ".concat(a.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}},82157:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(3511),a=r(97043);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}},88832:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(41121),a=r(45609),s=r.n(a),i=r(91269),l=r(38519),o=r(53220);function c(e){let{items:t}=e,r=t.filter(e=>"OPEN"===e.state&&!e.draft);if(0===r.length)return null;let a=r.slice(0,3);return(0,n.jsx)("div",{className:"mx-auto max-w-lg px-4 pt-4",children:(0,n.jsxs)("section",{"aria-label":"승인 대기",className:"rounded-lg border border-emerald-600/40 bg-emerald-500/10 p-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("p",{className:"font-semibold",children:["흡수 아이디어 승인 대기 ",r.length,"건"]}),(0,n.jsx)(s(),{href:"/approvals",className:"rounded-md bg-emerald-700 px-3 py-1 text-white hover:bg-emerald-800",children:"Approvals 에서 보기 →"})]}),(0,n.jsxs)("ul",{className:"mt-2 space-y-1",children:[a.map(e=>(0,n.jsxs)("li",{className:"break-words",children:[(0,n.jsxs)(s(),{href:"/approvals?pr=".concat(e.number),className:"underline",children:["#",e.number]})," \xb7 ",e.title]},e.number)),r.length>a.length&&(0,n.jsxs)("li",{className:"text-muted-foreground",children:["외 ",r.length-a.length,"건"]})]})]})})}function u(){let{client:e}=(0,l.Q)(),t=(0,i.useMemo)(()=>(0,o.tV)({client:e}),[e]),[r,a]=(0,i.useState)([]);return(0,i.useEffect)(()=>{let e=!0;return t.list().then(t=>{let{items:r}=t;e&&a(r)}).catch(()=>{e&&a([])}),()=>{e=!1}},[t]),(0,n.jsx)(c,{items:r})}var d=r(78845);function p(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(u,{}),(0,n.jsx)(d.SY,{})]})}},94387:(e,t,r)=>{"use strict";r.d(t,{GM:()=>l,J3:()=>i,WF:()=>n,bR:()=>s,m:()=>o,r5:()=>a});let n="/v1/devices",a="/v1/approvals/merges",s="/v1/templates/capability-preview",i="/v1/idle-nudge/preview",l="/v1/morning-digest/showroom",o="/v1/next-fluent/dispatch"}},e=>{e.O(0,[2977,216,7990,5012,2367,6725,7358],()=>e(e.s=19973)),_N_E=e.O()}]);