elanous 0.2.25 → 0.2.27

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 (244) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/chunks/{1454-37fd16f479f5554a.js → 1454-a9c338f5bb556f42.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/app/approvals/{page-9360b1285b2a346e.js → page-a1ce306364f08da9.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-07110da72c45e68f.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/app/board/page-d2d76d4a7eae91bd.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/app/botlab/page-30007380f2e2a3c1.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/app/bots/page-e5a9302c105725a3.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/app/ceo/page-b93c04b5311c97ec.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/app/chat/page-718a49e86bf25f9c.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/consult/{page-44eaad486bc98a45.js → page-20662900d6b4b455.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/control/{page-97fa6cf3d34c7eb9.js → page-f707a509515ac50c.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/decisions/{page-305cd294e754906e.js → page-6a16a48d1aa6e91f.js} +1 -1
  14. package/apps/pwa/out/_next/static/chunks/app/design-check/page-fcb06e305f515527.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/app/editor/page-6acf5ec4e6c6d1af.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/app/exec/{page-45889e7070d11126.js → page-39f82acf619cca23.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/app/field/{page-16a2e893f83ae4d0.js → page-7c2c8f81b185f9c0.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/inside/page-ae7aff07e32676bb.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/app/intake/{page-56888bc744e08dac.js → page-482c60c1bc540d0a.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/layout-7cb996c1aa08b6f5.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/app/live/{page-952c6ceec6d9de38.js → page-623e08fe4477d606.js} +1 -1
  22. package/apps/pwa/out/_next/static/chunks/app/live-run/{page-6d0202af568f4c63.js → page-db460cd8aecb8490.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/app/loops/page-ff27902d0b11ef4f.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/app/market/{page-74366ae2693a7d95.js → page-8397a5c6ca569bf4.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-4fb6fc34e20c07b7.js → page-1917ea87ea71ab6b.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/app/morning/{page-e9502921f4f01b1f.js → page-25a302273b054fd7.js} +1 -1
  27. package/apps/pwa/out/_next/static/chunks/app/{not-found-b6169ea2f09cf287.js → not-found-670510eda8b9443f.js} +1 -1
  28. package/apps/pwa/out/_next/static/chunks/app/observatory/page-d73c3f1e00d93986.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-65caacf54389081e.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4bb7556e2e97a750.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-77e04b4f8762c666.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-b9cc8a10bc6078b4.js → page-15c0a4095baddfba.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/app/{page-3d3fc73dd187ed52.js → page-4eb96fc7241c2456.js} +1 -1
  34. package/apps/pwa/out/_next/static/chunks/app/reflection/page-63e272a4cd3b6634.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-9c04dac0831c2bbb.js → page-0d64ff212dc55d03.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/app/sessions/page-7f096248993fc2d4.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-04de9ca6d52a3893.js → page-e47fc72049149a38.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/app/settings/{page-62527677bbc2fdc4.js → page-f7d808e31e005895.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/app/setup/done/{page-9a2e09c4a311764c.js → page-5c2b24b5496dad73.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/app/setup/{page-bfeb35d69e8b24bb.js → page-76cdb531668b5191.js} +1 -1
  41. package/apps/pwa/out/_next/static/chunks/app/share/page-e2b63345bba1a11f.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/app/showroom/{page-b008aff96be56654.js → page-d376e0c83edc041a.js} +1 -1
  43. package/apps/pwa/out/_next/static/chunks/app/tasks/page-d6db55fe2c04d128.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/app/term/page-87b88f551f421d8b.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/app/today/{page-6445ac4cbb8dd869.js → page-dab163b338e3b966.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/app/trace/{page-852170303c6cd755.js → page-08019efef111ed2e.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/app/vault/page-0260ffc7eda50db1.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/{page-97c7361cc2a19319.js → page-980ce6fe36ad95eb.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/app/workflows/{page-20162174b77f96cf.js → page-99c4e6c7345a9156.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-8c6901833f897496.js → page-0ab42e0f05823013.js} +1 -1
  51. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-ad9220422d20ba33.js +1 -0
  52. package/apps/pwa/out/approvals/index.html +1 -1
  53. package/apps/pwa/out/approvals/index.txt +13 -13
  54. package/apps/pwa/out/autopilot/index.html +1 -1
  55. package/apps/pwa/out/autopilot/index.txt +13 -13
  56. package/apps/pwa/out/board/index.html +1 -1
  57. package/apps/pwa/out/board/index.txt +13 -13
  58. package/apps/pwa/out/botlab/index.html +1 -1
  59. package/apps/pwa/out/botlab/index.txt +13 -13
  60. package/apps/pwa/out/bots/index.html +1 -1
  61. package/apps/pwa/out/bots/index.txt +13 -13
  62. package/apps/pwa/out/ceo/index.html +1 -1
  63. package/apps/pwa/out/ceo/index.txt +13 -13
  64. package/apps/pwa/out/chat/index.html +1 -1
  65. package/apps/pwa/out/chat/index.txt +13 -13
  66. package/apps/pwa/out/consult/index.html +1 -1
  67. package/apps/pwa/out/consult/index.txt +13 -13
  68. package/apps/pwa/out/control/index.html +1 -1
  69. package/apps/pwa/out/control/index.txt +13 -13
  70. package/apps/pwa/out/decisions/index.html +1 -1
  71. package/apps/pwa/out/decisions/index.txt +13 -13
  72. package/apps/pwa/out/design-check/index.html +1 -1
  73. package/apps/pwa/out/design-check/index.txt +13 -13
  74. package/apps/pwa/out/editor/index.html +1 -1
  75. package/apps/pwa/out/editor/index.txt +13 -13
  76. package/apps/pwa/out/exec/index.html +1 -1
  77. package/apps/pwa/out/exec/index.txt +13 -13
  78. package/apps/pwa/out/field/index.html +1 -1
  79. package/apps/pwa/out/field/index.txt +13 -13
  80. package/apps/pwa/out/healthz +1 -1
  81. package/apps/pwa/out/index.html +1 -1
  82. package/apps/pwa/out/index.txt +13 -13
  83. package/apps/pwa/out/inside/index.html +1 -1
  84. package/apps/pwa/out/inside/index.txt +13 -13
  85. package/apps/pwa/out/intake/index.html +1 -1
  86. package/apps/pwa/out/intake/index.txt +13 -13
  87. package/apps/pwa/out/live/index.html +1 -1
  88. package/apps/pwa/out/live/index.txt +13 -13
  89. package/apps/pwa/out/live-run/index.html +1 -1
  90. package/apps/pwa/out/live-run/index.txt +13 -13
  91. package/apps/pwa/out/loops/index.html +1 -1
  92. package/apps/pwa/out/loops/index.txt +13 -13
  93. package/apps/pwa/out/market/index.html +1 -1
  94. package/apps/pwa/out/market/index.txt +13 -13
  95. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  96. package/apps/pwa/out/missions/placeholder/index.txt +13 -13
  97. package/apps/pwa/out/morning/index.html +1 -1
  98. package/apps/pwa/out/morning/index.txt +13 -13
  99. package/apps/pwa/out/observatory/index.html +1 -1
  100. package/apps/pwa/out/observatory/index.txt +13 -13
  101. package/apps/pwa/out/ops/checklist/index.html +1 -1
  102. package/apps/pwa/out/ops/checklist/index.txt +13 -13
  103. package/apps/pwa/out/ops/release/index.html +1 -1
  104. package/apps/pwa/out/ops/release/index.txt +13 -13
  105. package/apps/pwa/out/ops/seats/index.html +1 -1
  106. package/apps/pwa/out/ops/seats/index.txt +13 -13
  107. package/apps/pwa/out/outputs/index.html +1 -1
  108. package/apps/pwa/out/outputs/index.txt +13 -13
  109. package/apps/pwa/out/reflection/index.html +1 -1
  110. package/apps/pwa/out/reflection/index.txt +14 -14
  111. package/apps/pwa/out/scheduler/index.html +1 -1
  112. package/apps/pwa/out/scheduler/index.txt +13 -13
  113. package/apps/pwa/out/sessions/index.html +1 -1
  114. package/apps/pwa/out/sessions/index.txt +13 -13
  115. package/apps/pwa/out/settings/devices/index.html +1 -1
  116. package/apps/pwa/out/settings/devices/index.txt +13 -13
  117. package/apps/pwa/out/settings/index.html +1 -1
  118. package/apps/pwa/out/settings/index.txt +13 -13
  119. package/apps/pwa/out/setup/done/index.html +1 -1
  120. package/apps/pwa/out/setup/done/index.txt +13 -13
  121. package/apps/pwa/out/setup/index.html +1 -1
  122. package/apps/pwa/out/setup/index.txt +13 -13
  123. package/apps/pwa/out/share/index.html +1 -1
  124. package/apps/pwa/out/share/index.txt +13 -13
  125. package/apps/pwa/out/showroom/index.html +1 -1
  126. package/apps/pwa/out/showroom/index.txt +13 -13
  127. package/apps/pwa/out/tasks/index.html +1 -1
  128. package/apps/pwa/out/tasks/index.txt +13 -13
  129. package/apps/pwa/out/term/index.html +1 -1
  130. package/apps/pwa/out/term/index.txt +13 -13
  131. package/apps/pwa/out/today/index.html +1 -1
  132. package/apps/pwa/out/today/index.txt +13 -13
  133. package/apps/pwa/out/trace/index.html +1 -1
  134. package/apps/pwa/out/trace/index.txt +13 -13
  135. package/apps/pwa/out/vault/index.html +1 -1
  136. package/apps/pwa/out/vault/index.txt +13 -13
  137. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  138. package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
  139. package/apps/pwa/out/workflows/index.html +1 -1
  140. package/apps/pwa/out/workflows/index.txt +13 -13
  141. package/apps/pwa/out/workspace/index.html +1 -1
  142. package/apps/pwa/out/workspace/index.txt +13 -13
  143. package/apps/pwa/out/worktrees/index.html +1 -1
  144. package/apps/pwa/out/worktrees/index.txt +13 -13
  145. package/package.json +1 -1
  146. package/scripts/ci-typecheck-changed.ts +81 -2
  147. package/scripts/coord-msg-bridge.ts +209 -0
  148. package/scripts/coord-post.sh +40 -7
  149. package/scripts/coord-requests-bridge.ts +10 -5
  150. package/scripts/expose-rubric-suggest.ts +1 -1
  151. package/scripts/measure-tsc-affected-roots.ts +10 -1
  152. package/scripts/release-loop/export-check-node.ts +8 -5
  153. package/scripts/release-loop/node-verdict.ts +7 -2
  154. package/src/agent/task-notification.ts +30 -1
  155. package/src/agent-substrate/review-observation.ts +9 -2
  156. package/src/agent-substrate/self-review-cli.ts +28 -6
  157. package/src/boot/daemon-tools/self-implement.ts +72 -4
  158. package/src/budget/llm-cost.ts +5 -1
  159. package/src/cli/control-cli.ts +29 -0
  160. package/src/cli/doctor-cli.ts +90 -8
  161. package/src/cli/msg-cli.ts +15 -5
  162. package/src/cli/pr-cli.ts +53 -0
  163. package/src/cli/pr-land-overlap-evidence.ts +18 -10
  164. package/src/cli/release-cli.ts +32 -5
  165. package/src/cli/seat-cli.ts +121 -0
  166. package/src/cli/self-utterances-cli.ts +140 -0
  167. package/src/cli/tasks-cli.ts +139 -9
  168. package/src/context-card/cell.ts +40 -0
  169. package/src/dashboard/boot-timing.ts +35 -0
  170. package/src/dashboard/index.ts +86 -24
  171. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +26 -0
  172. package/src/dashboard/slash-runtime/dashboard-handlers.ts +6 -0
  173. package/src/debug/log.ts +1 -1
  174. package/src/domains/release-tool.ts +29 -12
  175. package/src/domains/surface-events.ts +16 -0
  176. package/src/elanous-config-dir.ts +2 -2
  177. package/src/fleet/host-doctor.ts +73 -2
  178. package/src/graph-runner/runner.ts +3 -1
  179. package/src/harness/harness-cli-command.ts +46 -4
  180. package/src/harness/harness-stop.ts +11 -7
  181. package/src/index.ts +35 -4
  182. package/src/instance/current.ts +2 -6
  183. package/src/instance/resolve.ts +5 -6
  184. package/src/llm/openai-sampling-fields.ts +89 -0
  185. package/src/llm/runtime-model-family.ts +61 -0
  186. package/src/llm/zai-coding-plan.ts +27 -1
  187. package/src/llm.ts +13 -89
  188. package/src/machines/machine-ledger.ts +31 -3
  189. package/src/maturity/cli-maturity.ts +13 -3
  190. package/src/msg/msg-store.ts +69 -7
  191. package/src/ops/overview-collect.ts +3 -2
  192. package/src/ops/overview-owner.ts +29 -0
  193. package/src/plugin-hooks/shell-hook.ts +17 -2
  194. package/src/plugin-missions/evaluator-runner.ts +18 -2
  195. package/src/plugins/install/plugin-install.ts +11 -1
  196. package/src/prompt-enhance/enhance.ts +11 -0
  197. package/src/release-loop/checklist.ts +41 -4
  198. package/src/release-loop/feature-store.ts +10 -9
  199. package/src/seat-loop/seat-loop.ts +5 -1
  200. package/src/self-dev/draft-sweep.ts +23 -14
  201. package/src/self-dev/orchestrate.ts +6 -2
  202. package/src/self-dev/run-supervisor.ts +35 -1
  203. package/src/self-implement/goal-author.ts +3 -27
  204. package/src/self-implement/goal-command-execution.ts +26 -0
  205. package/src/self-implement/orchestrator.ts +2 -1
  206. package/src/self-implement/pwa-import-graph.ts +194 -7
  207. package/src/self-implement/self-implement-runtime.ts +126 -21
  208. package/src/session/index.ts +14 -4
  209. package/src/session-runtime/index.ts +55 -11
  210. package/src/task-agent/cover.ts +28 -9
  211. package/src/task-agent/live-moves.ts +14 -6
  212. package/src/task-agent/rejudge-on-head.ts +220 -23
  213. package/src/task-agent/review-result-capture.ts +64 -1
  214. package/src/task-agent/shadow.ts +137 -22
  215. package/src/task-agent/task-hand.ts +18 -2
  216. package/src/task-orchestrator/surfaces/self-implement-pod.ts +1 -0
  217. package/src/tool-runtime/tool-search-runtime.ts +25 -0
  218. package/src/tui.ts +20 -1
  219. package/src/user-config.ts +3 -59
  220. package/src/version/packed-revision.json +1 -1
  221. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f08f6529d09ffae1.js +0 -1
  222. package/apps/pwa/out/_next/static/chunks/app/board/page-f000d54d258f9ef6.js +0 -1
  223. package/apps/pwa/out/_next/static/chunks/app/botlab/page-b12149c51f7d04b1.js +0 -1
  224. package/apps/pwa/out/_next/static/chunks/app/bots/page-22f674e7e4c2c9d5.js +0 -1
  225. package/apps/pwa/out/_next/static/chunks/app/ceo/page-8888733e40cea6d1.js +0 -1
  226. package/apps/pwa/out/_next/static/chunks/app/chat/page-9717ec6964b92276.js +0 -1
  227. package/apps/pwa/out/_next/static/chunks/app/design-check/page-dea4b795741126fd.js +0 -1
  228. package/apps/pwa/out/_next/static/chunks/app/editor/page-35e05d7450461a67.js +0 -1
  229. package/apps/pwa/out/_next/static/chunks/app/inside/page-b2638013c0bf7dfd.js +0 -1
  230. package/apps/pwa/out/_next/static/chunks/app/layout-c44f93a41167536f.js +0 -1
  231. package/apps/pwa/out/_next/static/chunks/app/loops/page-1b810474507f3702.js +0 -1
  232. package/apps/pwa/out/_next/static/chunks/app/observatory/page-6a14333d1b1b3967.js +0 -1
  233. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-8c91a9a66c9ec90a.js +0 -1
  234. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4e634c5b98fd4e93.js +0 -1
  235. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ed3070d637850548.js +0 -1
  236. package/apps/pwa/out/_next/static/chunks/app/reflection/page-128458c8d86fbb5f.js +0 -1
  237. package/apps/pwa/out/_next/static/chunks/app/sessions/page-cf0c2b0183991d09.js +0 -1
  238. package/apps/pwa/out/_next/static/chunks/app/share/page-89cb33bced824e4a.js +0 -1
  239. package/apps/pwa/out/_next/static/chunks/app/tasks/page-814394dcbae789b1.js +0 -1
  240. package/apps/pwa/out/_next/static/chunks/app/term/page-6a87325c87f09dd2.js +0 -1
  241. package/apps/pwa/out/_next/static/chunks/app/vault/page-087ceeb975ef272b.js +0 -1
  242. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-05a4b2c9b91034aa.js +0 -1
  243. /package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → Ev2jivDMTSoEc-5rIXdcy}/_buildManifest.js +0 -0
  244. /package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → Ev2jivDMTSoEc-5rIXdcy}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{27883:(e,t,s)=>{Promise.resolve().then(s.bind(s,44145))},42819:(e,t,s)=>{"use strict";async function n(e){var t,s;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,r="".concat(null!=(s=n.origin)?s:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),o=await a(r);if(404===o.status)return null;if(!o.ok)throw Error("chat-config ".concat(o.status));return await o.json()}async function a(e){var t,s,n,a,o;let i=null!=(t=e.fetchImpl)?t:fetch,l="".concat(null!=(s=e.origin)?s:"","/v1/workflows/chat").concat(e.chatPath),c={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(c.authorization="Bearer ".concat(e.bearer));let d={message:e.message};e.sessionId&&(d.sessionId=e.sessionId);let u=await i(l,{method:"POST",headers:c,body:JSON.stringify(d),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:r(u.body)};let h=await u.json();return{kind:"buffered",response:null!=(a=h.response)?a:"",runId:null!=(o=h.runId)?o:""}}async function*r(e){let t=e.getReader(),s=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let r=(n+=s.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==r;){let e=n.slice(0,r);n=n.slice(r+2);let t=o(e);t&&(yield t),r=n.indexOf("\n\n")}}if(n.trim().length>0){let e=o(n);e&&(yield e)}}finally{t.releaseLock()}}function o(e){let t="message",s=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a),o=e.slice(a+1).replace(/^ /,"");"event"===r?t=o:"data"===r&&s.push(o)}return 0===s.length?null:{event:t,data:s.join("\n")}}s.d(t,{XQ:()=>n,gJ:()=>a})},44145:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(77194),a=s(49954),r=s(98451),o=s(42819);function i(){var e,t;let s=(0,r.useSearchParams)(),i=null!=(e=s.get("workflow"))?e:"",l=null!=(t=s.get("token"))?t:"",[c,d]=(0,a.useState)({kind:"loading"}),[u,h]=(0,a.useState)([]),[f,m]=(0,a.useState)(""),[x,g]=(0,a.useState)(!1),[p]=(0,a.useState)(()=>"hosted-".concat(Date.now().toString(36),"-").concat(Math.random().toString(16).slice(2,6))),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=!1;return 0===i.length?void d({kind:"error",reason:"missing ?workflow= query param"}):((0,o.XQ)(i).then(t=>{e||(t?d({kind:"ready",config:t}):d({kind:"not-found"}))}).catch(t=>{e||d({kind:"error",reason:t instanceof Error?t.message:String(t)})}),()=>{e=!0})},[i]),(0,a.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[u]);let b=async()=>{if("ready"!==c.kind||x)return;let e=f.trim();if(0===e.length)return;let t={id:"u-".concat(Date.now()),role:"user",text:e},s="a-".concat(Date.now());h(e=>[...e,t,{id:s,role:"assistant",text:"",pending:!0}]),m(""),g(!0);try{let t=await (0,o.gJ)({chatPath:c.config.path,message:e,sessionId:"per-session"===c.config.sessionMode?p:void 0,bearer:l.length>0?l:void 0,streaming:c.config.streaming});if("buffered"===t.kind)h(e=>e.map(e=>e.id===s?{...e,text:t.response,pending:!1}:e));else for await(let e of t.frames)if("token"===e.event)h(t=>t.map(t=>t.id===s?{...t,text:t.text+e.data}:t));else if("done"===e.event){let t;try{t=JSON.parse(e.data).response}catch(e){}h(e=>e.map(e=>e.id===s?{...e,text:null!=t?t:e.text,pending:!1}:e))}else"error"===e.event&&h(t=>t.map(t=>t.id===s?{...t,text:t.text+"\n[error: ".concat(e.data,"]"),pending:!1,role:"system"}:t))}catch(t){let e=t instanceof Error?t.message:String(t);h(t=>t.map(t=>t.id===s?{...t,text:"[error: ".concat(e,"]"),pending:!1,role:"system"}:t))}finally{g(!1)}};return"loading"===c.kind?(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}):"not-found"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2",children:"Workflow not found"}),(0,n.jsxs)("p",{className:"text-slate-600",children:["The workflow ",(0,n.jsx)("code",{className:"px-1 bg-slate-100 rounded",children:i})," is not available for hosted chat. The workflow author needs to add",(0,n.jsxs)("code",{className:"px-1 bg-slate-100 rounded ml-1",children:["hostedUi: ","{"," enabled: true ","}"]}),"to the chat trigger node."]})]}):"error"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2 text-red-600",children:"Connection error"}),(0,n.jsx)("p",{className:"text-slate-600",children:c.reason})]}):(0,n.jsxs)("div",{className:"flex flex-col h-screen max-w-2xl mx-auto px-4",children:[(0,n.jsxs)("header",{className:"py-3 border-b",children:[(0,n.jsx)("h1",{className:"text-base font-medium",children:c.config.workflowName}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[c.config.streaming?"streaming":"buffered"," \xb7 ",c.config.sessionMode,c.config.hostedUi.requiresBearer?" \xb7 bearer required":""]})]}),c.config.hostedUi.requiresBearer&&l.length>0?(0,n.jsx)("div",{className:"text-xs px-3 py-2 bg-amber-50 border-b border-amber-200 text-amber-800",children:"⚠ The bearer token is embedded in this URL. Treat this link as a secret — sharing the URL gives anyone full access to the workflow."}):null,(0,n.jsxs)("div",{ref:w,className:"flex-1 overflow-y-auto py-4 space-y-3",children:[0===u.length?(0,n.jsx)("p",{className:"text-sm text-slate-400 italic",children:"Type a message to start the conversation."}):null,u.map(e=>(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsxs)("div",{className:"font-medium text-xs uppercase text-slate-500",children:[e.role,e.pending?" \xb7 typing…":null]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-sans text-slate-800",children:e.text})]},e.id))]}),(0,n.jsxs)("div",{className:"py-3 border-t flex gap-2",children:[(0,n.jsx)("input",{className:"flex-1 px-3 py-2 border rounded text-sm",value:f,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),b())},placeholder:"Message…",disabled:x}),(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:x||0===f.trim().length,className:"px-4 py-2 bg-slate-900 text-white rounded text-sm disabled:opacity-50",children:"Send"})]})]})}function l(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}),children:(0,n.jsx)(i,{})})}},98451:(e,t,s)=>{"use strict";var n=s(13979);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})}},e=>{e.O(0,[2201,6356,7358],()=>e(e.s=27883)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{18189:(e,t,s)=>{Promise.resolve().then(s.bind(s,44145))},42819:(e,t,s)=>{"use strict";async function n(e){var t,s;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,r="".concat(null!=(s=n.origin)?s:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),o=await a(r);if(404===o.status)return null;if(!o.ok)throw Error("chat-config ".concat(o.status));return await o.json()}async function a(e){var t,s,n,a,o;let i=null!=(t=e.fetchImpl)?t:fetch,l="".concat(null!=(s=e.origin)?s:"","/v1/workflows/chat").concat(e.chatPath),c={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(c.authorization="Bearer ".concat(e.bearer));let d={message:e.message};e.sessionId&&(d.sessionId=e.sessionId);let u=await i(l,{method:"POST",headers:c,body:JSON.stringify(d),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:r(u.body)};let h=await u.json();return{kind:"buffered",response:null!=(a=h.response)?a:"",runId:null!=(o=h.runId)?o:""}}async function*r(e){let t=e.getReader(),s=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let r=(n+=s.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==r;){let e=n.slice(0,r);n=n.slice(r+2);let t=o(e);t&&(yield t),r=n.indexOf("\n\n")}}if(n.trim().length>0){let e=o(n);e&&(yield e)}}finally{t.releaseLock()}}function o(e){let t="message",s=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a),o=e.slice(a+1).replace(/^ /,"");"event"===r?t=o:"data"===r&&s.push(o)}return 0===s.length?null:{event:t,data:s.join("\n")}}s.d(t,{XQ:()=>n,gJ:()=>a})},44145:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(77194),a=s(49954),r=s(98451),o=s(42819);function i(){var e,t;let s=(0,r.useSearchParams)(),i=null!=(e=s.get("workflow"))?e:"",l=null!=(t=s.get("token"))?t:"",[c,d]=(0,a.useState)({kind:"loading"}),[u,h]=(0,a.useState)([]),[f,m]=(0,a.useState)(""),[x,g]=(0,a.useState)(!1),[p]=(0,a.useState)(()=>"hosted-".concat(Date.now().toString(36),"-").concat(Math.random().toString(16).slice(2,6))),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=!1;return 0===i.length?void d({kind:"error",reason:"missing ?workflow= query param"}):((0,o.XQ)(i).then(t=>{e||(t?d({kind:"ready",config:t}):d({kind:"not-found"}))}).catch(t=>{e||d({kind:"error",reason:t instanceof Error?t.message:String(t)})}),()=>{e=!0})},[i]),(0,a.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[u]);let b=async()=>{if("ready"!==c.kind||x)return;let e=f.trim();if(0===e.length)return;let t={id:"u-".concat(Date.now()),role:"user",text:e},s="a-".concat(Date.now());h(e=>[...e,t,{id:s,role:"assistant",text:"",pending:!0}]),m(""),g(!0);try{let t=await (0,o.gJ)({chatPath:c.config.path,message:e,sessionId:"per-session"===c.config.sessionMode?p:void 0,bearer:l.length>0?l:void 0,streaming:c.config.streaming});if("buffered"===t.kind)h(e=>e.map(e=>e.id===s?{...e,text:t.response,pending:!1}:e));else for await(let e of t.frames)if("token"===e.event)h(t=>t.map(t=>t.id===s?{...t,text:t.text+e.data}:t));else if("done"===e.event){let t;try{t=JSON.parse(e.data).response}catch(e){}h(e=>e.map(e=>e.id===s?{...e,text:null!=t?t:e.text,pending:!1}:e))}else"error"===e.event&&h(t=>t.map(t=>t.id===s?{...t,text:t.text+"\n[error: ".concat(e.data,"]"),pending:!1,role:"system"}:t))}catch(t){let e=t instanceof Error?t.message:String(t);h(t=>t.map(t=>t.id===s?{...t,text:"[error: ".concat(e,"]"),pending:!1,role:"system"}:t))}finally{g(!1)}};return"loading"===c.kind?(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}):"not-found"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2",children:"Workflow not found"}),(0,n.jsxs)("p",{className:"text-slate-600",children:["The workflow ",(0,n.jsx)("code",{className:"px-1 bg-slate-100 rounded",children:i})," is not available for hosted chat. The workflow author needs to add",(0,n.jsxs)("code",{className:"px-1 bg-slate-100 rounded ml-1",children:["hostedUi: ","{"," enabled: true ","}"]}),"to the chat trigger node."]})]}):"error"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2 text-red-600",children:"Connection error"}),(0,n.jsx)("p",{className:"text-slate-600",children:c.reason})]}):(0,n.jsxs)("div",{className:"flex flex-col h-screen max-w-2xl mx-auto px-4",children:[(0,n.jsxs)("header",{className:"py-3 border-b",children:[(0,n.jsx)("h1",{className:"text-base font-medium",children:c.config.workflowName}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[c.config.streaming?"streaming":"buffered"," \xb7 ",c.config.sessionMode,c.config.hostedUi.requiresBearer?" \xb7 bearer required":""]})]}),c.config.hostedUi.requiresBearer&&l.length>0?(0,n.jsx)("div",{className:"text-xs px-3 py-2 bg-amber-50 border-b border-amber-200 text-amber-800",children:"⚠ The bearer token is embedded in this URL. Treat this link as a secret — sharing the URL gives anyone full access to the workflow."}):null,(0,n.jsxs)("div",{ref:w,className:"flex-1 overflow-y-auto py-4 space-y-3",children:[0===u.length?(0,n.jsx)("p",{className:"text-sm text-slate-400 italic",children:"Type a message to start the conversation."}):null,u.map(e=>(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsxs)("div",{className:"font-medium text-xs uppercase text-slate-500",children:[e.role,e.pending?" \xb7 typing…":null]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-sans text-slate-800",children:e.text})]},e.id))]}),(0,n.jsxs)("div",{className:"py-3 border-t flex gap-2",children:[(0,n.jsx)("input",{className:"flex-1 px-3 py-2 border rounded text-sm",value:f,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),b())},placeholder:"Message…",disabled:x}),(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:x||0===f.trim().length,className:"px-4 py-2 bg-slate-900 text-white rounded text-sm disabled:opacity-50",children:"Send"})]})]})}function l(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}),children:(0,n.jsx)(i,{})})}},98451:(e,t,s)=>{"use strict";var n=s(13979);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})}},e=>{e.O(0,[2201,6356,7358],()=>e(e.s=18189)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7143],{11072:(e,o,r)=>{"use strict";r.r(o),r.d(o,{default:()=>t});var n=r(77194),s=r(49954);function t(){return(0,s.useEffect)(()=>{window.location.replace("/app/editor/?mode=workflow")},[]),(0,n.jsx)("a",{href:"/app/editor/?mode=workflow",children:"편집기로 이동"})}},86353:(e,o,r)=>{Promise.resolve().then(r.bind(r,11072))}},e=>{e.O(0,[2201,6356,7358],()=>e(e.s=86353)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7143],{11072:(e,o,r)=>{"use strict";r.r(o),r.d(o,{default:()=>t});var n=r(77194),s=r(49954);function t(){return(0,s.useEffect)(()=>{window.location.replace("/app/editor/?mode=workflow")},[]),(0,n.jsx)("a",{href:"/app/editor/?mode=workflow",children:"편집기로 이동"})}},37583:(e,o,r)=>{Promise.resolve().then(r.bind(r,11072))}},e=>{e.O(0,[2201,6356,7358],()=>e(e.s=37583)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6364],{5717:(e,t,r)=>{"use strict";r.d(t,{SY:()=>g});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(17522);let c=["absorbed","discarded","routed","checked"],d={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function o(e){var t,r,a;return null===e?{label:"찾을 수 없음",settled:!1,noteRef:null}:{label:Object.hasOwn(d,e.status)?d[e.status]:e.status,settled:c.includes(e.status),noteRef:null!=(a=null==(r=e.outputs)||null==(t=r.find(e=>"note"===e.kind))?void 0:t.ref)?a:null}}let u={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function m(e){var t,r,a,n,s;let l=e.at(-1),i=e.find(e=>"run-terminal"===e.event),c=null==i||null==(t=i.payload)?void 0:t.runStatus;return{stage:l?null!=(a=u[l.event])?a:l.event:null,lastEventAt:null!=(n=null==l?void 0:l.ts)?n:null,done:void 0!==i,outcome:i?"completed"===c||"failed"===c?c:"unknown":null,error:null!=(s=null==i||null==(r=i.payload)?void 0:r.error)?s:null}}let p="elanous.intake.recent",f={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function h(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function x(e){try{var t;let r=null==(t=h(e))?void 0:t.getItem(p);if(!r)return[];let a=JSON.parse(r);return Array.isArray(a)?a:[]}catch(e){return[]}}async function b(e,t,r){let a=(0,i.cE)(r);return"absorb"===t?{absorbIds:(await (0,i.IH)(e,r)).ids,recentPreview:a}:{acceptanceId:(await (0,i.ZJ)(e,r)).acceptanceId,recentPreview:a}}function g(){var e,t;let{state:r,deps:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:d,sessionId:u}=(0,s.Q)(),[g,v]=(0,n.useState)(""),[y,j]=(0,n.useState)(!1),[k,w]=(0,n.useState)(null),[N,I]=(0,n.useState)(null),[S,C]=(0,n.useState)(null),[E,T]=(0,n.useState)(null),[M,D]=(0,n.useState)({}),[R,L]=(0,n.useState)(null),P=(0,n.useRef)(null),[A,O]=(0,n.useState)([]),[z,J]=(0,n.useState)({}),K=(0,n.useRef)(z),U=(0,n.useMemo)(()=>[...new Set(A.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[A]),B=(0,n.useRef)(U);B.current=U;let $=(0,n.useRef)(()=>{}),[q,Y]=(0,n.useState)(null),[_,F]=(0,n.useState)(!1),H=(0,n.useRef)(!1),Q=(0,n.useRef)(0),W=(0,n.useRef)(g);W.current=g;let X=(0,n.useRef)(null),G=(0,n.useRef)(M),V=(0,n.useRef)(A),Z=(0,n.useMemo)(()=>[...new Set([...A.filter(e=>"graph"===e.track).map(e=>e.runId),null==E?void 0:E.runId].filter(e=>!!e))],[A,null==E?void 0:E.runId]);(0,n.useEffect)(()=>{O(x(c))},[c]),(0,n.useEffect)(()=>{V.current=A},[A]),(0,n.useEffect)(()=>{let e=!1,t=new Map,r=async a=>{var n;if(e||!B.current.includes(a)||o(null!=(n=K.current[a])?n:null).settled)return;let s=null;try{s=await (0,i.Gm)(d,a)}catch(e){}e||(K.current={...K.current,[a]:s},J(K.current),B.current.includes(a)&&!o(s).settled?t.set(a,setTimeout(()=>{r(a)},6e4)):t.delete(a))};return $.current=e=>{var a;t.has(e)||o(null!=(a=K.current[e])?a:null).settled||(t.set(e,null),r(e))},B.current.forEach($.current),()=>{for(let r of(e=!0,t.values()))null!==r&&clearTimeout(r);t.clear(),$.current=()=>{}}},[d]),(0,n.useEffect)(()=>{U.forEach($.current)},[U]);let ee=(0,n.useCallback)(e=>{var t,r;O(function(e,t){let r=[e,...x(t)].slice(0,20);try{var a;null==(a=h(t))||a.setItem(p,JSON.stringify(r))}catch(e){}return r}({...e,at:null!=(r=null==c||null==(t=c.now)?void 0:t.call(c))?r:new Date().toISOString()},c))},[c]),et=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),I(null);try{var t;let r=await b(d,"absorb",e);I(null!=(t=r.absorbIds)?t:[]),ee({track:"absorb",preview:r.recentPreview,ids:r.absorbIds})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]),er=(0,n.useCallback)(async()=>{var e;let t=g.trim();if(!t||y||!u)return;let r=null!=(e=P.current)?e:crypto.randomUUID();P.current=r,j(!0),w(null),L(null);try{let e=await (0,i.qI)(d,t,u,r);P.current=null,L(e.cardId),ee({track:"split",preview:(0,i.cE)(t),cardId:e.cardId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}},[y,d,ee,u,g]),ea=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),C(null),T(null);try{var t;let r=await b(d,"graph",e);C(null!=(t=r.acceptanceId)?t:null),X.current=Date.now(),ee({track:"graph",preview:r.recentPreview,acceptanceId:r.acceptanceId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]);(0,n.useEffect)(()=>{let e=++Q.current;if(Y(null),!g.trim())return;let t=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},a=e.trim();if(!a)return()=>{};let n=r.setTimeout(()=>t(a),500);return()=>r.clearTimeout(n)}(g,t=>{(0,i.sg)(d,t).then(t=>{Q.current===e&&Y(t)},()=>{Q.current===e&&Y(null)})});return()=>{++Q.current,t()}},[d,g]);let en=(0,n.useCallback)(async()=>{let e=g.trim();if(!e||H.current||y||(null==q?void 0:q.reason)!=="rule-unknown")return;let t=++Q.current;H.current=!0,F(!0);try{let r=await (0,i.sg)(d,e,{classify:!0});Q.current===t&&W.current.trim()===e&&Y(r)}catch(r){Q.current===t&&W.current.trim()===e&&Y({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{H.current=!1,F(!1)}},[y,d,null==q?void 0:q.reason,g]);(0,n.useEffect)(()=>{if(!S)return;let e=!1,t=async()=>{var t,r;if(e)return;let a=null!=(t=X.current)?t:Date.now();if(!(Date.now()-a>3e5))try{let t=await (0,i.PM)(d,S);if(!e&&(T(t),t.runId&&V.current.some(e=>"graph"===e.track&&e.acceptanceId===S&&e.runId!==t.runId))){let e=V.current.map(e=>"graph"===e.track&&e.acceptanceId===S?{...e,runId:t.runId}:e);V.current=e;try{null==(r=h(c))||r.setItem(p,JSON.stringify(e))}catch(e){}O(e)}}catch(e){}};t();let r=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(r)}},[S,d,c]),(0,n.useEffect)(()=>{G.current=M},[M]),(0,n.useEffect)(()=>{let e;if(0===Z.length)return;let t=!1,r=!1,a=async()=>{if(t||r)return;let n=Z.filter(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done});if(0!==n.length){r=!0;try{let e=await Promise.allSettled(n.map(e=>(0,i.dy)(d,e)));if(t)return;let r={};e.forEach((e,t)=>{"fulfilled"===e.status&&(r[n[t]]=e.value)}),Object.keys(r).length>0&&(G.current={...G.current,...r},D(G.current))}finally{r=!1,!t&&Z.some(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done})&&(e=setTimeout(()=>{a()},3e4))}}};return a(),()=>{t=!0,e&&clearTimeout(e)}},[d,Z]);let es=null!=r?r:{text:g,busy:y,error:k,absorbIds:N,acceptanceId:S,graph:E,runEvents:M,wishCardId:R,recent:A,route:q},el=(0,n.useMemo)(()=>{var e,t;return es.acceptanceId?{acceptanceId:es.acceptanceId,phase:null==(e=es.graph)?void 0:e.phase,runId:null==(t=es.graph)?void 0:t.runId}:null},[es.acceptanceId,es.graph]),ei=0===es.text.trim().length,ec=null!=(e=es.route)?e:null,ed=ec?"absorb"===(t=ec.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,eo=e=>ed===e?"ring-2 ring-ring":void 0;return(0,a.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,a.jsx)("header",{className:"space-y-1",children:(0,a.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,a.jsx)("textarea",{value:es.text,onChange:e=>{P.current=null,v(e.target.value)},rows:6,disabled:es.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),ec&&(0,a.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-route-chip-label",children:f[ec.track]}),"classifier"===ec.decidedBy&&(0,a.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*ec.confidence),"%"]}),(0,a.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,r;let a=e.reason.slice(26);return"분류기 추정: ".concat(null!=(r=null==(t=f[a])?void 0:t.slice(2))?r:a," (확신 낮음)")}return e.reason}(ec)}),"rule-unknown"===ec.reason&&(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",disabled:_||es.busy||ei,onClick:()=>void en(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(l.$,{type:"button",size:"sm",className:eo("absorb"),"aria-pressed":"absorb"===ed,disabled:ei||es.busy,onClick:()=>void et(),"data-testid":"intake-absorb","data-emphasized":"absorb"===ed?"true":"false",children:"흡수"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",className:eo("split"),"aria-pressed":"split"===ed,disabled:ei||es.busy||!u,onClick:()=>void er(),"data-testid":"intake-split","data-emphasized":"split"===ed?"true":"false",children:"작업으로 나누기"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"secondary",className:eo("graph"),"aria-pressed":"graph"===ed,disabled:ei||es.busy,onClick:()=>void ea(),"data-testid":"intake-graph","data-emphasized":"graph"===ed?"true":"false",children:"그래프로 실행"})]}),es.absorbIds&&(0,a.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,a.jsx)("ul",{children:es.absorbIds.map(e=>(0,a.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),el&&(0,a.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-acceptance-id",children:el.acceptanceId}),el.phase&&(0,a.jsx)("p",{"data-testid":"intake-graph-phase",children:el.phase}),el.runId&&(0,a.jsx)("p",{"data-testid":"intake-graph-run",children:el.runId})]}),es.error&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:es.error}),es.wishCardId&&(0,a.jsxs)("p",{className:"text-sm","data-testid":"intake-wish-card-id",children:["소원 카드 ",es.wishCardId]}),es.recent.length>0&&(0,a.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:es.recent.map((e,t)=>{var r;let n=(e=>{var t,r,a;let n=null!=(r=e.runId)?r:e.acceptanceId===es.acceptanceId?null==el?void 0:el.runId:void 0;return n?m(null!=(a=null==(t=es.runEvents)?void 0:t[n])?a:[]):null})(e);return(0,a.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(r=e.ids)?void 0:r.map(e=>{var t,r;let n=Object.hasOwn(z,e)?o(null!=(t=z[e])?t:null):null;return(0,a.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 흡수: ",null!=(r=null==n?void 0:n.label)?r:"조회 중",(null==n?void 0:n.noteRef)?" \xb7 ".concat(n.noteRef):""]},e)})),e.cardId?" \xb7 카드 ".concat(e.cardId):"",e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==n?void 0:n.stage)&&(0,a.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",n.stage]}),(null==n?void 0:n.lastEventAt)&&(0,a.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:n.lastEventAt,children:[" \xb7 마지막 사건: ",n.lastEventAt]}),(null==n?void 0:n.done)&&(0,a.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===n.outcome?"완료":"failed"===n.outcome?"실패":"결과 미상",n.error?" \xb7 ".concat(n.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}},47761:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>A});var a=r(77194),n=r(49954),s=r(98451),l=r(13164),i=r(35083);function c(e){let{id:t,active:r,children:n}=e;return(0,a.jsx)("div",{role:"tabpanel","data-tab-id":t,"data-active":r?"true":"false",className:(0,i.cn)("h-full min-h-0",r?"block":"hidden"),children:n})}var d=r(75102),o=r(19238),u=r(5717),m=r(77600),p=r(61852),f=r(71454),h=r(32865);function x(e){let{tab:t}=e;switch(t.kind){case"chat":return(0,a.jsx)(d.ChatPanel,{sessionId:t.sessionId,tabId:t.id});case"term":return(0,a.jsx)(o.zV,{});case"intake":return(0,a.jsx)(u.SY,{});case"tasks":return(0,a.jsx)(m.B,{});case"control":return(0,a.jsx)(p.U,{});case"settings":return(0,a.jsx)(f.O,{})}}function b(){return(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:(0,a.jsx)("span",{children:"(이 탭은 절약 모드 — 클릭 시 복원)"})})}function g(){let{state:e,addTab:t,activateTab:r}=(0,l.hA)(),s=(0,h.ub)(e),i=(0,n.useRef)(null);if((0,n.useEffect)(()=>{if(i.current&&!(s.length<=1))return function(e,t){var r,a;let n=null!=(r=t.minDistance)?r:100,s=null!=(a=t.minVelocity)?a:.3,l=0,i=0,c=0,d=!1,o=null,u=e=>{var r;null!=(r=t.shouldIgnore)&&r.call(t,e.target)||(l=e.clientX,i=e.clientY,c=e.timeStamp,d=!0,o=e.pointerId)},m=e=>{if(!d||e.pointerId!==o)return;d=!1,o=null;let r=e.clientX-l,a=e.clientY-i,u=Math.max(1,e.timeStamp-c),m=Math.abs(r),p=Math.abs(a);m<n||p>=m||m/u<s||t.onSwipe(r<0?"left":"right")},p=()=>{d=!1,o=null};return e.addEventListener("pointerdown",u),e.addEventListener("pointerup",m),e.addEventListener("pointercancel",p),()=>{e.removeEventListener("pointerdown",u),e.removeEventListener("pointerup",m),e.removeEventListener("pointercancel",p)}}(i.current,{shouldIgnore:e=>{if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.closest(".xterm"))||!!e.isContentEditable},onSwipe:t=>{let a=e.activeId?s.findIndex(t=>t.id===e.activeId):-1;if(a<0)return;let n="left"===t?Math.min(s.length-1,a+1):Math.max(0,a-1);n!==a&&r(s[n].id)}})},[s,e.activeId,r]),0===s.length)return(0,a.jsx)("div",{className:"flex h-full flex-col items-center justify-center gap-4 px-6 text-center",children:(0,a.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-card px-6 py-8 max-w-md",children:[(0,a.jsx)("h2",{className:"text-base font-semibold tracking-tight",children:"워크스페이스 시작"}),(0,a.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["상단 strip 의"," ",(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:"+"})," ","또는 아래 버튼으로 첫 탭을 추가하세요. 비활성 탭은 닫기 전까지 unmount 되지 않아 입력 중 텍스트가 보존됩니다."]}),(0,a.jsxs)("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"chat"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ chat"}),(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"term"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ terminal"})]})]})});let d=new Set(e.frozenIds);return(0,a.jsx)("div",{ref:i,className:"relative h-full min-h-0 touch-pan-y",children:s.map(t=>(0,a.jsx)(c,{id:t.id,active:e.activeId===t.id,children:d.has(t.id)?(0,a.jsx)(b,{}):(0,a.jsx)(x,{tab:t})},t.id))})}function v(){let e=(0,l.hA)();return(0,n.useEffect)(()=>{let t=t=>{if(!(t.metaKey||t.ctrlKey))return;let r=(0,h.ub)(e.state),a=e.state.activeId?r.findIndex(t=>t.id===e.state.activeId):-1;if(!t.shiftKey&&"t"===t.key.toLowerCase()){t.preventDefault(),e.openPicker({kind:"addNewChat"});return}if(!t.shiftKey&&"w"===t.key.toLowerCase()){t.preventDefault(),e.state.activeId&&r.length>0&&e.closeTab(e.state.activeId);return}if(t.shiftKey&&("]"===t.key||"["===t.key)){if(t.preventDefault(),r.length<=1||a<0)return;let n="]"===t.key?(a+1)%r.length:(a-1+r.length)%r.length;e.activateTab(r[n].id);return}if(!t.shiftKey&&/^[1-9]$/.test(t.key)){t.preventDefault();let a=parseInt(t.key,10)-1;if(a>=r.length)return;e.activateTab(r[a].id);return}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e]),null}var y=r(26603),j=r(42499),k=r(45335),w=r(55844),N=r(8801),I=r(19631),S=r(76153),C=r(26054),E=r(2929);function T(e){var t;let{open:r,session:s,onCancel:l,onConfirm:i,busy:c}=e;if((0,n.useEffect)(()=>{if(!r)return;let e=e=>{"Escape"===e.key&&l()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r,l]),!r||!s)return null;let d=null!=(t=s.lastMsgPreview)?t:"(빈 대화)";return(0,a.jsx)("div",{role:"alertdialog","aria-modal":"true",className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",onClick:l,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-[min(420px,calc(100vw-2rem))] rounded-lg border border-border bg-card p-5 shadow-lg",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(w.A,{className:"mt-0.5 h-5 w-5 shrink-0 text-rose-500","aria-hidden":!0}),(0,a.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 지우기"}),(0,a.jsxs)("p",{className:"truncate font-mono text-xs text-muted-foreground",children:['"',d,'"']}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[s.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono uppercase mr-1.5",children:s.origin}),s.msgCount," 메시지"]}),(0,a.jsx)("p",{className:"text-sm",children:"이 대화를 영구히 지웁니다. 복구할 수 없습니다. 다른 기기에서 이 대화를 보고 있다면 더 이상 이어갈 수 없습니다."})]})]}),(0,a.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:l,disabled:c,className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary disabled:opacity-50",children:"취소"}),(0,a.jsx)("button",{type:"button",onClick:i,disabled:c,className:"rounded-md bg-rose-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-600 disabled:opacity-50",children:c?"지우는 중…":"지우기"})]})]})})}var M=r(45337);let D={cli:"cli",pwa:"pwa",tg:"tg",dc:"dc"};function R(e){let{open:t,onClose:r,onPick:s,attachedSessions:l}=e,{client:c}=(0,N.Q)(),d=(0,S.hG)(c),o=(0,n.useMemo)(()=>new C.jU(c),[c]),u=(0,E.h)(),[m,p]=(0,n.useState)(""),[f,h]=(0,n.useState)(0),[x,b]=(0,n.useState)(null),[g,v]=(0,n.useState)(!1),[R,L]=(0,n.useState)(!1),[P,A]=(0,n.useState)(null),O=(0,n.useRef)(null),z=(0,n.useRef)(null);(0,n.useEffect)(()=>{t&&(p(""),h(0),A(null),d.forceRefresh())},[t,d]),(0,n.useEffect)(()=>{A(null)},[m]);let J=(0,n.useMemo)(()=>{if(!m.trim())return[...u];let e=m.trim().toLowerCase();return u.filter(t=>!!(t.id.toLowerCase().startsWith(e)||t.lastMsgPreview&&t.lastMsgPreview.toLowerCase().includes(e))||!!t.origin&&e==="[".concat(t.origin,"]")||!!t.origin&&e===t.origin)},[u,m]);if((0,n.useEffect)(()=>{f>=J.length&&h(Math.max(0,J.length-1))},[J.length,f]),(0,n.useEffect)(()=>{var e;if(!t)return;null==(e=O.current)||e.focus();let a=e=>{if("Escape"===e.key){e.preventDefault(),r();return}if((e.metaKey||e.ctrlKey)&&"n"===e.key.toLowerCase()){e.preventDefault(),K();return}if((e.metaKey||e.ctrlKey)&&"f"===e.key.toLowerCase()){var t;e.preventDefault(),null==(t=O.current)||t.focus();return}if("ArrowDown"===e.key)e.preventDefault(),h(e=>Math.min(J.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),h(e=>Math.max(0,e-1));else if("Enter"===e.key){let t=J[f];if(!t){m.trim().length>=4&&(e.preventDefault(),B());return}e.preventDefault(),U(t)}else if("Delete"===e.key||"Backspace"===e.key){if(e.target instanceof HTMLInputElement)return;let t=J[f];t&&(e.preventDefault(),b(t))}};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[t,J,f,r,m,R]),!t)return null;let K=()=>{s({kind:"new",sessionId:(0,I.f6)()})},U=e=>{let t=l.get(e.id);if(t)return void s({kind:"jumpToTab",tabId:t.tabId});s({kind:"existing",sessionId:e.id})},B=async()=>{let e=m.trim().toLowerCase();if(!(e.length<4)&&!R){L(!0);try{var t;let r=await o.list(!0),a=(0,C.nj)(null!=(t=r.sessions)?t:[],e);if("one"===a.kind){let e=l.get(a.id);e?s({kind:"jumpToTab",tabId:e.tabId}):s({kind:"existing",sessionId:a.id})}else"none"===a.kind?A("'".concat(e,"'로 시작하는 대화가 없습니다.")):A("".concat(a.count,"개의 대화가 일치합니다. ID를 더 길게 입력하세요."))}catch(e){A("대화를 찾지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{L(!1)}}},$=async()=>{if(x){v(!0);try{await d.forget(x.id),b(null)}finally{v(!1)}}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"대화 선택",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"flex max-h-[min(640px,90vh)] w-[min(640px,calc(100vw-2rem))] flex-col rounded-lg border border-border bg-card shadow-lg",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 선택"}),(0,a.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,a.jsx)(y.A,{className:"h-4 w-4"})})]}),(0,a.jsx)("div",{className:"shrink-0 px-4 py-3",children:(0,a.jsxs)("button",{type:"button",onClick:K,className:"flex w-full items-center gap-3 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2.5 text-left hover:bg-primary/15",children:[(0,a.jsx)(j.A,{className:"h-5 w-5 text-primary"}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium",children:"새 대화 시작"}),(0,a.jsx)("div",{className:"text-xs text-muted-foreground",children:"비어있는 새 채팅을 엽니다 (⌘N)"})]})]})}),(0,a.jsx)("div",{className:"shrink-0 border-y border-border bg-muted/30 px-4 py-2",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,a.jsx)("input",{ref:O,value:m,onChange:e=>p(e.target.value),placeholder:"대화 검색 — 내용 \xb7 ID \xb7 [pwa]/[cli]/[tg]/[dc]",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60"}),m&&(0,a.jsx)("button",{type:"button","aria-label":"clear search",onClick:()=>p(""),className:"rounded p-0.5 text-muted-foreground hover:bg-background",children:(0,a.jsx)(y.A,{className:"h-3 w-3"})})]})}),(0,a.jsx)("div",{ref:z,className:"min-h-0 flex-1 overflow-y-auto",children:0===J.length?(0,a.jsxs)("div",{className:"px-4 py-12 text-center",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:0!==u.length||m.trim()?"검색과 일치하는 대화가 없습니다.":'아직 대화가 없습니다. 위의 "새 대화 시작"으로 첫 대화를 시작하세요.'}),m.trim().length>=4&&(0,a.jsx)("button",{type:"button",disabled:R,onClick:()=>void B(),className:"mt-3 rounded-md border border-violet-500/40 bg-violet-500/10 px-3 py-1.5 text-xs text-violet-300 hover:bg-violet-500/15 disabled:opacity-50",children:R?"찾는 중…":"ID '".concat(m.trim(),"'로 대화 이어가기 (Enter)")}),P&&(0,a.jsx)("p",{className:"mt-2 text-xs text-amber-400",children:P}),0===u.length&&!m.trim()&&(0,a.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"다른 기기(CLI / Telegram / Discord)에서 대화를 시작하면 여기에 자동으로 나타납니다."})]}):(0,a.jsx)("ul",{className:"divide-y divide-border",children:J.map((e,t)=>{var r;let n=l.get(e.id),s=t===f;return(0,a.jsx)("li",{children:(0,a.jsxs)("div",{className:(0,i.cn)("group flex items-center gap-3 px-4 py-2.5 transition-colors",s?"bg-primary/10 ring-1 ring-inset ring-primary/30":"hover:bg-secondary/50"),onMouseEnter:()=>h(t),children:[(0,a.jsxs)("button",{type:"button",onClick:()=>U(e),className:"flex min-w-0 flex-1 flex-col items-start text-left",children:[(0,a.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,a.jsx)("span",{className:"truncate text-sm font-medium",children:null!=(r=e.lastMsgPreview)?r:(0,a.jsx)("span",{className:"text-muted-foreground italic",children:"(빈 대화)"})}),n&&(0,a.jsxs)("span",{className:"ml-auto shrink-0 rounded-full bg-primary/15 px-2 py-0.5 text-[10px] font-medium text-primary",children:["✓ ",n.label,"에서 열림"]})]}),(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono",children:D[e.origin]}),(0,a.jsx)("span",{children:function(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return"";let r=Date.now()-t,a=Math.floor(r/6e4);if(a<1)return"방금 전";if(a<60)return"".concat(a,"분 전");let n=Math.floor(a/60);if(n<24)return"".concat(n,"시간 전");let s=Math.floor(n/24);if(s<7)return"".concat(s,"일 전");return new Date(t).toLocaleDateString()}catch(e){return""}}(e.lastTurnAt)}),(0,a.jsxs)("span",{children:["\xb7 ",e.msgCount," 메시지"]}),(0,a.jsx)(M.S,{sessionId:e.id,source:"picker",variant:"subtle",showCopyIcon:!1})]})]}),(0,a.jsx)("button",{type:"button","aria-label":"대화 ".concat(e.id," 지우기"),onClick:t=>{t.stopPropagation(),b(e)},className:(0,i.cn)("shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-rose-500/10 hover:text-rose-500",s?"opacity-100":"opacity-0 group-hover:opacity-100"),children:(0,a.jsx)(w.A,{className:"h-4 w-4"})})]})},e.id)})})}),(0,a.jsxs)("div",{className:"shrink-0 border-t border-border bg-muted/30 px-4 py-2 text-[10px] text-muted-foreground",children:[(0,a.jsx)("span",{className:"mr-3",children:"↑↓ 이동"}),(0,a.jsx)("span",{className:"mr-3",children:"Enter 선택"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘N 새 대화"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘F 검색"}),(0,a.jsx)("span",{children:"Del 지우기"})]})]})}),(0,a.jsx)(T,{open:null!==x,session:x,busy:g,onCancel:()=>b(null),onConfirm:$})]})}let L=new Set(["chat","term","intake","tasks","control","settings"]);function P(){var e;let t=(0,l.hA)(),r=(0,s.useRouter)(),i=(0,s.useSearchParams)(),c=null!=(e=null==i?void 0:i.get("intent"))?e:null,d=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c&&d.current!==c){if(!L.has(c))return void r.replace("/workspace");if(d.current=c,"chat"===c){let e=(0,h.ub)(t.state).find(e=>"chat"===e.kind);e?t.activateTab(e.id):t.openPicker({kind:"addNewChat"})}else t.activateOrAdd(c);r.replace("/workspace")}},[c,t,r]);let o=(0,n.useMemo)(()=>{let e=new Map,r=0;for(let a of t.state.order){let n=t.state.tabs.find(e=>e.id===a);n&&"chat"===n.kind&&(r+=1,e.set(n.sessionId,{tabId:n.id,label:"chat#".concat(r)}))}return e},[t.state.order,t.state.tabs]);return(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsx)(v,{}),(0,a.jsx)("div",{className:"flex-1 min-h-0",children:(0,a.jsx)(g,{})}),(0,a.jsx)(R,{open:null!==t.pickerMode,onClose:t.closePicker,onPick:e=>{let r=t.pickerMode;r&&("jumpToTab"===e.kind?t.activateTab(e.tabId):"addNewChat"===r.kind?t.addTab({kind:"chat",sessionId:e.sessionId}):"attachToTab"===r.kind&&(t.updateChatTab(r.tabId,{sessionId:e.sessionId}),t.activateTab(r.tabId)),t.closePicker())},attachedSessions:o})]})}function A(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"h-full"}),children:(0,a.jsx)(P,{})})}},61852:(e,t,r)=>{"use strict";r.d(t,{U:()=>p});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(32576);function c(e){let{items:t}=e;return 0===t.length?(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,a.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,s,l,i;let c=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(s=e.scope)?void 0:s.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,a.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,a.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(l=e.source)?l:"unknown"," \xb7 ",c]}),(0,a.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class o{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,a]=e;a&&t.set(r,a)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(46479),m=r(35857);function p(){var e,t,r,p;let{client:f}=(0,s.Q)(),h=(0,n.useMemo)(()=>new o(f),[f]),[x,b]=(0,n.useState)({items:[]}),[g,v]=(0,n.useState)(!1),[y,j]=(0,n.useState)(""),[k,w]=(0,n.useState)(""),[N,I]=(0,n.useState)(""),[S,C]=(0,n.useState)(""),[E,T]=(0,n.useState)(""),[M,D]=(0,n.useState)(""),[R,L]=(0,n.useState)("normal"),[P,A]=(0,n.useState)("operator"),[O,z]=(0,n.useState)(""),[J,K]=(0,n.useState)(""),[U,B]=(0,n.useState)(""),[$,q]=(0,n.useState)(""),[Y,_]=(0,n.useState)(!1),F=(0,n.useCallback)(async()=>{(0,m.cY)("webterm.control.list.refresh",{kind:y,surface:k,minUrgency:N,sessionId:S,limit:E}),v(!0);try{let e=await h.list({kind:y||void 0,surface:k||void 0,minUrgency:N||void 0,sessionId:S||void 0,limit:E||void 0});b(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},[h,y,k,N,S,E]);(0,n.useEffect)(()=>{F()},[F]);let H=async e=>{if(e.preventDefault(),!M.trim())return void u.oR.error("kind required");let t={};if($.trim())try{t=JSON.parse($)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:M.trim(),urgency:R,source:P.trim()||"operator",mayPreempt:Y,payload:t,scope:{...O?{surface:O}:{},...J?{channel:J}:{},...U?{sessionId:U}:{}}};(0,m.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{v(!0),await h.emit(r),u.oR.success("signal emitted"),q(""),await F()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},Q=null!=(e=x.countsByKind)?e:{};return(0,a.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=x.total)?t:0]}),(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=x.latest)?r:"-"]}),Object.entries(Q).map(e=>{let[t,r]=e;return(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),F()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)(i.p,{value:y,onChange:e=>j(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:k,onChange:e=>w(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,a.jsxs)("select",{value:N,onChange:e=>I(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,a.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsx)(i.p,{value:S,onChange:e=>C(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:E,onChange:e=>T(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Filter"})]}),(0,a.jsxs)("form",{onSubmit:H,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(i.p,{value:M,onChange:e=>D(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,a.jsx)("select",{value:R,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&L(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))}),(0,a.jsx)(i.p,{value:P,onChange:e=>A(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:O,onChange:e=>z(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:J,onChange:e=>K(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:U,onChange:e=>B(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:Y,onChange:e=>_(e.target.checked)}),"mayPreempt"]})]}),(0,a.jsx)("textarea",{value:$,onChange:e=>q(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Emit"})]}),(0,a.jsx)(c,{items:null!=(p=x.items)?p:[]})]})}},94660:(e,t,r)=>{Promise.resolve().then(r.bind(r,47761))}},e=>{e.O(0,[8085,2566,5194,4862,6479,9917,3525,1314,112,7837,589,9638,5785,5305,7807,9842,4490,3797,4599,2066,1454,5102,9238,7600,2201,6356,7358],()=>e(e.s=94660)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6364],{5717:(e,t,r)=>{"use strict";r.d(t,{SY:()=>g});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(17522);let c=["absorbed","discarded","routed","checked"],d={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function o(e){var t,r,a;return null===e?{label:"찾을 수 없음",settled:!1,noteRef:null}:{label:Object.hasOwn(d,e.status)?d[e.status]:e.status,settled:c.includes(e.status),noteRef:null!=(a=null==(r=e.outputs)||null==(t=r.find(e=>"note"===e.kind))?void 0:t.ref)?a:null}}let u={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function m(e){var t,r,a,n,s;let l=e.at(-1),i=e.find(e=>"run-terminal"===e.event),c=null==i||null==(t=i.payload)?void 0:t.runStatus;return{stage:l?null!=(a=u[l.event])?a:l.event:null,lastEventAt:null!=(n=null==l?void 0:l.ts)?n:null,done:void 0!==i,outcome:i?"completed"===c||"failed"===c?c:"unknown":null,error:null!=(s=null==i||null==(r=i.payload)?void 0:r.error)?s:null}}let p="elanous.intake.recent",f={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function h(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function x(e){try{var t;let r=null==(t=h(e))?void 0:t.getItem(p);if(!r)return[];let a=JSON.parse(r);return Array.isArray(a)?a:[]}catch(e){return[]}}async function b(e,t,r){let a=(0,i.cE)(r);return"absorb"===t?{absorbIds:(await (0,i.IH)(e,r)).ids,recentPreview:a}:{acceptanceId:(await (0,i.ZJ)(e,r)).acceptanceId,recentPreview:a}}function g(){var e,t;let{state:r,deps:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:d,sessionId:u}=(0,s.Q)(),[g,v]=(0,n.useState)(""),[y,j]=(0,n.useState)(!1),[k,w]=(0,n.useState)(null),[N,I]=(0,n.useState)(null),[S,C]=(0,n.useState)(null),[E,T]=(0,n.useState)(null),[M,D]=(0,n.useState)({}),[R,L]=(0,n.useState)(null),P=(0,n.useRef)(null),[A,O]=(0,n.useState)([]),[z,J]=(0,n.useState)({}),K=(0,n.useRef)(z),U=(0,n.useMemo)(()=>[...new Set(A.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[A]),B=(0,n.useRef)(U);B.current=U;let $=(0,n.useRef)(()=>{}),[q,Y]=(0,n.useState)(null),[_,F]=(0,n.useState)(!1),H=(0,n.useRef)(!1),Q=(0,n.useRef)(0),W=(0,n.useRef)(g);W.current=g;let X=(0,n.useRef)(null),G=(0,n.useRef)(M),V=(0,n.useRef)(A),Z=(0,n.useMemo)(()=>[...new Set([...A.filter(e=>"graph"===e.track).map(e=>e.runId),null==E?void 0:E.runId].filter(e=>!!e))],[A,null==E?void 0:E.runId]);(0,n.useEffect)(()=>{O(x(c))},[c]),(0,n.useEffect)(()=>{V.current=A},[A]),(0,n.useEffect)(()=>{let e=!1,t=new Map,r=async a=>{var n;if(e||!B.current.includes(a)||o(null!=(n=K.current[a])?n:null).settled)return;let s=null;try{s=await (0,i.Gm)(d,a)}catch(e){}e||(K.current={...K.current,[a]:s},J(K.current),B.current.includes(a)&&!o(s).settled?t.set(a,setTimeout(()=>{r(a)},6e4)):t.delete(a))};return $.current=e=>{var a;t.has(e)||o(null!=(a=K.current[e])?a:null).settled||(t.set(e,null),r(e))},B.current.forEach($.current),()=>{for(let r of(e=!0,t.values()))null!==r&&clearTimeout(r);t.clear(),$.current=()=>{}}},[d]),(0,n.useEffect)(()=>{U.forEach($.current)},[U]);let ee=(0,n.useCallback)(e=>{var t,r;O(function(e,t){let r=[e,...x(t)].slice(0,20);try{var a;null==(a=h(t))||a.setItem(p,JSON.stringify(r))}catch(e){}return r}({...e,at:null!=(r=null==c||null==(t=c.now)?void 0:t.call(c))?r:new Date().toISOString()},c))},[c]),et=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),I(null);try{var t;let r=await b(d,"absorb",e);I(null!=(t=r.absorbIds)?t:[]),ee({track:"absorb",preview:r.recentPreview,ids:r.absorbIds})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]),er=(0,n.useCallback)(async()=>{var e;let t=g.trim();if(!t||y||!u)return;let r=null!=(e=P.current)?e:crypto.randomUUID();P.current=r,j(!0),w(null),L(null);try{let e=await (0,i.qI)(d,t,u,r);P.current=null,L(e.cardId),ee({track:"split",preview:(0,i.cE)(t),cardId:e.cardId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}},[y,d,ee,u,g]),ea=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),C(null),T(null);try{var t;let r=await b(d,"graph",e);C(null!=(t=r.acceptanceId)?t:null),X.current=Date.now(),ee({track:"graph",preview:r.recentPreview,acceptanceId:r.acceptanceId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]);(0,n.useEffect)(()=>{let e=++Q.current;if(Y(null),!g.trim())return;let t=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},a=e.trim();if(!a)return()=>{};let n=r.setTimeout(()=>t(a),500);return()=>r.clearTimeout(n)}(g,t=>{(0,i.sg)(d,t).then(t=>{Q.current===e&&Y(t)},()=>{Q.current===e&&Y(null)})});return()=>{++Q.current,t()}},[d,g]);let en=(0,n.useCallback)(async()=>{let e=g.trim();if(!e||H.current||y||(null==q?void 0:q.reason)!=="rule-unknown")return;let t=++Q.current;H.current=!0,F(!0);try{let r=await (0,i.sg)(d,e,{classify:!0});Q.current===t&&W.current.trim()===e&&Y(r)}catch(r){Q.current===t&&W.current.trim()===e&&Y({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{H.current=!1,F(!1)}},[y,d,null==q?void 0:q.reason,g]);(0,n.useEffect)(()=>{if(!S)return;let e=!1,t=async()=>{var t,r;if(e)return;let a=null!=(t=X.current)?t:Date.now();if(!(Date.now()-a>3e5))try{let t=await (0,i.PM)(d,S);if(!e&&(T(t),t.runId&&V.current.some(e=>"graph"===e.track&&e.acceptanceId===S&&e.runId!==t.runId))){let e=V.current.map(e=>"graph"===e.track&&e.acceptanceId===S?{...e,runId:t.runId}:e);V.current=e;try{null==(r=h(c))||r.setItem(p,JSON.stringify(e))}catch(e){}O(e)}}catch(e){}};t();let r=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(r)}},[S,d,c]),(0,n.useEffect)(()=>{G.current=M},[M]),(0,n.useEffect)(()=>{let e;if(0===Z.length)return;let t=!1,r=!1,a=async()=>{if(t||r)return;let n=Z.filter(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done});if(0!==n.length){r=!0;try{let e=await Promise.allSettled(n.map(e=>(0,i.dy)(d,e)));if(t)return;let r={};e.forEach((e,t)=>{"fulfilled"===e.status&&(r[n[t]]=e.value)}),Object.keys(r).length>0&&(G.current={...G.current,...r},D(G.current))}finally{r=!1,!t&&Z.some(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done})&&(e=setTimeout(()=>{a()},3e4))}}};return a(),()=>{t=!0,e&&clearTimeout(e)}},[d,Z]);let es=null!=r?r:{text:g,busy:y,error:k,absorbIds:N,acceptanceId:S,graph:E,runEvents:M,wishCardId:R,recent:A,route:q},el=(0,n.useMemo)(()=>{var e,t;return es.acceptanceId?{acceptanceId:es.acceptanceId,phase:null==(e=es.graph)?void 0:e.phase,runId:null==(t=es.graph)?void 0:t.runId}:null},[es.acceptanceId,es.graph]),ei=0===es.text.trim().length,ec=null!=(e=es.route)?e:null,ed=ec?"absorb"===(t=ec.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,eo=e=>ed===e?"ring-2 ring-ring":void 0;return(0,a.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,a.jsx)("header",{className:"space-y-1",children:(0,a.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,a.jsx)("textarea",{value:es.text,onChange:e=>{P.current=null,v(e.target.value)},rows:6,disabled:es.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),ec&&(0,a.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-route-chip-label",children:f[ec.track]}),"classifier"===ec.decidedBy&&(0,a.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*ec.confidence),"%"]}),(0,a.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,r;let a=e.reason.slice(26);return"분류기 추정: ".concat(null!=(r=null==(t=f[a])?void 0:t.slice(2))?r:a," (확신 낮음)")}return e.reason}(ec)}),"rule-unknown"===ec.reason&&(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",disabled:_||es.busy||ei,onClick:()=>void en(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(l.$,{type:"button",size:"sm",className:eo("absorb"),"aria-pressed":"absorb"===ed,disabled:ei||es.busy,onClick:()=>void et(),"data-testid":"intake-absorb","data-emphasized":"absorb"===ed?"true":"false",children:"흡수"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",className:eo("split"),"aria-pressed":"split"===ed,disabled:ei||es.busy||!u,onClick:()=>void er(),"data-testid":"intake-split","data-emphasized":"split"===ed?"true":"false",children:"작업으로 나누기"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"secondary",className:eo("graph"),"aria-pressed":"graph"===ed,disabled:ei||es.busy,onClick:()=>void ea(),"data-testid":"intake-graph","data-emphasized":"graph"===ed?"true":"false",children:"그래프로 실행"})]}),es.absorbIds&&(0,a.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,a.jsx)("ul",{children:es.absorbIds.map(e=>(0,a.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),el&&(0,a.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-acceptance-id",children:el.acceptanceId}),el.phase&&(0,a.jsx)("p",{"data-testid":"intake-graph-phase",children:el.phase}),el.runId&&(0,a.jsx)("p",{"data-testid":"intake-graph-run",children:el.runId})]}),es.error&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:es.error}),es.wishCardId&&(0,a.jsxs)("p",{className:"text-sm","data-testid":"intake-wish-card-id",children:["소원 카드 ",es.wishCardId]}),es.recent.length>0&&(0,a.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:es.recent.map((e,t)=>{var r;let n=(e=>{var t,r,a;let n=null!=(r=e.runId)?r:e.acceptanceId===es.acceptanceId?null==el?void 0:el.runId:void 0;return n?m(null!=(a=null==(t=es.runEvents)?void 0:t[n])?a:[]):null})(e);return(0,a.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(r=e.ids)?void 0:r.map(e=>{var t,r;let n=Object.hasOwn(z,e)?o(null!=(t=z[e])?t:null):null;return(0,a.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 흡수: ",null!=(r=null==n?void 0:n.label)?r:"조회 중",(null==n?void 0:n.noteRef)?" \xb7 ".concat(n.noteRef):""]},e)})),e.cardId?" \xb7 카드 ".concat(e.cardId):"",e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==n?void 0:n.stage)&&(0,a.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",n.stage]}),(null==n?void 0:n.lastEventAt)&&(0,a.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:n.lastEventAt,children:[" \xb7 마지막 사건: ",n.lastEventAt]}),(null==n?void 0:n.done)&&(0,a.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===n.outcome?"완료":"failed"===n.outcome?"실패":"결과 미상",n.error?" \xb7 ".concat(n.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}},47761:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>A});var a=r(77194),n=r(49954),s=r(98451),l=r(13164),i=r(35083);function c(e){let{id:t,active:r,children:n}=e;return(0,a.jsx)("div",{role:"tabpanel","data-tab-id":t,"data-active":r?"true":"false",className:(0,i.cn)("h-full min-h-0",r?"block":"hidden"),children:n})}var d=r(75102),o=r(19238),u=r(5717),m=r(77600),p=r(61852),f=r(71454),h=r(32865);function x(e){let{tab:t}=e;switch(t.kind){case"chat":return(0,a.jsx)(d.ChatPanel,{sessionId:t.sessionId,tabId:t.id});case"term":return(0,a.jsx)(o.zV,{});case"intake":return(0,a.jsx)(u.SY,{});case"tasks":return(0,a.jsx)(m.B,{});case"control":return(0,a.jsx)(p.U,{});case"settings":return(0,a.jsx)(f.O,{})}}function b(){return(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:(0,a.jsx)("span",{children:"(이 탭은 절약 모드 — 클릭 시 복원)"})})}function g(){let{state:e,addTab:t,activateTab:r}=(0,l.hA)(),s=(0,h.ub)(e),i=(0,n.useRef)(null);if((0,n.useEffect)(()=>{if(i.current&&!(s.length<=1))return function(e,t){var r,a;let n=null!=(r=t.minDistance)?r:100,s=null!=(a=t.minVelocity)?a:.3,l=0,i=0,c=0,d=!1,o=null,u=e=>{var r;null!=(r=t.shouldIgnore)&&r.call(t,e.target)||(l=e.clientX,i=e.clientY,c=e.timeStamp,d=!0,o=e.pointerId)},m=e=>{if(!d||e.pointerId!==o)return;d=!1,o=null;let r=e.clientX-l,a=e.clientY-i,u=Math.max(1,e.timeStamp-c),m=Math.abs(r),p=Math.abs(a);m<n||p>=m||m/u<s||t.onSwipe(r<0?"left":"right")},p=()=>{d=!1,o=null};return e.addEventListener("pointerdown",u),e.addEventListener("pointerup",m),e.addEventListener("pointercancel",p),()=>{e.removeEventListener("pointerdown",u),e.removeEventListener("pointerup",m),e.removeEventListener("pointercancel",p)}}(i.current,{shouldIgnore:e=>{if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.closest(".xterm"))||!!e.isContentEditable},onSwipe:t=>{let a=e.activeId?s.findIndex(t=>t.id===e.activeId):-1;if(a<0)return;let n="left"===t?Math.min(s.length-1,a+1):Math.max(0,a-1);n!==a&&r(s[n].id)}})},[s,e.activeId,r]),0===s.length)return(0,a.jsx)("div",{className:"flex h-full flex-col items-center justify-center gap-4 px-6 text-center",children:(0,a.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-card px-6 py-8 max-w-md",children:[(0,a.jsx)("h2",{className:"text-base font-semibold tracking-tight",children:"워크스페이스 시작"}),(0,a.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["상단 strip 의"," ",(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:"+"})," ","또는 아래 버튼으로 첫 탭을 추가하세요. 비활성 탭은 닫기 전까지 unmount 되지 않아 입력 중 텍스트가 보존됩니다."]}),(0,a.jsxs)("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"chat"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ chat"}),(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"term"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ terminal"})]})]})});let d=new Set(e.frozenIds);return(0,a.jsx)("div",{ref:i,className:"relative h-full min-h-0 touch-pan-y",children:s.map(t=>(0,a.jsx)(c,{id:t.id,active:e.activeId===t.id,children:d.has(t.id)?(0,a.jsx)(b,{}):(0,a.jsx)(x,{tab:t})},t.id))})}function v(){let e=(0,l.hA)();return(0,n.useEffect)(()=>{let t=t=>{if(!(t.metaKey||t.ctrlKey))return;let r=(0,h.ub)(e.state),a=e.state.activeId?r.findIndex(t=>t.id===e.state.activeId):-1;if(!t.shiftKey&&"t"===t.key.toLowerCase()){t.preventDefault(),e.openPicker({kind:"addNewChat"});return}if(!t.shiftKey&&"w"===t.key.toLowerCase()){t.preventDefault(),e.state.activeId&&r.length>0&&e.closeTab(e.state.activeId);return}if(t.shiftKey&&("]"===t.key||"["===t.key)){if(t.preventDefault(),r.length<=1||a<0)return;let n="]"===t.key?(a+1)%r.length:(a-1+r.length)%r.length;e.activateTab(r[n].id);return}if(!t.shiftKey&&/^[1-9]$/.test(t.key)){t.preventDefault();let a=parseInt(t.key,10)-1;if(a>=r.length)return;e.activateTab(r[a].id);return}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e]),null}var y=r(26603),j=r(42499),k=r(45335),w=r(55844),N=r(8801),I=r(19631),S=r(76153),C=r(26054),E=r(2929);function T(e){var t;let{open:r,session:s,onCancel:l,onConfirm:i,busy:c}=e;if((0,n.useEffect)(()=>{if(!r)return;let e=e=>{"Escape"===e.key&&l()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r,l]),!r||!s)return null;let d=null!=(t=s.lastMsgPreview)?t:"(빈 대화)";return(0,a.jsx)("div",{role:"alertdialog","aria-modal":"true",className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",onClick:l,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-[min(420px,calc(100vw-2rem))] rounded-lg border border-border bg-card p-5 shadow-lg",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(w.A,{className:"mt-0.5 h-5 w-5 shrink-0 text-rose-500","aria-hidden":!0}),(0,a.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 지우기"}),(0,a.jsxs)("p",{className:"truncate font-mono text-xs text-muted-foreground",children:['"',d,'"']}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[s.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono uppercase mr-1.5",children:s.origin}),s.msgCount," 메시지"]}),(0,a.jsx)("p",{className:"text-sm",children:"이 대화를 영구히 지웁니다. 복구할 수 없습니다. 다른 기기에서 이 대화를 보고 있다면 더 이상 이어갈 수 없습니다."})]})]}),(0,a.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:l,disabled:c,className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary disabled:opacity-50",children:"취소"}),(0,a.jsx)("button",{type:"button",onClick:i,disabled:c,className:"rounded-md bg-rose-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-600 disabled:opacity-50",children:c?"지우는 중…":"지우기"})]})]})})}var M=r(45337);let D={cli:"cli",pwa:"pwa",tg:"tg",dc:"dc"};function R(e){let{open:t,onClose:r,onPick:s,attachedSessions:l}=e,{client:c}=(0,N.Q)(),d=(0,S.hG)(c),o=(0,n.useMemo)(()=>new C.jU(c),[c]),u=(0,E.h)(),[m,p]=(0,n.useState)(""),[f,h]=(0,n.useState)(0),[x,b]=(0,n.useState)(null),[g,v]=(0,n.useState)(!1),[R,L]=(0,n.useState)(!1),[P,A]=(0,n.useState)(null),O=(0,n.useRef)(null),z=(0,n.useRef)(null);(0,n.useEffect)(()=>{t&&(p(""),h(0),A(null),d.forceRefresh())},[t,d]),(0,n.useEffect)(()=>{A(null)},[m]);let J=(0,n.useMemo)(()=>{if(!m.trim())return[...u];let e=m.trim().toLowerCase();return u.filter(t=>!!(t.id.toLowerCase().startsWith(e)||t.lastMsgPreview&&t.lastMsgPreview.toLowerCase().includes(e))||!!t.origin&&e==="[".concat(t.origin,"]")||!!t.origin&&e===t.origin)},[u,m]);if((0,n.useEffect)(()=>{f>=J.length&&h(Math.max(0,J.length-1))},[J.length,f]),(0,n.useEffect)(()=>{var e;if(!t)return;null==(e=O.current)||e.focus();let a=e=>{if("Escape"===e.key){e.preventDefault(),r();return}if((e.metaKey||e.ctrlKey)&&"n"===e.key.toLowerCase()){e.preventDefault(),K();return}if((e.metaKey||e.ctrlKey)&&"f"===e.key.toLowerCase()){var t;e.preventDefault(),null==(t=O.current)||t.focus();return}if("ArrowDown"===e.key)e.preventDefault(),h(e=>Math.min(J.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),h(e=>Math.max(0,e-1));else if("Enter"===e.key){let t=J[f];if(!t){m.trim().length>=4&&(e.preventDefault(),B());return}e.preventDefault(),U(t)}else if("Delete"===e.key||"Backspace"===e.key){if(e.target instanceof HTMLInputElement)return;let t=J[f];t&&(e.preventDefault(),b(t))}};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[t,J,f,r,m,R]),!t)return null;let K=()=>{s({kind:"new",sessionId:(0,I.f6)()})},U=e=>{let t=l.get(e.id);if(t)return void s({kind:"jumpToTab",tabId:t.tabId});s({kind:"existing",sessionId:e.id})},B=async()=>{let e=m.trim().toLowerCase();if(!(e.length<4)&&!R){L(!0);try{var t;let r=await o.list(!0),a=(0,C.nj)(null!=(t=r.sessions)?t:[],e);if("one"===a.kind){let e=l.get(a.id);e?s({kind:"jumpToTab",tabId:e.tabId}):s({kind:"existing",sessionId:a.id})}else"none"===a.kind?A("'".concat(e,"'로 시작하는 대화가 없습니다.")):A("".concat(a.count,"개의 대화가 일치합니다. ID를 더 길게 입력하세요."))}catch(e){A("대화를 찾지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{L(!1)}}},$=async()=>{if(x){v(!0);try{await d.forget(x.id),b(null)}finally{v(!1)}}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"대화 선택",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"flex max-h-[min(640px,90vh)] w-[min(640px,calc(100vw-2rem))] flex-col rounded-lg border border-border bg-card shadow-lg",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 선택"}),(0,a.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,a.jsx)(y.A,{className:"h-4 w-4"})})]}),(0,a.jsx)("div",{className:"shrink-0 px-4 py-3",children:(0,a.jsxs)("button",{type:"button",onClick:K,className:"flex w-full items-center gap-3 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2.5 text-left hover:bg-primary/15",children:[(0,a.jsx)(j.A,{className:"h-5 w-5 text-primary"}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium",children:"새 대화 시작"}),(0,a.jsx)("div",{className:"text-xs text-muted-foreground",children:"비어있는 새 채팅을 엽니다 (⌘N)"})]})]})}),(0,a.jsx)("div",{className:"shrink-0 border-y border-border bg-muted/30 px-4 py-2",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,a.jsx)("input",{ref:O,value:m,onChange:e=>p(e.target.value),placeholder:"대화 검색 — 내용 \xb7 ID \xb7 [pwa]/[cli]/[tg]/[dc]",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60"}),m&&(0,a.jsx)("button",{type:"button","aria-label":"clear search",onClick:()=>p(""),className:"rounded p-0.5 text-muted-foreground hover:bg-background",children:(0,a.jsx)(y.A,{className:"h-3 w-3"})})]})}),(0,a.jsx)("div",{ref:z,className:"min-h-0 flex-1 overflow-y-auto",children:0===J.length?(0,a.jsxs)("div",{className:"px-4 py-12 text-center",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:0!==u.length||m.trim()?"검색과 일치하는 대화가 없습니다.":'아직 대화가 없습니다. 위의 "새 대화 시작"으로 첫 대화를 시작하세요.'}),m.trim().length>=4&&(0,a.jsx)("button",{type:"button",disabled:R,onClick:()=>void B(),className:"mt-3 rounded-md border border-violet-500/40 bg-violet-500/10 px-3 py-1.5 text-xs text-violet-300 hover:bg-violet-500/15 disabled:opacity-50",children:R?"찾는 중…":"ID '".concat(m.trim(),"'로 대화 이어가기 (Enter)")}),P&&(0,a.jsx)("p",{className:"mt-2 text-xs text-amber-400",children:P}),0===u.length&&!m.trim()&&(0,a.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"다른 기기(CLI / Telegram / Discord)에서 대화를 시작하면 여기에 자동으로 나타납니다."})]}):(0,a.jsx)("ul",{className:"divide-y divide-border",children:J.map((e,t)=>{var r;let n=l.get(e.id),s=t===f;return(0,a.jsx)("li",{children:(0,a.jsxs)("div",{className:(0,i.cn)("group flex items-center gap-3 px-4 py-2.5 transition-colors",s?"bg-primary/10 ring-1 ring-inset ring-primary/30":"hover:bg-secondary/50"),onMouseEnter:()=>h(t),children:[(0,a.jsxs)("button",{type:"button",onClick:()=>U(e),className:"flex min-w-0 flex-1 flex-col items-start text-left",children:[(0,a.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,a.jsx)("span",{className:"truncate text-sm font-medium",children:null!=(r=e.lastMsgPreview)?r:(0,a.jsx)("span",{className:"text-muted-foreground italic",children:"(빈 대화)"})}),n&&(0,a.jsxs)("span",{className:"ml-auto shrink-0 rounded-full bg-primary/15 px-2 py-0.5 text-[10px] font-medium text-primary",children:["✓ ",n.label,"에서 열림"]})]}),(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono",children:D[e.origin]}),(0,a.jsx)("span",{children:function(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return"";let r=Date.now()-t,a=Math.floor(r/6e4);if(a<1)return"방금 전";if(a<60)return"".concat(a,"분 전");let n=Math.floor(a/60);if(n<24)return"".concat(n,"시간 전");let s=Math.floor(n/24);if(s<7)return"".concat(s,"일 전");return new Date(t).toLocaleDateString()}catch(e){return""}}(e.lastTurnAt)}),(0,a.jsxs)("span",{children:["\xb7 ",e.msgCount," 메시지"]}),(0,a.jsx)(M.S,{sessionId:e.id,source:"picker",variant:"subtle",showCopyIcon:!1})]})]}),(0,a.jsx)("button",{type:"button","aria-label":"대화 ".concat(e.id," 지우기"),onClick:t=>{t.stopPropagation(),b(e)},className:(0,i.cn)("shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-rose-500/10 hover:text-rose-500",s?"opacity-100":"opacity-0 group-hover:opacity-100"),children:(0,a.jsx)(w.A,{className:"h-4 w-4"})})]})},e.id)})})}),(0,a.jsxs)("div",{className:"shrink-0 border-t border-border bg-muted/30 px-4 py-2 text-[10px] text-muted-foreground",children:[(0,a.jsx)("span",{className:"mr-3",children:"↑↓ 이동"}),(0,a.jsx)("span",{className:"mr-3",children:"Enter 선택"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘N 새 대화"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘F 검색"}),(0,a.jsx)("span",{children:"Del 지우기"})]})]})}),(0,a.jsx)(T,{open:null!==x,session:x,busy:g,onCancel:()=>b(null),onConfirm:$})]})}let L=new Set(["chat","term","intake","tasks","control","settings"]);function P(){var e;let t=(0,l.hA)(),r=(0,s.useRouter)(),i=(0,s.useSearchParams)(),c=null!=(e=null==i?void 0:i.get("intent"))?e:null,d=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c&&d.current!==c){if(!L.has(c))return void r.replace("/workspace");if(d.current=c,"chat"===c){let e=(0,h.ub)(t.state).find(e=>"chat"===e.kind);e?t.activateTab(e.id):t.openPicker({kind:"addNewChat"})}else t.activateOrAdd(c);r.replace("/workspace")}},[c,t,r]);let o=(0,n.useMemo)(()=>{let e=new Map,r=0;for(let a of t.state.order){let n=t.state.tabs.find(e=>e.id===a);n&&"chat"===n.kind&&(r+=1,e.set(n.sessionId,{tabId:n.id,label:"chat#".concat(r)}))}return e},[t.state.order,t.state.tabs]);return(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsx)(v,{}),(0,a.jsx)("div",{className:"flex-1 min-h-0",children:(0,a.jsx)(g,{})}),(0,a.jsx)(R,{open:null!==t.pickerMode,onClose:t.closePicker,onPick:e=>{let r=t.pickerMode;r&&("jumpToTab"===e.kind?t.activateTab(e.tabId):"addNewChat"===r.kind?t.addTab({kind:"chat",sessionId:e.sessionId}):"attachToTab"===r.kind&&(t.updateChatTab(r.tabId,{sessionId:e.sessionId}),t.activateTab(r.tabId)),t.closePicker())},attachedSessions:o})]})}function A(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"h-full"}),children:(0,a.jsx)(P,{})})}},61852:(e,t,r)=>{"use strict";r.d(t,{U:()=>p});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(32576);function c(e){let{items:t}=e;return 0===t.length?(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,a.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,s,l,i;let c=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(s=e.scope)?void 0:s.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,a.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,a.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(l=e.source)?l:"unknown"," \xb7 ",c]}),(0,a.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class o{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,a]=e;a&&t.set(r,a)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(46479),m=r(35857);function p(){var e,t,r,p;let{client:f}=(0,s.Q)(),h=(0,n.useMemo)(()=>new o(f),[f]),[x,b]=(0,n.useState)({items:[]}),[g,v]=(0,n.useState)(!1),[y,j]=(0,n.useState)(""),[k,w]=(0,n.useState)(""),[N,I]=(0,n.useState)(""),[S,C]=(0,n.useState)(""),[E,T]=(0,n.useState)(""),[M,D]=(0,n.useState)(""),[R,L]=(0,n.useState)("normal"),[P,A]=(0,n.useState)("operator"),[O,z]=(0,n.useState)(""),[J,K]=(0,n.useState)(""),[U,B]=(0,n.useState)(""),[$,q]=(0,n.useState)(""),[Y,_]=(0,n.useState)(!1),F=(0,n.useCallback)(async()=>{(0,m.cY)("webterm.control.list.refresh",{kind:y,surface:k,minUrgency:N,sessionId:S,limit:E}),v(!0);try{let e=await h.list({kind:y||void 0,surface:k||void 0,minUrgency:N||void 0,sessionId:S||void 0,limit:E||void 0});b(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},[h,y,k,N,S,E]);(0,n.useEffect)(()=>{F()},[F]);let H=async e=>{if(e.preventDefault(),!M.trim())return void u.oR.error("kind required");let t={};if($.trim())try{t=JSON.parse($)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:M.trim(),urgency:R,source:P.trim()||"operator",mayPreempt:Y,payload:t,scope:{...O?{surface:O}:{},...J?{channel:J}:{},...U?{sessionId:U}:{}}};(0,m.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{v(!0),await h.emit(r),u.oR.success("signal emitted"),q(""),await F()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},Q=null!=(e=x.countsByKind)?e:{};return(0,a.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=x.total)?t:0]}),(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=x.latest)?r:"-"]}),Object.entries(Q).map(e=>{let[t,r]=e;return(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),F()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)(i.p,{value:y,onChange:e=>j(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:k,onChange:e=>w(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,a.jsxs)("select",{value:N,onChange:e=>I(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,a.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsx)(i.p,{value:S,onChange:e=>C(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:E,onChange:e=>T(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Filter"})]}),(0,a.jsxs)("form",{onSubmit:H,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(i.p,{value:M,onChange:e=>D(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,a.jsx)("select",{value:R,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&L(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))}),(0,a.jsx)(i.p,{value:P,onChange:e=>A(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:O,onChange:e=>z(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:J,onChange:e=>K(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:U,onChange:e=>B(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:Y,onChange:e=>_(e.target.checked)}),"mayPreempt"]})]}),(0,a.jsx)("textarea",{value:$,onChange:e=>q(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Emit"})]}),(0,a.jsx)(c,{items:null!=(p=x.items)?p:[]})]})}},94954:(e,t,r)=>{Promise.resolve().then(r.bind(r,47761))}},e=>{e.O(0,[8085,2566,5194,4862,6479,9917,3525,1314,112,7837,589,9638,5785,5305,7807,9842,4490,3797,4599,2066,1454,5102,9238,7600,2201,6356,7358],()=>e(e.s=94954)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2975],{6039:(e,t,s)=>{Promise.resolve().then(s.bind(s,31645))},6896:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>u,tI:()=>o});var r=s(77194),i=s(49954),a=s(6066),n=s(91403);let l=(0,i.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:c}=e,u=(0,i.useMemo)(()=>null!=s?s:new a.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,r.jsx)(l.Provider,{value:t,children:(0,r.jsx)(n.Ht,{client:u,children:c})})}function c(){let e=(0,i.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function u(){return(0,i.useContext)(l)}},13399:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},28948:(e,t,s)=>{"use strict";s.d(t,{AF:()=>r});let r={all:["nexus"],health:()=>[...r.all,"health"],snapshot:()=>[...r.all,"snapshot"],tabs:e=>e?[...r.all,"tabs",{kind:e}]:[...r.all,"tabs"],tab:e=>[...r.all,"tab",e],templates:()=>[...r.all,"templates"],template:e=>[...r.all,"template",e],config:()=>[...r.all,"config"],switches:()=>[...r.all,"switches"],switch:e=>[...r.all,"switch",e],secrets:()=>[...r.all,"secrets"],bindingChannels:()=>[...r.all,"bindings","channels"],bindings:e=>[...r.all,"bindings",e],binding:(e,t)=>[...r.all,"binding",e,t],logsTail:(e,t)=>t?[...r.all,"logs",e,{lines:t}]:[...r.all,"logs",e],workflows:()=>[...r.all,"workflows"],workflow:e=>[...r.all,"workflow",e],workflowRun:e=>[...r.all,"workflow-run",e],workflowRuns:()=>[...r.all,"workflow-runs"],pendingApprovals:()=>[...r.all,"workflow-pending-approvals"],platforms:()=>[...r.all,"platforms"],providers:()=>[...r.all,"providers"],worktrees:()=>[...r.all,"worktrees"],designCheck:()=>[...r.all,"design-check"],designPreviews:()=>[...r.all,"design-previews"],designPreview:e=>[...r.all,"design-preview",e],registryCatalog:()=>[...r.all,"registry-catalog"],resolvedView:()=>[...r.all,"resolved-view"]};r.snapshot(),r.tabs(),r.health(),r.snapshot(),r.config(),r.switches()},29968:(e,t,s)=>{"use strict";s.d(t,{n:()=>u});var r=s(49954),i=s(94192),a=s(25869),n=s(59270),l=s(91716),o=class extends n.Q{#e;#t=void 0;#s;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,l.f8)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#s,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,l.EN)(t.mutationKey)!==(0,l.EN)(this.options.mutationKey)?this.reset():this.#s?.state.status==="pending"&&this.#s.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#s?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#s?.removeObserver(this),this.#s=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#s?.removeObserver(this),this.#s=this.#e.getMutationCache().build(this.#e,this.options),this.#s.addObserver(this),this.#s.execute(e)}#i(){let e=this.#s?.state??(0,i.$)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#a(e){a.jG.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,s=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#r.onSuccess?.(e.data,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,s,r)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#r.onError?.(e.error,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,s,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},c=s(91403);function u(e,t){let s=(0,c.jE)(t),[i]=r.useState(()=>new o(s,e));r.useEffect(()=>{i.setOptions(e)},[i,e]);let n=r.useSyncExternalStore(r.useCallback(e=>i.subscribe(a.jG.batchCalls(e)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),u=r.useCallback((e,t)=>{i.mutate(e,t).catch(l.lQ)},[i]);if(n.error&&(0,l.GU)(i.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:u,mutateAsync:n.mutate}}},30728:(e,t,s)=>{"use strict";s.d(t,{A:()=>c});var r=s(49954);let i=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 n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let l=(0,r.createContext)({}),o=(0,r.forwardRef)((e,t)=>{var s,a,o;let{color:c,size:u,strokeWidth:d,absoluteStrokeWidth:h,className:p="",children:m,iconNode:f,...x}=e,{size:g=24,strokeWidth:w=2,absoluteStrokeWidth:y=!1,color:v="currentColor",className:b=""}=null!=(s=(0,r.useContext)(l))?s:{},k=(null!=h?h:y)?24*Number(null!=d?d:w)/Number(null!=u?u:g):null!=d?d:w;return(0,r.createElement)("svg",{ref:t,...n,width:null!=(a=null!=u?u:g)?a:n.width,height:null!=(o=null!=u?u:g)?o:n.height,stroke:null!=c?c:v,strokeWidth:k,className:i("lucide",b,p),...!m&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(x)&&{"aria-hidden":"true"},...x},[...f.map(e=>{let[t,s]=e;return(0,r.createElement)(t,s)}),...Array.isArray(m)?m:[m]])}),c=(e,t)=>{let s=(0,r.forwardRef)((s,n)=>{let{className:l,...c}=s;return(0,r.createElement)(o,{ref:n,iconNode:t,className:i("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),l),...c})});return s.displayName=a(e),s}},31645:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>O});var r=s(77194),i=s(49954),a=s(79854),n=s(93708),l=s(60166),o=s(30728);let c=(0,o.A)("folder-tree",[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]);var u=s(13399),d=s(98430);let h=(0,o.A)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var p=s(55844),m=s(6896),f=s(59917),x=s(91403),g=s(29968),w=s(28948),y=s(45785);let v={orphan:0,active:1,detached:2,idle:3,main:4},b={orphan:"Orphan",active:"Active",detached:"Detached",idle:"Idle",main:"Main"},k={orphan:"bg-error/10 text-error",active:"bg-green-600/10 text-green-700",detached:"bg-warning/10 text-warning",idle:"bg-muted text-muted-foreground",main:"bg-primary/10 text-primary"},j={orphan:a.A,active:n.A,detached:l.A,idle:c,main:c};function N(){return(0,m.Qj)()?(0,r.jsx)(M,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Worktrees"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to see active worktrees."})]})}function M(){var e,t,s,n;let{data:l,isLoading:o,error:N,refetch:M,isFetching:O}=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,m.M1)();return(0,f.I)({queryKey:w.AF.worktrees(),queryFn:()=>s.getWorktrees(),enabled:null==(e=t.enabled)||e,refetchInterval:5e3})}(),C=function(){let e=(0,m.M1)(),t=(0,x.jE)();return(0,g.n)({mutationFn:async t=>{try{return await e.disposeWorktree(t)}catch(t){let e=function(e){if(e instanceof y.Iu&&e.body&&"object"==typeof e.body){let t=e.body;if("ok"in t)return t}return null}(t);if(e)return e;throw t}},onSuccess:e=>{e.ok&&t.invalidateQueries({queryKey:w.AF.worktrees()})}})}(),[S,F]=(0,i.useState)(null),E=null!=(e=null==l?void 0:l.repoRoot)?e:null,q=null!=(t=null==l?void 0:l.worktrees)?t:[],R=null!=(s=null==l?void 0:l.orphanedSessions)?s:[],I=q.map(e=>({view:e,status:e.orphan?"orphan":e.isMain?"main":e.isDetached?"detached":e.session&&e.session.alive?"active":"idle"})).sort((e,t)=>{var s,r,i,a;let n=null!=(s=v[e.status])?s:99,l=null!=(r=v[t.status])?r:99;if(n!==l)return n-l;let o=null!=(i=e.view.branch)?i:"~detached",c=null!=(a=t.view.branch)?a:"~detached";return o.localeCompare(c)}),B=function(e){let t={total:e.length,active:0,orphan:0,idle:0,detached:0,main:0};for(let s of e)t[s.status]+=1;return t}(I),L=Date.now(),P=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=!0===t.force,r=s?"Force-remove this worktree (will discard local changes)?\n\n".concat(e):t.locked?"This worktree is locked. Removing it will fail unless you force.\nProceed with --force?\n\n".concat(e):"Remove this worktree?\n\n".concat(e);if(!window.confirm(r))return;let i=await C.mutateAsync({path:e,force:s||!0===t.locked});F({path:e,result:i})};return(0,r.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-6",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,r.jsx)(c,{className:"h-5 w-5"}),"Worktrees"]}),(0,r.jsxs)("button",{type:"button",onClick:()=>M(),disabled:O,"aria-label":"Refresh worktrees",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] hover:bg-surface-elevated disabled:opacity-50",children:[(0,r.jsx)(u.A,{className:"h-3 w-3 ".concat(O?"animate-spin":"")}),"Refresh"]})]}),E?(0,r.jsx)("p",{className:"text-[11px] font-mono text-muted-foreground",children:E}):(0,r.jsxs)("p",{className:"text-[11px] text-muted-foreground",children:["No repository found. Set ",(0,r.jsx)("code",{className:"font-mono",children:"harness.defaultRepo"})," (absolute path) in Settings, or start NEXUS inside a checkout."]})]}),N&&(0,r.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-error",children:[(0,r.jsx)(d.A,{className:"h-3 w-3"}),N instanceof Error?N.message:"Failed to load worktrees"]}),o&&!l&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"Querying /v1/worktrees…"}),l&&(0,r.jsx)(A,{summary:B}),S&&(0,r.jsx)("div",{"data-testid":"worktree-dispose-result","data-result-status":S.result.ok?"ok":"error",className:"rounded-md border px-2.5 py-1.5 text-[11px] ".concat(S.result.ok?"border-green-600/40 bg-green-600/5 text-green-700":"border-error/40 bg-error/5 text-error"),children:(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,r.jsxs)("span",{children:[S.result.ok?"".concat("orphan-session-cleanup"===S.result.action?"Cleared orphan session":"Removed worktree"," — ").concat(S.path):"Dispose failed — ".concat(null!=(n=S.result.error)?n:"unknown error"),S.result.detail&&(0,r.jsxs)("span",{className:"ml-1 font-mono text-[10px] opacity-80",children:["(",S.result.detail,")"]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>F(null),className:"text-[10px] underline opacity-70 hover:opacity-100",children:"dismiss"})]})}),l&&I.length>0&&(0,r.jsx)("section",{"data-testid":"worktree-list",className:"overflow-x-auto rounded-md border border-border",children:(0,r.jsxs)("table",{className:"min-w-full text-[11px]",children:[(0,r.jsx)("thead",{className:"bg-surface-elevated",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Status"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Branch"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Path"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"SHA"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Owner"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Entered"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Actions"})]})}),(0,r.jsx)("tbody",{children:I.map(e=>{var t;let{view:s,status:i}=e,a=j[i];return(0,r.jsxs)("tr",{"data-testid":"worktree-row-".concat(s.path),"data-status":i,className:"border-t border-border",children:[(0,r.jsxs)("td",{className:"px-2 py-1.5",children:[(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[9px] font-medium uppercase tracking-wider ".concat(k[i]),children:[(0,r.jsx)(a,{className:"h-3 w-3"}),b[i]]}),s.isLocked&&(0,r.jsx)("span",{title:"locked",className:"ml-1 inline-flex items-center text-warning",children:(0,r.jsx)(h,{className:"h-3 w-3"})})]}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono",children:null!=(t=s.branch)?t:(0,r.jsx)("span",{className:"text-muted-foreground",children:"—"})}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono text-[10px] text-muted-foreground",children:s.path}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono text-[10px] text-muted-foreground",children:s.sha.slice(0,7)}),(0,r.jsx)("td",{className:"px-2 py-1.5",children:s.session?(0,r.jsxs)("span",{className:"text-[10px] ".concat(s.session.alive?"text-foreground":"text-error"),children:["pid ",s.session.sessionId,s.session.alive?" (alive)":" (dead — orphan)"]}):(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"—"})}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-[10px] text-muted-foreground",children:s.session?function(e,t){if(void 0===t)return"";let s=Math.floor(Math.max(0,e-t)/1e3);if(s<60)return"".concat(s,"s ago");let r=Math.floor(s/60);if(r<60)return"".concat(r,"m ago");let i=Math.floor(r/60);if(i<24)return"".concat(i,"h ago");let a=Math.floor(i/24);return"".concat(a,"d ago")}(L,s.session.enteredAt):""}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:s.isMain?(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"—"}):(0,r.jsxs)("button",{type:"button","data-testid":"dispose-worktree-".concat(s.path),onClick:()=>P(s.path,{locked:s.isLocked}),disabled:C.isPending,className:"inline-flex items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-[10px] text-error hover:bg-error/10 disabled:opacity-50","aria-label":"Dispose worktree ".concat(s.path),children:[(0,r.jsx)(p.A,{className:"h-3 w-3"}),"Dispose"]})})]},s.path)})})]})}),l&&0===I.length&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground","data-testid":"worktree-empty",children:"No worktrees registered."}),l&&R.length>0&&(0,r.jsxs)("section",{"data-testid":"orphaned-sessions",className:"space-y-1",children:[(0,r.jsxs)("h2",{className:"flex items-center gap-1 text-sm font-medium text-warning",children:[(0,r.jsx)(a.A,{className:"h-4 w-4"}),"Orphaned sessions (",R.length,")"]}),(0,r.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Worktree directory was removed (e.g., via ",(0,r.jsx)("code",{children:"git worktree remove"}),") but the session JSON wasn't cleaned. Boot-time stale-cleanup will reap these the next time NEXUS restarts."]}),(0,r.jsx)("ul",{className:"space-y-1 text-[11px]",children:R.map(e=>(0,r.jsxs)("li",{"data-testid":"orphan-session-".concat(e.sessionId),className:"rounded-md border border-warning/40 bg-warning/5 px-2 py-1.5",children:[(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("span",{className:"font-mono",children:["pid ",e.sessionId]})," ",(0,r.jsxs)("span",{className:"text-muted-foreground",children:["(",e.alive?"alive (unusual)":"dead",")"]})]}),(0,r.jsxs)("button",{type:"button","data-testid":"cleanup-orphan-".concat(e.sessionId),onClick:()=>P(e.worktreePath),disabled:C.isPending,className:"inline-flex items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-[10px] text-error hover:bg-error/10 disabled:opacity-50","aria-label":"Clear orphan session ".concat(e.sessionId),children:[(0,r.jsx)(p.A,{className:"h-3 w-3"}),"Cleanup"]})]}),(0,r.jsxs)("div",{className:"font-mono text-[10px] text-muted-foreground",children:["branch ",(0,r.jsx)("strong",{children:e.branch})," \xb7 ",e.worktreePath]})]},e.sessionId))})]})]})}function A(e){let{summary:t}=e,s=[{label:"Total",value:t.total,cls:"text-foreground"},{label:"Active",value:t.active,cls:"text-green-700"},{label:"Orphan",value:t.orphan,cls:"text-error"},{label:"Idle",value:t.idle,cls:"text-muted-foreground"},{label:"Detached",value:t.detached,cls:"text-warning"}];return(0,r.jsx)("div",{"data-testid":"worktree-summary",className:"flex flex-wrap items-baseline gap-3 text-[11px]",children:s.map(e=>(0,r.jsxs)("span",{className:"flex items-baseline gap-1",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:e.label}),(0,r.jsx)("span",{className:"font-medium ".concat(e.cls),children:e.value})]},e.label))})}function O(){return(0,r.jsx)(N,{})}},35857:(e,t,s)=>{"use strict";let r;s.d(t,{cY:()=>u,x8:()=>l});let i={debug:0,info:1,warn:2,error:3},a="/v1/debug-logs/batch",n=null;function l(e){n=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(i[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)]<i[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,s=JSON.stringify({records:e});try{var r,i;t=await (r=this.fetchFn(s),i=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(i,"ms"))),i);r.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&n)try{await n(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let a=this.lastOkAt;this.lastOkAt=Date.now();let l=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:a},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(a,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",s=1e4,r=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=r,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(a,{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 s=new Date().toISOString();if(void 0!==t){let r="";try{let e=new WeakSet;r=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){r="[unserializable: ".concat(String(e),"]")}r&&r.length>800&&(r=r.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(r),t),d(s,e,r)}else console.debug("[".concat(s,"] ").concat(e)),d(s,e,void 0)}function d(e,t,s){let i,a=function(){if(void 0!==r)return r;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return r=null,null;let t=new o(c,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return r=t,t}();if(!a)return;let n=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{i=JSON.parse(s)}catch(e){i=s}a.push({ts:e,category:t,event:n,...void 0!==i?{data:i}:{},source:{platform:"pwa"}})}},55844:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},60166:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("git-branch",[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]])},71350:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>n,SI:()=>o,dJ:()=>l});let r="elanous:auth-required",i=null,a=!1;function n(e){null===i&&(i=e,window.dispatchEvent(new CustomEvent(r,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(r,s),null===i||a||e({path:i}),()=>t.removeEventListener(r,s)}function o(){a=!0}},79854:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},93708:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).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"}]])},98430:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])}},e=>{e.O(0,[2566,9917,5785,2201,6356,7358],()=>e(e.s=6039)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- <!DOCTYPE html><!--dRS6lEhSRRBr1abbzp7fJ--><html lang="ko" class="font-sans __variable_7a3ec7"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="preload" href="/app/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/app/_next/static/css/72becfd42807b50d.css" data-precedence="next"/><link rel="stylesheet" href="/app/_next/static/css/085673d826b98b62.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/app/_next/static/chunks/webpack-e94d22b7a028217b.js"/><script src="/app/_next/static/chunks/83a80514-b897b64df43ce108.js" async=""></script><script src="/app/_next/static/chunks/6356-0afafc4230cf9767.js" async=""></script><script src="/app/_next/static/chunks/main-app-25c51c7df7f3a442.js" async=""></script><script src="/app/_next/static/chunks/8085-1e5fce59500a2cc2.js" async=""></script><script src="/app/_next/static/chunks/2566-734cb83bbd405886.js" async=""></script><script src="/app/_next/static/chunks/4862-392c9a71f0d8dfb4.js" async=""></script><script src="/app/_next/static/chunks/6479-16e62aedafa0e310.js" async=""></script><script src="/app/_next/static/chunks/9917-9e26abc5f7772735.js" async=""></script><script src="/app/_next/static/chunks/112-fa7c526c20ce1405.js" async=""></script><script src="/app/_next/static/chunks/8715-f63756021d3ab989.js" async=""></script><script src="/app/_next/static/chunks/9638-d268329f2c6f4f8d.js" async=""></script><script src="/app/_next/static/chunks/5785-ea8d2c633b6688e3.js" async=""></script><script src="/app/_next/static/chunks/5305-bacd7eca0b9a5848.js" async=""></script><script src="/app/_next/static/chunks/9842-d6644eb53d3dc6bf.js" async=""></script><script src="/app/_next/static/chunks/4599-548bc96cda44a5a7.js" async=""></script><script src="/app/_next/static/chunks/4565-67e4c620597965c8.js" async=""></script><script src="/app/_next/static/chunks/app/layout-c44f93a41167536f.js" async=""></script><script src="/app/_next/static/chunks/app/not-found-b6169ea2f09cf287.js" async=""></script><script src="/app/_next/static/chunks/1314-f604ba013ec535b0.js" async=""></script><script src="/app/_next/static/chunks/app/approvals/page-9360b1285b2a346e.js" async=""></script><meta name="next-size-adjust" content=""/><link rel="preload" as="font" type="font/ttf" href="/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf" crossorigin="anonymous"/><meta name="theme-color" content="#1e1e2e"/><title>elanous</title><meta name="description" content="elanous — voice · chat · intake · control · terminal."/><meta name="application-name" content="elanous"/><link rel="manifest" href="/app/manifest.webmanifest"/><link rel="icon" href="/app/icons/elanous-32.png" sizes="32x32" type="image/png"/><link rel="icon" href="/app/icons/elanous-16.png" sizes="16x16" type="image/png"/><link rel="apple-touch-icon" href="/app/icons/elanous-180.png" sizes="180x180" type="image/png"/><script src="/app/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-background text-foreground antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen w-full flex-col bg-background text-foreground"><header class="flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs"><button type="button" aria-label="open menu" title="open menu" class="flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-4 w-4" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg><span class="hidden text-[11px] font-medium leading-none sm:inline">메뉴</span></button><div class="ml-auto flex items-center gap-1"><button type="button" data-share-capture-ui="true" aria-label="공유용 캡처" title="공유용 캡처 (beta) — 주소·토큰을 가린 사진을 데몬에 저장" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera h-4 w-4" aria-hidden="true"><path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"></path><circle cx="12" cy="13" r="3"></circle></svg></button><a aria-label="voice" title="voice (HTTPS Tailscale Serve 필요)" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground" href="/app/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mic h-4 w-4" aria-hidden="true"><path d="M12 19v3"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><rect x="9" y="2" width="6" height="13" rx="3"></rect></svg></a><div class="relative"><button type="button" aria-label="settings" title="session — · theme catppuccin-mocha" class="rounded-md p-1.5 hover:bg-accent text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></button></div></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground"><nav class="flex h-full flex-col"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><div class="flex-1 space-y-2 px-1 py-2"><section aria-label="오늘"><a title="오늘" aria-label="오늘" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/today/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-inbox h-4 w-4" aria-hidden="true"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg></a></section><section aria-label="대화"><a title="대화" aria-label="대화" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/chat/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></a></section><section aria-label="일"><a title="일" aria-label="일" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/live/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-compass h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"></path></svg></a></section><section aria-label="만들기"><a title="만들기" aria-label="만들기" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/term/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal h-4 w-4" aria-hidden="true"><path d="m7 11 2-2-2-2"></path><path d="M11 13h4"></path><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect></svg></a></section><section aria-label="자료"><a title="자료" aria-label="자료" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/market/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-4 w-4" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></a></section><section aria-label="설정"><a title="설정" aria-label="설정" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/settings/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></a></section></div></nav></aside><main class="flex-1 overflow-auto min-w-0"><main class="mx-auto max-w-3xl space-y-5 p-4 pb-20 text-foreground sm:p-8"><header><h1 class="text-2xl font-semibold">코드 변경 승인</h1><p class="text-sm text-muted-foreground">자동으로 만든 코드 변경(PR)을 확인하고 승인합니다.</p></header><div role="tablist" aria-label="승인 목록 보기" class="flex gap-2"><button type="button" role="tab" aria-selected="true" class="rounded-md px-3 py-1 text-sm bg-foreground text-background">승인 대기</button><button type="button" role="tab" aria-selected="false" class="rounded-md px-3 py-1 text-sm bg-muted text-foreground">완료</button></div><section role="status" aria-live="polite" aria-busy="true" class="space-y-3" data-approvals-loading="true"><div class="flex items-center gap-3 rounded-xl border border-blue-500/40 bg-blue-500/5 p-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle h-6 w-6 shrink-0 text-blue-500 motion-safe:animate-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg><div class="min-w-0 flex-1"><p class="font-medium">GitHub 에서 승인을 기다리는 코드 변경을 읽고 있습니다</p></div><span class="font-mono text-lg tabular-nums text-blue-600 dark:text-blue-300" aria-label="경과 시간">0.0초</span></div><div class="h-1 overflow-hidden rounded-full bg-muted" aria-hidden="true"><div class="h-full w-1/3 rounded-full bg-blue-500 motion-safe:animate-[approvals-slide_1.2s_ease-in-out_infinite]"></div></div><style>@keyframes approvals-slide{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}</style><div class="space-y-3 rounded-xl border border-border bg-card p-5 motion-safe:animate-pulse" aria-hidden="true"><div class="h-4 w-2/3 rounded bg-muted"></div><div class="h-3 w-full rounded bg-muted"></div><div class="h-3 w-5/6 rounded bg-muted"></div></div><div class="space-y-3 rounded-xl border border-border bg-card p-5 motion-safe:animate-pulse" aria-hidden="true"><div class="h-4 w-2/3 rounded bg-muted"></div><div class="h-3 w-full rounded bg-muted"></div><div class="h-3 w-5/6 rounded bg-muted"></div></div></section></main><!--$--><!--/$--></main></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/app/_next/static/chunks/webpack-e94d22b7a028217b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n"])</script><script>self.__next_f.push([1,"2:I[96511,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"ServiceWorkerRegister\"]\n"])</script><script>self.__next_f.push([1,"3:I[80984,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"NewBuildBanner\"]\n"])</script><script>self.__next_f.push([1,"4:I[8801,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"DaemonProvider\"]\n"])</script><script>self.__next_f.push([1,"5:I[21317,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"OperatorRoleDefault\"]\n"])</script><script>self.__next_f.push([1,"6:I[62765,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"NexusClientProvider\"]\n"])</script><script>self.__next_f.push([1,"7:I[94838,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"8:I[79781,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"TooltipProvider\"]\n"])</script><script>self.__next_f.push([1,"9:I[64666,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"ToastProvider\"]\n"])</script><script>self.__next_f.push([1,"a:I[23546,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"AppShell\"]\n"])</script><script>self.__next_f.push([1,"b:I[18641,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-c44f93a41167536f.js\"],\"MaturityBanner\"]\n"])</script><script>self.__next_f.push([1,"c:I[85975,[],\"\"]\nd:I[1707,[],\"\"]\ne:I[72716,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4345\",\"static/chunks/app/not-found-b6169ea2f09cf287.js\"],\"default\"]\nf:I[90882,[],\"ClientPageRoot\"]\n10:I[45458,[\"1314\",\"static/chunks/1314-f604ba013ec535b0.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"6605\",\"static/chunks/app/approvals/page-9360b1285b2a346e.js\"],\"default\"]\n13:I[18142,[],\"OutletBoundary\"]\n15:I[81459,[],\"AsyncMetadataOutlet\"]\n17:I[18142,[],\"ViewportBoundary\"]\n19:I[18142,[],\"MetadataBoundary\"]\n1a:\"$Sreact.suspense\"\n1c:I[8349,[],\"\"]\n:HL[\"/app/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/app/_next/static/css/72becfd42807b50d.css\",\"style\"]\n:HL[\"/app/_next/static/css/085673d826b98b62.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"dRS6lEhSRRBr1abbzp7fJ\",\"p\":\"/app\",\"c\":[\"\",\"approvals\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"approvals\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/72becfd42807b50d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/085673d826b98b62.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"className\":\"font-sans __variable_7a3ec7\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"font\",\"type\":\"font/ttf\",\"href\":\"/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf\",\"crossOrigin\":\"anonymous\"}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$La\",null,{\"children\":[[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$Le\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]}]}]]}]]}]]}]]}],{\"children\":[\"approvals\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$Lf\",null,{\"Component\":\"$10\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@11\",\"$@12\"]}],null,[\"$\",\"$L13\",null,{\"children\":[\"$L14\",[\"$\",\"$L15\",null,{\"promise\":\"$@16\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L17\",null,{\"children\":\"$L18\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L19\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$1a\",null,{\"fallback\":null,\"children\":\"$L1b\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$1c\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:{}\n12:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"18:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#1e1e2e\"}]]\n14:null\n"])</script><script>self.__next_f.push([1,"1d:I[4715,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"16:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"elanous\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"elanous — voice · chat · intake · control · terminal.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"elanous\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/app/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/app/icons/elanous-180.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L1d\",\"7\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"1b:\"$16:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Ev2jivDMTSoEc_5rIXdcy--><html lang="ko" class="font-sans __variable_7a3ec7"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="preload" href="/app/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/app/_next/static/css/72becfd42807b50d.css" data-precedence="next"/><link rel="stylesheet" href="/app/_next/static/css/085673d826b98b62.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/app/_next/static/chunks/webpack-e94d22b7a028217b.js"/><script src="/app/_next/static/chunks/83a80514-b897b64df43ce108.js" async=""></script><script src="/app/_next/static/chunks/6356-0afafc4230cf9767.js" async=""></script><script src="/app/_next/static/chunks/main-app-25c51c7df7f3a442.js" async=""></script><script src="/app/_next/static/chunks/8085-1e5fce59500a2cc2.js" async=""></script><script src="/app/_next/static/chunks/2566-734cb83bbd405886.js" async=""></script><script src="/app/_next/static/chunks/4862-392c9a71f0d8dfb4.js" async=""></script><script src="/app/_next/static/chunks/6479-16e62aedafa0e310.js" async=""></script><script src="/app/_next/static/chunks/9917-9e26abc5f7772735.js" async=""></script><script src="/app/_next/static/chunks/112-fa7c526c20ce1405.js" async=""></script><script src="/app/_next/static/chunks/8715-f63756021d3ab989.js" async=""></script><script src="/app/_next/static/chunks/9638-d268329f2c6f4f8d.js" async=""></script><script src="/app/_next/static/chunks/5785-ea8d2c633b6688e3.js" async=""></script><script src="/app/_next/static/chunks/5305-bacd7eca0b9a5848.js" async=""></script><script src="/app/_next/static/chunks/9842-d6644eb53d3dc6bf.js" async=""></script><script src="/app/_next/static/chunks/4599-548bc96cda44a5a7.js" async=""></script><script src="/app/_next/static/chunks/4565-67e4c620597965c8.js" async=""></script><script src="/app/_next/static/chunks/app/layout-7cb996c1aa08b6f5.js" async=""></script><script src="/app/_next/static/chunks/app/not-found-670510eda8b9443f.js" async=""></script><script src="/app/_next/static/chunks/1314-f604ba013ec535b0.js" async=""></script><script src="/app/_next/static/chunks/app/approvals/page-a1ce306364f08da9.js" async=""></script><meta name="next-size-adjust" content=""/><link rel="preload" as="font" type="font/ttf" href="/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf" crossorigin="anonymous"/><meta name="theme-color" content="#1e1e2e"/><title>elanous</title><meta name="description" content="elanous — voice · chat · intake · control · terminal."/><meta name="application-name" content="elanous"/><link rel="manifest" href="/app/manifest.webmanifest"/><link rel="icon" href="/app/icons/elanous-32.png" sizes="32x32" type="image/png"/><link rel="icon" href="/app/icons/elanous-16.png" sizes="16x16" type="image/png"/><link rel="apple-touch-icon" href="/app/icons/elanous-180.png" sizes="180x180" type="image/png"/><script src="/app/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-background text-foreground antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen w-full flex-col bg-background text-foreground"><header class="flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs"><button type="button" aria-label="open menu" title="open menu" class="flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-4 w-4" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg><span class="hidden text-[11px] font-medium leading-none sm:inline">메뉴</span></button><div class="ml-auto flex items-center gap-1"><button type="button" data-share-capture-ui="true" aria-label="공유용 캡처" title="공유용 캡처 (beta) — 주소·토큰을 가린 사진을 데몬에 저장" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera h-4 w-4" aria-hidden="true"><path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"></path><circle cx="12" cy="13" r="3"></circle></svg></button><a aria-label="voice" title="voice (HTTPS Tailscale Serve 필요)" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground" href="/app/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mic h-4 w-4" aria-hidden="true"><path d="M12 19v3"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><rect x="9" y="2" width="6" height="13" rx="3"></rect></svg></a><div class="relative"><button type="button" aria-label="settings" title="session — · theme catppuccin-mocha" class="rounded-md p-1.5 hover:bg-accent text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></button></div></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground"><nav class="flex h-full flex-col"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><div class="flex-1 space-y-2 px-1 py-2"><section aria-label="오늘"><a title="오늘" aria-label="오늘" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/today/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-inbox h-4 w-4" aria-hidden="true"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg></a></section><section aria-label="대화"><a title="대화" aria-label="대화" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/chat/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></a></section><section aria-label="일"><a title="일" aria-label="일" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/live/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-compass h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"></path></svg></a></section><section aria-label="만들기"><a title="만들기" aria-label="만들기" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/term/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal h-4 w-4" aria-hidden="true"><path d="m7 11 2-2-2-2"></path><path d="M11 13h4"></path><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect></svg></a></section><section aria-label="자료"><a title="자료" aria-label="자료" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/market/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-4 w-4" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></a></section><section aria-label="설정"><a title="설정" aria-label="설정" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/settings/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></a></section></div></nav></aside><main class="flex-1 overflow-auto min-w-0"><main class="mx-auto max-w-3xl space-y-5 p-4 pb-20 text-foreground sm:p-8"><header><h1 class="text-2xl font-semibold">코드 변경 승인</h1><p class="text-sm text-muted-foreground">자동으로 만든 코드 변경(PR)을 확인하고 승인합니다.</p></header><div role="tablist" aria-label="승인 목록 보기" class="flex gap-2"><button type="button" role="tab" aria-selected="true" class="rounded-md px-3 py-1 text-sm bg-foreground text-background">승인 대기</button><button type="button" role="tab" aria-selected="false" class="rounded-md px-3 py-1 text-sm bg-muted text-foreground">완료</button></div><section role="status" aria-live="polite" aria-busy="true" class="space-y-3" data-approvals-loading="true"><div class="flex items-center gap-3 rounded-xl border border-blue-500/40 bg-blue-500/5 p-4"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle h-6 w-6 shrink-0 text-blue-500 motion-safe:animate-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg><div class="min-w-0 flex-1"><p class="font-medium">GitHub 에서 승인을 기다리는 코드 변경을 읽고 있습니다</p></div><span class="font-mono text-lg tabular-nums text-blue-600 dark:text-blue-300" aria-label="경과 시간">0.0초</span></div><div class="h-1 overflow-hidden rounded-full bg-muted" aria-hidden="true"><div class="h-full w-1/3 rounded-full bg-blue-500 motion-safe:animate-[approvals-slide_1.2s_ease-in-out_infinite]"></div></div><style>@keyframes approvals-slide{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}</style><div class="space-y-3 rounded-xl border border-border bg-card p-5 motion-safe:animate-pulse" aria-hidden="true"><div class="h-4 w-2/3 rounded bg-muted"></div><div class="h-3 w-full rounded bg-muted"></div><div class="h-3 w-5/6 rounded bg-muted"></div></div><div class="space-y-3 rounded-xl border border-border bg-card p-5 motion-safe:animate-pulse" aria-hidden="true"><div class="h-4 w-2/3 rounded bg-muted"></div><div class="h-3 w-full rounded bg-muted"></div><div class="h-3 w-5/6 rounded bg-muted"></div></div></section></main><!--$--><!--/$--></main></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/app/_next/static/chunks/webpack-e94d22b7a028217b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n"])</script><script>self.__next_f.push([1,"2:I[96511,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"ServiceWorkerRegister\"]\n"])</script><script>self.__next_f.push([1,"3:I[80984,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"NewBuildBanner\"]\n"])</script><script>self.__next_f.push([1,"4:I[8801,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"DaemonProvider\"]\n"])</script><script>self.__next_f.push([1,"5:I[21317,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"OperatorRoleDefault\"]\n"])</script><script>self.__next_f.push([1,"6:I[62765,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"NexusClientProvider\"]\n"])</script><script>self.__next_f.push([1,"7:I[94838,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"8:I[79781,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"TooltipProvider\"]\n"])</script><script>self.__next_f.push([1,"9:I[64666,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"ToastProvider\"]\n"])</script><script>self.__next_f.push([1,"a:I[23546,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"AppShell\"]\n"])</script><script>self.__next_f.push([1,"b:I[18641,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"6479\",\"static/chunks/6479-16e62aedafa0e310.js\",\"9917\",\"static/chunks/9917-9e26abc5f7772735.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"8715\",\"static/chunks/8715-f63756021d3ab989.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"5785\",\"static/chunks/5785-ea8d2c633b6688e3.js\",\"5305\",\"static/chunks/5305-bacd7eca0b9a5848.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4599\",\"static/chunks/4599-548bc96cda44a5a7.js\",\"4565\",\"static/chunks/4565-67e4c620597965c8.js\",\"7177\",\"static/chunks/app/layout-7cb996c1aa08b6f5.js\"],\"MaturityBanner\"]\n"])</script><script>self.__next_f.push([1,"c:I[85975,[],\"\"]\nd:I[1707,[],\"\"]\ne:I[72716,[\"8085\",\"static/chunks/8085-1e5fce59500a2cc2.js\",\"2566\",\"static/chunks/2566-734cb83bbd405886.js\",\"4862\",\"static/chunks/4862-392c9a71f0d8dfb4.js\",\"112\",\"static/chunks/112-fa7c526c20ce1405.js\",\"9842\",\"static/chunks/9842-d6644eb53d3dc6bf.js\",\"4345\",\"static/chunks/app/not-found-670510eda8b9443f.js\"],\"default\"]\nf:I[90882,[],\"ClientPageRoot\"]\n10:I[45458,[\"1314\",\"static/chunks/1314-f604ba013ec535b0.js\",\"9638\",\"static/chunks/9638-d268329f2c6f4f8d.js\",\"6605\",\"static/chunks/app/approvals/page-a1ce306364f08da9.js\"],\"default\"]\n13:I[18142,[],\"OutletBoundary\"]\n15:I[81459,[],\"AsyncMetadataOutlet\"]\n17:I[18142,[],\"ViewportBoundary\"]\n19:I[18142,[],\"MetadataBoundary\"]\n1a:\"$Sreact.suspense\"\n1c:I[8349,[],\"\"]\n:HL[\"/app/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/app/_next/static/css/72becfd42807b50d.css\",\"style\"]\n:HL[\"/app/_next/static/css/085673d826b98b62.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Ev2jivDMTSoEc-5rIXdcy\",\"p\":\"/app\",\"c\":[\"\",\"approvals\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"approvals\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/72becfd42807b50d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/085673d826b98b62.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"className\":\"font-sans __variable_7a3ec7\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"font\",\"type\":\"font/ttf\",\"href\":\"/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf\",\"crossOrigin\":\"anonymous\"}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$La\",null,{\"children\":[[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$Le\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]}]}]]}]]}]]}]]}],{\"children\":[\"approvals\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$Lf\",null,{\"Component\":\"$10\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@11\",\"$@12\"]}],null,[\"$\",\"$L13\",null,{\"children\":[\"$L14\",[\"$\",\"$L15\",null,{\"promise\":\"$@16\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L17\",null,{\"children\":\"$L18\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L19\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$1a\",null,{\"fallback\":null,\"children\":\"$L1b\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$1c\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:{}\n12:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"18:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#1e1e2e\"}]]\n14:null\n"])</script><script>self.__next_f.push([1,"1d:I[4715,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"16:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"elanous\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"elanous — voice · chat · intake · control · terminal.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"elanous\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/app/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/app/icons/elanous-180.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L1d\",\"7\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"1b:\"$16:metadata\"\n"])</script></body></html>