elanous 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/Y4zKzL62sakG5momz3SoQ/_buildManifest.js +1 -0
  4. package/apps/pwa/out/_next/static/chunks/1159-0c5ef8bc21cb6afb.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1394-556de6d71bbdb0fb.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1452.93700483b9d4fc61.js +9 -0
  7. package/apps/pwa/out/_next/static/chunks/{6062-73e68343a9814f6a.js → 1829-b453a1b22d3999bb.js} +1 -1
  8. package/apps/pwa/out/_next/static/chunks/2176-c379e3ebce874151.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/2310-7a59f043f6db207e.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/2426.8c6ee0c668d53def.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/2548-6e316138d347cefe.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/3170-7ec60a56fa0e4728.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/3278-ae6ef084769f6195.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/3454-988a53dac60a1763.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/3638-aa80b4641ea439db.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/3735-fe3402553ac1c9c6.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/3869-a39d1d9921e10d43.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/390.c373e31b3b9d0c41.js +5 -0
  19. package/apps/pwa/out/_next/static/chunks/3992-2e522a8ac5f2afde.js +25 -0
  20. package/apps/pwa/out/_next/static/chunks/4215-c9d91dd644ec1719.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/4508-5d0161d1e724d735.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/4685-c3c1c625b71accd1.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/4733-623a79345b171e1c.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/4883.3bd969ea1d3aaaff.js +2 -0
  25. package/apps/pwa/out/_next/static/chunks/507-5acd98bd6dab2d8a.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/5445-745eb795c5963d79.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/5532.6899a12958a89b72.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/5845-e6c003ce8d5fd36a.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/5978-b27004c677119115.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/{8046cadf-211ca3c0e00f2b72.js → 5cd7e3a9-404fd6b8d0ecd44c.js} +1 -1
  31. package/apps/pwa/out/_next/static/chunks/6048-4c5c33579bc4ef78.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/6303-422dbf0f67c72aac.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/6751-bb3595948b2e311b.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/7274-19b7279f18b47ab3.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/{4323.c5dfb6f503304775.js → 7334.a6679d9168f37aa8.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/7551-a0e0707b79164ddd.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/7777-79f845045aa1ed86.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/79f8be9e-957d68913b590b08.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/8025-cc24ee5d8f2fb6f8.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/8039-df92e08fede5de8f.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/8206-c6684dcde12be721.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/8421-1c4acfb1395a0edf.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/8605-ea5bee9dfae512c7.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/8725.bf46bb1395dd0fa2.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/8734-252d511cd276c0dc.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/8834-ca1cb09c1cb1a6bf.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{2415.ed6428ff334c7ce2.js → 9269.d2a4795bc6812717.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/9538-2816b90923606459.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/9656-c1540088f5859c80.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d16993889b125c42.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/approvals/page-1dcdc58fc2de2454.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-6a061bd97f0b9398.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/board/page-cb95a7432c9ee744.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-f972fc1c00a62e88.js → page-b12b6d2f8d2d1aea.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/app/bots/page-b9efe868bfd36255.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/chat/page-7c97dcdfe2e37a60.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/consult/page-8fd36984f549270a.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/control/page-5721537ca8a3598c.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/design-check/page-b654240a572e4c48.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/editor/page-b9750abc897508c3.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/exec/page-4cd1de371f8ad048.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/field/page-d99f89657828421c.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/healthz/route-d16993889b125c42.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/inside/page-50cb2a0eb15e6c83.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/intake/page-c8b1ccda6ba7ae98.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/layout-d6b1d156fb95e74b.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/live/page-2a9932ddb62d76bd.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/market/page-9688f5b4f1ff950f.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6b15dd6456c5df09.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/morning/{page-adfbd2ba9598e59a.js → page-35414e0a007b4082.js} +1 -1
  72. package/apps/pwa/out/_next/static/chunks/app/not-found-e7a529e0507ac86c.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/observatory/page-e001823c35c9dd67.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-371423d1a573d64b.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4b764b125339ac17.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cdf8e4b01067bcf1.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/outputs/page-3a24072b35470157.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/page-94c82eb0ae5abb32.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/reflection/page-0be8d4b2ced75ba0.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d37cb0d52f9b6bd5.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/sessions/page-686da0df9bf23e5c.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4dc614f3ce043e63.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/settings/page-53f80edc6b8dc07c.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-d02c782fc792e2af.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/app/setup/layout-d16993889b125c42.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/app/setup/page-239c17b911b84e72.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/app/share/page-dc6a79fb003f746c.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/app/showroom/page-0fffb84cafdc9da6.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/app/tasks/page-1218753c82d585f6.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/app/term/page-4b5935e67531efb5.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/app/today/page-3285bc87caf1eaa5.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/app/trace/page-ad553b0e06505ecd.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/app/vault/page-fca096e3e860306f.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9ebfa78f0d9885c3.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/app/workflows/page-3dc5f21f7e39622d.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/app/workspace/page-c6da2b468454532d.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-93bc70e36f595414.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/{2ea96958-e8c7e112de50b067.js → f48170cc-d05d28bf87a43bf4.js} +1 -1
  99. package/apps/pwa/out/_next/static/chunks/framework-172630e6aa5e2d7f.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/main-app-f0fe2d7477845181.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/main-fc98ac70b44eccb0.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/pages/_app-5bd7f10271f72413.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/pages/_error-97d0d85ea05fef9b.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/webpack-9e4d02d567b98240.js +1 -0
  105. package/apps/pwa/out/_next/static/css/543f56bcb1f79fca.css +1 -0
  106. package/apps/pwa/out/approvals/index.html +1 -1
  107. package/apps/pwa/out/approvals/index.txt +23 -23
  108. package/apps/pwa/out/autopilot/index.html +1 -1
  109. package/apps/pwa/out/autopilot/index.txt +23 -23
  110. package/apps/pwa/out/board/index.html +1 -1
  111. package/apps/pwa/out/board/index.txt +23 -23
  112. package/apps/pwa/out/botlab/index.html +1 -1
  113. package/apps/pwa/out/botlab/index.txt +22 -22
  114. package/apps/pwa/out/bots/index.html +1 -1
  115. package/apps/pwa/out/bots/index.txt +22 -22
  116. package/apps/pwa/out/chat/index.html +1 -1
  117. package/apps/pwa/out/chat/index.txt +22 -22
  118. package/apps/pwa/out/consult/index.html +1 -1
  119. package/apps/pwa/out/consult/index.txt +23 -23
  120. package/apps/pwa/out/control/index.html +1 -1
  121. package/apps/pwa/out/control/index.txt +23 -23
  122. package/apps/pwa/out/design-check/index.html +1 -1
  123. package/apps/pwa/out/design-check/index.txt +23 -23
  124. package/apps/pwa/out/editor/index.html +1 -1
  125. package/apps/pwa/out/editor/index.txt +23 -23
  126. package/apps/pwa/out/exec/index.html +1 -1
  127. package/apps/pwa/out/exec/index.txt +23 -23
  128. package/apps/pwa/out/field/index.html +1 -1
  129. package/apps/pwa/out/field/index.txt +23 -23
  130. package/apps/pwa/out/healthz +1 -1
  131. package/apps/pwa/out/index.html +1 -1
  132. package/apps/pwa/out/index.txt +22 -22
  133. package/apps/pwa/out/inside/index.html +1 -0
  134. package/apps/pwa/out/inside/index.txt +31 -0
  135. package/apps/pwa/out/intake/index.html +1 -1
  136. package/apps/pwa/out/intake/index.txt +23 -23
  137. package/apps/pwa/out/live/index.html +1 -1
  138. package/apps/pwa/out/live/index.txt +23 -23
  139. package/apps/pwa/out/market/index.html +1 -1
  140. package/apps/pwa/out/market/index.txt +22 -22
  141. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  142. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  143. package/apps/pwa/out/morning/index.html +1 -1
  144. package/apps/pwa/out/morning/index.txt +23 -23
  145. package/apps/pwa/out/observatory/index.html +1 -1
  146. package/apps/pwa/out/observatory/index.txt +23 -23
  147. package/apps/pwa/out/ops/checklist/index.html +1 -1
  148. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  149. package/apps/pwa/out/ops/release/index.html +1 -1
  150. package/apps/pwa/out/ops/release/index.txt +22 -22
  151. package/apps/pwa/out/ops/seats/index.html +1 -0
  152. package/apps/pwa/out/ops/seats/index.txt +30 -0
  153. package/apps/pwa/out/outputs/index.html +1 -0
  154. package/apps/pwa/out/outputs/index.txt +30 -0
  155. package/apps/pwa/out/reflection/index.html +1 -1
  156. package/apps/pwa/out/reflection/index.txt +23 -23
  157. package/apps/pwa/out/scheduler/index.html +1 -1
  158. package/apps/pwa/out/scheduler/index.txt +23 -23
  159. package/apps/pwa/out/sessions/index.html +1 -1
  160. package/apps/pwa/out/sessions/index.txt +22 -22
  161. package/apps/pwa/out/settings/devices/index.html +1 -1
  162. package/apps/pwa/out/settings/devices/index.txt +23 -23
  163. package/apps/pwa/out/settings/index.html +1 -1
  164. package/apps/pwa/out/settings/index.txt +23 -23
  165. package/apps/pwa/out/setup/done/index.html +1 -1
  166. package/apps/pwa/out/setup/done/index.txt +23 -23
  167. package/apps/pwa/out/setup/index.html +1 -1
  168. package/apps/pwa/out/setup/index.txt +23 -23
  169. package/apps/pwa/out/share/index.html +1 -1
  170. package/apps/pwa/out/share/index.txt +23 -23
  171. package/apps/pwa/out/showroom/index.html +1 -1
  172. package/apps/pwa/out/showroom/index.txt +22 -22
  173. package/apps/pwa/out/tasks/index.html +1 -1
  174. package/apps/pwa/out/tasks/index.txt +23 -23
  175. package/apps/pwa/out/term/index.html +1 -1
  176. package/apps/pwa/out/term/index.txt +23 -24
  177. package/apps/pwa/out/today/index.html +1 -0
  178. package/apps/pwa/out/today/index.txt +33 -0
  179. package/apps/pwa/out/trace/index.html +1 -1
  180. package/apps/pwa/out/trace/index.txt +23 -23
  181. package/apps/pwa/out/vault/index.html +1 -1
  182. package/apps/pwa/out/vault/index.txt +23 -23
  183. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  184. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  185. package/apps/pwa/out/workflows/index.html +1 -1
  186. package/apps/pwa/out/workflows/index.txt +23 -23
  187. package/apps/pwa/out/workspace/index.html +1 -1
  188. package/apps/pwa/out/workspace/index.txt +23 -24
  189. package/apps/pwa/out/worktrees/index.html +1 -1
  190. package/apps/pwa/out/worktrees/index.txt +23 -23
  191. package/graphs/drafts/draft-cleanup.yaml +19 -0
  192. package/graphs/drafts/recipes.yaml +23 -0
  193. package/graphs/field/field-feed.yaml +2 -0
  194. package/graphs/implement-loop.yaml +1 -1
  195. package/graphs/intake/intake-daily.yaml +2 -1
  196. package/graphs/ops/recipes.yaml +3 -0
  197. package/graphs/ops/secret-exposure.yaml +24 -0
  198. package/graphs/release/recipes.yaml +3 -0
  199. package/graphs/release/release-loop.yaml +4 -1
  200. package/graphs/video/explainer-line.yaml +2 -2
  201. package/package.json +2 -1
  202. package/plugins/card-followup/graphs/run-step.ts +48 -13
  203. package/plugins/doc-draft/graphs/doc-draft.yaml +3 -3
  204. package/plugins/doc-draft/graphs/run-step.ts +13 -6
  205. package/plugins/elanous-hwp/README.md +25 -0
  206. package/plugins/elanous-hwp/cli.ts +22 -0
  207. package/plugins/elanous-hwp/converter.ts +237 -0
  208. package/plugins/elanous-hwp/fixtures/fixed-controls.hwpx +0 -0
  209. package/plugins/elanous-hwp/fixtures/fixed-table-controls.hwpx +0 -0
  210. package/plugins/elanous-hwp/fixtures/fixed.hwpx +0 -0
  211. package/plugins/elanous-hwp/plugin.json +16 -0
  212. package/plugins/elanous-hwp/plugin.ts +40 -0
  213. package/scripts/ci-public-export-leak-gate.ts +75 -14
  214. package/scripts/ci-public-leak-gate.ts +44 -9
  215. package/scripts/ci-pwa-build-gate.ts +160 -0
  216. package/scripts/context-hooks/claude-stop.sh +4 -0
  217. package/scripts/context-hooks/emit.ts +24 -0
  218. package/scripts/context-hooks/post-tool-use.sh +4 -0
  219. package/scripts/coord-channel-watch.sh +54 -8
  220. package/scripts/coord-digest.ts +199 -0
  221. package/scripts/coord-post.sh +60 -3
  222. package/scripts/coord-requests-bridge.ts +143 -0
  223. package/scripts/field-feed/lib.ts +4 -0
  224. package/scripts/fleet/node-setup.sh +20 -3
  225. package/scripts/homebrew-formula-bump.ts +69 -0
  226. package/scripts/install.ps1 +68 -9
  227. package/scripts/install.sh +39 -12
  228. package/scripts/lib/pwa-scenarios/scenarios.ts +20 -0
  229. package/scripts/lib/tui-regress-checks.ts +146 -0
  230. package/scripts/marketing/measure-site-numbers.ts +169 -0
  231. package/scripts/measure-gate-shards.ts +309 -0
  232. package/scripts/memory-lifecycle-cycle.ts +2 -2
  233. package/scripts/mission-request-judge.ts +31 -1
  234. package/scripts/morning-report.ts +2 -2
  235. package/scripts/opportunity-scan.ts +1 -1
  236. package/scripts/ops-now-probe.ts +327 -0
  237. package/scripts/publish-internal-dist.ts +11 -1
  238. package/scripts/release-loop/auto-approve-node.ts +21 -4
  239. package/scripts/release-loop/cut-branch.ts +84 -0
  240. package/scripts/release-loop/cutoff.ts +19 -8
  241. package/scripts/release-loop/gate-node.ts +14 -13
  242. package/scripts/release-loop/mac-smoke-node.ts +229 -0
  243. package/scripts/release-loop/node-verdict.ts +3 -3
  244. package/scripts/release-loop/ops-upgrade-node.ts +72 -16
  245. package/scripts/release-loop/release-readiness.ts +9 -0
  246. package/scripts/release-loop/tui-node-checks.ts +42 -0
  247. package/scripts/release-loop/tui-sim-node.ts +32 -8
  248. package/scripts/release-loop/unattended-release.ts +5 -3
  249. package/scripts/release-loop/version-node.ts +112 -13
  250. package/scripts/repo-watch-cycle.ts +1 -1
  251. package/scripts/retro-cycle.ts +2 -2
  252. package/scripts/schedule-health-report.ts +1 -1
  253. package/scripts/signal-digest-cycle.ts +2 -7
  254. package/scripts/signal-digest-photo.ts +11 -0
  255. package/scripts/storyboard/storyboard.ts +5 -161
  256. package/scripts/tech1-public-measure.ts +94 -0
  257. package/scripts/test-diet/lib.ts +30 -1
  258. package/scripts/test-diet/node.ts +83 -8
  259. package/scripts/test-timeout-audit.ts +114 -0
  260. package/scripts/tree-sync-alert.ts +1 -1
  261. package/scripts/tui-regress.ts +71 -0
  262. package/scripts/ux/demo-rehearsal.ts +243 -0
  263. package/scripts/ux/lib/rehearsal-verdict.ts +73 -0
  264. package/scripts/waitlist-daily-digest.ts +1 -1
  265. package/skills/diagram-master/SKILL.md +366 -0
  266. package/skills/diagram-master/references/engines/excalidraw/color-palette.md +67 -0
  267. package/skills/diagram-master/references/engines/excalidraw/element-templates.md +182 -0
  268. package/skills/diagram-master/references/engines/excalidraw/json-schema.md +71 -0
  269. package/skills/diagram-master/references/engines/excalidraw/render_excalidraw.py +189 -0
  270. package/skills/diagram-master/references/engines/excalidraw/render_template.html +57 -0
  271. package/skills/diagram-master/references/engines/matplotlib/matplotlib-patterns.md +235 -0
  272. package/skills/diagram-master/references/engines/matplotlib/render_matplotlib.py +184 -0
  273. package/skills/diagram-master/references/engines/mermaid/domain-templates.md +435 -0
  274. package/skills/diagram-master/references/engines/mermaid/render_mermaid.py +116 -0
  275. package/skills/diagram-master/references/engines/mermaid/syntax-reference.md +2247 -0
  276. package/skills/diagram-master/references/engines/nanobannana/render_nanobannana2.py +168 -0
  277. package/skills/diagram-master/references/engines/svg/color-palette.md +188 -0
  278. package/skills/diagram-master/references/engines/svg/html-base-template.html +332 -0
  279. package/skills/diagram-master/references/engines/svg/interactivity-patterns.md +435 -0
  280. package/skills/diagram-master/references/engines/svg/render_interactive_svg.py +212 -0
  281. package/skills/diagram-master/references/engines/svg/svg-element-templates.md +349 -0
  282. package/skills/diagram-master/references/examples/README.md +69 -0
  283. package/skills/diagram-master/references/examples/ref_grid_architecture.png +0 -0
  284. package/skills/diagram-master/references/examples/ref_layered_flow.png +0 -0
  285. package/skills/diagram-master/references/pyproject.toml +16 -0
  286. package/skills/diagram-master/references/quality-checklist.md +33 -0
  287. package/skills/diagram-master/references/routing-guide.md +164 -0
  288. package/skills/diagram-master/references/uv.lock +1356 -0
  289. package/skills/explainer-video/SKILL.md +4 -0
  290. package/skills/explainer-video/engine/reel.mjs +18 -13
  291. package/skills/explainer-video/engine/reel.sh +24 -5
  292. package/skills/explainer-video/engine/stitch.mjs +145 -0
  293. package/skills/google-workspace/SKILL.md +33 -0
  294. package/skills/google-workspace/scripts/gws-safe.sh +177 -0
  295. package/skills/grill-me/SKILL.md +1 -1
  296. package/skills/lecture-note-digitizer/SKILL.md +926 -0
  297. package/skills/lecture-note-digitizer/references/convert_to_pdf.py +30 -0
  298. package/skills/lecture-note-digitizer/references/extract_slide_diagram.py +73 -0
  299. package/skills/lecture-note-digitizer/references/html-template.md +167 -0
  300. package/skills/lecture-note-digitizer/references/katex-style-guide.md +165 -0
  301. package/skills/omni-crawl/SKILL.md +21 -11
  302. package/skills/omni-crawl/scripts/main.ts +6 -6
  303. package/skills/omni-crawl/src/router.ts +3 -3
  304. package/skills/omni-digest/SKILL.md +17 -9
  305. package/skills/omni-digest/digest.md +2 -2
  306. package/skills/omni-digest/src/fetch.ts +30 -3
  307. package/skills/pitch-deck/SKILL.md +36 -0
  308. package/skills/pitch-deck/template.html +80 -0
  309. package/skills/youtube-master/SKILL.md +163 -0
  310. package/skills/youtube-master/package-lock.json +558 -0
  311. package/skills/youtube-master/package.json +13 -0
  312. package/skills/youtube-master/references/study-note-template.md +124 -0
  313. package/skills/youtube-master/scripts/main.ts +435 -0
  314. package/skills/youtube-master/scripts/transcribe-local.ts +24 -0
  315. package/skills/youtube-master/src/audio.ts +63 -0
  316. package/skills/youtube-master/src/domain-staging.ts +50 -0
  317. package/skills/youtube-master/src/env.ts +36 -0
  318. package/skills/youtube-master/src/obsidian.ts +155 -0
  319. package/skills/youtube-master/src/router.ts +110 -0
  320. package/skills/youtube-master/src/stt.ts +199 -0
  321. package/skills/youtube-master/src/study-note.ts +175 -0
  322. package/skills/youtube-master/src/summarize.ts +358 -0
  323. package/skills/youtube-master/src/transcript.ts +76 -0
  324. package/skills/youtube-master/src/types.ts +91 -0
  325. package/skills/youtube-master/src/util.ts +93 -0
  326. package/skills/youtube-master/src/youtube.ts +70 -0
  327. package/skills/youtube-master/tsconfig.json +13 -0
  328. package/src/acp/codex-approval-adapter.ts +9 -3
  329. package/src/acp/core-turn-bridge.ts +117 -18
  330. package/src/acp/fact-question.ts +11 -0
  331. package/src/acp/server.ts +53 -9
  332. package/src/acp/tool-approval.ts +126 -0
  333. package/src/acp/turn-runner.ts +36 -0
  334. package/src/agent/monad-agent-turn.ts +8 -0
  335. package/src/agent-mission/driver.ts +80 -10
  336. package/src/agent-mission/pty-decision.ts +71 -0
  337. package/src/agent-mission/review-loop.ts +30 -0
  338. package/src/ask-user-question/pending-questions.ts +25 -10
  339. package/src/ask-user-question/types.ts +9 -0
  340. package/src/auth/setup-link-tokens.ts +16 -5
  341. package/src/autopilot/build/integrity-gate.ts +12 -0
  342. package/src/autopilot/build/llm-conflict-merge.ts +16 -3
  343. package/src/autopilot/tool-registry.ts +2 -0
  344. package/src/boot/daemon-prompt-turn.ts +8 -0
  345. package/src/boot/daemon-runtime.ts +9 -3
  346. package/src/boot/daemon-tools/index.ts +8 -0
  347. package/src/boot/daemon-tools/types.ts +2 -0
  348. package/src/boot/daemon-tools/web-search.ts +4 -0
  349. package/src/card-followup/core.ts +109 -0
  350. package/src/chat/ctrl-c-in-input.ts +14 -0
  351. package/src/chat/index.ts +53 -0
  352. package/src/chat/pickers/state.ts +6 -2
  353. package/src/cli/agent-cli.ts +7 -0
  354. package/src/cli/decisions-cli.ts +25 -3
  355. package/src/cli/doctor-bundle-upload.ts +68 -0
  356. package/src/cli/doctor-cli.ts +38 -4
  357. package/src/cli/drive-input-jail.ts +101 -0
  358. package/src/cli/hooks-cli.ts +17 -3
  359. package/src/cli/make-cli.ts +43 -0
  360. package/src/cli/ops-cli.ts +20 -0
  361. package/src/cli/persona-cli.ts +90 -4
  362. package/src/cli/plugin-cli.ts +31 -22
  363. package/src/cli/pod-cli.ts +61 -2
  364. package/src/cli/pr-cli.ts +82 -17
  365. package/src/cli/pty-drive-cli.ts +41 -7
  366. package/src/cli/pty-drive-verdict.ts +40 -0
  367. package/src/cli/pwa-stop.ts +163 -13
  368. package/src/cli/pwa-test.ts +3 -0
  369. package/src/cli/release-cli.ts +80 -24
  370. package/src/cli/self-update.ts +14 -0
  371. package/src/cli/setup-cli.ts +43 -1
  372. package/src/cli/skills-cli.ts +17 -1
  373. package/src/cli/storyboard-cli.ts +37 -0
  374. package/src/cli/test-state-dir-flag.ts +11 -4
  375. package/src/connectors/linear.ts +146 -0
  376. package/src/context-bus/claude-hooks-install.ts +10 -0
  377. package/src/context-bus/context-now-surfaces.ts +48 -0
  378. package/src/context-bus/context-now.ts +104 -0
  379. package/src/context-bus/coord-events.ts +115 -0
  380. package/src/context-bus/external-events.ts +52 -0
  381. package/src/context-bus/long-term-memory.ts +108 -0
  382. package/src/dashboard/dashboard-boot-fixture.ts +23 -0
  383. package/src/dashboard/index.ts +63 -21
  384. package/src/dashboard/slash-runtime/dashboard-handlers.ts +14 -1
  385. package/src/dashboard/slash-runtime/help-from-registry.ts +43 -28
  386. package/src/decisions/decision-cards.ts +58 -3
  387. package/src/decisions/decision-ledger.ts +85 -6
  388. package/src/decisions/decision-linear-projection.ts +157 -0
  389. package/src/decisions/web-push-decision-cards.ts +50 -0
  390. package/src/directive/interpretation-card.ts +36 -0
  391. package/src/discord/sprint21-runtime.ts +5 -1
  392. package/src/discord-self-message.ts +32 -0
  393. package/src/discord-slash-wire.ts +5 -1
  394. package/src/discord.ts +19 -2
  395. package/src/domains/coo-admin-tool.ts +62 -0
  396. package/src/domains/core-tools.ts +13 -4
  397. package/src/domains/elanous-card.ts +29 -0
  398. package/src/domains/ops-facts-tool.ts +76 -0
  399. package/src/domains/outbound-alert.ts +46 -13
  400. package/src/domains/release-tool.ts +168 -0
  401. package/src/domains/telegram-kind-route.ts +65 -9
  402. package/src/exec-requests/default-outputs.ts +25 -0
  403. package/src/exec-requests/planner.ts +106 -28
  404. package/src/exec-requests/runner.ts +123 -12
  405. package/src/exec-requests/store.ts +11 -2
  406. package/src/execution-loop/launch-gate.ts +100 -0
  407. package/src/field/field-media.ts +10 -7
  408. package/src/field/field-reel.ts +19 -5
  409. package/src/field-note/index.ts +201 -0
  410. package/src/field-note/transcribe.ts +248 -0
  411. package/src/git-fs/worktree.ts +45 -6
  412. package/src/graph-kinds/registry.ts +3 -3
  413. package/src/graph-runner/graph-approval-card.ts +113 -0
  414. package/src/graph-runner/graph-cli.ts +189 -4
  415. package/src/graph-runner/graph-grow-llm.ts +37 -0
  416. package/src/graph-runner/graph-grow.ts +47 -0
  417. package/src/graph-runner/graph-notify.ts +25 -3
  418. package/src/graph-runner/runner.ts +453 -35
  419. package/src/grok/agent-search.ts +8 -2
  420. package/src/guardian/secret-exposure-scan.ts +101 -0
  421. package/src/harness/browser-verify.ts +25 -2
  422. package/src/harness/harness-cli-command.ts +478 -42
  423. package/src/harness/harness-incidents-writer.fixture.ts +24 -0
  424. package/src/harness/harness-incidents.ts +129 -0
  425. package/src/harness/harness-pod-dispatch.ts +43 -23
  426. package/src/harness/harness-seams.ts +38 -4
  427. package/src/harness/harness-stop.ts +75 -6
  428. package/src/harness/launch-registry.ts +91 -0
  429. package/src/harness/process-garbage.ts +5 -3
  430. package/src/hitl/clarification-policy.ts +3 -1
  431. package/src/hooks/dispatch.ts +82 -0
  432. package/src/hooks/expose.ts +254 -0
  433. package/src/hooks/github-shadow.ts +108 -0
  434. package/src/hooks/providers.ts +71 -5
  435. package/src/hooks/queue.ts +1 -1
  436. package/src/hooks/receiver.ts +21 -20
  437. package/src/index.ts +206 -49
  438. package/src/intake-plane/author-goals.ts +37 -4
  439. package/src/intake-plane/categorize.ts +18 -46
  440. package/src/intake-plane/check.ts +3 -0
  441. package/src/intake-plane/discord-seat-work.ts +57 -2
  442. package/src/intake-plane/front-route-classifier.ts +33 -39
  443. package/src/intake-plane/persona-answer.ts +30 -0
  444. package/src/intake-plane/runtime-callables.ts +8 -1
  445. package/src/intake-plane/seat-doc-route.ts +170 -6
  446. package/src/intake-plane/telegram-seat-work.ts +80 -4
  447. package/src/intake-plane/telegram-work.ts +1 -0
  448. package/src/intake-plane/wish-folder.ts +67 -0
  449. package/src/intent-gate/gate.ts +30 -10
  450. package/src/live/detail-switch.ts +5 -0
  451. package/src/llm/difficulty.ts +57 -0
  452. package/src/llm/judge-layer.ts +101 -0
  453. package/src/llm/mission-router.ts +33 -19
  454. package/src/loops/contract/examples/cmo-seat.loop.yaml +51 -0
  455. package/src/loops/contract/examples/orchestrator.loop.yaml +57 -0
  456. package/src/loops/contract/examples/steward.loop.yaml +50 -0
  457. package/src/loops/contract/loop-agent.schema.json +138 -0
  458. package/src/loops/contract/validate.ts +64 -0
  459. package/src/loops/registry.ts +20 -6
  460. package/src/market/signed-index.ts +4 -0
  461. package/src/maturity/bot-command-maturity.ts +45 -0
  462. package/src/maturity/cli-maturity.ts +34 -0
  463. package/src/maturity/feature-maturity.ts +120 -1
  464. package/src/maturity/tui-slash-maturity.ts +31 -0
  465. package/src/memory.ts +32 -4
  466. package/src/model-tier/index.ts +2 -2
  467. package/src/model-tier/tier-resolver.ts +20 -20
  468. package/src/model-tier/types.ts +6 -6
  469. package/src/mss/logging/log-store.ts +15 -0
  470. package/src/nexus/api/config-model-tier.ts +5 -4
  471. package/src/nexus/api/exec-requests.ts +33 -3
  472. package/src/nexus/api/fabric-plans.ts +53 -0
  473. package/src/nexus/api/harness-api.ts +5 -1
  474. package/src/nexus/api/health.ts +2 -0
  475. package/src/nexus/api/http-server.ts +89 -1
  476. package/src/nexus/api/inside-events.ts +226 -0
  477. package/src/nexus/api/meta-api.ts +32 -8
  478. package/src/nexus/api/missions.ts +6 -1
  479. package/src/nexus/api/ops-api.ts +10 -1
  480. package/src/nexus/api/ops-seats-sources.ts +37 -7
  481. package/src/nexus/api/ops-seats.ts +49 -6
  482. package/src/nexus/api/outputs-route.ts +44 -0
  483. package/src/nexus/api/seat-requests.ts +132 -10
  484. package/src/nexus/api/sessions-store.ts +42 -0
  485. package/src/nexus/api/setup-codex-login.ts +160 -0
  486. package/src/nexus/api/sub-seat-charters.ts +34 -0
  487. package/src/nexus/api/tabs-mutations.ts +3 -1
  488. package/src/nexus/api/trace.ts +18 -6
  489. package/src/nexus/api/usage-api.ts +102 -0
  490. package/src/nexus/api/workflow-run-event-bridge.ts +1 -0
  491. package/src/nexus/api/workflows.ts +80 -6
  492. package/src/nexus/index.ts +47 -4
  493. package/src/nexus/kinds/webterm.ts +2 -1
  494. package/src/nexus/webterm/pty.ts +6 -2
  495. package/src/onboarding/cli-auth-status.ts +80 -0
  496. package/src/onboarding/first-run.ts +89 -0
  497. package/src/onboarding/lan-address.ts +45 -0
  498. package/src/onboarding/voice-ai.ts +3 -3
  499. package/src/onboarding/web-first.ts +119 -24
  500. package/src/onboarding.ts +4 -0
  501. package/src/ops-now/ops-now-refresh.ts +100 -0
  502. package/src/org/seat-budget.ts +48 -0
  503. package/src/org/stall-escalation.ts +63 -0
  504. package/src/outputs/ledger.ts +120 -0
  505. package/src/persona/persona-todo.ts +79 -0
  506. package/src/persona/presets.ts +116 -2
  507. package/src/persona/team-set.ts +155 -0
  508. package/src/plugins/install/plugin-install.ts +14 -0
  509. package/src/plugins/maker/market-bundle.ts +109 -0
  510. package/src/plugins/maker/plugin-maker.ts +254 -11
  511. package/src/plugins/maker/wizard-generate.ts +103 -0
  512. package/src/pod-lease/admission.ts +150 -0
  513. package/src/pod-lease/dependency-state.ts +85 -0
  514. package/src/pod-lease/host-lease.ts +127 -0
  515. package/src/project/project-store.ts +115 -0
  516. package/src/project/project-suggestion.ts +16 -0
  517. package/src/project/session-context.ts +24 -0
  518. package/src/release-loop/checklist.ts +79 -5
  519. package/src/release-loop/feature-store.ts +159 -24
  520. package/src/release-loop/next-md-merge.ts +58 -0
  521. package/src/release-loop/release-note.ts +59 -4
  522. package/src/release-loop/release-schedule.ts +53 -0
  523. package/src/repl/index.ts +7 -0
  524. package/src/seat-dispatch/ceo-commands.ts +41 -8
  525. package/src/seat-dispatch/ceo-intent.ts +38 -0
  526. package/src/seat-dispatch/seat-ask.ts +130 -0
  527. package/src/seat-dispatch/seat-questions.ts +100 -0
  528. package/src/seat-loop/seat-loop.ts +750 -0
  529. package/src/seat-loop/seat-report.ts +99 -0
  530. package/src/self-dev/decompose.ts +66 -11
  531. package/src/self-dev/dev-cli.ts +4 -1
  532. package/src/self-dev/dev-pipeline.ts +37 -1
  533. package/src/self-dev/draft-sweep.ts +38 -33
  534. package/src/self-dev/draft-triage-rules.ts +8 -5
  535. package/src/self-dev/fabric-plan-core.ts +297 -0
  536. package/src/self-dev/orchestrate.ts +36 -4
  537. package/src/self-dev/release-path-guard.ts +62 -0
  538. package/src/self-dev/run-store.ts +10 -1
  539. package/src/self-dev/shard-aggregate.ts +230 -0
  540. package/src/self-dev/shard-placement.ts +60 -0
  541. package/src/self-dev/shard-plan.ts +48 -0
  542. package/src/self-dev/shard-pod-run.ts +77 -0
  543. package/src/self-dev/shard-run.ts +105 -0
  544. package/src/self-implement/execution-clarification.ts +115 -0
  545. package/src/self-implement/gate-baseline.ts +1 -1
  546. package/src/self-implement/gate-cli.ts +46 -4
  547. package/src/self-implement/gate-scope.ts +37 -7
  548. package/src/self-implement/graph-variant.ts +171 -0
  549. package/src/self-implement/harness-policy-gates.ts +1 -1
  550. package/src/self-implement/headless-elanous-driver.ts +22 -3
  551. package/src/self-implement/host-regate.ts +22 -1
  552. package/src/self-implement/importer-test-index.ts +2 -1
  553. package/src/self-implement/l8-merge-queue.ts +130 -0
  554. package/src/self-implement/orchestrator.ts +279 -12
  555. package/src/self-implement/pipeline-shape.ts +1 -1
  556. package/src/self-implement/route-consumer-test-index.ts +122 -0
  557. package/src/self-implement/run-status-mapping.ts +5 -3
  558. package/src/self-implement/seams.ts +72 -11
  559. package/src/self-implement/test-seams.ts +1 -0
  560. package/src/self-implement/uncommitted-work.ts +59 -0
  561. package/src/session/chat.ts +2 -0
  562. package/src/session/index.ts +45 -13
  563. package/src/shell-env-bootstrap.ts +17 -0
  564. package/src/skills/gift-install.ts +215 -0
  565. package/src/skills/tools/web-search.ts +4 -1
  566. package/src/steward/directive.ts +51 -2
  567. package/src/steward/launch.ts +266 -0
  568. package/src/steward/outcome-notify.ts +115 -0
  569. package/src/steward/steward-cards.ts +25 -11
  570. package/src/steward/triage-plan.ts +32 -4
  571. package/src/steward/triage.ts +129 -13
  572. package/src/steward/working-backwards.ts +64 -0
  573. package/src/storyboard/storyboard.ts +141 -0
  574. package/src/task-cards/card-cli.ts +25 -1
  575. package/src/task-cards/card-store.ts +2 -2
  576. package/src/task-orchestrator/mission.ts +5 -0
  577. package/src/task-orchestrator/store.ts +12 -3
  578. package/src/task-orchestrator/surfaces/pod-command-job.ts +29 -7
  579. package/src/task-orchestrator/surfaces/pod-lease.ts +397 -0
  580. package/src/task-orchestrator/surfaces/pod-pool.ts +127 -26
  581. package/src/task-orchestrator/surfaces/self-implement-pod.ts +214 -40
  582. package/src/task-orchestrator/surfaces/self-implement.ts +15 -2
  583. package/src/task-orchestrator/types.ts +2 -0
  584. package/src/telegram-card-followup.ts +153 -0
  585. package/src/telegram-commands.ts +10 -1
  586. package/src/telegram-project-command.ts +71 -0
  587. package/src/telegram-report.ts +29 -19
  588. package/src/telegram-run.ts +7 -0
  589. package/src/telegram.ts +58 -11
  590. package/src/tool-runtime/self-cognition-runtimes.ts +13 -3
  591. package/src/tool-runtime/types.ts +4 -0
  592. package/src/tui-client/dashboard-session.ts +2 -0
  593. package/src/user-config.ts +216 -27
  594. package/src/version/packed-revision.json +1 -1
  595. package/src/web-push/notify-exec-request.ts +32 -0
  596. package/src/web-search/grok.ts +7 -1
  597. package/src/web-search/index.ts +28 -1
  598. package/src/web-search/provider.ts +4 -0
  599. package/src/web-search/x-intent.ts +5 -0
  600. package/src/workflow-runtime/executor.ts +277 -47
  601. package/src/workflow-runtime/index.ts +1 -0
  602. package/src/workflow-runtime/nodes/subworkflow.ts +60 -0
  603. package/src/workflow-runtime/plugin-kind-node.ts +1 -1
  604. package/src/workflow-runtime/schema.ts +79 -4
  605. package/src/workflow-runtime/types.ts +35 -4
  606. package/apps/pwa/out/_next/static/bFI5EEwg7T6aG88ibX4Zq/_buildManifest.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/2375-cb6debea56cce4fb.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +0 -1
  615. package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +0 -25
  617. package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +0 -5
  618. package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/5080-1613752891fcadb4.js +0 -10
  622. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/6090-85a3f05f954e5697.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/6284-69db415193d5f8bd.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/7032-f4ef698518fba61c.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +0 -1
  634. package/apps/pwa/out/_next/static/chunks/8067-d976b441a104ab74.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/8519-5632377cce994f86.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/8630-cdfc61e82c653ffc.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/8894-e263b332208e3957.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/9454-139040d37c79dbc9.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/9740-8f5ff96c522b5f55.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/app/approvals/page-fb7c2d458f32fcad.js +0 -1
  647. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-35e2713597dd24d1.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/app/board/page-918b656f064577ba.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/app/bots/page-5f30e00693527ebd.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/app/chat/page-7fbae173b3c103a7.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/app/consult/page-3b4edcce364062ea.js +0 -1
  652. package/apps/pwa/out/_next/static/chunks/app/control/page-c5794f484c251f44.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/app/design-check/page-1130d8eefcd87e76.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/app/editor/page-973996d584f008c1.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/app/exec/page-016e2bda04eecb1f.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/app/field/page-b4d6d9a3b56f2940.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/app/intake/page-ec49a466121233ba.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/app/layout-f72db356744ceade.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/app/live/page-a6fd9b50d1b85378.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/app/market/page-8b0402a46a749a3d.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-037f83e2a1edc8e2.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/app/not-found-46fedff57d4bec67.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/app/observatory/page-0cf318e9dcee2bbf.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-899b327cb8b6845c.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-6c1e6ba743a29dfe.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/app/page-1a8e4807292f6b17.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/app/reflection/page-28deba6bcb834916.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-de68e2205794037d.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/app/sessions/page-c71c33a573230672.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-0df30e0c7e50148a.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/settings/page-4fc56790fe0d2682.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-59df2aebb38a7c1e.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/setup/page-4647be5dbcbd0795.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/share/page-e025892bda74b743.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/showroom/page-a0955de73b89f078.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/tasks/page-369846d2921af584.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/term/page-72cbc1c8cdd0f65d.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/app/trace/page-77b28bfb0996d5ea.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/app/vault/page-3220c4934f49c6c2.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-90670589b87abea8.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/app/workflows/page-7df9243ed021a4cc.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/app/workspace/page-4498c3853f4f688d.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-35bedde6d885f08f.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/main-app-6870f30ea99f8346.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +0 -1
  691. package/apps/pwa/out/_next/static/chunks/webpack-e5bea36f183b25e6.js +0 -1
  692. package/apps/pwa/out/_next/static/css/f92f63a5df0ba229.css +0 -1
  693. package/src/dashboard/turn-typeahead-echo.ts +0 -23
  694. /package/apps/pwa/out/_next/static/{bFI5EEwg7T6aG88ibX4Zq → Y4zKzL62sakG5momz3SoQ}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8891],{2894:(e,t,r)=>{"use strict";r.d(t,{InsidePage:()=>P});var n=r(54456),s=r(60500),l=r(80581),a=r(89604);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 d=r(86127);function o(e){let{entry:t}=e,[r,l]=(0,s.useState)(!1);return(0,n.jsxs)("details",{open:r,style:{minWidth:0,border:"1px solid #68788f",borderRadius:12,padding:18,background:"#16263b"},children:[(0,n.jsx)("summary",{onClick:e=>{e.preventDefault(),l(e=>!e)},style:{cursor:"pointer",fontWeight:700,overflowWrap:"anywhere"},children:(0,d.t)(t.title)}),(0,n.jsx)("p",{children:(0,d.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,d.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,d.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)(o,{entry:e},e.id))}),(0,n.jsx)("div",{"aria-label":"받침",style:{width:"100%",maxWidth:480,justifySelf:"center"},children:(0,n.jsx)(o,{entry:i[5]})}),(0,n.jsx)("div",{"aria-label":"바닥",children:(0,n.jsx)(o,{entry:i[4]})})]})}var u=r(36581),p=r(45160);let m={currentMissionId:null,missions:{}},h=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),f=e=>"string"==typeof e&&e.trim().length>0,g={currentRunId:null,runs:{}},b={start:"border-sky-400 bg-sky-500/15 text-sky-200",ok:"border-green-500 bg-green-500/15 text-green-300",fail:"border-red-500 bg-red-500/15 text-red-300"};function x(e){let{state:t,now:r,receivedAt:s,lastSettlement:l,wizardSteps:a=[]}=e,i=t.currentRunId?t.runs[t.currentRunId]:null,o=!i||r-s>6e4,c=null==i?void 0:i.order.some(e=>"start"===i.nodes[e].phase),u=l&&!c&&r-l.receivedAt<15e3,p=l&&!c&&r-l.receivedAt>=15e3,m=i?Math.max(0,Math.floor((r-Date.parse(i.startedAt))/1e3)):0,h=i&&l?Math.max(0,Math.floor((Date.parse(l.ts)-Date.parse(i.startedAt))/1e3)):0,f=p?"fail"===l.phase?"실패 \xb7 ".concat(l.nodeId):"완료 \xb7 ".concat(h,"초"):null;return(0,n.jsxs)("section",{"aria-label":"라이브 트레이스",className:"min-w-0 space-y-6 p-6 text-lg leading-relaxed",children:[a.length>0&&(0,n.jsx)("ol",{"aria-label":"플러그인 마법사 흐름",children:a.map(e=>(0,n.jsxs)("li",{children:["마법사 ",e.step," \xb7 ",(0,d.t)(e.text)]},"".concat(e.wizardId,":").concat(e.step)))}),o?(0,n.jsxs)("div",{className:"space-y-4 text-muted-foreground",children:[(0,n.jsx)("p",{children:"지금 도는 런이 없습니다"}),(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:i.graphId}),(0,n.jsxs)("span",{children:["런 ",i.runId.slice(0,6)]}),(0,n.jsxs)("span",{children:["경과 ",m,"초"]}),f&&(0,n.jsx)("span",{role:"status",children:f})]}),(0,n.jsxs)("div",{role:"list","aria-label":"노드 흐름",className:"flex flex-wrap gap-3",children:[u&&(0,n.jsx)("span",{className:"rounded-lg border border-border bg-muted px-3 py-1 text-sm text-muted-foreground",children:"다음 단계 준비 중"}),i.order.map(e=>{let t=i.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(b[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 y(){let{client:e,config:t}=(0,u.Q)(),[r,l]=(0,s.useState)(()=>({client:e,baseUrl:t.baseUrl,token:t.token,state:g,receivedAt:0,lastSettlement:null})),[a,i]=(0,s.useState)(0),[d,o]=(0,s.useState)([]),c=r.client===e&&r.baseUrl===t.baseUrl&&r.token===t.token;return(0,s.useEffect)(()=>{let r=!0;l({client:e,baseUrl:t.baseUrl,token:t.token,state:g,receivedAt:0,lastSettlement:null}),o([]);let n=function(e,t){let r=e.logsStreamUrl({exactCategory:"wizard.step"});return r?(0,p.BX)(r,{events:{log:e=>{let r=function(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 r=t;if("wizard.step"!==r.category||"wizard.step"!==r.event||!r.data||"object"!=typeof r.data||Array.isArray(r.data))return null;let n=r.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}(e.data);r&&t(r)}}}):()=>{}}(e,e=>{r&&o(t=>"request"===e.step?[e]:[...t.filter(t=>t.wizardId===e.wizardId),e].slice(-6))}),s=function(e,t){let r=e.logsStreamUrl({category:"graph.run"});return r?(0,p.BX)(r,{events:{log:e=>{let r=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 r=t;if("graph.run"!==r.category||"node"!==r.event)return null;let n=r.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 r.ts&&Number.isFinite(Date.parse(r.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:r.ts,...void 0===n.seconds?{}:{seconds:n.seconds}}:null}(e.data);r&&t(r)}}}):()=>{}}(e,n=>{if(!r)return;let s=Date.now();l(l=>{var a,i;if(!r)return l;let d=l.client===e&&l.baseUrl===t.baseUrl&&l.token===t.token?l.state:g,o=d.currentRunId===n.runId&&"start"!==n.phase&&(null==(i=d.runs[n.runId])||null==(a=i.nodes[n.nodeId])?void 0:a.phase)===n.phase,c=d.currentRunId!==n.runId&&d.runs[n.runId]?l.lastSettlement:"start"===n.phase||d.currentRunId!==n.runId?null:o?l.lastSettlement:{receivedAt:s,nodeId:n.nodeId,phase:n.phase,ts:n.ts};return{client:e,baseUrl:t.baseUrl,token:t.token,receivedAt:s,lastSettlement:c,state:function(e,t){var r,n,s,l;let a=Object.hasOwn(e.runs,t.runId)?e.runs[t.runId]:void 0,i=a&&Object.hasOwn(a.nodes,t.nodeId)?a.nodes[t.nodeId]:void 0,d={nodeId:t.nodeId,phase:t.phase,retries:(null!=(r=null==i?void 0:i.retries)?r:0)+("start"===t.phase&&i?1:0)},o={graphId:t.graphId,runId:t.runId,startedAt:null!=(n=null==a?void 0:a.startedAt)?n:t.ts,order:i?a.order:[...null!=(s=null==a?void 0:a.order)?s:[],t.nodeId],nodes:{...null==a?void 0:a.nodes,[t.nodeId]:d}};return{currentRunId:a&&null!=(l=e.currentRunId)?l:t.runId,runs:{...e.runs,[t.runId]:o}}}(d,n)}}),i(s)}),a=setInterval(()=>i(Date.now()),1e3);return()=>{r=!1,s(),n(),clearInterval(a)}},[e,t.baseUrl,t.token]),(0,n.jsx)(x,{state:c?r.state:g,now:a,receivedAt:r.receivedAt,lastSettlement:c?r.lastSettlement:null,wizardSteps:c?d:[]})}var v=r(50053),w=r(49464),j=r(93477);let k=j.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),I=j.CF.map(e=>({graph:"workflow",kind:e,plugin:null,description:"",schema:{},core:!0}));function A(){let{GraphEditor:e=v.F,WorkflowEditor:t=w.N}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[r,l]=(0,s.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":r===e,onClick:()=>l(e),className:"rounded-lg px-4 py-2 text-lg min-[1440px]:text-[22px] ".concat(r===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"!==r,className:"harness"===r?"flex min-h-0 min-w-0 flex-1 flex-col":"hidden",children:(0,n.jsx)(e,{palette:k,initialGraphId:"self-implement"})}),(0,n.jsx)("div",{id:"inside-editor-panel-workflow",role:"tabpanel","aria-labelledby":"inside-editor-tab-workflow",hidden:"workflow"!==r,className:"workflow"===r?"flex min-h-0 min-w-0 flex-1 flex-col":"hidden",children:(0,n.jsx)(t,{palette:I})})]})}var N=r(96439),S=r(23869),T=r(38223);let U=(0,T.g)(null,null);function C(e){let{view:t,runsUnreadable:r,refreshedAt:s}=e;return(0,n.jsxs)("section",{"aria-label":"루프 에이전트 활동",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:[(0,n.jsx)("div",{className:"grid grid-cols-2 gap-3 min-[1440px]:grid-cols-4",children:t.seats.map(e=>(0,n.jsxs)("article",{"aria-label":"".concat(e.seat," 자리"),className:"min-w-0 space-y-3 rounded-2xl border border-border bg-card p-3 min-[1440px]:p-6",children:[(0,n.jsx)("h2",{className:"font-bold",children:e.seat}),(0,n.jsx)("p",{className:"break-words","aria-label":"지금 하는 일",children:e.now}),(0,n.jsxs)("dl",{className:"space-y-1 text-base min-[1440px]:text-[22px]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"오늘 착지"}),(0,n.jsx)("dd",{children:e.landedToday})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"막힘"}),(0,n.jsx)("dd",{children:e.blocked})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"대표 결정 대기"}),(0,n.jsx)("dd",{children:e.decisionsWaiting})]})]})]},e.seat))}),(0,n.jsxs)("section",{"aria-label":"지금 도는 런",className:"min-w-0 rounded-2xl border border-border bg-card p-4",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"지금 도는 런"}),r?(0,n.jsx)("p",{className:"text-muted-foreground",children:"못 읽음"}):0===t.runs.length?(0,n.jsx)("p",{className:"text-muted-foreground",children:"지금 도는 런이 없습니다"}):(0,n.jsx)("ul",{className:"mt-3 flex flex-wrap gap-3",children:t.runs.map((e,t)=>(0,n.jsxs)("li",{className:"min-w-0 break-words rounded-lg border border-border px-3 py-2",children:["런 ",e.id6," \xb7 ",e.stage," \xb7 경과 ","못 읽음"===e.elapsedSec?e.elapsedSec:"".concat(e.elapsedSec,"초")]},"".concat(e.id6,"-").concat(t)))})]}),(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["마지막 갱신 ",(0,n.jsx)("time",{dateTime:null!=s?s:void 0,children:s?new Date(s).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]})}function O(){var e,t;let{client:r,config:l}=(0,u.Q)(),[a,i]=(0,s.useState)(null),d="".concat(l.baseUrl,"\0").concat(l.token),o=(null==a?void 0:a.source)===d?a:null;return(0,s.useEffect)(()=>{let e=!0,t=!1,n=(0,S.xX)({baseUrl:l.baseUrl,token:l.token});i({source:d,seats:null,runs:null,runsUnreadable:!0,refreshedAt:null});let s=async()=>{var s;if(!e||t||document.hidden)return;t=!0;let l=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),[a,o]=await Promise.allSettled([(0,N.Nn)(r,l),n.getHarnessRuns()]);if(t=!1,!e)return;let c="fulfilled"===a.status&&"ready"===a.value.kind?a.value.data:null,u="fulfilled"===o.status&&Array.isArray(null==(s=o.value)?void 0:s.entries)?o.value:null;i({source:d,seats:c,runs:u,runsUnreadable:null===u,refreshedAt:c||u?new Date().toISOString():null})};s();let a=window.setInterval(()=>{s()},1e4),o=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",o),()=>{e=!1,window.clearInterval(a),document.removeEventListener("visibilitychange",o)}},[r,l.baseUrl,l.token,d]),(0,n.jsx)(C,{view:o?(0,T.g)(o.seats,o.runs):U,runsUnreadable:null==(e=null==o?void 0:o.runsUnreadable)||e,refreshedAt:null!=(t=null==o?void 0:o.refreshedAt)?t:null})}var E=r(29074);let z={read:"border-sky-400 bg-sky-500/15 text-sky-200",judge:"border-violet-400 bg-violet-500/15 text-violet-200",input:"border-amber-400 bg-amber-500/15 text-amber-200",answer:"border-teal-400 bg-teal-500/15 text-teal-200",recover:"border-orange-400 bg-orange-500/15 text-orange-200",done:"border-green-400 bg-green-500/15 text-green-200"};function M(e){let{client:t,terminalId:r}=e,[l,a]=(0,s.useState)({id:r,screen:null,message:null});return(0,s.useEffect)(()=>{let e,n,s=!0,l=new E.B({cols:110,rows:40,scrollback:1e4,allowProposedApi:!0}),i=!1,o=()=>{s&&!i&&a(e=>i?e:{...e,message:"터미널 화면을 기다리는 중"})},c=()=>{if(!s)return;let e=l.buffer.active,t=[];for(let r=0;r<e.length;r++){var n;let s=e.getLine(r),l=null!=(n=null==s?void 0:s.translateToString(!0))?n:"";(null==s?void 0:s.isWrapped)&&t.length?t[t.length-1]+=l:t.push(l)}a({id:r,screen:(0,d.t)(t.join("\n").trimEnd()),message:i?"PTY 가 끝났습니다":null})},u=e=>{var t;let r=/^\[screen (\d+)x(\d+) cursor=\(row (\d+), col (\d+), visible (?:true|false)\)\]\r?\n/.exec(e);if(r){let e=Number(r[1]),t=Number(r[2]);e>0&&t>0&&Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&l.resize(e,t)}let n=e.slice(null!=(t=null==r?void 0:r[0].length)?t:0).replace(/\r?\n/g,"\r\n"),s=r&&Number(r[3])<l.rows&&Number(r[4])<l.cols?"\x1b[".concat(Number(r[3])+1,";").concat(Number(r[4])+1,"H"):"";l.write("\x1b[3J\x1b[H\x1b[2J".concat(n).concat(s),c)},p=!1,m=!1,h=async()=>{if(s&&m&&!i){try{let e=await t.snapshotTerminal(r,{ansi:!0});if(!s||!m||i)return;if("success"===e.status&&"string"==typeof e.screen)u(e.screen);else if("unknown-pty"===e.status){i=!0,m=!1,a(e=>({...e,message:"PTY 가 끝났습니다"}));return}else o()}catch(e){o()}s&&m&&!i&&(n=setTimeout(()=>{h()},800))}};return a({id:r,screen:null,message:null}),t.snapshotTerminal(r,{ansi:!0}).then(e=>{!s||i||p||"success"!==e.status||"string"!=typeof e.screen||u(e.screen)}).catch(()=>{}),e=t.streamTerminal(r,{},e=>{if(s&&!i)if("reset"===e.type||"screen"===e.type)p=!0,u(e.screen);else if("data"===e.type){let t;p=!0,t=e.chunk,l.write(t,c)}else"end"===e.type?(i=!0,m=!1,n&&clearTimeout(n),a(e=>({...e,message:"PTY 가 끝났습니다"}))):"status"===e.type&&o()},()=>{m||!s||i||(m=!0,h())}),()=>{s=!1,m=!1,n&&clearTimeout(n),null==e||e(),l.dispose()}},[t,r]),(0,n.jsxs)("section",{"aria-label":"자식 터미널",className:"min-w-0 rounded-xl border border-slate-600 bg-[#0d0c08] p-5",children:[(0,n.jsx)("h2",{className:"mb-4 font-semibold",children:"자식 터미널 \xb7 읽기 전용"}),l.id!==r||null===l.screen?(0,n.jsx)("p",{role:"status",children:(0,d.t)(l.id===r&&l.message?l.message:"터미널을 기다리는 중")}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("pre",{"aria-label":"터미널 화면",className:"min-w-0 overflow-x-auto whitespace-pre font-mono text-[0.7em] leading-[1.35]",children:l.screen}),l.message&&(0,n.jsx)("p",{role:"status",children:(0,d.t)(l.message)})]})]})}function R(e){var t;let{result:r}=e,s=(0,d.t)("file"===r.kind?null!=(t=r.ref.split(/[/\\]/).at(-1))?t:"":r.ref);return"pr"===r.kind&&/^https:\/\/[^\s]+$/i.test(s)?(0,n.jsx)("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"underline",children:s}):(0,n.jsx)("span",{children:s})}function D(e){var t;let{client:r,decisions:s}=e,l=s.currentMissionId&&null!=(t=s.missions[s.currentMissionId])?t:[],a=l.at(-1),i=null==a?void 0:a.terminalId;return(0,n.jsxs)("section",{"aria-label":"PTY 인텔리전스",className:"grid min-w-0 grid-cols-1 gap-6 p-4 text-lg leading-relaxed min-[1440px]:grid-cols-2 min-[1440px]:text-[22px]",children:[i?(0,n.jsx)(M,{client:r,terminalId:i},i):(0,n.jsxs)("section",{"aria-label":"자식 터미널",className:"min-w-0 rounded-xl border border-slate-600 p-5",children:[(0,n.jsx)("h2",{children:"자식 터미널"}),(0,n.jsx)("p",{role:"status",children:"터미널을 기다리는 중"})]}),(0,n.jsxs)("section",{"aria-label":"판단 줄",className:"min-w-0 rounded-xl border border-slate-600 p-5",children:[(0,n.jsx)("h2",{className:"mb-5 font-semibold",children:"판단 줄"}),0===l.length?(0,n.jsx)("p",{children:"판단을 기다리는 중"}):(0,n.jsx)("ol",{className:"space-y-4",children:l.map(e=>(0,n.jsxs)("li",{"aria-current":e.seq===(null==a?void 0:a.seq)?"step":void 0,className:"min-w-0 break-words rounded-lg border-l-4 p-4 ".concat(z[e.step]," ").concat(e.seq===(null==a?void 0:a.seq)?"ring-2 ring-white":""),children:[(0,n.jsx)("span",{className:"inline-block rounded border border-current px-2 font-semibold",children:e.step}),(0,n.jsx)("p",{children:(0,d.t)(e.text)}),"answer"===e.step&&(0,n.jsxs)("div",{children:[(0,n.jsxs)("p",{children:["물음 → ",(0,d.t)(e.detail.question)]}),(0,n.jsxs)("p",{children:["답 → ",(0,d.t)(e.detail.answer)]})]}),"recover"===e.step&&(0,n.jsxs)("div",{children:[(0,n.jsxs)("p",{children:["막힘 → ",(0,d.t)(e.detail.blocked)]}),(0,n.jsxs)("p",{children:["처리 → ",(0,d.t)(e.detail.action)]})]}),"done"===e.step&&(0,n.jsxs)("p",{children:["결과 → ",(0,n.jsx)(R,{result:e.detail.result})]})]},e.seq))})]})]})}let L=["문서 아키텍처","라이브 트레이스","루프 에이전트","그래프 편집기","마법사 → 마켓","PTY 인텔리전스"],K=L.length,q="elanous.inside.demo";function F(e){return null!==e&&/^[1-9]$/.test(e)&&Number(e)<=K?Number(e):1}function P(){let e=(0,l.useSearchParams)();return(0,n.jsx)(_,{search:e})}function _(e){let{search:t,liveTrace:r=(0,n.jsx)(y,{}),editorScene:l=(0,n.jsx)(A,{}),loopScene:i=(0,n.jsx)(O,{}),ptyScene:o=(0,n.jsx)(Z,{})}=e,[u,p]=(0,s.useState)(()=>{let e=F(t.get("scene"));return"1"===t.get("demo")&&5===e?1:e}),[m,h]=(0,s.useState)(()=>"1"===t.get("demo")),f=(0,s.useRef)(null),g=(0,s.useRef)(u),b=(0,s.useRef)(m);g.current=u,b.current=m;let x=(0,s.useCallback)(e=>{let t=new URL(window.location.href);for(let[r,n]of Object.entries(e))t.searchParams.set(r,n);window.history.replaceState(window.history.state,"",t.toString())},[]),v=(0,s.useCallback)(e=>{e<1||e>K||b.current&&5===e||(g.current=e,p(e),x({scene:String(e)}))},[x]),w=(0,s.useCallback)(()=>{let e=!b.current;b.current=e,h(e),e&&5===g.current&&v(1),x({demo:e?"1":"0"});try{window.localStorage.setItem(q,e?"1":"0")}catch(e){}},[v,x]);return(0,s.useEffect)(()=>{let e=t.get("demo"),r="1"===e;if(null===e)try{r="1"===window.localStorage.getItem(q)}catch(e){}else try{window.localStorage.setItem(q,r?"1":"0")}catch(e){}b.current=r,h(r);let n=F(t.get("scene"));g.current=r&&5===n?1:n,p(g.current),r&&5===n&&x({scene:"1"})},[t,x]),(0,s.useEffect)(()=>{window.dispatchEvent(new window.Event("elanous:inside-demo"))},[m]),(0,s.useEffect)(()=>{let e=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey||(0,a._i)(e.target))){if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowRight"===e.key?1:-1,r=g.current+t;b.current&&5===r&&(r+=t),v(Math.min(K,Math.max(1,r)))}else if("d"===e.key.toLowerCase())w();else if("f"===e.key.toLowerCase()){var t;"function"==typeof(null==(t=f.current)?void 0:t.requestFullscreen)&&f.current.requestFullscreen().catch(()=>{})}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v,w]),(0,n.jsxs)("main",{ref:f,"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:"엘라누스 안쪽"}),m&&(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:L.map((e,t)=>(!m||4!==t)&&(0,n.jsx)("button",{type:"button","aria-current":u===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:u===t+1?"#22558b":"#203147"},children:(0,d.t)("".concat(t+1," ").concat(e))},e))}),L.map((e,t)=>(0,n.jsx)("section",{"data-inside-scene":t+1,hidden:u!==t+1,"aria-label":(0,d.t)("".concat(t+1," ").concat(e)),style:{minWidth:0},children:0===t?(0,n.jsx)(c,{}):1===t?r:2===t?i:3===t?l:5===t?o:(0,n.jsx)("p",{children:(0,d.t)("방문자가 한 줄로 요청하면 조사 → 커넥터\xb7스킬\xb7그래프 생성 → 시험 → 마켓 게시까지 이어지는 장면 — 마법사 연결 뒤 이 자리에서 실행됩니다")})},e))]})}function Z(){let{client:e}=(0,u.Q)(),[t,r]=(0,s.useState)(()=>({client:e,decisions:m}));return(0,s.useEffect)(()=>{let t=!0;r({client:e,decisions:m});let n=function(e,t){let r=e.logsStreamUrl({exactCategory:"pty.decision"});return r?(0,p.BX)(r,{events:{log:e=>{let r;try{r=JSON.parse(e.data)}catch(e){return}if(!r||"object"!=typeof r||Array.isArray(r))return;let n=r;if("pty.decision"!==n.category)return;let s=function(e){if(!h(e))return null;let{ts:t,missionId:r,seq:n,sessionId:s,terminalId:l,agent:a,step:i,text:d,detail:o}=e;if(!f(t)||!Number.isFinite(Date.parse(t))||!f(r)||!Number.isSafeInteger(n)||n<0||!f(s)||!f(l)||!f(a)||!f(d)||void 0!==o&&!h(o)||h(o)&&(void 0!==o.keys&&"string"!=typeof o.keys||void 0!==o.row&&(!Number.isSafeInteger(o.row)||o.row<0)))return null;let c={ts:t,missionId:r,seq:n,sessionId:s,terminalId:l,agent:a,text:d},u=h(o)?{...void 0!==o.keys?{keys:o.keys}:{},...void 0!==o.row?{row:o.row}:{}}:{};return"answer"===i?h(o)&&f(o.question)&&f(o.answer)?{...c,step:i,detail:{...u,question:o.question,answer:o.answer}}:null:"recover"===i?h(o)&&f(o.blocked)&&f(o.action)?{...c,step:i,detail:{...u,blocked:o.blocked,action:o.action}}:null:"done"===i?h(o)&&h(o.result)&&f(o.result.ref)&&("pr"===o.result.kind||"file"===o.result.kind||"text"===o.result.kind)?{...c,step:i,detail:{...u,result:{kind:o.result.kind,ref:o.result.ref}}}:null:"read"===i||"judge"===i||"input"===i?{...c,step:i,...void 0!==o?{detail:u}:{}}:null}(n.data);s&&n.event===s.step&&t(s)}}}):()=>{}}(e,n=>{t&&r(t=>({client:e,decisions:function(e,t){let r=Object.hasOwn(e.missions,t.missionId)?e.missions[t.missionId]:[];if(r.some(e=>e.seq===t.seq))return e;let n=[...r,t].sort((e,t)=>e.seq-t.seq),s={...e.missions,[t.missionId]:n},l=e.currentMissionId?s[e.currentMissionId]:void 0,a=n.at(-1),i=null==l?void 0:l.at(-1);return{missions:s,currentMissionId:!i||Date.parse(a.ts)>Date.parse(i.ts)?t.missionId:e.currentMissionId}}(t.client===e?t.decisions:m,n)}))});return()=>{t=!1,n()}},[e]),(0,n.jsx)(D,{client:e,decisions:t.client===e?t.decisions:m})}},38223:(e,t,r)=>{"use strict";r.d(t,{g:()=>i,q:()=>a});var n=r(86127);let s=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function l(e){return(0,n.t)(e.replace(/\s+/g," ")).trim()}function a(e){var t;let r=e.split("\n"),n=(e,t)=>{let r=e.trim();return t&&(r=(r=r.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),l(r=(r=(r=(r=(r=(r=r.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},s=n(null!=(t=r[0])?t:"",!0);if(s)return s;let a=r.slice(1).find(e=>e.trim());return a?n(a,!1):""}function i(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:s.map(t=>{var r;let{id:n,seat:s}=t,l=null==e?void 0:e.seats.find(e=>e.seat===n);return{seat:s,now:(null==l?void 0:l.now)&&Array.from(a(l.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==l?void 0:l.landed)==null?"못 읽음":l.landed.length,blocked:(null==l?void 0:l.blocked)==null?"못 읽음":l.blocked.length,decisionsWaiting:null!=(r=null==l?void 0:l.pendingDecisions)?r:"못 읽음"}}),runs:(null!=(r=null==t?void 0:t.entries)?r:[]).filter(e=>"running"===e.status).sort((e,t)=>{var r,n;return(Date.parse(null!=(r=t.lastActivityTimestamp)?r:"")||0)-(Date.parse(null!=(n=e.lastActivityTimestamp)?n:"")||0)}).slice(0,6).map(e=>{var t;let r=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&l(t.slice(0,6))||"못 읽음"}(e.runId),stage:l(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(r)?Math.max(0,Math.floor((n-r)/1e3)):"못 읽음"}})}}},41148:(e,t,r)=>{Promise.resolve().then(r.bind(r,2894))},86127:(e,t,r)=>{"use strict";r.d(t,{t:()=>u});let n=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,s=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,l=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,a=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),i=/\b(?:OP|MK|TC|UX)\b/g,d=/\bmsb(\d+)\b/gi,o=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,c={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function u(e){let t,r=e;do t=r,r=r.replace(n,(e,t)=>"run-".concat(t.slice(0,6))).replace(s,"").replace(l,"").replace(o,"").replace(a,"").replace(i,e=>c[e]).replace(d,(e,t)=>"remote-".concat(t));while(r!==t&&function(e){return[n,s,l,a,i,o,d].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(r).length>0);return r}},89604:(e,t,r)=>{"use strict";function n(e){return e.metaKey||e.ctrlKey}function s(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 l(e){var t;if(!e)return!1;let r=e.tagName;if(!r)return!1;if("INPUT"===r||"TEXTAREA"===r||"SELECT"===r)return!0;let n=null==(t=e.getAttribute)?void 0:t.call(e,"contenteditable");return""===n||"true"===n}r.d(t,{ZQ:()=>s,_i:()=>l,nm:()=>a});let a=[{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"}]},96439:(e,t,r)=>{"use strict";function n(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return n(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)}function i(e){return n(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function d(e){return n(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}r.d(t,{HG:()=>g,Kh:()=>f,Nn:()=>m,oc:()=>h});let o=e=>Number.isInteger(e)&&e>=0;function c(e){return n(e)&&s(e.id)&&s(e.title)&&(null===e.open||o(e.open))&&(null===e.landed||o(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&s(e.id)&&s(e.title)))}function u(e){return n(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||n(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>n(e)&&o(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||o(e.pendingDecisions))&&(null===e.checklist||n(e.checklist)&&["green","yellow","red","done"].every(t=>o(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function p(e,t,r){try{let n=await e.fetchResponse(t,{method:"GET"});if(403===n.status)return{kind:"forbidden"};if(!n.ok)return{kind:"error",status:n.status};let s=r(await n.json());return null===s?{kind:"error",status:n.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function m(e,t){return p(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>n(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function h(e,t){return p(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(i)?e:null)}function f(e,t,r){return p(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>n(e)&&s(e.log)?{log:e.log}:null)}function g(e,t){return p(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,r,a,i;if(!(n(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||n(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let o={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in o&&o[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:n(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:o.green,yellow:null!=(r=e.yellow)?r:o.yellow,red:null!=(a=e.red)?a:o.red,done:null!=(i=e.done)?i:o.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[6691,6083,9100,9538,9656,8734,3992,9906,3869,8421,2548,6390,3170,7358],()=>e(e.s=41148)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>o,f6:()=>a,oD:()=>s});let r="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let t=a();return localStorage.setItem(r,t),t}function o(){let e=a();return localStorage.setItem(r,e),e}},2739:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(54456),a=n(86048),s=n.n(a),o=n(60500),i=n(36581),d=n(16434);function c(e){let{items:t}=e,n=t.filter(e=>"OPEN"===e.state&&!e.draft);if(0===n.length)return null;let a=n.slice(0,3);return(0,r.jsx)("div",{className:"mx-auto max-w-lg px-4 pt-4",children:(0,r.jsxs)("section",{"aria-label":"승인 대기",className:"rounded-lg border border-emerald-600/40 bg-emerald-500/10 p-3 text-sm",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsxs)("p",{className:"font-semibold",children:["흡수 아이디어 승인 대기 ",n.length,"건"]}),(0,r.jsx)(s(),{href:"/approvals",className:"rounded-md bg-emerald-700 px-3 py-1 text-white hover:bg-emerald-800",children:"Approvals 에서 보기 →"})]}),(0,r.jsxs)("ul",{className:"mt-2 space-y-1",children:[a.map(e=>(0,r.jsxs)("li",{className:"break-words",children:[(0,r.jsxs)(s(),{href:"/approvals?pr=".concat(e.number),className:"underline",children:["#",e.number]})," \xb7 ",e.title]},e.number)),n.length>a.length&&(0,r.jsxs)("li",{className:"text-muted-foreground",children:["외 ",n.length-a.length,"건"]})]})]})})}function l(){let{client:e}=(0,i.Q)(),t=(0,o.useMemo)(()=>(0,d.tV)({client:e}),[e]),[n,a]=(0,o.useState)([]);return(0,o.useEffect)(()=>{let e=!0;return t.list().then(t=>{let{items:n}=t;e&&a(n)}).catch(()=>{e&&a([])}),()=>{e=!1}},[t]),(0,r.jsx)(c,{items:n})}var u=n(18834);function p(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l,{}),(0,r.jsx)(u.SY,{})]})}},10080:(e,t,n)=>{"use strict";n.d(t,{$:()=>d});var r=n(54456),a=n(80247),s=n(13680),o=n(74591);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 d(e){let{className:t,variant:n="default",size:s="default",...d}=e;return(0,r.jsx)(a.$,{"data-slot":"button",className:(0,o.cn)(i({variant:n,size:s,className:t})),...d})}},16434:(e,t,n)=>{"use strict";n.d(t,{V5:()=>s,tV:()=>o});var r=n(98025);class a extends Error{constructor(e,t,n){super(n||t),this.status=e,this.error=t,this.reason=n,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 o(e){var t,n;let s=null!=(t=e.fetchImpl)?t:fetch,o=(null!=(n=e.baseUrl)?n:"").replace(/\/+$/,"");async function i(t,n){let r={...n,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},i=e.client?await e.client.fetchResponse(t,r):await s("".concat(o).concat(t),r),d=await i.json().catch(()=>null);if(!i.ok){var c;let e=d&&"object"==typeof d?d:{};throw new a(i.status,null!=(c=e.error)?c:"request-failed",e.reason)}return d}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return i("merged"===e?"".concat(r.r5,"?state=merged"):r.r5)},get:e=>i("".concat(r.r5,"/").concat(e)),check:(e,t)=>i("".concat(r.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>i("".concat(r.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},21569:(e,t,n)=>{"use strict";n.d(t,{K:()=>r}),n(60500);let r={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},24062:(e,t,n)=>{Promise.resolve().then(n.bind(n,2739))},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>c,DaemonProvider:()=>l,Q:()=>u});var r=n(54456),a=n(60500),s=n(86704),o=n(1355),i=n(39906),d=n(50733);let c=(0,a.createContext)(null);function l(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[l,u]=(0,a.useState)(n),[p,g]=(0,a.useState)(""),[m]=(0,a.useState)(()=>new i.ki(n));(0,a.useEffect)(()=>{let e=(0,s.Fp)();u(e),m.updateConfig(e),g((0,o.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[m]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();m.updateConfig(t),u(t),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&g(t=>t===e.newValue?t:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[m]);let f=e=>{u(t=>{let n={...t,...e};return(0,s.Qc)(e),m.updateConfig(n),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},h=e=>{g(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},v=(0,a.useMemo)(()=>({config:l,setConfig:f,client:m,sessionId:p,setSessionId:h}),[l,m,p]);return(0,r.jsx)(c.Provider,{value:v,children:t})}function u(){let e=(0,a.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},74591:(e,t,n)=>{"use strict";n.d(t,{cn:()=>s});var r=n(49454),a=n(79946);function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,a.QP)((0,r.$)(t))}},95734:(e,t,n)=>{"use strict";n.d(t,{Gm:()=>c,IH:()=>s,PM:()=>i,ZJ:()=>o,cE:()=>a,dy:()=>d,sg:()=>l});let r=/https?:\/\/[^\s<>"']+/g;function a(e){return e.slice(0,40)}async function s(e,t){let n=function(e){var t;let n=null!=(t=e.match(r))?t:[];return 0===n.length?[{text:e}]:n.map(e=>({url:e}))}(t),a=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:n,source:"pwa"})});return{ids:a.ids,added:a.added,merged:a.merged}}async function o(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function i(e,t){return e.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(t)))}function d(e,t){return e.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(t)))}function c(e,t){return e.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(t)))}function l(e,t,n){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==n?void 0:n.classify)!==void 0?{classify:n.classify}:{}})})}},98025:(e,t,n)=>{"use strict";n.d(t,{GM:()=>i,J3:()=>o,WF:()=>r,bR:()=>s,m:()=>d,r5:()=>a});let r="/v1/devices",a="/v1/approvals/merges",s="/v1/templates/capability-preview",o="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"}},e=>{e.O(0,[7777,3278,1829,6048,9906,8834,6390,3170,7358],()=>e(e.s=24062)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{813:(e,t,r)=>{"use strict";r.d(t,{C:()=>s,P:()=>a});let n="셋업 모드 — 먼저 LLM 을 정하세요";function a(e,t){return(null==e?void 0:e.setupMode)!==!0||"/"!==t?null:"/setup"}function s(e,t){if((null==e?void 0:e.setupMode)!==!0||"/setup"===t||t.startsWith("/setup/"))return null;let r=e.setupMissing;return r&&r.length>0?"".concat(n," (").concat(r.join(", "),")"):n}},14381:(e,t,r)=>{"use strict";r.d(t,{MaturityBanner:()=>l});var n=r(54456),a=r(60500),s=r(80581),o=r(64586);function l(){let e=(0,s.usePathname)(),t=(null==e?void 0:e.replace(/\/+$/,""))==="/inside"||(null==e?void 0:e.replace(/\/+$/,""))==="/app/inside",[r,l]=(0,a.useState)(null);(0,a.useEffect)(()=>{if(!t)return;let e=()=>l(function(){let e=new URL(window.location.href).searchParams.get("demo");if(null!==e)return"1"===e;try{return"1"===window.localStorage.getItem("elanous.inside.demo")}catch(e){return!1}}());return e(),window.addEventListener("elanous:inside-demo",e),()=>window.removeEventListener("elanous:inside-demo",e)},[t]);let i=(0,o.dY)(t?"/inside":null!=e?e:"");return t&&!0===r||"beta"!==i&&"broken"!==i?null:(0,n.jsx)("div",{role:"status",className:"border-b border-border bg-muted px-4 py-2 text-sm text-foreground",children:"beta"===i?"베타 — 화면과 동작이 바뀔 수 있습니다.":"이 화면은 지금 고치는 중입니다."})}},24969:(e,t,r)=>{"use strict";r.d(t,{NexusClientProvider:()=>d});var n=r(54456),a=r(60500),s=r(23869),o=r(43468),l=r(86704);function i(){let e=(0,l.Fp)();return{baseUrl:e.baseUrl,token:e.token}}function d(e){let{children:t}=e,[r,l]=(0,a.useState)({baseUrl:"",token:""});(0,a.useEffect)(()=>{l(i());let e=()=>l(i());return window.addEventListener("storage",e),window.addEventListener("elanous.daemon.changed",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("elanous.daemon.changed",e)}},[]);let d=(0,a.useMemo)(()=>r.baseUrl?(0,s.xX)({baseUrl:r.baseUrl,...r.token?{token:r.token}:{}}):null,[r.baseUrl,r.token]);return d?(0,n.jsx)(o.tI,{client:d,children:t}):(0,n.jsx)(n.Fragment,{children:t})}},27365:(e,t,r)=>{"use strict";r.d(t,{ServiceWorkerRegister:()=>o});var n=r(60500),a=r(50733);async function s(){if("undefined"==typeof navigator)return{status:"unsupported",reason:"no window/navigator (SSR)"};if(!("serviceWorker"in navigator))return{status:"unsupported",reason:"navigator.serviceWorker absent"};if(!window.isSecureContext)return{status:"unsupported",reason:"page not in a secure context (HTTPS or localhost required)"};try{let e=await navigator.serviceWorker.register("/app/sw.js",{scope:"/app/"});if((0,a.cY)("pwa.sw.registered",{scope:e.scope}),e.waiting)return(0,a.cY)("pwa.sw.update-waiting"),{status:"registered",scope:e.scope,updateAvailable:!0};return e.addEventListener("updatefound",()=>{let t=e.installing;t&&t.addEventListener("statechange",()=>{(0,a.cY)("pwa.sw.statechange",{state:t.state})})}),{status:"registered",scope:e.scope,updateAvailable:!1}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,a.cY)("pwa.sw.register-failed",{reason:e}),{status:"error",reason:e}}}function o(){let e=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{e.current||(e.current=!0,s())},[]),null}},34485:(e,t,r)=>{"use strict";r.d(t,{ToastProvider:()=>m});var n=r(54456),a=r(23800),s=r(71829),o=r(45086),l=r(86357),i=r(35448),d=r(16323),c=r(75591);let u=e=>{let{...t}=e,{theme:r="system"}=(0,a.D)();return(0,n.jsx)(s.l$,{theme:r,className:"toaster group",icons:{success:(0,n.jsx)(o.A,{className:"size-4"}),info:(0,n.jsx)(l.A,{className:"size-4"}),warning:(0,n.jsx)(i.A,{className:"size-4"}),error:(0,n.jsx)(d.A,{className:"size-4"}),loading:(0,n.jsx)(c.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})};function m(e){let{children:t}=e;return(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(u,{})]})}},37370:(e,t,r)=>{"use strict";r.d(t,{AppShell:()=>eF});var n=r(54456),a=r(60500),s=r(86048),o=r.n(s),l=r(80581),i=r(75361),d=r(50399),c=r(74591),u=r(96053),m=r(86704),h=r(40057);function f(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=!0,r=0,n=n=>{if(n&&null!==n.key&&"elanous.nexus.baseUrl"!==n.key&&"elanous.daemon.baseUrl"!==n.key)return;let a=++r,s="";try{s=(0,m.Fp)().baseUrl}catch(e){}if(!s)try{s=(0,m.Ip)()}catch(e){}t(!1),s&&(0,h.Tp)(s).then(n=>{e&&r===a&&t(n)})};return n(),"function"==typeof window.addEventListener&&window.addEventListener("storage",n),()=>{e=!1,"function"==typeof window.removeEventListener&&window.removeEventListener("storage",n)}},[]),e}var p=r(64586),b=r(69060),x=r(1274),g=r(88023),v=r(75591),w=r(80079),y=r(13784),j=r(45086),k=r(43468),N=r(17217);function E(e){let{compact:t=!1}=e,r=(0,k.Qj)();return t||!r?null:(0,n.jsx)(S,{})}function S(){var e,t,r;let s=(0,N.mP)(),o=(0,N.XL)(),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)({kind:"idle"}),h=null!=(r=null==(e=s.data)?void 0:e.workflows)?r:[],f=l||(null==(t=h[0])?void 0:t.name)||"",p=async()=>{if(f){m({kind:"pending"});try{let e=await o.mutateAsync({name:f,args:d});m({kind:"started",runId:e.runId,name:f})}catch(e){m({kind:"error",message:e instanceof Error?e.message:"run failed to start"})}}},b=(0,a.useMemo)(()=>(function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.source))?r:[];e.push(n),t.set(n.source,e)}let n=[];for(let e of L){let r=t.get(e);r&&0!==r.length&&(r.sort((e,t)=>e.name.localeCompare(t.name)),n.push({source:e,label:C[e],items:r}))}return n})(h),[h]);return(0,n.jsxs)("div",{"data-testid":"sidebar-workflow-invoker",className:"border-t border-sidebar-border px-3 py-2.5 space-y-1.5",children:[(0,n.jsx)("div",{className:"text-[10px] font-medium uppercase tracking-wider text-sidebar-foreground/60",children:"Run workflow"}),(0,n.jsxs)("select",{value:f,onChange:e=>i(e.target.value),disabled:s.isLoading||0===h.length,"aria-label":"Select workflow to run",className:"block w-full truncate rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50",children:[0===h.length&&(0,n.jsx)("option",{value:"",children:s.isLoading?"loading…":"no workflows"}),b.map(e=>(0,n.jsx)("optgroup",{label:e.label,children:e.items.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))},e.source))]}),(0,n.jsx)("input",{type:"text",value:d,onChange:e=>c(e.target.value),placeholder:"args (optional)","aria-label":"Workflow arguments",className:"block w-full rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary"}),(0,n.jsxs)("button",{type:"button",onClick:p,disabled:!f||"pending"===u.kind,"data-testid":"sidebar-workflow-invoker-run",className:"flex w-full items-center justify-center gap-1 rounded bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:["pending"===u.kind?(0,n.jsx)(v.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(w.A,{className:"h-3 w-3"}),"Run"]}),(0,n.jsx)(A,{status:u})]})}function A(e){let{status:t}=e;return"idle"===t.kind||"pending"===t.kind?null:"error"===t.kind?(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-error",className:"flex items-start gap-1 text-[10px] leading-tight text-error",children:[(0,n.jsx)(y.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"break-all",children:t.message})]}):(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-started",className:"flex items-start gap-1 text-[10px] leading-tight text-muted-foreground",children:[(0,n.jsx)(j.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-green-600"}),(0,n.jsxs)("span",{className:"min-w-0 flex-1 truncate",children:["started ",(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,14)})," \xb7"," ",(0,n.jsx)(o(),{href:"/workflows",className:"underline",children:"view"})]})]})}let L=["project","global","builtin"],C={project:"Project",global:"Global",builtin:"Built-in"};var I=r(86766),P=r(36581),Y=r(37998),M=r(50733),z=r(45160);function R(){var e;let{compact:t=!1,onNavigate:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,a.useContext)(P.C),o=(0,l.useRouter)(),i=(0,l.usePathname)(),d=(0,l.useSearchParams)(),u=null!=(e=null==d?void 0:d.get("show"))?e:null,[m,h]=(0,a.useState)([]),[f,p]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!s)return;let e=!1;return(async()=>{try{let{layouts:t,source:r}=await (0,Y.i$)(s.client);if(e)return;(0,M.cY)("showroom.sidebar.list",{count:t.length,source:r}),h(t)}catch(t){if(e)return;(0,M.cY)("showroom.sidebar.list.error",{error:String(t)})}finally{e||p(!0)}})(),()=>{e=!0}},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{(!e.key||e.key.startsWith("elanous.showroom"))&&(async()=>{try{let{layouts:e}=await (0,Y.i$)(s.client);h(e)}catch(e){}})()};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=s.client.showroomLayoutsEventsUrl();if(!e)return;let t=e=>async()=>{if("hello"!==e){(0,M.cY)("showroom.sidebar.sse.event",{kind:e});try{let{layouts:e}=await (0,Y.i$)(s.client);h(e)}catch(e){}}};return(0,z.BX)(e,{events:{hello:t("hello"),upsert:t("upsert"),remove:t("remove")},onError:()=>{},onConstructError:e=>(0,M.cY)("showroom.sidebar.sse.construct-error",{error:String(e)})})},[s]);let b=(0,a.useCallback)(e=>{(0,M.cY)("showroom.sidebar.switch",{name:e}),o.push("/showroom?show=".concat(encodeURIComponent(e))),null==r||r()},[o,r]);return t||!s?null:(0,n.jsxs)("div",{className:"border-t border-sidebar-border/40 px-2 py-3","data-testid":"showroom-sidebar-section",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-1 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"Showrooms"}),(0,n.jsx)("span",{className:"text-[10px] text-sidebar-foreground/40",children:m.length})]}),!f&&0===m.length&&(0,n.jsx)("div",{className:"px-2 py-1 text-[11px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-loading",children:"loading…"}),f&&0===m.length&&(0,n.jsxs)("div",{className:"px-2 py-1 text-[11px] leading-snug text-sidebar-foreground/50","data-testid":"showroom-sidebar-empty",children:["Save a layout in ",(0,n.jsx)("span",{className:"font-medium",children:"/showroom"})," to populate this rail."]}),m.length>0&&(0,n.jsxs)("ul",{className:"space-y-0.5",children:[m.slice(0,8).map(e=>{var t;let r=(t=e.name,!!i&&"/showroom"===i.replace(/\/+$/,"")&&!!u&&u===t);return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>b(e.name),"data-testid":"showroom-sidebar-item-".concat(e.name),className:(0,c.cn)("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors",r?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/75 hover:bg-sidebar-accent hover:text-sidebar-foreground"),"aria-current":r?"true":void 0,title:"".concat(e.name," — ").concat(e.panels.length," panels"),children:[(0,n.jsx)(I.A,{className:(0,c.cn)("size-3 shrink-0",r?"text-primary":"text-current"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.name}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] text-sidebar-foreground/40",children:e.panels.length})]})},e.name)}),m.length>8&&(0,n.jsxs)("li",{className:"px-2 py-1 text-[10px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-truncated",children:["+ ",m.length-8," more (open Showroom to browse)"]})]})]})}let U=x.Ue;function T(){let{onNavigate:e,onClose:t,compact:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,l.usePathname)(),m=(0,l.useRouter)(),h=function(e){if(!e)return"/";let t=e.replace(/\/+$/,"");return""===t?"/":t}(null!=s?s:"/"),v=(0,u.In)(),{showBeta:w}=(0,b.hj)(),y=f(),[j,k]=(0,a.useState)([]);(0,a.useEffect)(()=>{try{var e;let t=JSON.parse(null!=(e=window.localStorage.getItem("elanous.nav.collapsedGroups"))?e:"[]");Array.isArray(t)&&k(x.Hw.filter(e=>t.includes(e.id)).map(e=>e.id))}catch(e){}},[]);let[N,S]=(0,a.useState)({showLabs:!1,showHidden:!1});(0,a.useEffect)(()=>{let e=()=>S({showLabs:(0,g.fG)(x.f4),showHidden:(0,g.fG)(x.vm)});return e(),window.addEventListener(g.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(g.OY,e),window.removeEventListener("storage",e)}},[]);let A=(0,x.Ye)(U,N,v,y,{showBeta:w}),L=t=>{var a;let s="/"===t.href?"/"===h:h===t.href||h.startsWith(t.href+"/")||(null!=(a=t.activeAlso)?a:[]).some(e=>h===e||h.startsWith(e+"/")),l=t.icon,i="general"===v&&w&&"/settings"!==t.href&&"beta"===(0,p.dY)(t.href);return(0,n.jsxs)("li",{className:"group/nav relative",children:[(0,n.jsxs)(o(),{href:t.href,"aria-current":s?"page":void 0,onClick:r=>{var n,a;n=t,a=r,null!==n.kind&&"general"!==v&&(a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),m.push("/workspace?intent=".concat(n.kind)),null==e||e())),r.defaultPrevented||null==e||e()},title:r?"".concat(t.label).concat(i?" \xb7 실험":""," — ").concat(t.hint):t.hint,"aria-label":"".concat(t.label).concat(i?" \xb7 실험":""," — ").concat(t.hint),className:(0,c.cn)("flex items-center rounded-md text-sm transition-colors",r?"justify-center px-1.5 py-2":"gap-3 px-3 py-2",s?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-foreground"),children:[(0,n.jsx)(l,{className:(0,c.cn)("h-4 w-4 shrink-0",s?"text-primary":"text-current")}),!r&&t.label,!r&&i&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"}),!r&&s&&(0,n.jsx)("span",{className:"ml-auto h-1.5 w-1.5 rounded-full bg-primary","aria-hidden":!0})]}),r&&(0,n.jsxs)("span",{role:"tooltip",className:"pointer-events-none absolute left-full top-1/2 z-50 ml-2 -translate-y-1/2 whitespace-nowrap rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-popover-foreground opacity-0 shadow-md transition-opacity group-hover/nav:opacity-100 [@media(pointer:coarse)]:hidden",children:[(0,n.jsx)("span",{className:"font-medium",children:t.label}),i&&(0,n.jsx)("span",{className:"ml-1 text-primary",children:"실험"}),(0,n.jsxs)("span",{className:"ml-1 text-muted-foreground",children:["— ",t.hint]})]})]},t.href)};return(0,n.jsxs)("nav",{className:"flex h-full flex-col",children:[t&&!r&&(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pt-3 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"menu"}),(0,n.jsx)("button",{type:"button",onClick:t,"aria-label":"close menu",title:"close menu",className:"rounded-md p-1.5 text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)("div",{className:(0,c.cn)("flex-1 space-y-2",r?"px-1 py-2":"px-2 py-3"),children:x.Hw.map(t=>{let a=A.main.filter(e=>e.group===t.id);if(0===a.length)return null;let s=t.icon,l=a[0];return(0,n.jsx)("section",{"aria-label":t.label,children:r||1!==a.length?r?(0,n.jsxs)(o(),{href:l.href,title:"".concat(t.label).concat("general"===v&&w&&"/settings"!==l.href&&"beta"===(0,p.dY)(l.href)?" \xb7 실험":""),"aria-label":"".concat(t.label).concat("general"===v&&w&&"/settings"!==l.href&&"beta"===(0,p.dY)(l.href)?" \xb7 실험":""),onClick:()=>null==e?void 0:e(),className:"relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),"general"===v&&w&&"/settings"!==l.href&&"beta"===(0,p.dY)(l.href)&&(0,n.jsx)("span",{"aria-hidden":!0,className:"absolute -right-1 -top-1 rounded bg-primary px-0.5 text-[8px] text-primary-foreground",children:"실험"})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{type:"button",onClick:()=>(e=>{let t=j.includes(e)?j.filter(t=>t!==e):[...j,e];k(t);try{window.localStorage.setItem("elanous.nav.collapsedGroups",JSON.stringify(t))}catch(e){}})(t.id),"aria-expanded":!j.includes(t.id),"aria-controls":"nav-group-".concat(t.id),className:"flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-xs font-semibold text-sidebar-foreground/80 hover:bg-sidebar-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),t.label,(0,n.jsx)(d.A,{"aria-hidden":!0,className:(0,c.cn)("ml-auto h-3.5 w-3.5 transition-transform",j.includes(t.id)&&"-rotate-90")})]}),!j.includes(t.id)&&(0,n.jsx)("ul",{id:"nav-group-".concat(t.id),className:"ml-3 space-y-1 border-l border-sidebar-border pl-2",children:a.map(L)})]}):(0,n.jsx)("ul",{children:L(l)})},t.id)})}),A.labs.length>0&&(0,n.jsx)($,{label:"Labs",compact:r,children:A.labs.map(L)}),A.hidden.length>0&&(0,n.jsx)($,{label:"Hidden",compact:r,children:A.hidden.map(L)}),N.showLabs&&(0,p.EX)(v,"/showroom")&&(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(R,{compact:r,onNavigate:e})}),N.showLabs&&(0,p.EX)(v,"/workflows")&&(0,n.jsx)(E,{compact:r})]})}function $(e){let{label:t,compact:r,children:a}=e;return(0,n.jsxs)("div",{className:(0,c.cn)("border-t border-sidebar-border",r?"px-1 py-2":"px-2 py-2"),children:[!r&&(0,n.jsx)("span",{className:"px-3 text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:t}),(0,n.jsx)("ul",{className:"mt-1 space-y-1",children:a})]})}var O=r(78844),D=r(93684),W=r(78814),H=r(81446),q=r(52679),B=r(94757),_=r(70090),F=r(71829),G=r(42778),Z=r(2263),K=r(36666),Q=r(86386),X=r(29972),J=r(55348),V=r(73189),ee=r(24685),et=r(51989),er=r(91321);let en=[{kind:"chat",label:"chat",icon:G.A},{kind:"term",label:"terminal",icon:Z.A},{kind:"intake",label:"intake",icon:K.A},{kind:"tasks",label:"tasks",icon:Q.A},{kind:"control",label:"control",icon:J.A},{kind:"settings",label:"settings",icon:W.A}];function ea(){let e=(0,ee.hA)(),{addTab:t,activateOrAdd:r}=e,[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)({top:0,left:0}),d=(0,a.useRef)(null),c=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{var e;if(!s)return;let t=null==(e=d.current)?void 0:e.getBoundingClientRect();t&&i({top:t.bottom+4,left:t.left})},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{var t,r;let n=e.target;(null==(t=d.current)||!t.contains(n))&&(null!=(r=c.current)&&r.contains(n)||o(!1))};document.addEventListener("mousedown",e);let t=e=>{"Escape"===e.key&&o(!1)};document.addEventListener("keydown",t);let r=()=>o(!1);return window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{ref:d,type:"button","aria-label":"add tab",title:"새 탭 (+)",onClick:()=>o(e=>!e),className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(er.A,{className:"h-4 w-4"})}),s&&"undefined"!=typeof document&&(0,et.createPortal)((0,n.jsx)("div",{ref:c,role:"menu",style:{position:"fixed",top:l.top,left:l.left,zIndex:100},className:"w-44 rounded-md border border-border bg-popover py-1 shadow-md",children:en.map(t=>{let a=t.icon;return(0,n.jsxs)("button",{type:"button",role:"menuitem",onClick:()=>{var n;"chat"===(n=t.kind)?e.openPicker({kind:"addNewChat"}):r(n),o(!1)},className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm hover:bg-secondary",children:[(0,n.jsx)(a,{className:"h-4 w-4 text-muted-foreground"}),(0,n.jsx)("span",{className:"flex-1",children:t.label})]},t.kind)})}),document.body)]})}var es=r(46773);let eo={chat:G.A,term:Z.A,intake:K.A,tasks:Q.A,workflows:X.A,control:J.A,settings:W.A};function el(e){let{open:t,onClose:r}=e,{state:s,activateTab:o,closeTab:l}=(0,ee.hA)(),d=(0,es.ub)(s),u=(0,a.useRef)(null);if((0,a.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&r()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,r]),!t)return null;let m=new Map,h=0;for(let e of d)"chat"===e.kind&&(h+=1,m.set(e.id,h));return(0,n.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"탭 전환",className:"fixed inset-0 z-50 flex flex-col bg-background",children:[(0,n.jsxs)("div",{className:"flex h-9 shrink-0 items-center justify-between border-b border-border px-3",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"탭 전환"}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:r,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsxs)("div",{ref:u,className:"flex-1 overflow-y-auto p-3 space-y-2",children:[0===d.length&&(0,n.jsx)("p",{className:"text-center text-sm text-muted-foreground py-6",children:"아직 탭이 없습니다."}),d.map(e=>{var t,a;let d=eo[e.kind],u=s.activeId===e.id,h="chat"===e.kind&&null!=(t=m.get(e.id))?t:0,f="chat"===e.kind?null!=(a=e.title)?a:"chat#".concat(h):"term"===e.kind?"terminal":"tasks"===e.kind?"tasks":e.kind;return(0,n.jsxs)("div",{className:(0,c.cn)("flex items-center gap-3 rounded-lg border px-3 py-3 text-sm transition-colors",u?"border-primary bg-primary/10":"border-border bg-card hover:bg-secondary"),children:[(0,n.jsx)("span",{className:(0,c.cn)("inline-flex h-2 w-2 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30"),"aria-hidden":!0}),(0,n.jsx)(d,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,n.jsx)("button",{type:"button",onClick:()=>{o(e.id),r()},className:"flex-1 truncate text-left",children:f}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(f),onClick:t=>{t.stopPropagation(),l(e.id)},className:"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-background hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-3.5 w-3.5"})})]},e.id)})]})]})}let ei={chat:G.A,term:Z.A,intake:K.A,tasks:Q.A,workflows:X.A,control:J.A,settings:W.A};function ed(e,t){var r;return"chat"===e.kind?null!=(r=e.title)?r:"chat#".concat(t):"term"===e.kind?"terminal":e.kind}function ec(){var e;let t=(0,ee.tg)(),[r,s]=(0,a.useState)(!1);if(!t)return null;let o=(0,es.ub)(t.state);if(0===o.length)return null;let l=new Map,d=0;for(let e of o)"chat"===e.kind&&(d+=1,l.set(e.id,d));let u=o.find(e=>e.id===t.state.activeId),m=(null==u?void 0:u.kind)==="chat"&&null!=(e=l.get(u.id))?e:0,h=Math.max(0,o.length-!!u);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs","data-elanous-component":"topbar-workspace-strip",className:"hidden sm:flex min-w-0 flex-1 items-center gap-1 overflow-x-auto px-1",children:[o.map(e=>{var r;let a=ei[e.kind],s=t.state.activeId===e.id,o="chat"===e.kind&&null!=(r=l.get(e.id))?r:0,d=ed(e,o);return(0,n.jsxs)("div",{role:"tab","aria-selected":s,onClick:()=>t.activateTab(e.id),className:(0,c.cn)("group flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] font-medium transition-colors cursor-pointer",s?"bg-primary/15 text-foreground ring-1 ring-primary/40":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[(0,n.jsx)(a,{className:"h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"max-w-[120px] truncate",children:d}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(d),onClick:r=>{r.stopPropagation(),t.closeTab(e.id)},className:"ml-0.5 inline-flex h-3.5 w-3.5 items-center justify-center rounded text-muted-foreground/60 opacity-0 transition-opacity hover:bg-background hover:text-foreground group-hover:opacity-100 data-[active=true]:opacity-100","data-active":s?"true":"false",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]},e.id)}),(0,n.jsx)(ea,{})]}),(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs (compact)","data-elanous-component":"topbar-workspace-strip-mobile",className:"flex sm:hidden min-w-0 flex-1 items-center gap-1 px-1",children:[u&&(0,n.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1 rounded-md bg-primary/15 px-1.5 py-0.5 text-[11px] font-medium ring-1 ring-primary/40",children:[(()=>{let e=ei[u.kind];return(0,n.jsx)(e,{className:"h-3 w-3 shrink-0"})})(),(0,n.jsx)("span",{className:"flex-1 truncate",children:ed(u,m)}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:()=>t.closeTab(u.id),className:"inline-flex h-3.5 w-3.5 items-center justify-center rounded hover:bg-background",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]}),h>0&&(0,n.jsxs)("button",{type:"button","aria-label":"other tabs (".concat(h,")"),onClick:()=>s(!0),className:"inline-flex h-6 shrink-0 items-center gap-0.5 rounded-md px-1.5 text-[11px] text-muted-foreground hover:bg-secondary hover:text-foreground",children:[(0,n.jsx)(V.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:h})]}),(0,n.jsx)(ea,{})]}),(0,n.jsx)(el,{open:r,onClose:()=>s(!1)})]})}var eu=r(1617),em=r(65845);function eh(e){return(null==e?void 0:e.kind)==="progress"&&"running"===e.status?3:(null==e?void 0:e.kind)==="progress"?2:1}function ef(e){var t,r;if("loading"===e.status)return{kind:"loading"};if("error"===e.status)return{kind:"error",message:e.message||"Failed to load activity"};let n=null!=(t=e.subjects)?t:[],a=(0,eu.vq)(n,(0,em.gA)(null!=(r=e.logs)?r:[])),s=function(e,t){var r,n;let a=e.filter(e=>"live"===(0,eu.t_)(e));if(0===a.length)return null;let s=[...a].sort((e,r)=>{let n=eh(t.get(r.id))-eh(t.get(e.id));return 0!==n?n:(e.runId||e.id).localeCompare(r.runId||r.id)})[0];return{run:(r=t.get(s.id),{subjectId:s.id,runId:s.runId||s.id,origin:s.origin,progressLine:(null==r?void 0:r.kind)==="progress"?r.line:null,progressStatus:(null==r?void 0:r.kind)==="progress"?r.status:null,href:(n=s.id,"/observatory#".concat(encodeURIComponent(n)))}),extraLiveCount:a.length-1}}(n,a);return s?{kind:"active",run:s.run,extraLiveCount:s.extraLiveCount}:{kind:"quiet"}}function ep(e){let{snapshot:t}=e;if("quiet"===t.kind||"loading"===t.kind)return null;if("error"===t.kind)return(0,n.jsx)("span",{role:"alert","data-elanous-component":"topbar-activity","data-activity-kind":"error",title:t.message,className:"max-w-[9rem] shrink-0 truncate rounded px-1.5 py-0.5 text-[10px] text-rose-500 sm:max-w-[16rem]",children:"activity error"});let r=function(e){let{run:t,extraLiveCount:r}=e,n=["LIVE ".concat(t.runId),"origin: ".concat(t.origin)];return t.progressStatus&&t.progressLine&&n.push("".concat(t.progressStatus," — ").concat(t.progressLine)),r>0&&n.push("+".concat(r," more")),n.join(" \xb7 ")}(t);return(0,n.jsxs)(o(),{href:t.run.href,"aria-label":r,title:r,"data-elanous-component":"topbar-activity","data-activity-kind":"active","data-run-id":t.run.runId,className:"flex min-w-0 max-w-[7.5rem] shrink items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-emerald-600 hover:bg-accent sm:max-w-[18rem]",children:[(0,n.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-emerald-500","aria-hidden":!0}),(0,n.jsx)("span",{className:"hidden uppercase tracking-wide sm:inline",children:"LIVE"}),(0,n.jsx)("span",{className:"min-w-0 truncate",children:t.run.runId}),t.run.progressLine&&(0,n.jsx)("span",{className:"hidden min-w-0 truncate text-muted-foreground md:inline",children:t.run.progressLine}),t.extraLiveCount>0&&(0,n.jsxs)("span",{className:"shrink-0 text-muted-foreground",children:["+",t.extraLiveCount]})]})}var eb=r(22720),ex=r(50738);let eg="•••",ev=[[/\b(?:elt|els)_[A-Za-z0-9_-]{8,}/g,eg],[/\b(?:ghp|gho|ghs|ghu|github_pat)_[A-Za-z0-9_]{10,}/g,eg],[/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}/g,eg],[/\bxox[abpr]-[A-Za-z0-9-]{10,}/g,eg],[/\b\d{6,}:[A-Za-z0-9_-]{30,}\b/g,eg],[/(Bearer\s+)[A-Za-z0-9._~+/-]{12,}=*/gi,"$1".concat(eg)],[/([?&](?:token|access_token|key|auth|code)=)[^&\s"'<>]+/gi,"$1".concat(eg)],[/\b(?:10|127)\.\d{1,3}\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eg],[/\b192\.168\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eg],[/\b172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eg],[/\b100\.(?:6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eg],[/\b[a-z0-9-]+(?:\.[a-z0-9-]+)*\.ts\.net(?::\d{2,5})?\b/gi,"tailnet-host"],[/\b[a-z0-9-]+\.local(?::\d{2,5})?\b/gi,"local-host"],[/\blocalhost:\d{2,5}\b/gi,"localhost"],[/\/(?:Users|home)\/[^/\s"'<>]+/g,"~"],[/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,"".concat(eg,"@").concat(eg)]];async function ew(e){let t=Math.max(320,Math.round(window.innerWidth)),r=Math.max(320,Math.round(window.innerHeight)),n=document.body.cloneNode(!0),a=0;for(let e of Array.from(n.querySelectorAll("[data-share-hide], [data-share-capture-ui]"))){let t=document.createElement("span");t.setAttribute("style","display:inline-block;min-width:4em;height:1em;background:#9ca3af;border-radius:3px"),e.replaceWith(t),a++}for(let e of Array.from(n.querySelectorAll("input, textarea")))e.setAttribute("value",""),"TEXTAREA"===e.tagName&&(e.textContent="");let s="";for(let e of Array.from(document.styleSheets))try{for(let t of Array.from(e.cssRules))s+="".concat(t.cssText,"\n")}catch(e){}let{markup:o,hits:l}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{text:r,hits:n}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=0,n=e;for(let e of t){let t=RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g");n=n.replace(t,()=>(r++,eg))}for(let[e,t]of ev)n=n.replace(e,function(){for(var e,n=arguments.length,a=Array(n),s=0;s<n;s++)a[s]=arguments[s];return r++,t.replace("$1",null!=(e=a[1])?e:"")});let a=(0,ex.dc)([])(n,!1);return a!==n&&r++,{text:a,hits:r}}(e.replace(/<script\b[\s\S]*?<\/script>/gi,"").replace(/<noscript\b[\s\S]*?<\/noscript>/gi,"").replace(/(<input\b[^>]*?\bvalue=)("[^"]*"|'[^']*')/gi,'$1""').replace(/(<textarea\b[^>]*>)[\s\S]*?(<\/textarea>)/gi,"$1$2"),t);return{markup:r,hits:n}}(new XMLSerializer().serializeToString(n),e),i=document.documentElement.className.replace(/[^\w\s-]/g,""),d='<svg xmlns="http://www.w3.org/2000/svg" width="'.concat(t,'" height="').concat(r,'"><foreignObject width="100%" height="100%">')+'<div xmlns="http://www.w3.org/1999/xhtml" class="'.concat(i,'" style="width:').concat(t,"px;height:").concat(r,'px;overflow:hidden">')+"<style>".concat(s.replace(/<\/style/gi,""),"</style>").concat(o,"</div></foreignObject></svg>"),c="data:image/svg+xml;charset=utf-8,".concat(encodeURIComponent(d)),u=new Image;await new Promise((e,t)=>{u.onload=()=>e(),u.onerror=()=>t(Error("render-failed")),u.src=c});let m=Math.min(2,window.devicePixelRatio||1),h=document.createElement("canvas");h.width=Math.round(t*m),h.height=Math.round(r*m);let f=h.getContext("2d");if(!f)throw Error("no-canvas");f.fillStyle=getComputedStyle(document.body).backgroundColor||"#ffffff",f.fillRect(0,0,h.width,h.height),f.scale(m,m),f.drawImage(u,0,0);let p=await new Promise(e=>h.toBlob(e,"image/png"));if(!p)throw Error("encode-failed");return{blob:p,hits:l+a,width:t,height:r}}function ey(){let{config:e}=(0,P.Q)(),[t,r]=(0,a.useState)(!1),s=async()=>{if(!t){r(!0);try{let t=function(e){let t=new Set,r=e=>{e&&e.trim().length>=4&&t.add(e.trim())};if(r(e.token),r(e.pageHost),e.baseUrl)try{let t=new URL(e.baseUrl);r(t.host),r(t.hostname),r(e.baseUrl.replace(/\/$/,""))}catch(t){r(e.baseUrl)}return[...t].sort((e,t)=>t.length-e.length)}({pageHost:window.location.host,baseUrl:e.baseUrl,token:e.token}),r=await ew(t),n=await fetch("".concat(e.baseUrl.replace(/\/$/,""),"/v1/captures"),{method:"POST",headers:{"content-type":"image/png",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:r.blob});if(!n.ok)throw Error(401===n.status?"auth":"http-".concat(n.status));let a=await n.json();(0,M.cY)("pwa.share-capture.uploaded",{hits:r.hits,width:r.width,height:r.height}),F.oR.success("공유용 캡처를 저장했습니다 — 가린 항목 ".concat(r.hits,"개"),{description:"데몬 captures/".concat(a.id,".png \xb7 올리기 전에 한 번 더 확인해 주세요")})}catch(t){let e=t instanceof Error?t.message:"unknown";(0,M.cY)("pwa.share-capture.failed",{reason:e}),F.oR.error("auth"===e?"저장하지 못했습니다 — 연결 토큰이 필요합니다(설정 › 데몬 연결)":"이 화면은 아직 캡처하지 못했습니다(beta) — 다른 브라우저에서 다시 시도해 주세요")}finally{r(!1)}}};return(0,n.jsx)("button",{type:"button","data-share-capture-ui":!0,onClick:()=>{s()},disabled:t,"aria-label":"공유용 캡처",title:"공유용 캡처 (beta) — 주소\xb7토큰을 가린 사진을 데몬에 저장",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:(0,n.jsx)(eb.A,{className:"h-4 w-4"})})}let ej="elanous.pwa.wakeLockOn";function ek(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],[t,r]=(0,a.useState)(!1),n=function(e){let[t,r]=(0,a.useState)({supported:"undefined"!=typeof navigator&&"wakeLock"in navigator,held:!1,error:null}),n=(0,a.useRef)(null),s=(0,a.useRef)(e);return s.current=e,(0,a.useEffect)(()=>{if("undefined"==typeof navigator)return;let t=navigator.wakeLock;if(!t)return void r(e=>({...e,supported:!1}));let a=async()=>{if(s.current&&(!n.current||n.current.released))try{let e=await t.request("screen");n.current=e,r({supported:!0,held:!0,error:null}),(0,M.cY)("webterm.wake-lock.acquired"),e.addEventListener("release",()=>{n.current=null,r(e=>({...e,held:!1})),(0,M.cY)("webterm.wake-lock.auto-released")})}catch(t){let e=t instanceof Error?t.message:String(t);r({supported:!0,held:!1,error:e}),(0,M.cY)("webterm.wake-lock.acquire-failed",{reason:e})}},o=async()=>{let e=n.current;if(e&&!e.released){try{await e.release(),(0,M.cY)("webterm.wake-lock.released")}catch(e){}n.current=null,r(e=>({...e,held:!1}))}};e?a():o();let l=()=>{"visible"===document.visibilityState&&s.current&&a()};return document.addEventListener("visibilitychange",l),()=>{document.removeEventListener("visibilitychange",l),o()}},[e]),t}(e&&t);return(0,a.useEffect)(()=>{if(e)try{"1"===window.localStorage.getItem(ej)&&r(!0)}catch(e){}},[e]),{on:t,status:n,toggle:()=>{r(e=>{let t=!e;try{window.localStorage.setItem(ej,t?"1":"0")}catch(e){}return(0,M.cY)("pwa.topbar.wake-lock.toggle",{next:t}),t})}}}function eN(e){let{onToggleSidebar:t,sidebarOpen:r,activity:s,onCompactView:l,sheetMode:d=!1,wakeControl:u}=e,{sessionId:m,config:h}=(0,P.Q)(),{theme:f,setTheme:p}=(0,_.D)(),[b,x]=(0,a.useState)(d),[g,v]=(0,a.useState)(!1),w=ek(!u),{on:y,status:j,toggle:k}=null!=u?u:w;(0,a.useEffect)(()=>{if(!l)return;let e=()=>v(window.innerWidth<=B.u);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[l]);let N=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!b||d)return;let e=e=>{N.current&&(N.current.contains(e.target)||x(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[b,d]);let E=async()=>{if(m)try{await navigator.clipboard.writeText(m),F.oR.success("Session id copied"),(0,M.cY)("pwa.topbar.session-copy",{sessionId:m})}catch(e){F.oR.error("Copy failed"),(0,M.cY)("pwa.topbar.session-copy-error",{err:String(e)})}};return(0,n.jsxs)("header",{className:d?"flex flex-col gap-2 text-xs":"flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs",children:[!d&&(0,n.jsxs)("button",{type:"button",onClick:t,"aria-label":r?"close menu":"open menu",title:r?"close menu":"open menu",className:"flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:[r?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(O.A,{className:"h-4 w-4"}),(0,n.jsx)("span",{className:"hidden text-[11px] font-medium leading-none sm:inline",children:r?"닫기":"메뉴"})]}),d?(0,n.jsx)("div",{className:"w-full",children:(0,n.jsx)(ec,{})}):(0,n.jsx)(ec,{}),s&&(0,n.jsx)(ep,{snapshot:s}),(0,n.jsxs)("div",{className:d?"flex flex-wrap items-center gap-2":"ml-auto flex items-center gap-1",children:[l&&g&&(0,n.jsx)("button",{type:"button",onClick:l,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-accent hover:text-foreground",children:"간소하게 보기"}),(0,n.jsx)(ey,{}),(0,n.jsx)(o(),{href:"/","aria-label":"voice",title:"voice (HTTPS Tailscale Serve 필요)",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>(0,M.cY)("pwa.topbar.voice-link"),children:(0,n.jsx)(D.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{ref:N,className:d?"w-full":"relative",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>x(e=>!e),"aria-expanded":d?b:void 0,"aria-label":"settings",title:"session ".concat(m?m.slice(0,8):"—"," \xb7 theme ").concat(f),className:(0,c.cn)("rounded-md p-1.5 hover:bg-accent",d&&"flex items-center",b?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,n.jsx)(W.A,{className:"h-4 w-4"}),d&&(0,n.jsx)("span",{className:"ml-1",children:"설정"})]}),b&&(0,n.jsxs)("div",{className:d?"w-full rounded-md border border-border bg-popover p-2":"absolute right-0 top-full z-50 mt-1 min-w-[240px] rounded-md border border-border bg-popover p-2 shadow-md",children:[(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"session"}),(0,n.jsxs)("button",{type:"button",onClick:E,className:"flex w-full items-center justify-between rounded border border-border bg-card px-2 py-1 font-mono text-[11px] hover:bg-secondary",title:"click to copy",children:[(0,n.jsx)("span",{className:"truncate",children:m||"— (not connected)"}),(0,n.jsx)(H.A,{className:"ml-2 h-3 w-3 shrink-0"})]}),h.provider&&(0,n.jsxs)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:["provider: ",(0,n.jsx)("span",{className:"font-medium text-foreground",children:h.provider})]})]}),j.supported&&(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"screen"}),(0,n.jsxs)("button",{type:"button",onClick:k,className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",y&&"bg-accent text-accent-foreground"),title:y?"화면 깨움 해제":"화면 깨움 유지",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(q.A,{className:(0,c.cn)("h-3.5 w-3.5",y&&"text-amber-500"),"aria-hidden":!0}),"Wake Lock"]}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:j.held?"held":y?"requested":"off"})]}),j.error&&(0,n.jsx)("p",{className:"mt-1 truncate text-[10px] text-rose-500",title:j.error,children:j.error})]}),(0,n.jsxs)("div",{className:"mb-1",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"theme"}),(0,n.jsx)("ul",{className:"max-h-56 overflow-auto",children:_.z.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",e===f&&"bg-accent text-accent-foreground"),onClick:()=>{p(e),(0,M.cY)("pwa.topbar.theme",{theme:e})},children:[(0,n.jsx)("span",{className:"truncate",children:e}),e===f&&(0,n.jsx)("span",{className:"ml-2 text-[10px]",children:"✓"})]})},e))})]}),(0,n.jsx)("div",{className:"mt-2 border-t border-border pt-2",children:(0,n.jsx)(o(),{href:"/settings",className:"block rounded px-2 py-1 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>x(!1),children:"full settings →"})})]})]})]})]})}var eE=r(91988);function eS(e){var t,r;let{onToggleSidebar:s,sidebarOpen:o,activity:d,setWide:c,wakeControl:u}=e,[m,h]=(0,a.useState)(!1),f=ek(!u),p=(0,a.useRef)(null),b=(0,a.useRef)(null),g=(0,l.usePathname)(),v=(0,ee.tg)(),w=v&&(0,es.ub)(v.state).find(e=>e.id===v.state.activeId),y=(null!=g?g:"/").replace(/\/+$/,"")||"/",j=(null==w?void 0:w.kind)==="chat"?null!=(r=w.title)?r:"채팅":(null==w?void 0:w.kind)==="term"?"터미널":null==w?void 0:w.kind,k=null==(t=x.Ue.find(e=>{var t;return e.href===y||(null==(t=e.activeAlso)?void 0:t.some(e=>y===e||y.startsWith("".concat(e,"/"))))||"/"!==e.href&&y.startsWith("".concat(e.href,"/"))}))?void 0:t.label,N="/workspace"===y&&j?j:null!=k?k:"elanous";return(0,a.useEffect)(()=>{if(!m)return;let e=b.current;if(!e)return;let t=()=>Array.from(e.querySelectorAll('button:not(:disabled), a[href], [tabindex]:not([tabindex="-1"])')).filter(e=>e.getClientRects().length>0);e.focus();let r=r=>{if("Escape"===r.key){r.preventDefault(),h(!1);return}if("Tab"!==r.key)return;let n=t();if(0===n.length){r.preventDefault(),e.focus();return}let a=n[0],s=n[n.length-1];r.shiftKey&&(document.activeElement===a||document.activeElement===e||!e.contains(document.activeElement))?(r.preventDefault(),s.focus()):r.shiftKey||document.activeElement!==s&&e.contains(document.activeElement)||(r.preventDefault(),a.focus())},n=r=>{var n;e.contains(r.target)||(null!=(n=t()[0])?n:e).focus()};return document.addEventListener("keydown",r,!0),document.addEventListener("focusin",n),()=>{var e;document.removeEventListener("keydown",r,!0),document.removeEventListener("focusin",n),null==(e=p.current)||e.focus()}},[m]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"flex h-10 max-h-11 shrink-0 items-center gap-2 border-b border-border bg-background px-2 text-sm",children:[(0,n.jsx)("button",{type:"button",onClick:s,"aria-label":o?"close menu":"open menu",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:o?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(O.A,{className:"h-4 w-4"})}),(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:N}),(0,n.jsx)("button",{ref:p,type:"button",onClick:()=>h(!0),"aria-label":"더 보기","aria-expanded":m,"aria-controls":"compact-topbar-sheet",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:(0,n.jsx)(eE.A,{className:"h-4 w-4"})})]}),m&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>h(!1)}),(0,n.jsxs)("div",{ref:b,id:"compact-topbar-sheet",role:"dialog","aria-modal":"true","aria-label":"더 보기",tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background p-4 shadow-lg",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-medium",children:"더 보기"}),(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",onClick:()=>h(!1),className:"rounded p-2",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)(eN,{sheetMode:!0,onToggleSidebar:s,sidebarOpen:o,activity:d,wakeControl:null!=u?u:f}),(0,n.jsx)("button",{type:"button",className:"mt-3 w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-accent",onClick:()=>{h(!1),c(!0)},children:"넓게 보기"})]})]})]})}function eA(){var e,t;let r=(0,l.usePathname)(),s=(0,u.In)(),{showBeta:d}=(0,b.hj)(),c=f(),[m,h]=(0,a.useState)({showLabs:!1,showHidden:!1}),[v,w]=(0,a.useState)(null),y=(0,a.useRef)(null),j=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=()=>h({showLabs:(0,g.fG)(x.f4),showHidden:(0,g.fG)(x.vm)});return e(),window.addEventListener(g.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(g.OY,e),window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>{var e;if(!v)return;null==(e=j.current)||e.focus();let t=e=>{if("Escape"===e.key){e.preventDefault(),w(null);return}if("Tab"!==e.key||!j.current)return;let t=Array.from(j.current.querySelectorAll("a[href], button:not(:disabled)"));if(!t.length)return;let r=t[0],n=t[t.length-1];e.shiftKey&&(document.activeElement===r||document.activeElement===j.current)?(e.preventDefault(),n.focus()):e.shiftKey||document.activeElement!==n||(e.preventDefault(),r.focus())},r=e=>{j.current&&!j.current.contains(e.target)&&j.current.focus()};return document.addEventListener("keydown",t),document.addEventListener("focusin",r),()=>{var e;document.removeEventListener("keydown",t),document.removeEventListener("focusin",r),null==(e=y.current)||e.focus()}},[v]);let k=(0,x.Ye)(x.Ue,m,s,c,{showBeta:d}),N=new Set([...k.main,...k.labs,...k.hidden]),E=x.Ue.filter(e=>N.has(e)),S=x.Hw.map(e=>({...e,items:E.filter(t=>t.group===e.id)})).filter(e=>e.items.length>0),A=S.filter(e=>e.bottomTab),L=S.filter(e=>!e.bottomTab),C=(null!=r?r:"/").replace(/\/+$/,"")||"/",I=e=>{var t;return C===e.href||"/"!==e.href&&C.startsWith("".concat(e.href,"/"))||(null!=(t=e.activeAlso)?t:[]).some(e=>C===e||C.startsWith("".concat(e,"/")))},P=S.find(e=>e.items.some(I)),Y="more"===v?L:S.filter(e=>e.id===v);return(0,a.useEffect)(()=>{v&&!Y.length&&w(null)},[v,Y.length]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("nav",{"aria-label":"아래 탭",className:"h-[calc(3.5rem+env(safe-area-inset-bottom))] shrink-0 border-t border-border bg-background pb-[env(safe-area-inset-bottom)]",children:(0,n.jsxs)("div",{className:"flex h-full items-stretch",children:[A.map(e=>{let t=e.icon,r=(null==P?void 0:P.id)===e.id,a="flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(r?"font-semibold text-primary":"text-muted-foreground");return 1===e.items.length?(0,n.jsxs)(o(),{href:e.items[0].href,"aria-label":e.label,"aria-current":r?"page":void 0,className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label}),"general"===s&&d&&"/settings"!==e.items[0].href&&"beta"===(0,p.dY)(e.items[0].href)&&(0,n.jsx)("span",{className:"text-[10px] text-primary",children:"실험"})]},e.id):(0,n.jsxs)("button",{type:"button","aria-label":e.label,"aria-expanded":v===e.id,"aria-controls":"mobile-nav-sheet",onClick:t=>{y.current=t.currentTarget,w(e.id)},className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label})]},e.id)}),(0,n.jsxs)("button",{type:"button","aria-label":"더보기","aria-expanded":"more"===v,"aria-controls":"mobile-nav-sheet",onClick:e=>{y.current=e.currentTarget,w("more")},className:"flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(P&&!P.bottomTab?"font-semibold text-primary":"text-muted-foreground"),children:[(0,n.jsx)(eE.A,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:"더보기"})]})]})}),v&&Y.length>0&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>w(null)}),(0,n.jsxs)("div",{ref:j,id:"mobile-nav-sheet",role:"dialog","aria-modal":"true","aria-label":"more"===v?"더보기":null==(e=S.find(e=>e.id===v))?void 0:e.label,tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background px-4 pt-3 pb-[calc(1rem+env(safe-area-inset-bottom))] shadow-lg",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-semibold",children:"more"===v?"더보기":null==(t=S.find(e=>e.id===v))?void 0:t.label}),(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",onClick:()=>w(null),className:"rounded-md p-2",children:(0,n.jsx)(i.A,{"aria-hidden":!0,className:"h-5 w-5"})})]}),Y.map(e=>(0,n.jsxs)("section",{"aria-label":e.label,className:"mt-2",children:["more"===v&&e.items.length>1&&(0,n.jsx)("h2",{className:"px-2 py-1 text-xs font-semibold text-muted-foreground",children:e.label}),e.items.map(e=>{let t=e.icon,r="general"===s&&d&&"/settings"!==e.href&&"beta"===(0,p.dY)(e.href);return(0,n.jsxs)(o(),{href:e.href,"aria-current":I(e)?"page":void 0,onClick:()=>w(null),className:"flex items-center gap-3 rounded-md px-3 py-3 text-sm hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-4 w-4"}),e.label,r&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"})]},e.href)})]},e.id))]})]})]})}let eL=new(r(39906)).ki({baseUrl:"",token:"",provider:""});async function eC(){var e,t,r,n;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=null!=(e=a.fetchImpl)?e:globalThis.fetch,o=null!=(t=a.listProgressFrames)?t:()=>eL.listProgressFrames().catch(()=>null);try{let[e,t]=await Promise.all([s("/v1/terminals").then(async e=>{if(!e.ok)throw Error("GET /v1/terminals failed (".concat(e.status,")"));return e.json()}),o()]);return ef({status:"ready",subjects:null!=(r=e.subjects)?r:[],logs:null!=(n=null==t?void 0:t.logs)?n:[]})}catch(e){return ef({status:"error",message:e instanceof Error?e.message:"Failed to load activity"})}}function eI(){return"undefined"!=typeof document&&!0===document.hidden}var eP=r(56125),eY=r(26600);let eM="elanous.pwa.installBanner.dismissedAt";function ez(){try{return window.localStorage}catch(e){return null}}function eR(e){let t=ez();if(t)try{t.setItem(eM,String(e))}catch(e){}}function eU(){return(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(eT,{})})}function eT(){let[e,t]=(0,a.useState)(!1),[r,s]=(0,a.useState)("unsupported"),[o,d]=(0,a.useState)(null),c=(0,l.usePathname)(),u=(0,l.useSearchParams)(),m=null==u?void 0:u.get("capture"),h=null==u?void 0:u.get("demo"),f=(0,a.useRef)(!1),p=(0,a.useRef)("unsupported"),b=e=>{var r,n;let a=null;try{a=window.localStorage.getItem("elanous.inside.demo")}catch(e){}let s=(n={now:Date.now(),standalone:function(){let e=!0===window.navigator.standalone,t=!1;try{var r,n,a;t=(null==(n=(a=window).matchMedia)||null==(r=n.call(a,"(display-mode: standalone)"))?void 0:r.matches)===!0}catch(e){}return e||t}(),platform:e,dismissedAt:function(){let e=ez();if(!e)return null;let t=e.getItem(eM);if(null===t)return null;let r=Number(t);return Number.isFinite(r)?r:null}(),quiet:null!=(r=window.location)&&!!r.href&&function(e,t){let r=new URL(e);if("public"===r.searchParams.get("capture"))return!0;let n=r.pathname.replace(/\/+$/,"");if("/inside"!==n&&"/app/inside"!==n)return!1;let a=r.searchParams.get("demo");return null!==a?"1"===a:"1"===t}(window.location.href,a)}).quiet?{show:!1,reason:"quiet"}:n.standalone?{show:!1,reason:"standalone"}:"unsupported"===n.platform?{show:!1,reason:"unsupported"}:null!==n.dismissedAt&&n.now-n.dismissedAt<6048e5?{show:!1,reason:"recently-dismissed"}:{show:!0,reason:"show"};return t(s.show&&!f.current),s};(0,a.useEffect)(()=>{let e=e=>{e.preventDefault(),d(e),p.current="beforeInstallPromptCapable",s(p.current);let t=b(p.current);(0,M.cY)("pwa.install-banner.beforeinstallprompt",{decision:t})};window.addEventListener("beforeinstallprompt",e);let r=function(e,t){if(t)return"beforeInstallPromptCapable";if("string"!=typeof e||0===e.length)return"unsupported";let r=/iPad|iPhone|iPod/.test(e),n=/Safari/.test(e)&&!/CriOS|FxiOS|EdgiOS/.test(e);return r&&n?"iosSafari":"unsupported"}(navigator.userAgent,!1);p.current=r,s(r);let n=b(r);(0,M.cY)("pwa.install-banner.mount",{platform:r,decision:n});let a=()=>{f.current=!0,t(!1),(0,M.cY)("pwa.install-banner.appinstalled")},o=()=>{b(p.current)};return window.addEventListener("appinstalled",a),window.addEventListener("elanous:inside-demo",o),()=>{window.removeEventListener("beforeinstallprompt",e),window.removeEventListener("appinstalled",a),window.removeEventListener("elanous:inside-demo",o)}},[]),(0,a.useEffect)(()=>{b(p.current)},[c,m,h]);let x=async()=>{if(o)try{await o.prompt();let e=await o.userChoice;(0,M.cY)("pwa.install-banner.userChoice",{outcome:e.outcome}),"dismissed"===e.outcome&&(eR(Date.now()),t(!1))}catch(e){(0,M.cY)("pwa.install-banner.prompt-error",{reason:String(e)})}finally{d(null)}};return e?(0,n.jsx)("div",{role:"dialog","aria-label":"Install elanous to home screen","data-testid":"install-banner",className:"shrink-0 border-t border-border bg-card/95 px-4 py-3 shadow-lg backdrop-blur",children:(0,n.jsxs)("div",{className:"mx-auto flex max-w-2xl items-start gap-3",children:[(0,n.jsx)("div",{className:"mt-0.5 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-primary/30 bg-primary/10 text-primary",children:(0,n.jsx)(eP.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium",children:"elanous 를 홈 화면에 추가하세요"}),"iosSafari"===r?(0,n.jsxs)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:[(0,n.jsx)(eY.A,{className:"inline-block h-3.5 w-3.5 align-text-bottom"})," 공유 버튼 →",(0,n.jsx)("span",{className:"mx-1 rounded bg-muted px-1 font-mono text-[11px]",children:"홈 화면에 추가"}),"로 PWA 로 사용. 알림 \xb7 카메라 \xb7 백그라운드 모두 활성화."]}):(0,n.jsx)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:"한 번의 클릭으로 PWA 설치 — 알림 \xb7 백그라운드 turn 보장."})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:["beforeInstallPromptCapable"===r&&o&&(0,n.jsx)("button",{type:"button",onClick:()=>{x()},className:"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90","data-testid":"install-banner-install",children:"설치"}),(0,n.jsx)("button",{type:"button",onClick:()=>{t(!1),eR(Date.now()),(0,M.cY)("pwa.install-banner.dismiss")},"aria-label":"dismiss install banner","data-testid":"install-banner-dismiss",className:"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]})]})}):null}var e$=r(62176),eO=r(813);function eD(){let e=(0,l.usePathname)(),t=(0,e$._r)(),r=null==e||t.isError||t.isPending||t.isLoading?null:(0,eO.C)(t.data,e);return r?(0,n.jsxs)("div",{role:"status","data-testid":"setup-mode-banner",className:"flex items-center justify-between gap-3 border-b border-border bg-muted px-3 py-1.5 text-xs text-foreground",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)(o(),{href:"/setup",className:"shrink-0 font-semibold underline underline-offset-2",children:"/setup"})]}):null}var eW=r(28042);function eH(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>(0,eW.dJ)(()=>t(!0)),[]),e)?(0,n.jsxs)("div",{role:"alert","data-testid":"auth-required-banner",className:"flex items-center justify-between gap-3 border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsx)("span",{children:"이 기기는 아직 데몬에 연결되지 않았습니다(인증 필요). 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙여 넣으세요."}),(0,n.jsx)(o(),{href:"/settings",className:"shrink-0 font-semibold underline underline-offset-2",children:"/settings"}),(0,n.jsx)("button",{type:"button","aria-label":"연결 안내 닫기",onClick:()=>{(0,eW.SI)(),t(!1)},className:"shrink-0 rounded px-2 py-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:"닫기"})]}):null}let eq=null;function eB(){let{confirm:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:t}=(0,P.Q)(),[r,s]=(0,a.useState)([]),[o,l]=(0,a.useState)(!1),[i,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(""),m=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e&&eq&&Date.now()-eq.at<6e5)return void s(eq.items);try{let e=await t.fetchResponse("/v1/skills/problems"),r=e.ok?await e.json():{},n=Array.isArray(r.items)?r.items:[];eq={at:Date.now(),items:n},s(n)}catch(e){s([])}},[t]);if((0,a.useEffect)(()=>{m()},[m]),!r.length&&!c)return null;let h=r.filter(e=>e.fixable);async function f(){if(!(null!=e?e:e=>window.confirm(e))("다른 도구의 스킬 파일입니다. 고칠 수 있는 것만 고칠까요? (고치기 전 원본은 남겨 둡니다)"))return;d(!0);let r=0;for(let e of h)try{(await t.fetchResponse("/v1/skills/problems/repair",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e.id})})).ok&&(r+=1)}catch(e){}d(!1),u("".concat(r,"개를 고쳤습니다.")),await m(!0)}return(0,n.jsxs)("div",{role:"status","data-testid":"skill-problems-banner",className:"border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[r.length>0?(0,n.jsx)("span",{children:"스킬 ".concat(r.length,"개를 읽지 못했습니다.")}):(0,n.jsx)("span",{children:c}),h.length>0&&(0,n.jsx)("button",{type:"button",disabled:i,onClick:()=>{f()},className:"rounded border px-2 py-0.5 font-medium disabled:opacity-50",children:"고치기"}),r.some(e=>!e.fixable)&&(0,n.jsx)("button",{type:"button",onClick:()=>l(e=>!e),className:"underline underline-offset-2",children:o?"접기":"왜 못 고치나"}),r.length>0&&c&&(0,n.jsx)("span",{className:"text-muted-foreground",children:c})]}),o&&(0,n.jsx)("ul",{className:"mt-1 space-y-0.5 text-xs text-muted-foreground",children:r.filter(e=>!e.fixable).map(e=>{var t;return(0,n.jsxs)("li",{className:"break-words",children:["\xb7 ",e.name," — ",null!=(t=e.hint)?t:"파일을 직접 확인해 주세요."]},e.id)})})]})}let e_="elanous.pwa.sidebarOpen";function eF(e){let{children:t,activity:r}=e,[s,o]=(0,a.useState)(!1),{compact:i,setWide:d}=(0,B.K)(),c=ek(),u=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8e3,[r,n]=(0,a.useState)({kind:"loading"});return(0,a.useEffect)(()=>(function(e){var t,r;let n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:8e3,o=!1,l=null!=(t=a.isHidden)?t:eI,i=null!=(r=a.now)?r:()=>Date.now(),d=async()=>{if(l()){n=setTimeout(()=>{d()},s);return}let t=i(),r=await eC(a);o||(e(r),n=setTimeout(()=>{d()},Math.min(6e4,Math.max(s,Math.round(4*(i()-t))))))};return a.firstDelayMs?n=setTimeout(()=>{d()},a.firstDelayMs):d(),()=>{o=!0,void 0!==n&&clearTimeout(n)}})(n,{...e,firstDelayMs:1500},t),[e.fetchImpl,e.listProgressFrames,t]),r}(),m=null!=r?r:u,h=(0,l.usePathname)(),f=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=function(e,t,r,n){var a;let s=function(e,t){var r,n;let a=(null!=(r=e.split(/[?#]/)[0])?r:"/").replace(/\/+$/,"")||"/",s=null;for(let e of t){let t=e.href.split("?")[0].replace(/\/+$/,"")||"/";("/"===t?"/"===a:a===t||a.startsWith("".concat(t,"/")))&&(!s||t.length>s.href.length)&&(s={...e,href:t})}return s?{tab:s.href,visibility:null!=(n=s.visibility)?n:"public"}:{tab:"other",visibility:"other"}}(t,n);return e&&e.tab===s.tab?null:{record:{tab:s.tab,visibility:s.visibility,from:null!=(a=null==e?void 0:e.tab)?a:null,dwellMs:e?Math.max(0,r-e.at):null},next:{tab:s.tab,at:r}}}(f.current,null!=h?h:"/",Date.now(),x.Ue);e&&(f.current=e.next,(0,M.cY)("pwa.nav.visit",e.record))},[h]),(0,a.useEffect)(()=>{let e=()=>{let e=f.current;"hidden"===document.visibilityState&&e&&((0,M.cY)("pwa.nav.leave",{tab:e.tab,dwellMs:Math.max(0,Date.now()-e.at)}),f.current={tab:e.tab,at:1/0})},t=()=>{"visible"===document.visibilityState&&f.current&&!Number.isFinite(f.current.at)&&(f.current={tab:f.current.tab,at:Date.now()})};return document.addEventListener("visibilitychange",e),document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",e),document.removeEventListener("visibilitychange",t)}},[]),(0,a.useEffect)(()=>{"1"===window.localStorage.getItem(e_)&&o(!0)},[]);let p=()=>{o(e=>{let t=!e;return window.localStorage.setItem(e_,t?"1":"0"),t})},b=()=>{o(!1),window.localStorage.setItem(e_,"0")};return(0,n.jsx)(ee.$M,{children:(0,n.jsxs)("div",{className:"flex h-screen w-full flex-col bg-background text-foreground",children:[(0,n.jsx)(eH,{}),(0,n.jsx)(eD,{}),(0,n.jsx)(eB,{}),i?(0,n.jsx)(eS,{onToggleSidebar:p,sidebarOpen:s,activity:m,setWide:d,wakeControl:c}):(0,n.jsx)(eN,{onToggleSidebar:p,sidebarOpen:s,activity:m,onCompactView:()=>d(!1),wakeControl:c}),(0,n.jsxs)("div",{className:"flex flex-1 min-h-0",children:[s?(0,n.jsx)("aside",{className:"hidden md:flex md:w-56 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(T,{onNavigate:b,onClose:b})}):(0,n.jsx)("aside",{className:"hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(T,{onNavigate:b,compact:!0})}),s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button","aria-label":"close menu",className:"fixed inset-0 z-30 bg-black/40 md:hidden",onClick:b}),(0,n.jsx)("aside",{className:i?"fixed left-0 top-10 z-40 h-[calc(100vh-2.5rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden":"fixed left-0 top-9 z-40 h-[calc(100vh-2.25rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden",children:(0,n.jsx)(T,{onNavigate:b,onClose:b})})]}),(0,n.jsx)("main",{className:"flex-1 overflow-auto min-w-0",children:t})]}),(0,n.jsx)(eU,{}),i&&(0,n.jsx)(eA,{})]})})}},37998:(e,t,r)=>{"use strict";r.d(t,{i$:()=>l,nZ:()=>c,oM:()=>d,sF:()=>i});let n="elanous.showroom.layouts";function a(){return window.localStorage?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(),t=e.getItem(n);if(!t)return{};try{let e=JSON.parse(t);if(!e||"object"!=typeof e)return{};return e}catch(e){return{}}}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=JSON.stringify(e);if(r.length>102400)return{ok:!1,reason:"storage quota exceeded (".concat(r.length," > ").concat(102400,")")};try{return t.setItem(n,r),{ok:!0}}catch(e){return{ok:!1,reason:String(e)}}}async function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a();try{let{layouts:r}=await e.listShowroomLayouts(),n={};for(let e of r)n[e.name]=e;return o(n,t),{layouts:r.slice().sort((e,t)=>t.savedAt-e.savedAt),source:"daemon"}}catch(e){return{layouts:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a();return Object.values(s(e)).sort((e,t)=>t.savedAt-e.savedAt)}(t),source:"local"}}}async function i(e,t,r){var n;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=e.trim();if(!i)return{ok:!1,reason:"name required"};let d=null!=(n=l.backend)?n:a(),c=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=e.trim();if(!l)return{ok:!1,reason:"name required"};let i=null!=(r=n.backend)?r:a(),d=s(i),c={name:l,savedAt:Date.now(),panels:t.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},state:e.state})),...n.layoutMode?{layoutMode:n.layoutMode}:{}};d[l]=c;let u=o(d,i);return u.ok?{ok:!0,saved:c}:u}(i,t,l);if(!c.ok)return c;let u=0;try{let e=await r.listShowroomLayouts();if(0===e.layouts.length){let e=s(d);for(let t of Object.values(e))try{await r.saveShowroomLayout(t.name,{savedAt:t.savedAt,panels:t.panels,...t.layoutMode?{layoutMode:t.layoutMode}:{}}),u+=1}catch(e){}return{ok:!0,saved:c.saved,source:"daemon",migrated:u}}return await r.saveShowroomLayout(i,{savedAt:c.saved.savedAt,panels:c.saved.panels,...c.saved.layoutMode?{layoutMode:c.saved.layoutMode}:{}}),{ok:!0,saved:c.saved,source:"daemon",migrated:0}}catch(e){return{ok:!0,saved:c.saved,source:"local",migrated:0}}}async function d(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a(),n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=s(t);return e.trim()in r&&(delete r[e.trim()],o(r,t),!0)}(e,r);try{return await t.deleteShowroomLayout(e),{ok:!0,source:"daemon"}}catch(e){return{ok:n,source:"local"}}}function c(e){return e.panels.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},sessionId:null,state:e.state}))}},40057:(e,t,r)=>{"use strict";r.d(t,{Tp:()=>a,Un:()=>s});var n=r(96053);async function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fetch;try{let r=await t("".concat(e.replace(/\/$/,""),"/v1/me"),{cache:"no-store"});if(!r.ok)return!1;let n=await r.json();return(null==n?void 0:n.operator)===!0}catch(e){return!1}}async function s(e){var t,r,s,o;let l=null;try{l=null!=(r=null==(t=e.storage)?void 0:t.getItem(n.GC))?r:null}catch(e){return!1}if(null!==l)return!1;let i=await a(e.baseUrl,e.fetchImpl);return o=l,!!i&&null===o&&((null!=(s=e.write)?s:n.OG)("owner"),!0)}},50179:(e,t,r)=>{"use strict";r.d(t,{NewBuildBanner:()=>d});var n=r(54456),a=r(60500),s=r(50733);let o=/\\?"b\\?":\\?"([A-Za-z0-9_-]{8,})\\?"/;function l(e){var t,r;return null!=(r=null==(t=o.exec(e))?void 0:t[1])?r:null}function i(e,t){return null!==e&&null!==t&&e!==t}function d(){let[e,t]=(0,a.useState)(null),[r,o]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let e=function(){for(let e of Array.from(document.scripts)){let t=e.textContent?l(e.textContent):null;if(t)return t}return null}();o(e);let r=!1,n=async()=>{if("visible"===document.visibilityState)try{let n=await fetch("/app/",{cache:"no-store"});if(!n.ok)return;let a=l(await n.text());if(r)return;t(a),i(e,a)&&(0,s.cY)("pwa.new-build.detected",{current:e,served:a})}catch(e){}},a=window.setInterval(()=>{n()},12e4),d=()=>{n()};return document.addEventListener("visibilitychange",d),n(),()=>{r=!0,window.clearInterval(a),document.removeEventListener("visibilitychange",d)}},[]),i(r,e))?(0,n.jsxs)("div",{role:"status",className:"fixed inset-x-2 bottom-2 z-[60] mx-auto flex max-w-md items-center gap-3 rounded-md border border-primary/50 bg-background/95 px-3 py-2 text-sm shadow-lg","data-pwa-new-build":!0,children:[(0,n.jsx)("span",{className:"flex-1",children:"새 판이 있습니다 — 이 화면은 이전 판으로 돌고 있어요."}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,s.cY)("pwa.new-build.reload",{current:r,served:e}),window.location.reload()},className:"rounded-md bg-primary px-2 py-1 text-primary-foreground",children:"새로고침"})]}):null}},50738:(e,t,r)=>{"use strict";r.d(t,{Er:()=>a,cj:()=>d,dc:()=>o,yR:()=>i});let n=/^(oauth\.|harness\.decision|llm\.router)/;function a(e){let t=[],r=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var a;let e=null!=(a=t.data)?a:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])r(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)r(null==t?void 0:t.name);continue}if(n.test(t.category))for(let t of(r(e.account),["what","why","reason"])){let n=e[t];if("string"==typeof n)for(let e of n.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))r(e[1])}}return t}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function o(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),r=e.length?RegExp("(^|[^\\w-])(".concat(e.map(s).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,n=new Map;return(e,a)=>{let s=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();n.has(t)||n.set(t,"remote-".concat(n.size+1));let r=n.get(t);return e===e.toUpperCase()?r.toUpperCase():r})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return a&&r&&(s=s.replace(r,(e,r,n)=>{var a;return"".concat(r).concat(null!=(a=t.get(n))?a:"account")})),s}}function l(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>l(e,t));if(e&&"object"==typeof e){let r={};for(let[n,a]of Object.entries(e))"apiEquivalentUsd"===n||"usd"===n||/credit(s|Balance)?$/i.test(n)||(r[n]=l(a,t));return r}return e}function i(e){let t=o(a(e));return e.map(e=>{let r=n.test(e.category);return{...e,event:t(e.event,!1),data:e.data?l(e.data,e=>t(e,r)):e.data}})}function d(e,t){let r=o(t);return l(e,e=>r(e,!0))}},50977:(e,t,r)=>{"use strict";r.d(t,{TooltipProvider:()=>s});var n=r(54456),a=r(68464);function s(e){let{delay:t=0,...r}=e;return(0,n.jsx)(a.B,{"data-slot":"tooltip-provider",delay:t,...r})}},62176:(e,t,r)=>{"use strict";r.d(t,{_r:()=>s});var n=r(60500),a=r(43468);function s(){let e=(0,a.Qj)(),[t,r]=(0,n.useState)({data:void 0,isError:!1,isPending:!0});return(0,n.useEffect)(()=>{if(!e)return void r({data:void 0,isError:!1,isPending:!0});let t=!0,n=()=>{e.getHealth().then(e=>{t&&r({data:e,isError:!1,isPending:!1})}).catch(()=>{t&&r(e=>({...e,isError:!0,isPending:!1}))})};n();let a=setInterval(n,6e4);return()=>{t=!1,clearInterval(a)}},[e]),{...t,isLoading:t.isPending&&null!==e}}r(3472)},64553:()=>{},69060:(e,t,r)=>{"use strict";r.d(t,{hj:()=>l});var n=r(60500);let a="elanous.pwa.showBeta",s="elanous:show-beta";function o(){try{return"1"===window.localStorage.getItem(a)}catch(e){return!1}}function l(){let[e,t]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(o());let e=e=>{let r=e.detail;t("boolean"==typeof r?r:o())},r=e=>{(e.key===a||null===e.key)&&t(o())};return window.addEventListener(s,e),window.addEventListener("storage",r),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",r)}},[]),{showBeta:e,setShowBeta:(0,n.useCallback)(e=>{t(e);try{e?window.localStorage.setItem(a,"1"):window.localStorage.removeItem(a)}catch(e){}window.dispatchEvent(new CustomEvent(s,{detail:e}))},[])}}},70090:(e,t,r)=>{"use strict";r.d(t,{D:()=>f,ThemeProvider:()=>h,z:()=>l});var n=r(54456),a=r(60500),s=r(50733),o=r(43468);let l=["catppuccin-mocha","mocha-pastel-accent","catppuccin-latte","rose-pine-dawn","nord-light","elanous-pastel-default"],i="elanous.pwa.theme",d="dashboard.theme.active",c="catppuccin-mocha";function u(e){return"string"==typeof e&&l.includes(e)}let m=(0,a.createContext)(null);function h(e){let{children:t}=e,r=(0,o.Qj)(),[h,f]=(0,a.useState)(c),p=(0,a.useRef)(0),b=(0,a.useCallback)(e=>{f(e),document.documentElement.dataset.theme=e},[]);(0,a.useEffect)(()=>{let e=localStorage.getItem(i),t=u(e)?e:c;b(t),(0,s.cY)("webterm.provider.theme.init",{theme:t})},[b]),(0,a.useEffect)(()=>{if(!r)return;let e=!0,t=p.current;return r.getSwitch(d).then(r=>{let{switch:n}=r;e&&t===p.current&&u(n.value)&&(b(n.value),localStorage.setItem(i,n.value))}).catch(()=>void 0),()=>{e=!1}},[b,r]);let x=(0,a.useCallback)(e=>{u(e)&&(p.current+=1,b(e),localStorage.setItem(i,e),(0,s.cY)("webterm.provider.theme.set",{theme:e}),null==r||r.putSwitch(d,{value:e}).catch(()=>void 0))},[b,r]);return(0,n.jsx)(m.Provider,{value:{theme:h,setTheme:x,themes:l},children:t})}function f(){let e=(0,a.useContext)(m);if(!e)throw Error("useTheme must be used inside <ThemeProvider>");return e}},74591:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(49454),a=r(79946);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))}},75437:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,64553,23)),Promise.resolve().then(r.bind(r,36581)),Promise.resolve().then(r.bind(r,50179)),Promise.resolve().then(r.bind(r,24969)),Promise.resolve().then(r.bind(r,78401)),Promise.resolve().then(r.bind(r,27365)),Promise.resolve().then(r.bind(r,70090)),Promise.resolve().then(r.bind(r,34485)),Promise.resolve().then(r.bind(r,37370)),Promise.resolve().then(r.bind(r,14381)),Promise.resolve().then(r.bind(r,50977)),Promise.resolve().then(r.t.bind(r,79078,23))},78401:(e,t,r)=>{"use strict";r.d(t,{OperatorRoleDefault:()=>o});var n=r(60500),a=r(36581),s=r(40057);function o(){let{config:e}=(0,a.Q)(),t=e.baseUrl;return(0,n.useEffect)(()=>{(0,s.Un)({baseUrl:t,storage:window.localStorage})},[t]),null}},88023:(e,t,r)=>{"use strict";r.d(t,{MQ:()=>s,OY:()=>n,fG:()=>a});let n="elanous:nav-prefs";function a(e){try{return"1"===window.localStorage.getItem(e)}catch(e){return!1}}function s(e,t){try{t?window.localStorage.setItem(e,"1"):window.localStorage.removeItem(e)}catch(e){}try{window.dispatchEvent(new Event(n))}catch(e){}}},94757:(e,t,r)=>{"use strict";r.d(t,{K:()=>i,u:()=>a});var n=r(60500);let a=932,s="elanous.pwa.wideView",o="elanous:wide-view";function l(){try{return"1"===window.localStorage.getItem(s)}catch(e){return!1}}function i(){let[e,t]=(0,n.useState)(null),[r,i]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(window.innerWidth),i(l());let e=()=>t(window.innerWidth),r=e=>{let t=e.detail;i("boolean"==typeof t?t:l())};return window.addEventListener("resize",e),window.addEventListener(o,r),window.addEventListener("storage",r),()=>{window.removeEventListener("resize",e),window.removeEventListener(o,r),window.removeEventListener("storage",r)}},[]),{compact:null!==e&&e<=a&&!r,setWide:(0,n.useCallback)(e=>{i(e);try{e?window.localStorage.setItem(s,"1"):window.localStorage.removeItem(s)}catch(e){}window.dispatchEvent(new CustomEvent(o,{detail:e}))},[])}}},96053:(e,t,r)=>{"use strict";r.d(t,{GC:()=>a,In:()=>d,OG:()=>l});var n=r(60500);let a="elanous.pwa.role",s="elanous:pwa-role";function o(){try{let e=window.localStorage.getItem(a);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function l(e){try{window.localStorage.setItem(a,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(s))}function i(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(s,e);let t=t=>{(t.key===a||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",t)}}function d(){return(0,n.useSyncExternalStore)(i,o,()=>"general")}}},e=>{e.O(0,[1334,2299,7777,9538,1829,6048,9656,3454,8025,9906,3869,2176,5845,8421,4685,6390,3170,7358],()=>e(e.s=75437)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3141],{6904:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>L});var n=a(54456),s=a(60500),l=a(81707),r=a(69670),i=a(60796),d=a(43468),o=a(67495),c=a(57241),u=a(62738),x=a(50738),m=a(96053),p=a(74591);let h={PLAN:"text-sky-600 dark:text-sky-400",ROUTE:"text-violet-600 dark:text-violet-400",VERIFY:"text-amber-600 dark:text-amber-400",HEAL:"text-emerald-600 dark:text-emerald-400",ESCALATE:"text-rose-600 dark:text-rose-400",SHIP:"text-green-700 dark:text-green-400 font-semibold"};function g(e){let{board:t,lines:a,mode:s,onSelectRun:l,selectedRunId:r,role:i="owner"}=e,d="max"===s,o="owner"===i,u=t.gauges,{snapshot:x}=t,m=o?0:t.stream.filter(e=>null!=e.why&&(0,c.Yu)(e.why)).length;return(0,n.jsxs)("div",{className:(0,p.cn)("space-y-4",d&&"live-max"),"data-live-mode":s,children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6",children:[(0,n.jsx)(v,{label:"LIVE",hint:"도는 런",value:String(u.live),tone:u.live>0?"live":"idle",max:d}),(0,n.jsx)(v,{label:"DECISIONS/MIN",hint:"판단 ".concat(u.decisions,"건"),value:String(u.decisionsPerMin),max:d}),(0,n.jsx)(v,{label:"SHIPPED",hint:"병합\xb7PR",value:String(u.shipped),tone:"ok",max:d}),(0,n.jsx)(v,{label:"SELF-HEAL",hint:u.selfHealRuns?"수리 런 ".concat(u.selfHealRuns):"수리 런 없음",value:null===u.selfHealRate?"—":"".concat(u.selfHealRate,"%"),max:d}),(0,n.jsx)(v,{label:"BURN",hint:"토큰/분",value:f(u.burnTokensPerMin),max:d}),(0,n.jsx)(v,{label:"BLOCKED",hint:"막힌 런",value:String(x.counters.blocked),tone:x.counters.blocked?"bad":"idle",max:d})]}),(0,n.jsxs)("section",{className:"space-y-2","aria-label":"런",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["런 ",(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["최근 ",x.windowMinutes,"분 \xb7 ",x.runs.length]})]}),0===x.runs.length?(0,n.jsx)("p",{className:"rounded-md border border-dashed p-4 text-sm text-muted-foreground","data-live-empty":!0,children:"지금 이 창에 런 신호가 없습니다 — 텔레그램이나 Intake 로 한 줄 보내면 여기에 런이 뜹니다."}):(0,n.jsx)("ul",{className:"space-y-1.5",children:x.runs.slice(0,12).map(e=>(0,n.jsx)(b,{run:e,round:t.rounds[e.runId],max:d,selected:e.runId===r,onSelect:l,owner:o},e.runId))})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-5",children:[(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-3","aria-label":"판단 스트림",children:[(0,n.jsxs)("h2",{className:"flex flex-wrap items-center gap-2 text-sm font-medium",children:["판단 스트림",c.jg.map(e=>(0,n.jsx)("span",{className:(0,p.cn)("text-[11px] lg:text-[10px] font-mono",h[e]),children:e},e))]}),0===t.stream.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 판단 신호가 없습니다."}):(0,n.jsx)("ul",{className:"max-h-80 space-y-1 overflow-auto rounded-md border p-2 font-mono text-[11px]","data-live-stream":!0,children:t.stream.slice(0,40).map((e,t)=>(0,n.jsxs)("li",{className:(0,p.cn)("leading-relaxed",d&&0===t&&"live-line-in",d&&"SHIP"===e.kind&&"live-ship"),children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:[(0,n.jsx)("span",{title:e.ts,children:(0,c.qo)(e.ts)})," "]}),(0,n.jsxs)("span",{className:h[e.kind],children:["[",e.kind,"]"]})," ",o?e.what:(0,c.hS)(e.what.replace(/run-[0-9a-f]{8}-[^\s]*/gi,""),i),e.why&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 왜: ",(0,c.hS)(e.why,i)]}),e.purpose&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 목적: ",e.purpose]}),e.target&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(t)))})]}),(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-2","aria-label":"성적표",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"모델 성적표"}),0===t.scorecard.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 모델 요청이 없습니다."}):(0,n.jsxs)("table",{className:"w-full text-[11px]",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{className:"text-muted-foreground",children:[(0,n.jsx)("th",{className:"text-left font-normal",children:"모델"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"요청"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"토큰"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"과금"})]})}),(0,n.jsx)("tbody",{children:t.scorecard.slice(0,8).map(e=>{var t;return(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"truncate",children:e.model}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.requests}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:f(e.tokens)}),(0,n.jsx)("td",{className:"text-right text-muted-foreground",children:null!=(t=e.billing)?t:"—"})]},e.model)})})]}),(0,n.jsx)("h2",{className:"pt-2 text-sm font-medium",children:"리뷰 판정"}),(0,n.jsx)(j,{items:x.reviewVerdicts,max:d})]})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[o?(0,n.jsxs)("section",{className:"space-y-2","aria-label":"흐르는 로그",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"흐르는 로그"}),(0,n.jsx)("pre",{className:"max-h-60 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-log":!0,children:a.slice(0,60).join("\n")||"—"})]}):m>0?(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-live-folded-errors":!0,children:["오류 ",m,"건 접힘"]}):null,(0,n.jsxs)("section",{className:"space-y-2","aria-label":"빈 칸 표",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["빈 칸 표 ",(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:"판단 로그에 없는 칸"})]}),0===t.missing.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"빈 칸 없음."}):(0,n.jsx)("table",{className:"w-full text-[11px]","data-live-missing":!0,children:(0,n.jsx)("tbody",{children:t.missing.slice(0,10).map(e=>(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"font-mono",children:e.key}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.count}),(0,n.jsx)("td",{className:"pl-2 text-muted-foreground",children:e.lacks.join(" \xb7 ")})]},e.key))})})]})]})]})}function f(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(e)}function v(e){let{label:t,hint:a,value:s,tone:l="idle",max:r}=e;return(0,n.jsxs)("div",{className:(0,p.cn)("rounded-lg border p-3","live"===l&&"border-primary/50","bad"===l&&"border-error/50","ok"===l&&"border-green-600/40",r&&"live-gauge",r&&"live"===l&&"live-glow"),children:[(0,n.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-wider text-muted-foreground",children:t}),(0,n.jsx)("div",{className:(0,p.cn)("text-2xl font-semibold tabular-nums",r&&"live-count"),"data-live-gauge":t,children:s}),(0,n.jsx)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:a})]})}function b(e){let{run:t,round:a,max:s,selected:l,onSelect:r,owner:i}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button","data-live-run":t.runId,onClick:()=>null==r?void 0:r(t.runId),className:(0,p.cn)("flex w-full items-center gap-3 rounded-md border px-3 py-2 text-left text-xs hover:bg-muted/40",l&&"ring-1 ring-primary"),children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground",children:i?t.runId.replace(/^run-/,"").slice(0,8):"런"}),(0,n.jsx)("span",{className:"flex flex-1 gap-1","aria-label":"단계",children:c.lV.map(e=>{let a=t.stages[e],l=t.current===e;return(0,n.jsx)("span",{title:"".concat(c.fQ[e]," \xb7 ").concat(null!=a?a:"신호 없음"),"data-stage":e,"data-tone":null!=a?a:"none",className:(0,p.cn)("h-2 flex-1 rounded-full bg-muted","info"===a&&"bg-primary/60","ok"===a&&"bg-green-600","bad"===a&&"bg-error",s&&l&&"bad"!==a&&"live-pulse",s&&l&&"bad"===a&&"live-pulse-bad")},e)})}),(0,n.jsx)("span",{className:"w-14 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:a?"R ".concat(a,"/3"):""}),(0,n.jsx)("span",{className:"w-24 shrink-0 text-right text-[11px]",children:t.blocked?(0,n.jsx)("span",{className:"text-error",children:"막힘"}):"ok"===t.stages.land?(0,n.jsxs)("span",{className:"text-green-700",children:["착지",t.pr?" #".concat(t.pr):""]}):t.current?c.fQ[t.current]:""})]})})}function j(e){let{items:t,max:a}=e,s=Math.max(1,...t.map(e=>e.count));return 0===t.length?(0,n.jsx)("div",{className:"text-[11px] text-muted-foreground",children:"—"}):(0,n.jsx)("ul",{className:"space-y-1",children:t.slice(0,6).map(e=>(0,n.jsxs)("li",{className:"flex items-center gap-2 text-[11px]",children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate",children:e.name}),(0,n.jsx)("span",{className:"h-1.5 flex-1 rounded-full bg-muted",children:(0,n.jsx)("span",{className:(0,p.cn)("block h-1.5 rounded-full bg-primary/70",a&&"transition-[width] duration-700"),style:{width:"".concat(e.count/s*100,"%")}})}),(0,n.jsx)("span",{className:"w-8 text-right tabular-nums",children:e.count})]},e.name))})}var N=a(97257),y=a(15304);let w=[15,60,360,1440],k="@active";function S(){return(0,d.Qj)()?(0,n.jsx)(E,{}):(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:"Live"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to watch runs live."})]})}function E(){var e,t,a,p,h,f;let v=(0,m.In)(),[b,j]=(0,s.useState)("practical"),[S,E]=(0,s.useState)(null),[L,A]=(0,s.useState)("all"),[C,R]=(0,s.useState)(!1);(0,s.useEffect)(()=>{try{window.localStorage.removeItem("elanous.live.mode")}catch(e){}},[]),(0,s.useEffect)(()=>{if(!S)return;let e=setTimeout(()=>{j("practical"),E(null)},Math.max(0,S-Date.now()));return()=>clearTimeout(e)},[S]);let H=(0,d.M1)(),[D,P]=(0,s.useState)(null),X=e=>{e.on?(j("max"),A(e.scope&&"all"!==e.scope?"run":"all"),E(e.until?Date.parse(e.until):Date.now()+18e5)):(j("practical"),E(null))};(0,s.useEffect)(()=>{let e=!0;return H.getLiveDetail().then(t=>{e&&X(t)}).catch(()=>{}),()=>{e=!1}},[H]);let q=e=>{R(!1),P(null);let t="run"===e&&F?F:"all";H.setLiveDetail({scope:t,ttlMin:30,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e)))},[O,T]=(0,s.useState)(60),[U,_]=(0,s.useState)(""),B=(0,s.useRef)(!1);(0,s.useEffect)(()=>{"max"!==b||B.current||(B.current=!0,_(k),T(1440)),"max"!==b&&(B.current=!1)},[b]);let[F,K]=(0,s.useState)(null),{logs:V,runs:z,instances:Q}=(0,o.HI)({store:U||void 0,windowMinutes:O}),[Y,G]=(0,s.useState)(()=>Date.now());(0,s.useEffect)(()=>{G(Date.now())},[V.dataUpdatedAt]);let[J,Z]=(0,s.useState)(!1);(0,s.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&Z(!0)},[]);let W=null!=(p=null==(e=V.data)?void 0:e.logs)?p:M,$=(0,s.useMemo)(()=>J?(0,x.yR)(W):W,[W,J]),ee=(0,l.I)({queryKey:["live","shipped",O],queryFn:()=>H.getLiveShipped("".concat(O,"m")),refetchInterval:6e4}),et=(0,s.useMemo)(()=>{var e,t,a;let n=(0,c.Hc)($,null!=(a=null==(e=z.data)?void 0:e.entries)?a:[],{now:Y,windowMinutes:O}),s=null==(t=ee.data)?void 0:t.merged;if("number"!=typeof s)return n;let l=(0,u.NZ)($).length;return{...n,gauges:{...n.gauges,shipped:s,selfHealRuns:l,selfHealRate:s>0?Math.round(l/s*100):null}}},[$,z.data,Y,O,ee.data]),ea=O>0?Math.round($.length/O*10)/10:0,en=Math.round(JSON.stringify($).length/1024),es=(0,s.useMemo)(()=>$.filter(e=>{var t;return!F||(null==(t=e.data)?void 0:t.runId)===F}).map(e=>(0,c.BP)(e)),[$,F]),el=(null!=(h=null==(t=Q.data)?void 0:t.instances)?h:[]).filter(e=>!1!==e.dbExists&&!e.current);return(0,n.jsxs)("div",{className:"mx-auto ".concat("max"===b?"max-w-none space-y-2 p-2":"max-w-6xl space-y-4 p-4 sm:p-6"),children:[(0,n.jsx)("style",{children:I}),(0,n.jsxs)("header",{className:"flex flex-wrap items-center gap-3 ".concat("max"===b?"justify-end":"justify-between"),children:[(0,n.jsxs)("div",{className:"max"===b?"hidden":"",children:[(0,n.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,n.jsx)(r.A,{className:"h-5 w-5","aria-hidden":!0})," Live"]}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"하니스 런이 판단하고 기획하는 신호 — 보이는 수는 전부 진짜다."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,n.jsx)("select",{"aria-label":"시간 창",value:O,onChange:e=>T(Number(e.target.value)),className:"rounded-md border bg-background px-2 py-1",children:w.map(e=>(0,n.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,n.jsxs)("select",{"aria-label":"신호 출처",value:U,onChange:e=>_(e.target.value),className:"max-w-48 rounded-md border bg-background px-2 py-1",children:[(0,n.jsx)("option",{value:"",children:"이 인스턴스"}),(0,n.jsx)("option",{value:k,children:"전체(연합 \xb7 최근 24시간에 쓰인 우주)"}),el.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))]}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-public-capture","aria-pressed":J,onClick:()=>Z(e=>!e),title:"녹화\xb7스크린샷용 — 계정 이름 → account-N \xb7 크레딧\xb7USD 숨김 \xb7 홈 경로 가림",className:"rounded-md border px-2 py-1 ".concat(J?"border-emerald-500 text-emerald-600 dark:text-emerald-300":"hover:bg-muted"),children:J?"● 공개 캡처 켜짐":"공개 캡처"}),"max"===b?(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-off",onClick:()=>{P(null),H.setLiveDetail({scope:"all",ttlMin:0,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e))),j("practical"),E(null)},className:"inline-flex items-center gap-1 rounded-md border border-primary px-2 py-1 text-primary hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX 켜짐 \xb7 끄기"]}):(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-on",onClick:()=>R(!0),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX"]})]})]}),C&&(0,n.jsxs)("div",{role:"dialog","aria-label":"화려함 MAX 켜기",className:"space-y-2 rounded-md border border-primary/50 bg-primary/5 p-3 text-sm","data-live-max-confirm":!0,children:[(0,n.jsx)("p",{className:"font-medium",children:"화려함 MAX 를 켤까요?"}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["마케팅(시연\xb7녹화)과 상세 런 디버깅용입니다. 켜면 하니스가 판단마다 \xab왜\xb7목적\xb7보낸 곳\xbb을 추가로 기록합니다(부하가 듭니다) — 30분 뒤 자동으로 꺼지고, 다른 기기에서도 같은 상태로 보입니다. 지금 이 화면이 받는 신호: 분당 ",ea,"건 \xb7 응답 약 ",en,"KB."]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 text-xs",children:[(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-all",onClick:()=>q("all"),className:"rounded-md border px-2 py-1 hover:bg-muted",children:"전체로 켜기"}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-run",disabled:!F,onClick:()=>q("run"),className:"rounded-md border px-2 py-1 hover:bg-muted disabled:opacity-50",children:F?"이 런만 켜기":"이 런만 켜기(먼저 런을 고르세요)"}),(0,n.jsx)("button",{type:"button",onClick:()=>R(!1),className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]})]}),D&&(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-xs text-error",children:["MAX 스위치를 못 바꿨다: ",D]}),"max"===b&&(0,n.jsxs)("p",{className:"rounded-md border border-primary/40 px-3 py-1 text-[11px] lg:text-[10px] text-muted-foreground","data-live-cost-badge":!0,children:["화려함 MAX \xb7 범위 ","run"===L&&F?"런 ".concat(F.replace(/^run-/,"").slice(0,8)):"전체"," \xb7 받는 신호 분당 ",ea,"건 \xb7 응답 약 ",en,"KB",S?" \xb7 ".concat(Math.max(0,Math.round((S-Y)/6e4)),"분 뒤 자동 꺼짐"):""," \xb7 하니스 판단 이벤트 ",et.emitted,"건"]}),V.error?(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["신호를 못 읽었다: ",V.error instanceof Error?V.error.message:String(V.error)]}):null,F&&(0,n.jsx)(y.RT,{runId:F,run:null!=(f=et.snapshot.runs.find(e=>e.runId===F))?f:null,lines:es,onClose:()=>K(null)}),"max"===b?(0,n.jsx)(N.xl,{board:et,rows:$,windowMinutes:O,sourceLabel:U===k?"federated":U||"this instance",shippedSource:"number"==typeof(null==(a=ee.data)?void 0:a.merged)?"github":"log",publicCapture:J,role:v,onSelectRun:e=>K(t=>t===e?null:e)}):(0,n.jsx)(g,{board:et,lines:es,mode:b,role:v,selectedRunId:F,onSelectRun:e=>K(t=>t===e?null:e)}),(0,n.jsxs)("p",{className:"text-[11px] text-muted-foreground ".concat("max"===b?"hidden":""),children:["갱신 5초 \xb7 출처 ",(0,n.jsx)("code",{children:"/v1/logs"})," \xb7 ",(0,n.jsx)("code",{children:"/v1/harness/runs"})," \xb7 비밀처럼 보이는 조각은 가린다."]})]})}let M=[],I="\n@keyframes live-pulse { 0%,100% { opacity: 1; box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { opacity: .55; box-shadow: 0 0 10px 2px rgba(99,102,241,.55) } }\n@keyframes live-pulse-bad { 0%,100% { opacity: 1 } 50% { opacity: .4; box-shadow: 0 0 10px 2px rgba(239,68,68,.6) } }\n@keyframes live-glow { 0%,100% { box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { box-shadow: 0 0 18px 2px rgba(99,102,241,.35) } }\n@keyframes live-line-in { from { transform: translateY(-6px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes live-ship { 0% { background: rgba(34,197,94,.35) } 100% { background: transparent } }\n.live-max .live-pulse { animation: live-pulse 1.4s ease-in-out infinite }\n.live-max .live-pulse-bad { animation: live-pulse-bad 1s ease-in-out infinite }\n.live-max .live-glow { animation: live-glow 2.4s ease-in-out infinite }\n.live-max .live-line-in { animation: live-line-in .45s ease-out }\n.live-max .live-ship { animation: live-ship 2.4s ease-out; font-size: 12px }\n.live-max .live-gauge { background: radial-gradient(120% 120% at 0% 0%, rgba(99,102,241,.10), transparent 60%) }\n.live-max .live-count { text-shadow: 0 0 12px rgba(99,102,241,.45) }\n.live-stage { background: radial-gradient(120% 90% at 50% 0%, rgba(79,70,229,.25), rgba(2,6,23,.98) 60%), #020617; box-shadow: inset 0 0 0 1px rgba(99,102,241,.25) }\n.live-stage .live-line-in { animation: live-line-in .45s ease-out }\n@keyframes live-v5-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }\n@keyframes live-v5-blink { 0%,100% { opacity: 1 } 50% { opacity: .45 } }\n@keyframes live-v5-hot { 0%,100% { box-shadow: 0 0 14px #a78bfa55, inset 0 0 14px #a78bfa22 } 50% { box-shadow: 0 0 26px #a78bfa99, inset 0 0 22px #a78bfa44 } }\n.live-v5-marquee { animation: live-v5-marquee linear infinite }\n.live-v5-blink { animation: live-v5-blink 1.6s ease-in-out infinite }\n.live-v5-hot { animation: live-v5-hot 1.8s ease-in-out infinite }\n@media (prefers-reduced-motion: reduce) { .live-max *, .live-v5 * { animation: none !important; transition: none !important } }\n";function L(){return(0,n.jsx)(S,{})}},60796:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(18494).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},69670:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(18494).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},82484:(e,t,a)=>{Promise.resolve().then(a.bind(a,6904))},96053:(e,t,a)=>{"use strict";a.d(t,{GC:()=>s,In:()=>o,OG:()=>i});var n=a(60500);let s="elanous.pwa.role",l="elanous:pwa-role";function r(){try{let e=window.localStorage.getItem(s);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function i(e){try{window.localStorage.setItem(s,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(l))}function d(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(l,e);let t=t=>{(t.key===s||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(l,e),window.removeEventListener("storage",t)}}function o(){return(0,n.useSyncExternalStore)(d,r,()=>"general")}}},e=>{e.O(0,[7777,9538,6048,9656,6303,6390,3170,7358],()=>e(e.s=82484)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2967],{501:(e,t,n)=>{"use strict";n.d(t,{MarketPanel:()=>h});var s=n(54456),l=n(60500),i=n(43468);let r={resolve:"받는 중",verify:"서명 확인",consent:"권한 동의",credentials:"자격 필요",registered:"등록",done:"완료",failed:"실패"},a={signature:"서명을 확인하지 못했습니다.",scan:"플러그인 파일을 확인하지 못했습니다.","consent-denied":"필요한 권한에 동의하지 않았습니다.",credentials:"연결 정보가 필요합니다.",conflict:"이미 설치된 플러그인입니다.",io:"설치 중 오류가 발생했습니다."};var c=n(23869);function o(e){return e.fields.map(e=>{let{name:t,env:n,set:s}=e;return{name:t,env:n,set:s}})}function u(e){if(e instanceof c.Iu){if(404===e.status)return"설치된 플러그인을 찾을 수 없습니다.";if(401===e.status)return"연결 정보를 관리할 권한이 없습니다.";if(400===e.status)return"선언되지 않은 연결 정보 항목입니다."}return"연결 정보를 불러오거나 저장하지 못했습니다."}function d(e){let{client:t,name:n}=e,[i,r]=(0,l.useState)(null),[a,c]=(0,l.useState)({}),[d,h]=(0,l.useState)([]),[p,m]=(0,l.useState)(null),[f,g]=(0,l.useState)(!1);async function x(e){if(e.preventDefault(),f||!i)return;let{fields:s}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n={};for(let[t,s]of Object.entries(e))s.trim()&&(n[t]=s);for(let e of t)n[e]=null;return{fields:n}}(a,d);if(0!==Object.keys(s).length){g(!0),m(null);try{await t.putPluginCredentials(n,s),c({}),h([]),r(null),r(await t.getPluginCredentials(n))}catch(e){m(u(e))}finally{g(!1)}}}return(0,l.useEffect)(()=>{let e=!0;return r(null),c({}),h([]),m(null),t.getPluginCredentials(n).then(t=>{e&&r(t)}).catch(t=>{e&&m(u(t))}),()=>{e=!1}},[t,n]),(0,s.jsxs)("form",{className:"space-y-3 rounded-lg border border-border p-4",onSubmit:e=>void x(e),children:[(0,s.jsx)("h3",{className:"font-medium",children:"연결 정보"}),p&&(0,s.jsx)("p",{role:"alert",className:"text-sm",children:p}),!i&&!p&&(0,s.jsx)("p",{role:"status",children:"연결 정보를 불러오는 중…"}),i&&0===o(i).length&&(0,s.jsx)("p",{className:"text-sm",children:"입력할 연결 정보가 없습니다."}),i&&o(i).map(e=>{var t;return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsx)("label",{className:"block text-sm font-medium",htmlFor:"credential-".concat(n,"-").concat(e.name),children:e.name}),(0,s.jsxs)("small",{className:"block text-muted-foreground",children:["환경 변수: ",(0,s.jsx)("code",{children:e.env})]}),(0,s.jsx)("p",{className:"text-sm",role:"status",children:e.set?"✓ 저장됨":"비어 있음"}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)("input",{id:"credential-".concat(n,"-").concat(e.name),type:"password",autoComplete:"new-password",className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1",value:null!=(t=a[e.name])?t:"",disabled:f,onChange:t=>{c(n=>({...n,[e.name]:t.target.value})),h(t=>t.filter(t=>t!==e.name))}}),e.set&&(0,s.jsx)("button",{type:"button",className:"rounded border px-2 py-1 text-sm",disabled:f,onClick:()=>{c(t=>({...t,[e.name]:""})),h(t=>t.includes(e.name)?t:[...t,e.name])},children:d.includes(e.name)?"삭제 예정":"지우기"})]})]},e.name)}),i&&i.fields.length>0&&(0,s.jsx)("button",{type:"submit",disabled:f||0===d.length&&!Object.values(a).some(e=>e.trim()),className:"rounded border px-3 py-1 text-sm",children:f?"저장 중…":"저장"})]})}function h(){var e;let t=(0,i.Qj)(),[n,c]=(0,l.useState)("browse"),[o,u]=(0,l.useState)(null),[h,p]=(0,l.useState)([]),[m,f]=(0,l.useState)(null),[g,x]=(0,l.useState)(!1),[b,y]=(0,l.useState)(!1),[j,v]=(0,l.useState)(!1),[w,k]=(0,l.useState)(!1),[N,S]=(0,l.useState)(null),[C,O]=(0,l.useState)(!1),[F,q]=(0,l.useState)([]),[B,P]=(0,l.useState)(null);async function A(){if(t){k(!0),S(null);try{if(!(await t.refreshPluginMarket("elanous")).ok)throw Error("공식 마켓을 받지 못했습니다.");u(await t.getPluginsIndex()),x(!1)}catch(e){S("공식 마켓을 받지 못했습니다.")}finally{k(!1)}}}async function I(){if(!t||!m)return;k(!0),q([]),S(null);let e=null;try{await t.installMarketPlugin("".concat(m.plugin.name,"@").concat(m.market.name),m.plugin.capabilities,t=>{let n=function(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let n=t.event;if("string"!=typeof n||!Object.hasOwn(r,n))return null;if("failed"===n){var s;let e=t.reason,n=t.detail,l="string"==typeof e&&null!=(s=a[e])?s:a.io;return{step:"실패",reason:"string"==typeof n&&n.trim()?"".concat(l," — ").concat(n.trim()):l}}return"credentials"===n?!0===t.required?{step:"자격 필요",credentialsRequired:!0}:null:{step:r[n]}}(t);n&&(("완료"===n.step||"실패"===n.step)&&(e=n.step),q(e=>[...e,n]))}),e||q(e=>[...e,{step:"실패",reason:"설치가 끝나지 않았습니다."}])}catch(t){e||q(e=>[...e,{step:"실패",reason:"설치 중 오류가 발생했습니다."}])}if("완료"===e)try{p(await t.getInstalledPlugins()),v(!0),y(!1)}catch(e){y(!0),S("설치는 완료됐지만 설치 목록을 불러오지 못했습니다.")}k(!1)}async function E(e){if(t){k(!0),S(null);try{await t.removeMarketPlugin(e)}catch(e){S("플러그인을 제거하지 못했습니다."),k(!1);return}P(null),p(t=>t.filter(t=>t.name!==e));try{p(await t.getInstalledPlugins()),v(!0),y(!1)}catch(e){y(!0),S("플러그인은 제거됐지만 설치 목록을 불러오지 못했습니다.")}finally{k(!1)}}}(0,l.useEffect)(()=>{if(!t)return;let e=!0;return u(null),p([]),f(null),x(!1),y(!1),v(!1),q([]),O(!1),P(null),S(null),t.getPluginsIndex().then(t=>{e&&u(t)}).catch(()=>{e&&x(!0)}),t.getInstalledPlugins().then(t=>{e&&(p(t),v(!0))}).catch(()=>{e&&(y(!0),v(!0))}),()=>{e=!1}},[t]);let M=o?o.markets.flatMap(e=>e.plugins.map(t=>({market:e,plugin:t,price:function(e){var t;if("free"===e.model)return"무료";let n=void 0===e.amount?"가격 미정":"".concat(e.amount.toLocaleString("ko-KR")," ").concat(null!=(t=e.currency)?t:"").trim();return"subscription"===e.model&&e.period?"".concat(n," / ").concat(e.period):n}(t.pricing),badge:function(e){switch(e){case"ok":return"✅ 서명 확인";case"missing":return"⚠️ 서명 없음";case"unknown-key":return"⚠️ 알 수 없는 서명 키";case"malformed":return"⚠️ 잘못된 서명";case"stale":return"⚠️ 유효하지 않은 서명"}}(e.signature)}))).sort((e,t)=>("ok"!==e.market.signature)-("ok"!==t.market.signature)||e.plugin.name.localeCompare(t.plugin.name)||e.market.name.localeCompare(t.market.name)):[];return(0,s.jsxs)("main",{className:"mx-auto max-w-5xl space-y-6 p-5 text-foreground","aria-label":"마켓",children:[(0,s.jsxs)("header",{children:[(0,s.jsx)("h1",{className:"text-2xl font-semibold",children:"마켓"}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"확인된 플러그인을 살펴보고 설치할 수 있습니다."})]}),(0,s.jsx)("nav",{"aria-label":"마켓 탭",className:"flex flex-wrap gap-2",children:[["browse","찾아보기"],["detail","상세"],["installed","설치됨"]].map(e=>{let[t,l]=e;return(0,s.jsx)("button",{type:"button","aria-current":n===t?"page":void 0,className:"rounded-lg border px-4 py-2 text-sm ".concat(n===t?"border-blue-500 font-semibold":"border-border"),onClick:()=>c(t),children:l},t)})}),!t&&(0,s.jsx)("p",{role:"status",children:"서버 연결이 설정되지 않았습니다. 설정에서 서버 주소를 입력하세요."}),N&&(0,s.jsx)("p",{role:"alert",children:N}),"installed"!==n&&g&&(0,s.jsx)("p",{role:"alert",children:"마켓을 불러오지 못했습니다."}),"installed"!==n&&t&&!g&&!o&&(0,s.jsx)("p",{role:"status",children:"마켓을 불러오는 중…"}),"installed"===n&&b&&(0,s.jsx)("p",{role:"alert",children:"설치 목록을 불러오지 못했습니다."}),"installed"===n&&t&&!j&&(0,s.jsx)("p",{role:"status",children:"설치 목록을 불러오는 중…"}),"browse"===n&&o&&(0===o.markets.length?(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("p",{children:"아직 받아 둔 마켓이 없습니다."}),(0,s.jsx)("button",{type:"button",disabled:w||!t,className:"rounded border px-3 py-2",onClick:()=>void A(),children:"공식 마켓 받기"})]}):0===M.length?(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("p",{children:"등록된 플러그인이 없습니다."}),(0,s.jsx)("button",{type:"button",disabled:w||!t,className:"rounded border px-3 py-2",onClick:()=>void A(),children:"공식 마켓 받기"})]}):(0,s.jsx)("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:M.map(e=>{var t;return(0,s.jsxs)("article",{className:"rounded-xl border border-border p-4 space-y-2",children:[(0,s.jsxs)("h2",{className:"font-semibold",children:[e.plugin.name," ",(0,s.jsxs)("span",{className:"text-xs font-normal",children:["v",e.plugin.version]})]}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:null!=(t=e.plugin.description)?t:"설명이 없습니다."}),(0,s.jsxs)("p",{className:"text-sm",children:[e.price," \xb7 ",(0,s.jsx)("span",{title:e.market.detail,children:e.badge})]}),(0,s.jsx)("button",{type:"button",className:"rounded border px-3 py-1 text-sm",onClick:()=>{f(e),O(!1),q([]),c("detail")},children:"상세 보기"})]},"".concat(e.market.name,"/").concat(e.plugin.name,"/").concat(e.plugin.version))})})),"detail"===n&&!g&&(m?(0,s.jsxs)("section",{className:"space-y-4 rounded-xl border border-border p-5","aria-label":"플러그인 상세",children:[(0,s.jsxs)("h2",{className:"text-xl font-semibold",children:[m.plugin.name," ",(0,s.jsxs)("small",{children:["v",m.plugin.version]})]}),(0,s.jsx)("p",{children:m.plugin.description}),(0,s.jsxs)("p",{children:[m.price," \xb7 ",m.badge]}),(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"font-medium",children:"권한"}),(0,s.jsx)("ul",{children:m.plugin.capabilities.map(e=>(0,s.jsx)("li",{children:e},e))})]}),(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"font-medium",children:"연결 정보 항목"}),m.plugin.connectors.map(e=>(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{children:"연결 정보"}),(0,s.jsx)("ul",{children:e.userConfig.map(e=>(0,s.jsxs)("li",{children:[e.label,e.secret?" \xb7 비공개 정보":""]},e.key))})]},e.id))]}),(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"font-medium",children:"포함된 기능"}),(0,s.jsx)("ul",{children:null==(e=m.plugin.graphs)?void 0:e.map(e=>(0,s.jsx)("li",{children:e},e))})]}),(0,s.jsxs)("p",{children:["파일 확인값: ",(0,s.jsx)("code",{children:m.plugin.sha256.slice(0,12)})]}),C?(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("p",{children:"이 플러그인이 요청하는 권한을 확인하세요."}),(0,s.jsx)("ul",{children:m.plugin.capabilities.map(e=>(0,s.jsx)("li",{children:e},e))}),(0,s.jsx)("button",{type:"button",disabled:w,className:"rounded border px-3 py-1",onClick:()=>void I(),children:"동의하고 설치"}),(0,s.jsx)("button",{type:"button",disabled:w,className:"rounded border px-3 py-1",onClick:()=>O(!1),children:"취소"})]}):(0,s.jsx)("button",{type:"button",disabled:w||"ok"!==m.market.signature,className:"rounded border px-3 py-1",onClick:()=>O(!0),children:"설치"}),F.length>0&&(0,s.jsx)("ol",{"aria-label":"설치 진행",className:"space-y-1",children:F.map((e,t)=>(0,s.jsxs)("li",{role:"실패"===e.step?"alert":void 0,children:[e.step,e.reason?": ".concat(e.reason):"",e.credentialsRequired?" — 이 플러그인은 연결 정보가 필요합니다.":""]},t))}),t&&F.some(e=>e.credentialsRequired)&&(0,s.jsx)(d,{client:t,name:m.plugin.name},"".concat(m.plugin.name,"-").concat(F.some(e=>"완료"===e.step||"등록"===e.step)))]}):(0,s.jsx)("p",{children:"찾아보기에서 플러그인을 선택하세요."})),"installed"===n&&j&&!b&&(0===h.length?(0,s.jsx)("p",{children:"설치된 플러그인이 없습니다."}):(0,s.jsx)("ul",{className:"space-y-2",children:h.map(e=>(0,s.jsxs)("li",{className:"rounded-lg border border-border p-3",children:[e.name," \xb7 v",e.version," \xb7 설치 시각: ",e.installedAt&&Number.isFinite(Date.parse(e.installedAt))?(0,s.jsx)("time",{dateTime:e.installedAt,children:new Date(e.installedAt).toLocaleString("ko-KR")}):"알 수 없음",B===e.name?(0,s.jsxs)("span",{className:"ml-3",children:["제거할까요? ",(0,s.jsx)("button",{type:"button",disabled:w,onClick:()=>void E(e.name),children:"제거 확인"})," ",(0,s.jsx)("button",{type:"button",onClick:()=>P(null),children:"취소"})]}):(0,s.jsx)("button",{type:"button",disabled:w,className:"ml-3 rounded border px-3 py-1",onClick:()=>P(e.name),children:"제거"}),t&&(0,s.jsxs)("details",{className:"mt-3",children:[(0,s.jsx)("summary",{className:"cursor-pointer",children:"연결 정보"}),(0,s.jsx)("div",{className:"mt-2",children:(0,s.jsx)(d,{client:t,name:e.name})})]})]},"".concat(e.market,"/").concat(e.name,"/").concat(e.version)))}))]})}},28042:(e,t,n)=>{"use strict";n.d(t,{Qb:()=>r,SI:()=>c,dJ:()=>a});let s="elanous:auth-required",l=null,i=!1;function r(e){null===l&&(l=e,window.dispatchEvent(new CustomEvent(s,{detail:{path:e}})))}function a(e){let t=window,n=t=>e(t.detail);return t.addEventListener(s,n),null===l||i||e({path:l}),()=>t.removeEventListener(s,n)}function c(){i=!0}},43468:(e,t,n)=>{"use strict";n.d(t,{M1:()=>o,Qj:()=>u,tI:()=>c});var s=n(54456),l=n(60500),i=n(40324),r=n(59405);let a=(0,l.createContext)(null);function c(e){let{client:t,queryClient:n,defaultStaleTimeMs:c,children:o}=e,u=(0,l.useMemo)(()=>null!=n?n:new i.E({defaultOptions:{queries:{staleTime:null!=c?c:2e3,refetchOnWindowFocus:!1}}}),[n,c]);return(0,s.jsx)(a.Provider,{value:t,children:(0,s.jsx)(r.Ht,{client:u,children:o})})}function o(){let e=(0,l.useContext)(a);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function u(){return(0,l.useContext)(a)}},50733:(e,t,n)=>{"use strict";let s;n.d(t,{cY:()=>u,x8:()=>a});let l={debug:0,info:1,warn:2,error:3},i="/v1/debug-logs/batch",r=null;function a(e){r=e}class c{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(l[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)]<l[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,n=JSON.stringify({records:e});try{var s,l;t=await (s=this.fetchFn(n),l=this.postTimeoutMs,new Promise((e,t)=>{let n=setTimeout(()=>t(Error("debug-forward timeout after ".concat(l,"ms"))),l);s.then(t=>{clearTimeout(n),e(t)},e=>{clearTimeout(n),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&r)try{await r(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 a=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:a,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=o,t="debug",n=1e4,s=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=n,this.flushMs=s,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 o(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 u(e,t){if("undefined"==typeof console)return;let n=new Date().toISOString();if(void 0!==t){let s="";try{let e=new WeakSet;s=JSON.stringify(t,(t,n)=>{if("bigint"==typeof n)return"".concat(n.toString(),"n");if("function"==typeof n)return"[fn ".concat(n.name||"anon","]");if(n&&"object"==typeof n){if(e.has(n))return"[circular]";e.add(n)}return n})}catch(e){s="[unserializable: ".concat(String(e),"]")}s&&s.length>800&&(s=s.slice(0,797)+"..."),console.debug("[".concat(n,"] ").concat(e," ").concat(s),t),d(n,e,s)}else console.debug("[".concat(n,"] ").concat(e)),d(n,e,void 0)}function d(e,t,n){let l,i=function(){if(void 0!==s)return s;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 s=null,null;let t=new c(o,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return s=t,t}();if(!i)return;let r=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==n&&""!==n)try{l=JSON.parse(n)}catch(e){l=n}i.push({ts:e,category:t,event:r,...void 0!==l?{data:l}:{},source:{platform:"pwa"}})}},79644:(e,t,n)=>{Promise.resolve().then(n.bind(n,501))}},e=>{e.O(0,[9538,3869,6390,3170,7358],()=>e(e.s=79644)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7398],{29673:(e,t,s)=>{Promise.resolve().then(s.bind(s,79202))},79202:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var a=s(54456),i=s(60500),n=s(80581);class r extends Error{constructor(e,t,s){super("mission-room ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="MissionRoomApiError"}}function o(e){var t;let[s,n]=(0,i.useState)({loading:!0,error:null,state:null}),[r,o]=(0,i.useState)(""),[d,u]=(0,i.useState)(""),[m,h]=(0,i.useState)(!1),[x,p]=(0,i.useState)(null),[f,b]=(0,i.useState)(!1),y=(0,i.useRef)(!0);(0,i.useEffect)(()=>()=>{y.current=!1},[]);let g=(0,i.useCallback)(async()=>{n(e=>({...e,loading:!0,error:null}));try{let{state:t}=await e.api.spawn(e.missionId);if(!y.current)return;n({loading:!1,error:null,state:t})}catch(e){if(!y.current)return;n({loading:!1,error:c(e),state:null})}},[e.api,e.missionId]);(0,i.useEffect)(()=>{g()},[g]);let j=(0,i.useCallback)(async()=>{if(r.trim()&&!m){h(!0);try{let t=await e.api.deliberate(e.missionId,r.trim(),d.trim()||void 0);if(!y.current)return;n(e=>e.state?{...e,state:{...e.state,decisions:[...e.state.decisions,t]}}:e),o("")}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&h(!1)}}},[e.api,e.missionId,r,d,m]),v=(0,i.useCallback)(async t=>{if(t.trim()&&!x){p(t);try{let s=await e.api.decide(e.missionId,t);if(!y.current)return;n(e=>{if(!e.state)return e;let t=e.state.decisions.slice(),a=t.findIndex(e=>e.ts===s.ts);return a>=0&&(t[a]=s),{...e,state:{...e.state,decisions:t}}})}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&p(null)}}},[e.api,e.missionId,x]),N=(0,i.useCallback)(async()=>{if(!f){b(!0);try{var t;let s=await e.api.archive(e.missionId);if(!y.current)return;n(e=>({...e,state:s})),null==(t=e.onArchived)||t.call(e)}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&b(!1)}}},[e.api,e.missionId,f,e.onArchived]),w=(null==(t=s.state)?void 0:t.status)==="archived",S=(0,i.useMemo)(()=>s.state?[...s.state.decisions].sort((e,t)=>t.ts-e.ts):[],[s.state]);return s.loading&&!s.state?(0,a.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Loading mission room…"}):(0,a.jsxs)("section",{className:"mission-room-panel flex flex-col gap-4 p-4","data-mission-id":e.missionId,children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:e.missionTitle?"".concat(e.missionTitle," \xb7 deliberation"):"Mission Deliberation Room"}),s.state&&(0,a.jsxs)("p",{className:"text-xs opacity-70",children:["tag: ",(0,a.jsx)("code",{children:s.state.missionTag})," \xb7 status:"," ",(0,a.jsx)("span",{className:w?"text-amber-600":"text-emerald-600",children:s.state.status})," \xb7 ","decisions: ",s.state.decisions.length]})]}),!w&&s.state&&(0,a.jsx)("button",{type:"button",className:"text-xs underline opacity-70 hover:opacity-100",disabled:f,onClick:()=>void N(),children:f?"archiving…":"archive room"})]}),s.error&&(0,a.jsx)("div",{role:"alert",className:"rounded border border-rose-400/50 bg-rose-50 px-3 py-2 text-sm text-rose-900",children:s.error}),!w&&(0,a.jsxs)("form",{className:"flex flex-col gap-2 rounded border border-zinc-200 p-3",onSubmit:e=>{e.preventDefault(),j()},children:[(0,a.jsx)("label",{className:"text-xs uppercase tracking-wide opacity-70",children:"New deliberation"}),(0,a.jsx)("textarea",{className:"min-h-[80px] w-full rounded border border-zinc-300 bg-white p-2 text-sm",placeholder:"Describe the branch you're stuck on…",value:r,onChange:e=>o(e.target.value),disabled:m}),(0,a.jsx)("textarea",{className:"min-h-[40px] w-full rounded border border-zinc-200 bg-zinc-50 p-2 text-xs",placeholder:"Optional mission context (task list digest, etc.)",value:d,onChange:e=>u(e.target.value),disabled:m}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)("button",{type:"submit",className:"rounded bg-zinc-900 px-3 py-1 text-sm text-white disabled:opacity-50",disabled:!r.trim()||m,children:m?"asking lanes…":"ask the lanes"})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[0===S.length&&(0,a.jsx)("p",{className:"text-sm opacity-70",children:"No deliberations yet."}),S.map(e=>(0,a.jsx)(l,{decision:e,onDecide:w?void 0:v,decidingChoice:x},e.ts))]})]})}function l(e){let{decision:t,onDecide:s,decidingChoice:n}=e,[r,o]=(0,i.useState)(""),l=t.resolution.status,c="decided"===t.resolution.status?t.resolution.chosen:null;return(0,a.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3",children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t.question}),(0,a.jsx)("time",{className:"shrink-0 text-xs opacity-60",dateTime:new Date(t.ts).toISOString(),children:new Date(t.ts).toLocaleString()})]}),(0,a.jsx)("ul",{className:"mt-2 flex flex-col gap-2",children:t.opinions.map((e,t)=>(0,a.jsxs)("li",{className:"rounded bg-zinc-50 p-2 text-xs",children:[(0,a.jsxs)("div",{className:"font-medium",children:[e.role,e.modelId?(0,a.jsxs)("span",{className:"opacity-60",children:[" \xb7 ",e.modelId]}):null]}),(0,a.jsx)("pre",{className:"mt-1 whitespace-pre-wrap text-xs leading-snug",children:e.text})]},"".concat(e.role,"-").concat(t)))}),(0,a.jsxs)("footer",{className:"mt-3 flex items-center justify-between gap-2",children:[(0,a.jsxs)("span",{className:"text-xs opacity-70",children:["resolution:"," ","decided"===l?(0,a.jsxs)("span",{className:"font-medium text-emerald-700",children:["decided → ",c]}):(0,a.jsx)("span",{className:"text-amber-700",children:"open"})]}),s&&"open"===l&&(0,a.jsxs)("form",{className:"flex items-center gap-1",onSubmit:e=>{e.preventDefault(),r.trim()&&s(r.trim())},children:[(0,a.jsx)("input",{className:"w-32 rounded border border-zinc-300 px-2 py-0.5 text-xs",placeholder:"chosen…",value:r,onChange:e=>o(e.target.value),disabled:null!==n}),(0,a.jsx)("button",{type:"submit",className:"rounded bg-emerald-700 px-2 py-0.5 text-xs text-white disabled:opacity-50",disabled:!r.trim()||null!==n,children:n===r?"…":"apply"})]})]})]})}function c(e){if(e instanceof r){let t="object"==typeof e.body&&e.body&&"detail"in e.body?e.body.detail:null;return 404===e.status?"Mission room not found.":409===e.status?t?"Conflict: ".concat(t):"Conflict — room may be archived or no open decision.":401===e.status?"Authentication required.":"Mission room error (".concat(e.status,").")}return e instanceof Error?e.message:String(e)}function d(){var e;let t=(0,n.useParams)(),s=decodeURIComponent(null!=(e=null==t?void 0:t.id)?e:""),l=(0,i.useMemo)(()=>(function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),a=null!=(t=e.fetchImpl)?t:fetch,i=e.authHeader;async function n(e,t){let n={"content-type":"application/json"};i&&(n.authorization=i),(null==t?void 0:t.headers)&&Object.assign(n,t.headers);let o=await a("".concat(s).concat(e),{...t,headers:n}),l=await o.json().catch(()=>null);if(!o.ok)throw new r(o.status,e,l);return l}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"/v1/missions/".concat(encodeURIComponent(e),"/showroom").concat(t)}return{spawn:async e=>await n(o(e)),deliberate:async(e,t,s)=>(await n(o(e,"/deliberate"),{method:"POST",body:JSON.stringify({question:t,...void 0!==s?{missionContext:s}:{}})})).decision,decide:async(e,t)=>(await n(o(e,"/decision"),{method:"POST",body:JSON.stringify({chosen:t})})).decision,archive:async e=>(await n(o(e,"/archive"),{method:"POST"})).state}})({baseUrl:window.location.origin}),[]);return s?(0,a.jsx)(o,{missionId:s,api:l}):(0,a.jsx)("div",{className:"p-4 text-sm",children:"Mission id missing in URL."})}},80581:(e,t,s)=>{"use strict";var a=s(35793);s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}}),s.o(a,"useSearchParams")&&s.d(t,{useSearchParams:function(){return a.useSearchParams}})}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=29673)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9773],{33792:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h});var n=a(41121),s=a(91269),r=a(94387);class o extends Error{constructor(e,t,a){super("morning-showroom ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=a,this.name="MorningShowroomApiError"}}let i={yesterday:"Yesterday",today:"Today",blockers:"Blockers",opportunities:"Opportunities"},d={yesterday:"◐",today:"▶",blockers:"⛔",opportunities:"✦"};function c(e){let[t,a]=(0,s.useState)({kind:"loading"}),[i,d]=(0,s.useState)(0);return(0,s.useEffect)(()=>{var t;let n=!1,s=null!=(t=e.api)?t:function(e){var t;let a=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,s=r.GM;return{async compose(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let i=await n("".concat(a).concat(s),{method:"POST",headers:r,body:JSON.stringify(t)}),d=await i.json().catch(()=>null);if(!i.ok||!(null==d?void 0:d.card))throw new o(i.status,s,d);return d.card}}}({baseUrl:window.location.origin});return a({kind:"loading"}),s.compose(e.request).then(e=>{n||a(0===e.lanes.length?{kind:"empty"}:{kind:"card",card:e})}).catch(()=>{n||a({kind:"unavailable"})}),()=>{n=!0}},[e.api,e.request.date,e.request.windowStart,e.request.windowEnd,i]),(0,n.jsx)(l,{state:t,onRetry:()=>d(e=>e+1)})}function l(e){let{state:t,onRetry:a}=e;return"loading"===t.kind?(0,n.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Morning showroom을 준비하고 있습니다…"}):"unavailable"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-unavailable",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"Morning showroom이 아직 연결되지 않았습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"다이제스트를 만들 수 있는 곳이 준비되면 이 화면에 표시됩니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline",onClick:a,children:"다시 시도"})]}):"empty"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-empty",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"아직 보여 줄 Morning showroom 항목이 없습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"오늘의 실행 기록이 쌓이면 이곳에서 아침 다이제스트를 확인할 수 있습니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline","data-testid":"morning-showroom-empty-retry",onClick:a,children:"새로 고침"})]}):(0,n.jsxs)("section",{className:"morning-showroom p-4","data-date":t.card.date,children:[(0,n.jsxs)("header",{className:"mb-3 flex items-baseline justify-between",children:[(0,n.jsxs)("h2",{className:"text-lg font-semibold",children:["Morning showroom \xb7 ",t.card.date]}),(0,n.jsx)("time",{className:"text-xs opacity-60",dateTime:new Date(t.card.createdAt).toISOString(),children:new Date(t.card.createdAt).toLocaleTimeString()})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:t.card.lanes.map(e=>(0,n.jsx)(m,{lane:e},e.lane))})]})}function m(e){let{lane:t}=e;return(0,n.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3","data-lane":t.lane,children:[(0,n.jsxs)("header",{className:"mb-2 flex items-center gap-2 text-xs uppercase tracking-wide opacity-70",children:[(0,n.jsx)("span",{"aria-hidden":!0,children:d[t.lane]}),(0,n.jsx)("span",{children:i[t.lane]}),t.modelId&&(0,n.jsxs)("span",{className:"ml-auto opacity-60",children:["\xb7 ",t.modelId]})]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm leading-snug",children:t.text})]})}function h(){let e=(0,s.useMemo)(()=>{let e=function(){let e=new Date,t=e.getUTCFullYear(),a=String(e.getUTCMonth()+1).padStart(2,"0"),n=String(e.getUTCDate()).padStart(2,"0"),s="".concat(t,"-").concat(a,"-").concat(n),r=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate()-1,22)),o=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate(),8));return{date:s,windowStart:r.toISOString(),windowEnd:o.toISOString()}}();return{date:e.date,windowStart:e.windowStart,windowEnd:e.windowEnd,runs:[],upcoming:[],backlogRecommendations:[]}},[]);return(0,n.jsx)(c,{request:e})}},53826:(e,t,a)=>{Promise.resolve().then(a.bind(a,33792))},94387:(e,t,a)=>{"use strict";a.d(t,{GM:()=>i,J3:()=>o,WF:()=>n,bR:()=>r,m:()=>d,r5:()=>s});let n="/v1/devices",s="/v1/approvals/merges",r="/v1/templates/capability-preview",o="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"}},e=>{e.O(0,[2367,6725,7358],()=>e(e.s=53826)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9773],{10304:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h});var n=a(54456),s=a(60500),r=a(98025);class o extends Error{constructor(e,t,a){super("morning-showroom ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=a,this.name="MorningShowroomApiError"}}let i={yesterday:"Yesterday",today:"Today",blockers:"Blockers",opportunities:"Opportunities"},d={yesterday:"◐",today:"▶",blockers:"⛔",opportunities:"✦"};function c(e){let[t,a]=(0,s.useState)({kind:"loading"}),[i,d]=(0,s.useState)(0);return(0,s.useEffect)(()=>{var t;let n=!1,s=null!=(t=e.api)?t:function(e){var t;let a=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,s=r.GM;return{async compose(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let i=await n("".concat(a).concat(s),{method:"POST",headers:r,body:JSON.stringify(t)}),d=await i.json().catch(()=>null);if(!i.ok||!(null==d?void 0:d.card))throw new o(i.status,s,d);return d.card}}}({baseUrl:window.location.origin});return a({kind:"loading"}),s.compose(e.request).then(e=>{n||a(0===e.lanes.length?{kind:"empty"}:{kind:"card",card:e})}).catch(()=>{n||a({kind:"unavailable"})}),()=>{n=!0}},[e.api,e.request.date,e.request.windowStart,e.request.windowEnd,i]),(0,n.jsx)(l,{state:t,onRetry:()=>d(e=>e+1)})}function l(e){let{state:t,onRetry:a}=e;return"loading"===t.kind?(0,n.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Morning showroom을 준비하고 있습니다…"}):"unavailable"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-unavailable",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"Morning showroom이 아직 연결되지 않았습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"다이제스트를 만들 수 있는 곳이 준비되면 이 화면에 표시됩니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline",onClick:a,children:"다시 시도"})]}):"empty"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-empty",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"아직 보여 줄 Morning showroom 항목이 없습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"오늘의 실행 기록이 쌓이면 이곳에서 아침 다이제스트를 확인할 수 있습니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline","data-testid":"morning-showroom-empty-retry",onClick:a,children:"새로 고침"})]}):(0,n.jsxs)("section",{className:"morning-showroom p-4","data-date":t.card.date,children:[(0,n.jsxs)("header",{className:"mb-3 flex items-baseline justify-between",children:[(0,n.jsxs)("h2",{className:"text-lg font-semibold",children:["Morning showroom \xb7 ",t.card.date]}),(0,n.jsx)("time",{className:"text-xs opacity-60",dateTime:new Date(t.card.createdAt).toISOString(),children:new Date(t.card.createdAt).toLocaleTimeString()})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:t.card.lanes.map(e=>(0,n.jsx)(m,{lane:e},e.lane))})]})}function m(e){let{lane:t}=e;return(0,n.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3","data-lane":t.lane,children:[(0,n.jsxs)("header",{className:"mb-2 flex items-center gap-2 text-xs uppercase tracking-wide opacity-70",children:[(0,n.jsx)("span",{"aria-hidden":!0,children:d[t.lane]}),(0,n.jsx)("span",{children:i[t.lane]}),t.modelId&&(0,n.jsxs)("span",{className:"ml-auto opacity-60",children:["\xb7 ",t.modelId]})]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm leading-snug",children:t.text})]})}function h(){let e=(0,s.useMemo)(()=>{let e=function(){let e=new Date,t=e.getUTCFullYear(),a=String(e.getUTCMonth()+1).padStart(2,"0"),n=String(e.getUTCDate()).padStart(2,"0"),s="".concat(t,"-").concat(a,"-").concat(n),r=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate()-1,22)),o=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate(),8));return{date:s,windowStart:r.toISOString(),windowEnd:o.toISOString()}}();return{date:e.date,windowStart:e.windowStart,windowEnd:e.windowEnd,runs:[],upcoming:[],backlogRecommendations:[]}},[]);return(0,n.jsx)(c,{request:e})}},88898:(e,t,a)=>{Promise.resolve().then(a.bind(a,10304))},98025:(e,t,a)=>{"use strict";a.d(t,{GM:()=>i,J3:()=>o,WF:()=>n,bR:()=>r,m:()=>d,r5:()=>s});let n="/v1/devices",s="/v1/approvals/merges",r="/v1/templates/capability-preview",o="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=88898)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4345],{27122:(e,s,a)=>{Promise.resolve().then(a.bind(a,33568))},33568:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>d});var t=a(54456),l=a(80581),n=a(47193);function d(){let e=(0,l.usePathname)();return(0,t.jsx)("main",{"data-testid":"not-found",className:"min-h-screen bg-gradient-to-b from-background via-background to-muted/40 px-6 py-12 sm:px-10",children:(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-10",children:[(0,t.jsxs)("header",{className:"flex flex-col gap-3",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"elanous PWA"}),(0,t.jsx)("h1",{className:"text-3xl font-bold leading-tight sm:text-4xl",children:"여기엔 없습니다"}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground",children:[(0,t.jsx)("code",{children:e||"알 수 없는 주소"})," 주소는 이 앱에 없습니다. 아래에서 지금 갈 수 있는 곳을 선택하거나 참고 주소의 사유를 확인하세요."]})]}),(0,t.jsx)(n.QL,{ariaLabel:"이동 가능한 주소와 참고 주소"})]})})}}},e=>{e.O(0,[7777,9538,6048,3454,2176,3638,6390,3170,7358],()=>e(e.s=27122)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6997],{1355:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>r,oD:()=>a});let n="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 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=r();return localStorage.setItem(n,t),t}function l(){let e=r();return localStorage.setItem(n,e),e}},6045:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).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"}]])},18494:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var n=s(60500);let r=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l={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 i=(0,n.createContext)({}),o=(0,n.forwardRef)((e,t)=>{var s,a,o;let{color:d,size:c,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:x,iconNode:h,...f}=e,{size:g=24,strokeWidth:b=2,absoluteStrokeWidth:k=!1,color:v="currentColor",className:j=""}=null!=(s=(0,n.useContext)(i))?s:{},y=(null!=m?m:k)?24*Number(null!=u?u:b)/Number(null!=c?c:g):null!=u?u:b;return(0,n.createElement)("svg",{ref:t,...l,width:null!=(a=null!=c?c:g)?a:l.width,height:null!=(o=null!=c?c:g)?o:l.height,stroke:null!=d?d:v,strokeWidth:y,className:r("lucide",j,p),...!x&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...h.map(e=>{let[t,s]=e;return(0,n.createElement)(t,s)}),...Array.isArray(x)?x:[x]])}),d=(e,t)=>{let s=(0,n.forwardRef)((s,l)=>{let{className:i,...d}=s;return(0,n.createElement)(o,{ref:l,iconNode:t,className:r("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...d})});return s.displayName=a(e),s}},31470:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]])},35044:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]])},36581:(e,t,s)=>{"use strict";s.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=s(54456),r=s(60500),a=s(86704),l=s(1355),i=s(39906),o=s(50733);let d=(0,r.createContext)(null);function c(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[c,u]=(0,r.useState)(s),[m,p]=(0,r.useState)(""),[x]=(0,r.useState)(()=>new i.ki(s));(0,r.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,l.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,a.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 s={...t,...e};return(0,a.Qc)(e),x.updateConfig(s),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},f=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,r.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:f}),[c,x,m]);return(0,n.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,r.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},67621:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]])},67735:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>x});var n=s(54456),r=s(60500),a=s(1617);let l={live:"live",unknown:"unknown",inactive:"inactive"},i={running:"running","probable-running":"probably running","ended-unclosed":"ended, not closed",unknown:"run state unknown"};function o(e){let{label:t,present:s}=e;return(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ".concat(s?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:[t,": ",s?"present":"absent"]})}function d(e){var t,s,l;let{ptyIds:i,onRefresh:o}=e,[d,c]=(0,r.useState)(null!=(t=i[0])?t:""),[u,m]=(0,r.useState)({kind:"loading",ptyId:null!=(s=i[0])?s:""}),[p,x]=(0,r.useState)(0),[h,f]=(0,r.useState)({kind:"idle"}),g=(0,r.useRef)(null),b=i.includes(d)?d:null!=(l=i[0])?l:"",k=u.ptyId===b?u:{kind:"loading",ptyId:b},v="pending"===h.kind,j="idle"===h.kind||h.ptyId===b?h:{kind:"idle"},y="pending"===j.kind;return(0,r.useEffect)(()=>{c(e=>{var t;return i.includes(e)?e:null!=(t=i[0])?t:""})},[i]),(0,r.useEffect)(()=>{if(!b)return;let e=new AbortController;return m({kind:"loading",ptyId:b}),fetch((0,a.xV)(b),{signal:e.signal}).then(async t=>{if(!t.ok)throw Error("GET ".concat((0,a.xV)(b)," failed (").concat(t.status,")"));let s=await t.json();if("string"!=typeof s.frame)throw Error("Terminal frame response did not contain text.");e.signal.aborted||m({kind:"success",ptyId:b,frame:s.frame})}).catch(t=>{e.signal.aborted||m({kind:"error",ptyId:b,message:t instanceof Error?t.message:"Terminal frame request failed."})}),()=>e.abort()},[b,p]),(0,r.useEffect)(()=>(f(e=>"pending"===e.kind&&e.ptyId!==b?{kind:"idle"}:e),()=>{var e;null==(e=g.current)||e.abort(),g.current=null}),[b]),(0,n.jsxs)("div",{className:"space-y-2 rounded-md bg-surface-elevated p-3","data-testid":"terminal-frame-panel",children:[i.length>1&&(0,n.jsxs)("label",{className:"flex w-fit items-center gap-2 text-xs",children:["PTY",(0,n.jsx)("select",{value:b,onChange:e=>c(e.target.value),"aria-label":"Select terminal PTY",disabled:v,children:i.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]}),b&&(0,n.jsxs)("div",{className:"space-y-1","data-testid":"terminal-takeover",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-label":"Take over PTY ownership","data-testid":"terminal-takeover-button",disabled:y,onClick:()=>{var e;if(!b||v)return;null==(e=g.current)||e.abort();let t=new AbortController;g.current=t,f({kind:"pending",ptyId:b}),(0,a.HS)(b,globalThis.fetch,{signal:t.signal}).then(e=>{if(!t.signal.aborted){if(e.ok){f({kind:"success",ptyId:e.ptyId}),x(e=>e+1),null==o||o();return}f({kind:"error",ptyId:e.ptyId,failureKind:e.kind,message:e.message})}})},children:y?"Taking over ownership…":"Take over ownership"}),"pending"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-pending",children:"Taking over ownership…"}),"success"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-success",children:"Ownership transferred. Observation refreshed."}),"error"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-destructive",role:"alert","data-testid":"terminal-takeover-error","data-takeover-kind":j.failureKind,children:j.message})]}),"loading"===k.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status",children:"Loading terminal frame…"}),"error"===k.kind&&(0,n.jsxs)("p",{className:"text-xs text-destructive",role:"alert",children:["Unable to load terminal frame: ",k.message]}),"success"===k.kind&&(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-background p-3 font-mono text-xs","data-testid":"terminal-frame",children:k.frame||"(Terminal frame is empty.)"})]})}function c(e){let{subject:t,onRefresh:s}=e,[l,i]=(0,r.useState)(!1),o="terminal-frame-".concat(encodeURIComponent(t.id)),c=t.screen.ptyIds;return(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["screen: ",c.length," PTY \xb7 ",t.screen.liveCount," live"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-expanded":l,"aria-controls":o,onClick:()=>i(e=>!e),children:l?"Hide terminal frame":"Show terminal frame"}),(0,n.jsx)("a",{className:"text-xs underline",href:(0,a.GG)(),children:"Open terminal inspector"})]}),l&&(0,n.jsx)("div",{id:o,children:(0,n.jsx)(d,{ptyIds:c,onRefresh:s})})]})}function u(e){let{subjects:t,runningRuns:s,scope:d,includeIsolatedInstances:u=!1,onIncludeIsolatedInstancesChange:m,progressBySubject:p=new Map,onRefresh:x}=e,[h,f]=(0,r.useState)(!1),g=(0,a.U$)(t,h);return(0,n.jsxs)("section",{className:"space-y-3","aria-label":"Observatory subjects",children:[s&&(0,n.jsxs)("p",{className:"text-sm text-muted-foreground","data-testid":"running-runs-summary",children:["Server run count: ",s.running," running, ",s["probable-running"]," probable-running"," ","(counted statuses: ",s.countedStatuses.join(", "),")"]}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:e=>null==m?void 0:m(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",u?"included":"local only"]}),d&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"observatory-scope",children:["Observation scope: ",d.domain,"; ",d.roots," root",1===d.roots?"":"s","; ",d.federated?"federated":"local only","; ",d.hiddenDead," dead hidden",void 0===d.hiddenSubAgentRuns?"":"; ".concat(d.hiddenSubAgentRuns," sub-agent runs hidden")]})]}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:h,onChange:e=>f(e.target.checked)}),"Show all subjects"]}),0===g.length?(0,n.jsx)("p",{className:"rounded-md border border-border p-4 text-sm text-muted-foreground","data-testid":"subject-list-empty",children:0===t.length?"No observation subjects reported.":"No live or unknown subjects. Turn on Show all subjects to include inactive subjects."}):(0,n.jsx)("ul",{className:"space-y-2","data-testid":"subject-list",children:g.map(e=>{let t=(0,a.XG)(e),s=(0,a.t_)(e),r=p.get(e.id);return(0,n.jsxs)("li",{className:"space-y-2 rounded-md border border-border p-3","data-status":s,children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-mono text-sm",children:e.runId||e.id}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["origin: ",e.origin]})]}),(0,n.jsx)("span",{className:"rounded-full bg-surface-elevated px-2 py-0.5 text-[10px] font-medium uppercase",children:l[s]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-1","aria-label":"Subject surfaces",children:[(0,n.jsx)(o,{label:"\uD83D\uDDE3️ talk",present:t.talk}),(0,n.jsx)(o,{label:"\uD83D\uDDA5️ screen",present:t.screen}),(0,n.jsx)(o,{label:"\uD83E\uDD16 agent",present:t.agent})]}),e.run&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"subject-run-assessment","data-run-status":e.run.status,children:["run: ",i[e.run.status]," — reason: ",e.run.reason," (presence: ",e.run.presence,")"]}),(null==r?void 0:r.kind)==="no-screen"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no screen"}),(null==r?void 0:r.kind)==="no-progress"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no progress reported"}),(null==r?void 0:r.kind)==="progress"&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["progress (",r.ptyId,"): ",r.status," — ",r.line,r.hasMissingFrames?" (missing frames)":""]}),t.screen&&(0,n.jsx)(c,{subject:e,onRefresh:x})]},e.id)})})]})}var m=s(65845);let p=new(s(39906)).ki({baseUrl:"",token:"",provider:""});function x(){let[e,t]=(0,r.useState)(null),[s,l]=(0,r.useState)(),[i,o]=(0,r.useState)(),[d,c]=(0,r.useState)(!1),[x,h]=(0,r.useState)(new Map),[f,g]=(0,r.useState)(null),[b,k]=(0,r.useState)(0);return(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var s,n;let[r,i]=await Promise.all([fetch((0,a.h7)(d)).then(async e=>{if(!e.ok)throw Error("GET ".concat((0,a.h7)(d)," failed (").concat(e.status,")"));return e.json()}),p.listProgressFrames().catch(()=>null)]);if(e)return;let c=null!=(s=r.subjects)?s:[];g(null),t(c),l(r.runningRuns),o(r.scope),h((0,a.vq)(c,i?(0,m.gA)(null!=(n=i.logs)?n:[]):new Map))}catch(t){e||g(t instanceof Error?t.message:"Failed to load observation subjects")}})(),()=>{e=!0}},[d,b]),(0,n.jsxs)("main",{className:"mx-auto max-w-4xl space-y-4 p-6",children:[(0,n.jsxs)("header",{className:"space-y-1",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Observatory"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Subject-level view of talk, screen, and agent observation surfaces."}),(0,n.jsx)("button",{type:"button",className:"text-sm underline",onClick:()=>{(0,a.L4)()},children:"Open new terminal"})]}),f?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{role:"alert",className:"rounded-md border border-error/40 bg-error/5 p-3 text-sm text-error",children:f}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:d,onChange:e=>c(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",d?"included":"local only"]})]}):null===e?(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading observation subjects…"}):(0,n.jsx)(u,{subjects:e,runningRuns:s,scope:i,includeIsolatedInstances:d,onIncludeIsolatedInstancesChange:c,progressBySubject:x,onRefresh:()=>k(e=>e+1)})]})}},88146:(e,t,s)=>{Promise.resolve().then(s.bind(s,67735))}},e=>{e.O(0,[9906,5845,6390,3170,7358],()=>e(e.s=88146)),_N_E=e.O()}]);