elanous 0.2.11 → 0.2.12

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 (246) 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/1147-466ec15afacc1a65.js +1 -0
  4. package/apps/pwa/out/_next/static/chunks/{1394-556de6d71bbdb0fb.js → 1394-ee3795b112907122.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/3869-3cd46526879f454c.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/7758-0b018a9e4fc56200.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/{8605-ea5bee9dfae512c7.js → 8605-0259994816604c49.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/app/approvals/page-cb169620945d1952.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-6a061bd97f0b9398.js → page-cefe8169e36cf62a.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/board/{page-cb95a7432c9ee744.js → page-d2e35228bc497119.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-b12b6d2f8d2d1aea.js → page-5c05b0da4bc1392c.js} +1 -1
  14. package/apps/pwa/out/_next/static/chunks/app/bots/{page-b9efe868bfd36255.js → page-e0ccdb576812b523.js} +1 -1
  15. package/apps/pwa/out/_next/static/chunks/app/chat/{page-7c97dcdfe2e37a60.js → page-813c4a52c9d05ca8.js} +1 -1
  16. package/apps/pwa/out/_next/static/chunks/app/consult/page-4731f2c215358937.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/app/control/{page-5721537ca8a3598c.js → page-a022b257950f39e6.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/design-check/{page-b654240a572e4c48.js → page-a2ffc717e04b8b0a.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/app/editor/{page-b9750abc897508c3.js → page-b59ee4e70fc18fcf.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/app/field/page-c172dabd796eb7a3.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/app/inside/page-1efd0cb9e0ed9d13.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/app/intake/{page-c8b1ccda6ba7ae98.js → page-d5dc7ff69a37b4cf.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/app/live/{page-2a9932ddb62d76bd.js → page-1d6a533ce5a6efcb.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/app/market/{page-9688f5b4f1ff950f.js → page-dfca9b7d2de0b135.js} +1 -1
  27. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-793fa536b3a6ef37.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/app/morning/{page-35414e0a007b4082.js → page-6dd3bfbbde2a5c2c.js} +1 -1
  29. package/apps/pwa/out/_next/static/chunks/app/{not-found-e7a529e0507ac86c.js → not-found-490653e8d4cc8852.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/app/observatory/{page-e001823c35c9dd67.js → page-77447356baad75d2.js} +1 -1
  31. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-3a24072b35470157.js → page-6d604227e1664b71.js} +1 -1
  35. package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/app/reflection/{page-0be8d4b2ced75ba0.js → page-4048543b4b7ad5e0.js} +1 -1
  37. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-d37cb0d52f9b6bd5.js → page-4c3a3126abed551a.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/app/sessions/{page-686da0df9bf23e5c.js → page-64b0aecb1ca75e75.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/app/settings/{page-53f80edc6b8dc07c.js → page-db14d0be7f1c460c.js} +1 -1
  41. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/app/setup/{page-239c17b911b84e72.js → page-9547b5cec7cf76bf.js} +1 -1
  43. package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/app/tasks/{page-1218753c82d585f6.js → page-2cddeb9e2aeedc55.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/app/term/{page-4b5935e67531efb5.js → page-e297866051595d81.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/app/today/{page-3285bc87caf1eaa5.js → page-baba2e047872fb0f.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/app/trace/{page-ad553b0e06505ecd.js → page-e895da4ec9cac345.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/workspace/page-2e9e2fb01c9da1c9.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d62ceb13411ebba4.js +1 -0
  54. package/apps/pwa/out/_next/static/css/128fb7fb670b2fbf.css +1 -0
  55. package/apps/pwa/out/approvals/index.html +1 -1
  56. package/apps/pwa/out/approvals/index.txt +14 -14
  57. package/apps/pwa/out/autopilot/index.html +1 -1
  58. package/apps/pwa/out/autopilot/index.txt +14 -14
  59. package/apps/pwa/out/board/index.html +1 -1
  60. package/apps/pwa/out/board/index.txt +14 -14
  61. package/apps/pwa/out/botlab/index.html +1 -1
  62. package/apps/pwa/out/botlab/index.txt +14 -14
  63. package/apps/pwa/out/bots/index.html +1 -1
  64. package/apps/pwa/out/bots/index.txt +14 -14
  65. package/apps/pwa/out/chat/index.html +1 -1
  66. package/apps/pwa/out/chat/index.txt +14 -14
  67. package/apps/pwa/out/consult/index.html +1 -1
  68. package/apps/pwa/out/consult/index.txt +14 -14
  69. package/apps/pwa/out/control/index.html +1 -1
  70. package/apps/pwa/out/control/index.txt +14 -14
  71. package/apps/pwa/out/design-check/index.html +1 -1
  72. package/apps/pwa/out/design-check/index.txt +14 -14
  73. package/apps/pwa/out/editor/index.html +1 -1
  74. package/apps/pwa/out/editor/index.txt +14 -14
  75. package/apps/pwa/out/exec/index.html +1 -1
  76. package/apps/pwa/out/exec/index.txt +14 -14
  77. package/apps/pwa/out/field/index.html +1 -1
  78. package/apps/pwa/out/field/index.txt +14 -14
  79. package/apps/pwa/out/healthz +1 -1
  80. package/apps/pwa/out/index.html +1 -1
  81. package/apps/pwa/out/index.txt +14 -14
  82. package/apps/pwa/out/inside/index.html +1 -1
  83. package/apps/pwa/out/inside/index.txt +14 -14
  84. package/apps/pwa/out/intake/index.html +1 -1
  85. package/apps/pwa/out/intake/index.txt +14 -14
  86. package/apps/pwa/out/live/index.html +1 -1
  87. package/apps/pwa/out/live/index.txt +14 -14
  88. package/apps/pwa/out/market/index.html +1 -1
  89. package/apps/pwa/out/market/index.txt +14 -14
  90. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  91. package/apps/pwa/out/missions/placeholder/index.txt +14 -14
  92. package/apps/pwa/out/morning/index.html +1 -1
  93. package/apps/pwa/out/morning/index.txt +14 -14
  94. package/apps/pwa/out/observatory/index.html +1 -1
  95. package/apps/pwa/out/observatory/index.txt +14 -14
  96. package/apps/pwa/out/ops/checklist/index.html +1 -1
  97. package/apps/pwa/out/ops/checklist/index.txt +14 -14
  98. package/apps/pwa/out/ops/release/index.html +1 -1
  99. package/apps/pwa/out/ops/release/index.txt +14 -14
  100. package/apps/pwa/out/ops/seats/index.html +1 -1
  101. package/apps/pwa/out/ops/seats/index.txt +14 -14
  102. package/apps/pwa/out/outputs/index.html +1 -1
  103. package/apps/pwa/out/outputs/index.txt +14 -14
  104. package/apps/pwa/out/reflection/index.html +1 -1
  105. package/apps/pwa/out/reflection/index.txt +15 -15
  106. package/apps/pwa/out/scheduler/index.html +1 -1
  107. package/apps/pwa/out/scheduler/index.txt +14 -14
  108. package/apps/pwa/out/sessions/index.html +1 -1
  109. package/apps/pwa/out/sessions/index.txt +14 -14
  110. package/apps/pwa/out/settings/devices/index.html +1 -1
  111. package/apps/pwa/out/settings/devices/index.txt +14 -14
  112. package/apps/pwa/out/settings/index.html +1 -1
  113. package/apps/pwa/out/settings/index.txt +14 -14
  114. package/apps/pwa/out/setup/done/index.html +1 -1
  115. package/apps/pwa/out/setup/done/index.txt +14 -14
  116. package/apps/pwa/out/setup/index.html +1 -1
  117. package/apps/pwa/out/setup/index.txt +14 -14
  118. package/apps/pwa/out/share/index.html +1 -1
  119. package/apps/pwa/out/share/index.txt +14 -14
  120. package/apps/pwa/out/showroom/index.html +1 -1
  121. package/apps/pwa/out/showroom/index.txt +14 -14
  122. package/apps/pwa/out/tasks/index.html +1 -1
  123. package/apps/pwa/out/tasks/index.txt +14 -14
  124. package/apps/pwa/out/term/index.html +1 -1
  125. package/apps/pwa/out/term/index.txt +14 -14
  126. package/apps/pwa/out/today/index.html +1 -1
  127. package/apps/pwa/out/today/index.txt +14 -14
  128. package/apps/pwa/out/trace/index.html +1 -1
  129. package/apps/pwa/out/trace/index.txt +14 -14
  130. package/apps/pwa/out/vault/index.html +1 -1
  131. package/apps/pwa/out/vault/index.txt +14 -14
  132. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  133. package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
  134. package/apps/pwa/out/workflows/index.html +1 -1
  135. package/apps/pwa/out/workflows/index.txt +14 -14
  136. package/apps/pwa/out/workspace/index.html +1 -1
  137. package/apps/pwa/out/workspace/index.txt +14 -14
  138. package/apps/pwa/out/worktrees/index.html +1 -1
  139. package/apps/pwa/out/worktrees/index.txt +14 -14
  140. package/graphs/context/nightly-condense.yaml +21 -0
  141. package/graphs/context/recipes.yaml +12 -0
  142. package/graphs/demo/inside-seed.yaml +20 -0
  143. package/graphs/demo/recipes.yaml +12 -0
  144. package/package.json +1 -1
  145. package/plugins/card-followup/examples/sample-card.png +0 -0
  146. package/scripts/lib/telegram-inject-args.ts +31 -0
  147. package/scripts/measure-pod-memory-by-goal.ts +130 -0
  148. package/scripts/release-loop/auto-approve-node.ts +1 -1
  149. package/scripts/release-loop/checklist-gate-node.ts +2 -1
  150. package/scripts/release-loop/gate-node.ts +8 -2
  151. package/scripts/release-loop/ops-upgrade-node.ts +47 -6
  152. package/scripts/release-loop/publish-node.ts +4 -1
  153. package/scripts/release-loop/version-node.ts +13 -3
  154. package/scripts/telegram-inject.ts +14 -6
  155. package/scripts/test-diet/remeasure-list.ts +112 -0
  156. package/scripts/ux/demo-rehearsal.ts +17 -13
  157. package/scripts/ux/demo-seed.ts +108 -0
  158. package/scripts/ux/lib/rehearsal-verdict.ts +12 -5
  159. package/src/agent-mission/driver.ts +138 -16
  160. package/src/agent-mission/pty-decision.ts +1 -1
  161. package/src/autopilot/pty-control-loop.ts +4 -1
  162. package/src/chat/index.ts +1 -0
  163. package/src/cli/persona-cli.ts +17 -14
  164. package/src/cli/pod-cli.ts +17 -0
  165. package/src/cli/pod-memory-advice.ts +35 -0
  166. package/src/cli/release-cli.ts +46 -6
  167. package/src/context-bus/context-now-surfaces.ts +17 -0
  168. package/src/context-bus/context-now.ts +2 -2
  169. package/src/context-bus/coord-events.ts +2 -2
  170. package/src/context-bus/nightly-condense.ts +153 -0
  171. package/src/context-bus/session-events.ts +35 -0
  172. package/src/dashboard/dashboard-status-lines.ts +2 -0
  173. package/src/dashboard/index.ts +8 -0
  174. package/src/dashboard/slash-runtime/dashboard-handlers.ts +24 -0
  175. package/src/domains/outbound-alert.ts +99 -31
  176. package/src/domains/outbound-log-probe.ts +8 -0
  177. package/src/execution-loop/launch-gate.ts +17 -8
  178. package/src/field-note/telegram.ts +142 -0
  179. package/src/graph-runner/graph-grow-llm.ts +23 -13
  180. package/src/graph-runner/graph-grow.ts +5 -2
  181. package/src/graph-runner/runner.ts +12 -8
  182. package/src/harness/harness-cli-command.ts +138 -16
  183. package/src/hooks/consult-intake.ts +153 -0
  184. package/src/hooks/receiver.ts +78 -1
  185. package/src/index.ts +33 -9
  186. package/src/intake-plane/discord-seat-work.ts +28 -2
  187. package/src/intake-plane/wish-card.ts +33 -0
  188. package/src/llm/difficulty.ts +1 -1
  189. package/src/maturity/feature-maturity.ts +2 -1
  190. package/src/nexus/api/http-server.ts +31 -8
  191. package/src/nexus/api/outbound-report.ts +40 -7
  192. package/src/nexus/api/personas.ts +95 -53
  193. package/src/nexus/api/task-cards-api.ts +19 -0
  194. package/src/nexus/api/workflow-history.ts +88 -0
  195. package/src/nexus/api/workflows.ts +52 -0
  196. package/src/nexus/outbound/delivery-ledger.ts +17 -8
  197. package/src/nexus/outbound/router.ts +8 -3
  198. package/src/persona/presets.ts +8 -1
  199. package/src/plugins/maker/market-bundle.ts +2 -1
  200. package/src/release-loop/checklist.ts +15 -3
  201. package/src/release-loop/feature-store.ts +24 -10
  202. package/src/release-loop/landed-but-yellow.ts +48 -0
  203. package/src/seat-loop/seat-loop.ts +168 -7
  204. package/src/self-dev/draft-sweep.ts +44 -10
  205. package/src/self-dev/draft-triage-rules.ts +54 -2
  206. package/src/self-implement/budget-gate.ts +29 -12
  207. package/src/self-implement/gate-candidate-ranking.ts +60 -0
  208. package/src/self-implement/gate-scope.ts +9 -8
  209. package/src/self-implement/headless-elanous-driver.ts +7 -2
  210. package/src/self-implement/orchestrator.ts +15 -0
  211. package/src/self-implement/test-seams.ts +1 -0
  212. package/src/task-orchestrator/surfaces/pod-command-job.ts +14 -10
  213. package/src/task-orchestrator/surfaces/self-implement-pod.ts +8 -0
  214. package/src/telegram-commands.ts +21 -0
  215. package/src/telegram-project-command.ts +78 -4
  216. package/src/telegram.ts +32 -5
  217. package/src/user-config.ts +8 -4
  218. package/src/version/packed-revision.json +1 -1
  219. package/apps/pwa/out/_next/static/chunks/2310-7a59f043f6db207e.js +0 -1
  220. package/apps/pwa/out/_next/static/chunks/2548-6e316138d347cefe.js +0 -1
  221. package/apps/pwa/out/_next/static/chunks/3869-a39d1d9921e10d43.js +0 -1
  222. package/apps/pwa/out/_next/static/chunks/507-5acd98bd6dab2d8a.js +0 -1
  223. package/apps/pwa/out/_next/static/chunks/5445-745eb795c5963d79.js +0 -1
  224. package/apps/pwa/out/_next/static/chunks/app/approvals/page-1dcdc58fc2de2454.js +0 -1
  225. package/apps/pwa/out/_next/static/chunks/app/consult/page-8fd36984f549270a.js +0 -1
  226. package/apps/pwa/out/_next/static/chunks/app/exec/page-4cd1de371f8ad048.js +0 -1
  227. package/apps/pwa/out/_next/static/chunks/app/field/page-d99f89657828421c.js +0 -1
  228. package/apps/pwa/out/_next/static/chunks/app/inside/page-50cb2a0eb15e6c83.js +0 -1
  229. package/apps/pwa/out/_next/static/chunks/app/layout-d6b1d156fb95e74b.js +0 -1
  230. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6b15dd6456c5df09.js +0 -1
  231. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-371423d1a573d64b.js +0 -1
  232. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4b764b125339ac17.js +0 -1
  233. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cdf8e4b01067bcf1.js +0 -1
  234. package/apps/pwa/out/_next/static/chunks/app/page-94c82eb0ae5abb32.js +0 -1
  235. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4dc614f3ce043e63.js +0 -1
  236. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-d02c782fc792e2af.js +0 -1
  237. package/apps/pwa/out/_next/static/chunks/app/share/page-dc6a79fb003f746c.js +0 -1
  238. package/apps/pwa/out/_next/static/chunks/app/showroom/page-0fffb84cafdc9da6.js +0 -1
  239. package/apps/pwa/out/_next/static/chunks/app/vault/page-fca096e3e860306f.js +0 -1
  240. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9ebfa78f0d9885c3.js +0 -1
  241. package/apps/pwa/out/_next/static/chunks/app/workflows/page-3dc5f21f7e39622d.js +0 -1
  242. package/apps/pwa/out/_next/static/chunks/app/workspace/page-c6da2b468454532d.js +0 -1
  243. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-93bc70e36f595414.js +0 -1
  244. package/apps/pwa/out/_next/static/css/543f56bcb1f79fca.css +0 -1
  245. /package/apps/pwa/out/_next/static/{Y4zKzL62sakG5momz3SoQ → -6XrAoD3eU7NyMHAE4xPS}/_buildManifest.js +0 -0
  246. /package/apps/pwa/out/_next/static/{Y4zKzL62sakG5momz3SoQ → -6XrAoD3eU7NyMHAE4xPS}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7277],{5883:(e,t,n)=>{n.d(t,{sS:()=>f});var r=n(60500),i=n(50733);async function o(e){let t=new Blob(["\nclass ElanousCaptureProcessor extends AudioWorkletProcessor {\n constructor(opts) {\n super();\n const o = opts.processorOptions || {};\n this.targetHz = o.targetHz | 0 || 16000;\n this.frameBytes = o.frameBytes | 0 || 640;\n // int16 → 2 bytes per sample\n this.frameSamples = this.frameBytes >> 1;\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n this.ratio = sampleRate / this.targetHz;\n this.acc = 0;\n }\n process(inputs) {\n const input = inputs[0];\n if (!input || !input[0]) return true;\n const ch0 = input[0];\n for (let i = 0; i < ch0.length; i++) {\n this.acc += 1;\n if (this.acc < this.ratio) continue;\n this.acc -= this.ratio;\n const v = Math.max(-1, Math.min(1, ch0[i]));\n this.outBuf[this.outIdx++] = v < 0 ? Math.round(v * 0x8000) : Math.round(v * 0x7fff);\n if (this.outIdx >= this.frameSamples) {\n const copy = new Int16Array(this.outBuf);\n this.port.postMessage(copy.buffer, [copy.buffer]);\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n }\n }\n return true;\n }\n}\nregisterProcessor('elanous-capture', ElanousCaptureProcessor);\n"],{type:"application/javascript"}),n=URL.createObjectURL(t);try{await e.audioWorklet.addModule(n)}finally{URL.revokeObjectURL(n)}}async function a(e){var t,n,r,a;let s=null!=(t=e.targetSampleRateHz)?t:16e3,l=null!=(n=e.framePcmBytes)?n:640,c=null,u=null,d=null,p=null,f=null;(0,i.cY)("voice.capture.start",{targetHz:s,frameBytes:l});try{(0,i.cY)("voice.capture.gum-request",{hasMediaDevices:"undefined"!=typeof navigator&&!!navigator.mediaDevices,hasGetUserMedia:"undefined"!=typeof navigator&&"function"==typeof(null==(r=navigator.mediaDevices)?void 0:r.getUserMedia)}),c=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),(0,i.cY)("voice.capture.gum-ok",{tracks:c.getTracks().map(e=>({kind:e.kind,label:e.label,state:e.readyState}))}),u=new AudioContext,(0,i.cY)("voice.capture.audiocontext",{sampleRate:u.sampleRate,state:u.state}),await o(u),(0,i.cY)("voice.capture.worklet-loaded"),(d=new AudioWorkletNode(u,"elanous-capture",{processorOptions:{targetHz:s,frameBytes:l}})).port.onmessage=t=>{e.onFrame(new Uint8Array(t.data))},p=u.createMediaStreamSource(c),(f=u.createGain()).gain.value=1,p.connect(f),f.connect(d),(0,i.cY)("voice.capture.wired",{hasGain:!0})}catch(n){let t=n instanceof Error?n:Error(String(n));throw(0,i.cY)("voice.capture.error",{name:t.name,message:t.message}),null==(a=e.onError)||a.call(e,t),c&&c.getTracks().forEach(e=>e.stop()),u&&await u.close(),t}let h=!1;return{async stop(){if(!h){h=!0;try{null==p||p.disconnect()}catch(e){}try{null==f||f.disconnect()}catch(e){}try{null==d||d.disconnect()}catch(e){}try{null==c||c.getTracks().forEach(e=>e.stop())}catch(e){}try{await (null==u?void 0:u.close())}catch(e){}}},setMicGain(e){if(!f||!u)return;let t=Number.isFinite(e)?Math.max(0,Math.min(1,e)):1;try{let e=u.currentTime;f.gain.cancelScheduledValues(e),f.gain.setValueAtTime(f.gain.value,e),f.gain.linearRampToValueAtTime(t,e+.005),(0,i.cY)("voice.mic.duck.set",{gain:t})}catch(e){try{f.gain.value=t}catch(e){}(0,i.cY)("voice.mic.duck.fallback",{gain:t,err:e instanceof Error?e.message:String(e)})}}}}let s={UPSTREAM_PCM:1,UPSTREAM_FINALIZE:2,UPSTREAM_HELLO:3,UPSTREAM_INTERRUPT:4,DOWNSTREAM_PCM:129,DOWNSTREAM_STATE:130,DOWNSTREAM_ERROR:131,DOWNSTREAM_TRANSCRIPT:132};function l(e,t){let n=new ArrayBuffer(4+t.byteLength),r=new DataView(n);return r.setUint8(0,e),r.setUint8(1,0),r.setUint16(2,0,!1),new Uint8Array(n,4).set(t),n}function c(e){return JSON.parse(new TextDecoder().decode(e))}var u=n(12502),d=n(67159);function p(e){return"speaking"===e?.5:1}function f(e){let[t,n]=(0,r.useState)("idle"),[o,f]=(0,r.useState)(null),[h,m]=(0,r.useState)(!1),g=(0,r.useRef)(null),y=(0,r.useRef)(null),v=(0,r.useRef)(null),k=(0,r.useRef)(e.onTranscript);(0,r.useEffect)(()=>{k.current=e.onTranscript},[e.onTranscript]);let b=(0,r.useRef)(e.onSpeechActivity);(0,r.useEffect)(()=>{b.current=e.onSpeechActivity},[e.onSpeechActivity]);let w=(0,r.useRef)(null);if(null===w.current){let e=(0,d.lu)();w.current=(0,u.cK)({speakingThresholdMultiplier:e.speakingThresholdMultiplier})}let x=(0,r.useRef)("idle"),I=(0,r.useCallback)(e=>{var t,r;let i=x.current;if(x.current=e,null==(t=w.current)||t.setSpeakingActive("speaking"===e),p(i)!==p(e))try{null==(r=g.current)||r.setMicGain(p(e))}catch(e){}n(e)},[]),A=(0,r.useCallback)(async()=>{var e,t,n;try{null==(e=v.current)||e.close()}catch(e){}try{await (null==(t=g.current)?void 0:t.stop())}catch(e){}try{await (null==(n=y.current)?void 0:n.close())}catch(e){}g.current=null,y.current=null,v.current=null},[]);(0,r.useEffect)(()=>()=>{A()},[A]);let S=(0,r.useCallback)(async()=>{f(null),I("connecting");try{let t=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!=(e=t.inputSampleRateHz)?e:24e3,r=new AudioContext,i=0,o=[];function a(){for(let e of o){try{e.stop()}catch(e){}try{e.disconnect()}catch(e){}}o=[],i=r.currentTime}async function s(){a();try{await r.close()}catch(e){}}return{enqueue:function(e){try{let t=e.byteLength>>1,a=new DataView(e.buffer,e.byteOffset,e.byteLength),s=new Float32Array(t);for(let e=0;e<t;e++){let t=a.getInt16(2*e,!0);s[e]=t<0?t/32768:t/32767}let l=r.createBuffer(1,t,n);l.copyToChannel(s,0);let c=r.createBufferSource();c.buffer=l,c.connect(r.destination);let u=r.currentTime,d=Math.max(u,i);c.start(d),i=d+l.duration,o.push(c),c.onended=()=>{o=o.filter(e=>e!==c)}}catch(e){var a;null==(a=t.onError)||a.call(t,e instanceof Error?e:Error(String(e)))}},cancel:a,close:s}}({onError:e=>f(e.message)});y.current=t;let n=function(e){let t,n="connecting",r=t=>{var r;n=t,null==(r=e.onSocketState)||r.call(e,t),(0,i.cY)("voice.ws.state",{state:t,url:e.url})};(0,i.cY)("voice.ws.construct",{url:e.url,hasToken:!!e.token,location:window.location.href,pageProto:window.location.protocol,wsProto:e.url.startsWith("wss:")?"wss":e.url.startsWith("ws:")?"ws":"(other)"});try{(t=new WebSocket(e.url)).binaryType="arraybuffer",(0,i.cY)("voice.ws.constructed",{readyState:t.readyState,url:t.url})}catch(a){var o;r("error");let t=a instanceof Error?a.message:String(a);return(0,i.cY)("voice.ws.construct-throw",{msg:t,url:e.url}),null==(o=e.onError)||o.call(e,{error:"ws construct failed: ".concat(t)}),{sendUpstreamPcm(){},finalize(){},sendInterrupt(){},close(){},getState:()=>n}}return t.onopen=()=>{var n;(0,i.cY)("voice.ws.open",{readyState:t.readyState,url:t.url,protocol:t.protocol,extensions:t.extensions}),r("open");let o={...null!=(n=e.hello)?n:{},...e.token?{token:e.token}:{}},a=new TextEncoder().encode(JSON.stringify(o));t.send(l(s.UPSTREAM_HELLO,a)),(0,i.cY)("voice.ws.hello-sent",{helloKeys:Object.keys(o)})},t.onmessage=t=>{var n,r,i,o,a,l;if("string"==typeof t.data){null==(n=e.onError)||n.call(e,{error:"unexpected text frame: ".concat(t.data.slice(0,200))});return}try{let n=function(e){if(e.byteLength<4)throw Error("frame too short (".concat(e.byteLength," bytes)"));let t=new DataView(e);return{kind:t.getUint8(0),flags:t.getUint8(1),payload:new Uint8Array(e,4)}}(t.data);switch(n.kind){case s.DOWNSTREAM_PCM:e.onDownstreamPcm(n.payload);break;case s.DOWNSTREAM_STATE:{let{state:t}=c(n.payload);null==(r=e.onState)||r.call(e,t);break}case s.DOWNSTREAM_ERROR:{let t=c(n.payload);null==(i=e.onError)||i.call(e,t);break}case s.DOWNSTREAM_TRANSCRIPT:{let t=c(n.payload);null==(o=e.onTranscript)||o.call(e,t);break}default:null==(a=e.onError)||a.call(e,{error:"unknown frame kind 0x".concat(n.kind.toString(16))})}}catch(t){null==(l=e.onError)||l.call(e,{error:t instanceof Error?t.message:String(t)})}},t.onclose=e=>{(0,i.cY)("voice.ws.close",{code:e.code,reason:e.reason,wasClean:e.wasClean,readyState:t.readyState,priorState:n}),r("closed")},t.onerror=n=>{var o;let a={readyState:t.readyState,url:t.url,eventType:n.type,isTrusted:n.isTrusted};(0,i.cY)("voice.ws.error",a),r("error"),null==(o=e.onError)||o.call(e,{error:"websocket transport error (readyState=".concat(t.readyState,", url=").concat(t.url,")")})},{sendUpstreamPcm:function(e){"open"===n&&t.send(l(s.UPSTREAM_PCM,e))},finalize:function(){"open"===n&&t.send(l(s.UPSTREAM_FINALIZE,new Uint8Array(0)))},sendInterrupt:function(){"open"===n&&t.send(l(s.UPSTREAM_INTERRUPT,new Uint8Array(0)))},close:function(){if("closed"!==n&&"closing"!==n){r("closing");try{t.close(1e3,"client-close")}catch(e){}}},getState:()=>n}}({url:e.wsUrl,...e.token?{token:e.token}:{},hello:{surface:"pwa",userAgent:navigator.userAgent},onDownstreamPcm:e=>{t.enqueue(e),I("speaking")},onState:e=>I(function(e){switch(e){case"connecting":return"connecting";case"streaming":return"listening";default:return"idle"}}(e)),onTranscript:e=>{if("final"===e.kind){var t;null==(t=k.current)||t.call(k,e.text)}},onError:e=>{I("error"),f(e.error)},onSocketState:e=>{let t="connecting"===e?"connecting":"error"===e?"error":"closed"===e?"idle":null;t&&I(t)}});v.current=n,g.current=await a({onFrame:e=>{n.sendUpstreamPcm(e);let t=w.current;if(t&&t.push(e)){(0,i.cY)("voice.barge-in.rms-fire");let e=b.current;try{null==e||e()}catch(e){}if("speaking"===x.current){var r,o;try{null==(r=y.current)||r.cancel()}catch(e){}try{null==(o=v.current)||o.sendInterrupt()}catch(e){}I("listening"),(0,i.cY)("voice.barge-in.auto-fire")}}},onError:e=>{I("error"),f(e.message)}}),m(!0),I("listening")}catch(e){I("error"),f(e instanceof Error?e.message:String(e)),await A()}},[e.wsUrl,e.token,A,I]),T=(0,r.useCallback)(async()=>{var e,t;m(!1),null==(e=v.current)||e.finalize(),await A(),null==(t=w.current)||t.reset(),I("idle")},[A,I]),C=(0,r.useCallback)(async()=>{h?await T():await S()},[h,S,T]),E=(0,r.useCallback)(async()=>{h||await S()},[h,S]);return{phase:t,errorMsg:o,active:h,start:S,stop:T,toggle:C,forceListen:E,interrupt:(0,r.useCallback)(()=>{var e,t;try{null==(e=y.current)||e.cancel()}catch(e){}try{null==(t=v.current)||t.sendInterrupt()}catch(e){}"speaking"===x.current&&(I("listening"),(0,i.cY)("voice.barge-in.manual-fire"))},[I])}}},10037:(e,t,n)=>{n.d(t,{C5:()=>a,hG:()=>c});var r=n(79450),i=n(50733);let o=new Set(["cli","pwa","tg","dc"]);function a(e){var t;let n;e.origin&&o.has(e.origin)?n=e.origin:"telegram"===e.source?n="tg":"cli"===e.source&&(n="cli");let r=(null!=(t=e.preview)?t:"").trim();return{id:e.id,msgCount:e.messageCount,lastTurnAt:e.updatedAt,...r?{lastMsgPreview:r}:{},...n?{origin:n}:{}}}class s{list(){return this.cache}start(){!this.disposed&&(this.timer||(this.scheduleTimer(),this.openEventStream(),this.forceRefresh()))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.currentIntervalMs=null),this.closeEventStream()}dispose(){this.disposed=!0,this.stop(),this.listeners.clear()}enterActive(){this.activeCount+=1,this.scheduleTimer();let e=!1;return()=>{e||(e=!0,this.activeCount=Math.max(0,this.activeCount-1),this.scheduleTimer())}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}forceRefresh(){if(this.inFlight)return this.inFlight;let e=this.fetchAndStore().finally(()=>{this.inFlight=null});return this.inFlight=e,e}async forget(e){(0,i.cY)("webterm.sessions.forget",{sessionId:e}),await this.api.delete(e),await this.forceRefresh()}scheduleTimer(){if(this.disposed)return;let e=this.activeCount>0?this.opts.activeIntervalMs:this.opts.idleIntervalMs;this.currentIntervalMs===e&&this.timer||(this.timer&&(clearInterval(this.timer),this.timer=null),this.currentIntervalMs=e,this.timer=setInterval(()=>{this.forceRefresh()},e))}openEventStream(){if(this.es||this.disposed||"undefined"==typeof EventSource)return;let e=this.client.sessionStoreEventsUrl();if(e)try{let t=new EventSource(e),n=()=>{this.sseDebounce&&clearTimeout(this.sseDebounce),this.sseDebounce=setTimeout(()=>{this.forceRefresh()},500)};t.addEventListener("session.created",n),t.addEventListener("session.updated",n),t.onmessage=n,this.es=t}catch(e){this.es=null}}closeEventStream(){var e;this.sseDebounce&&(clearTimeout(this.sseDebounce),this.sseDebounce=null),null==(e=this.es)||e.close(),this.es=null}async fetchAndStore(){try{let e=await this.api.list(),t=(Array.isArray(null==e?void 0:e.sessions)?e.sessions:[]).map(a);if(function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.msgCount!==i.msgCount||r.lastTurnAt!==i.lastTurnAt||r.lastMsgPreview!==i.lastMsgPreview||r.origin!==i.origin)return!1}return!0}(this.cache,t))return;for(let e of(this.cache=t,this.listeners))try{e()}catch(e){}}catch(e){(0,i.cY)("webterm.sessions.fetch.error",{err:String(e)})}}constructor(e,t={activeIntervalMs:1e4,idleIntervalMs:6e4}){this.client=e,this.opts=t,this.cache=[],this.listeners=new Set,this.activeCount=0,this.timer=null,this.currentIntervalMs=null,this.inFlight=null,this.es=null,this.sseDebounce=null,this.disposed=!1,this.api=new r.jU(e)}}let l=null;function c(e){if(l&&l.client===e)return l.svc;l&&l.svc.dispose();let t=new s(e);return l={client:e,svc:t},t.start(),t}},10310:(e,t,n)=>{n.d(t,{K4:()=>i,VQ:()=>a});let r=new Set(["normal","warn","danger","success","info","muted"]);function i(e,t){switch(t.kind){case"agent.thinking":return function(e,t){var n,r;let i=null!=(n=t.payload)?n:{},o=null!=(r=i.msg)?r:"Thinking",a=i.metrics&&"number"==typeof i.metrics.elapsedMs&&"number"==typeof i.metrics.tokenCount?{elapsedMs:i.metrics.elapsedMs,tokenCount:i.metrics.tokenCount}:void 0,s={kind:"agent_thinking",blockId:t.blockId,msg:o,done:"end"===t.phase,...a?{metrics:a}:{},...t.asciiFallback.length>0?{asciiFallback:t.asciiFallback}:{}},l=e.findIndex(e=>"agent_thinking"===e.kind&&e.blockId===t.blockId);return -1===l?e.push(s):e[l]=s,"applied"}(e,t);case"agent.status":var n=e,r=t;let i=r.payload;if(!i||"string"!=typeof i.agentId||"string"!=typeof i.status)return"unhandled";let a={kind:"agent_status",blockId:r.blockId,agentId:i.agentId,status:i.status,...void 0!==i.lastEvent?{lastEvent:i.lastEvent}:{}},s=n.findIndex(e=>"agent_status"===e.kind&&e.blockId===r.blockId);return -1===s?n.push(a):n[s]=a,"applied";case"agent.plan":var l=e,c=t;let u=c.payload;if(!u||"string"!=typeof u.ref||!Array.isArray(u.steps))return"unhandled";let d={kind:"agent_plan",blockId:c.blockId,ref:u.ref,steps:u.steps.map(e=>({text:e.text,status:e.status})),...void 0!==u.activeIndex?{activeIndex:u.activeIndex}:{}},p=l.findIndex(e=>"agent_plan"===e.kind&&e.blockId===c.blockId);return -1===p?l.push(d):l[p]=d,"applied";case"tool.diff":var f=e,h=t;let m=h.payload;if(!m||"string"!=typeof m.filePath||!Array.isArray(m.hunks))return"unhandled";for(let e of m.hunks)if("number"!=typeof e.oldStart||"number"!=typeof e.oldLines||"number"!=typeof e.newStart||"number"!=typeof e.newLines||!Array.isArray(e.lines))return"unhandled";let g={kind:"tool_diff",blockId:h.blockId,filePath:m.filePath,...void 0!==m.language?{language:m.language}:{},hunks:m.hunks.map(e=>({oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines,lines:e.lines.map(e=>({kind:e.kind,text:e.text}))})),...void 0!==h.parentToolCallId?{parentToolCallId:h.parentToolCallId}:{}},y=f.findIndex(e=>"tool_diff"===e.kind&&e.blockId===h.blockId);return -1===y?f.push(g):f[y]=g,"applied";case"tool.search-hit":return function(e,t){let n=t.payload;if(!n||"string"!=typeof n.query||!Array.isArray(n.hits)||"number"!=typeof n.accumCount)return"unhandled";for(let e of n.hits)if("string"!=typeof e.filePath||"number"!=typeof e.line||"string"!=typeof e.snippet)return"unhandled";let r=e.findIndex(e=>"tool_search_hits"===e.kind&&e.blockId===t.blockId),i=n.hits.map(e=>({filePath:e.filePath,line:e.line,snippet:e.snippet,...void 0!==e.column?{column:e.column}:{},...Array.isArray(e.contextBefore)?{contextBefore:[...e.contextBefore]}:{},...Array.isArray(e.contextAfter)?{contextAfter:[...e.contextAfter]}:{}})),o=i;if(-1!==r&&"delta"===t.phase){let t=e[r],n=new Set(t.hits.map(e=>{var t;return"".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0)})),a=i.filter(e=>{var t;return!n.has("".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0))});o=[...t.hits,...a]}let a={kind:"tool_search_hits",blockId:t.blockId,query:n.query,hits:o,accumCount:n.accumCount,...n.truncated?{truncated:!0}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===r?e.push(a):e[r]=a,"applied"}(e,t);case"tool.progress":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.stream||!o.has(r.stream)||!Array.isArray(r.lines))return"unhandled";for(let e of r.lines)if("string"!=typeof e)return"unhandled";let i=e.findIndex(e=>"tool_progress"===e.kind&&e.blockId===t.blockId);if(-1===i)n=[...r.lines];else{let o=e[i];n="update"===t.phase?[...r.lines]:[...o.lines,...r.lines]}let a={kind:"tool_progress",blockId:t.blockId,stream:r.stream,lines:n,done:"end"===t.phase,...void 0!==r.bytesSoFar?{bytesSoFar:r.bytesSoFar}:{},...void 0!==r.exitCode?{exitCode:r.exitCode}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===i?e.push(a):e[i]=a,"applied"}(e,t);case"debug.line":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.category||"string"!=typeof r.event||"number"!=typeof r.loggedAt)return"unhandled";let i={seq:t.seq,category:r.category,event:r.event,...void 0!==r.data?{data:r.data}:{},loggedAt:r.loggedAt},o=e.findIndex(e=>"debug_session"===e.kind&&e.blockId===t.blockId);-1===o?n=[i]:(n=[...e[o].lines,i]).length>200&&n.splice(0,n.length-200);let a={kind:"debug_session",blockId:t.blockId,lines:n};return -1===o?e.push(a):e[o]=a,"applied"}(e,t);case"perf.tick":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.metric||0===r.metric.length||"number"!=typeof r.value||!Number.isFinite(r.value))return"unhandled";let i={seq:t.seq,metric:r.metric,value:r.value,..."string"==typeof r.unit?{unit:r.unit}:{},emittedAt:t.emittedAt},o=e.findIndex(e=>"perf_session"===e.kind&&e.blockId===t.blockId);-1===o?n=[i]:(n=[...e[o].samples,i]).length>60&&n.splice(0,n.length-60);let a={kind:"perf_session",blockId:t.blockId,samples:n};return -1===o?e.push(a):e[o]=a,"applied"}(e,t);default:return"unhandled"}}let o=new Set(["stdout","stderr","http","generic"]);function a(e,t){let n=t.payload;if(!n||"string"!=typeof n.key||0===n.key.length)return"unhandled";if("end"===t.phase)return e.has(n.key)?(e.delete(n.key),"applied"):"unhandled";if("string"!=typeof n.value)return"unhandled";let i={key:n.key,value:n.value,..."number"==typeof n.priority&&Number.isFinite(n.priority)?{priority:n.priority}:{},..."string"==typeof n.tone&&r.has(n.tone)?{tone:n.tone}:{},..."string"==typeof n.glyph&&n.glyph.length>0?{glyph:n.glyph}:{}};return e.set(n.key,i),"applied"}},12127:(e,t,n)=>{n.d(t,{z:()=>g});var r=n(54456),i=n(60500),o=n(75591),a=n(93684),s=n(75361),l=n(3389),c=n(71829),u=n(36581),d=n(50733),p=n(21569);function f(){var e,t;if("undefined"==typeof globalThis)return null;let n=globalThis;return null!=(t=null!=(e=n.SpeechRecognition)?e:n.webkitSpeechRecognition)?t:null}async function h(e){var t,n;let r=e.transcript.trim();if(!r)return{ok:!1,status:0,reason:"empty transcript"};let i=e.baseUrl.replace(/\/$/,"");if(!i)return{ok:!1,status:0,reason:"baseUrl not configured"};let o=null!=(t=e.fetchImpl)?t:"undefined"!=typeof fetch?fetch:null;if(!o)return{ok:!1,status:0,reason:"fetch unavailable"};try{let t=await o("".concat(i,"/v1/intake"),{method:"POST",headers:{"content-type":"application/json",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:JSON.stringify(function(e){let t={text:e.transcript.trim(),actor:"pwa-voice",channelContext:{kind:"pwa-voice"}};return e.intakeId&&(t.intakeId=e.intakeId),t}({transcript:r,...e.intakeId?{intakeId:e.intakeId}:{}}))});if(!t.ok){let e=await t.text().catch(()=>"");return{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let a=await t.json().catch(()=>({}));return{ok:!0,intakeId:null!=(n=a.intakeId)?n:""}}catch(e){return{ok:!1,status:0,reason:String(e instanceof Error?e.message:e)}}}function m(e){let{phase:t,transcript:n,onTranscriptChange:i,error:c,apiAvailable:u,onPressStart:d,onPressEnd:p,onConfirm:f,onCancel:h}=e,m="recording"===t,g="submitting"===t;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onPointerDown:u?d:void 0,onPointerUp:u?p:void 0,onPointerLeave:m?p:void 0,disabled:!u||g,"aria-label":u?"음성 메모 (길게 누르기)":"음성 메모 (브라우저 미지원)",title:u?"길게 눌러 녹음 → intake 저장":"브라우저가 Web Speech API 미지원","data-testid":"showroom-voice-button","data-phase":t,className:"rounded p-1.5 transition disabled:cursor-not-allowed disabled:opacity-50 ".concat(m?"animate-pulse bg-red-500 text-white":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:g?(0,r.jsx)(o.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(a.A,{className:"h-3.5 w-3.5"})}),("review"===t||"submitting"===t)&&(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Voice intake review","data-testid":"showroom-voice-modal",className:"fixed inset-0 z-40 flex items-center justify-center bg-black/40 p-4 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"flex w-[min(calc(100vw-2rem),28rem)] flex-col gap-3 rounded-2xl border border-zinc-200 bg-white p-4 shadow-2xl dark:border-zinc-800 dark:bg-zinc-900",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:"음성 메모 검토"}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"aria-label":"cancel","data-testid":"showroom-voice-cancel",className:"rounded p-1 text-zinc-500 hover:bg-zinc-100 disabled:opacity-50 dark:text-zinc-400 dark:hover:bg-zinc-800",children:(0,r.jsx)(s.A,{className:"h-4 w-4"})})]}),(0,r.jsx)("textarea",{value:n,onChange:e=>i(e.target.value),disabled:g,placeholder:"(녹음된 텍스트가 비어있습니다)",rows:4,"data-testid":"showroom-voice-transcript",className:"rounded border border-zinc-300 bg-white px-2 py-1.5 text-sm text-zinc-900 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"data-testid":"showroom-voice-discard",className:"flex-1 rounded-lg border border-zinc-300 bg-white px-3 py-1.5 text-sm font-medium text-zinc-800 transition hover:bg-zinc-100 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700",children:"버리기"}),(0,r.jsx)("button",{type:"button",onClick:f,disabled:g||0===n.trim().length,"data-testid":"showroom-voice-confirm",className:"flex-1 rounded-lg border border-emerald-500 bg-emerald-500 px-3 py-1.5 text-sm font-semibold text-white transition hover:bg-emerald-600 disabled:cursor-not-allowed disabled:opacity-50",children:(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,r.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Intake 저장"]})})]}),c&&(0,r.jsx)("div",{role:"alert","data-testid":"showroom-voice-error",className:"text-xs text-red-600 dark:text-red-400",children:c})]})})]})}function g(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];let{config:e}=(0,u.Q)(),[t,n]=(0,i.useState)("idle"),[o,a]=(0,i.useState)(""),[s,l]=(0,i.useState)(null),g=(0,i.useRef)(null),[y,v]=(0,i.useState)(!0);(0,i.useEffect)(()=>{v(null!==f())},[]);let k=()=>{n("idle"),a(""),l(null),g.current=null},b=async()=>{var t;if(0===o.trim().length)return;if(!e.baseUrl)return void l("Daemon URL 미설정 — Settings 에서 입력");n("submitting"),l(null),(0,d.cY)("showroom.voice.submit",{len:o.trim().length});let r=await h({baseUrl:e.baseUrl,...e.token?{token:e.token}:{},transcript:o});if(!r.ok){l("intake 실패: ".concat(r.reason)),n("review"),(0,d.cY)("showroom.voice.error",{status:r.status});return}c.oR.success("\uD83D\uDCE5 음성 메모 저장됨 \xb7 intake ".concat(r.intakeId||"(id 없음)")),(0,d.cY)("showroom.voice.ok",{intakeId:r.intakeId}),p.K.emit({surface:"pwa",intent:{layer:"utterance",kind:"pwa.utterance.voice_send",target:{kind:"intake",id:null!=(t=r.intakeId)?t:"(unknown)"},value:{transcriptLen:o.trim().length}},...r.intakeId?{context:{active_workflow_run_id:r.intakeId}}:{}}),k()};return(0,r.jsx)(m,{phase:t,transcript:o,onTranscriptChange:a,error:s,apiAvailable:y,onPressStart:()=>{if("idle"!==t)return;l(null),a(""),(0,d.cY)("showroom.voice.press-start",{});let e=function(){var e,t,n;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=null!=(e=r.recognitionImpl)?e:f();if(!i)return null;let o=new i;o.lang=null!=(t=r.lang)?t:"ko-KR",o.interimResults=!0,o.continuous=!0;let a="",s=!0,l=null,c=new Promise(e=>{l=e});o.onresult=e=>{var t;let n="";for(let t=0;t<e.results.length;t+=1){let r=e.results[t];if(!r)continue;let i=r[0];i&&(n+=i.transcript)}a=n,null==(t=r.onUpdate)||t.call(r,n)},o.onerror=e=>{var t;null==(t=r.onError)||t.call(r,{code:e.error,message:e.message})},o.onend=()=>{s=!1,l&&(l(a),l=null)};try{o.start()}catch(e){return null==(n=r.onError)||n.call(r,{code:"start-failed",message:String(e)}),null}return{get transcript(){return a},get active(){return s},async stop(){try{o.stop()}catch(e){}return c},async abort(){try{o.abort()}catch(e){}return c}}}({lang:"ko-KR",onUpdate:e=>a(e),onError:e=>{l("음성 인식 오류: ".concat(e.code)),(0,d.cY)("showroom.voice.recog-error",{code:e.code,message:e.message})}});if(!e)return void l("Web Speech API 미사용 — 브라우저가 미지원");g.current=e,n("recording")},onPressEnd:()=>{if("recording"!==t)return;let e=g.current;if(!e)return void n("idle");(0,d.cY)("showroom.voice.press-end",{}),e.stop().then(e=>{if(a(e),0===e.trim().length)return void k();n("review")})},onConfirm:()=>{b()},onCancel:k})}},12502:(e,t,n)=>{n.d(t,{Si:()=>a,cK:()=>o});var r=n(60500),i=n(50733);function o(){var e,t,n,r;let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=null!=(e=i.threshold)?e:.04,a=null!=(t=i.speakingThresholdMultiplier)?t:2,s=null!=(n=i.sustainMs)?n:150,l=null!=(r=i.frameMs)?r:20,c=Math.max(1,Math.ceil(s/l)),u=Math.max(1,Math.ceil(500/l)),d=0,p=0,f=!1,h=!1,m=()=>h?o*a:o;return{push(e){if(function(e){if(e.byteLength<2)return 0;let t=e.byteLength>>1,n=new Int16Array(e.buffer,e.byteOffset,t),r=0;for(let e=0;e<t;e+=1){let t=n[e]/32768;r+=t*t}return Math.sqrt(r/t)}(e)>=m()){if(d+=1,p=0,!f&&d>=c)return f=!0,!0}else d=0,p+=1,f&&p>=u&&(f=!1);return!1},reset(){d=0,p=0,f=!1},setSpeakingActive(e){h!==e&&(h=e,d=0,p=0)},effectiveThreshold:m}}function a(e){var t,n;let o=(0,r.useRef)(e.enabled);o.current=e.enabled;let a=(0,r.useRef)(e.onActivate);a.current=e.onActivate;let s=null!=(t=e.thresholdMs)?t:250,l=null==(n=e.ignoreFocusedInput)||n;(0,r.useEffect)(()=>{let e=null,t=!1,n=n=>{!(!o.current||"Space"!==n.code&&" "!==n.key||n.repeat||l&&function(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return"INPUT"===t||"TEXTAREA"===t||e.isContentEditable}(n.target))&&(t||(t=!0,e=setTimeout(()=>{t&&((0,i.cY)("voice.barge-in.spacebar-longpress",{ms:s}),a.current(n))},s)))},r=n=>{(!n||"Space"===n.code||" "===n.key)&&(t=!1,e&&(clearTimeout(e),e=null))};return window.addEventListener("keydown",n),window.addEventListener("keyup",r),window.addEventListener("blur",()=>r()),()=>{e&&clearTimeout(e),window.removeEventListener("keydown",n),window.removeEventListener("keyup",r),window.removeEventListener("blur",()=>r())}},[s,l])}},21259:(e,t,n)=>{n.d(t,{u:()=>d});var r=n(54456),i=n(60500),o=n(75591),a=n(6838),s=n(36581),l=n(71829),c=n(50733),u=n(55499);function d(e){let{onAttached:t}=e,{config:n}=(0,s.Q)(),[d,p]=(0,i.useState)(!1),f=(0,i.useRef)(null),h=async e=>{let r=e.target.files;if(e.target.value="",!r||0===r.length)return;if(!n.baseUrl)return void l.oR.error("Daemon URL 미설정 — Settings 에서 입력");p(!0);let i=Array.from(r);(0,c.cY)("webterm.files.pick",{count:i.length,totalBytes:i.reduce((e,t)=>e+t.size,0)});try{let e=await (0,u.K)(i.map(e=>({file:e,filename:e.name})),{baseUrl:n.baseUrl,...n.token?{token:n.token}:{}}),r=e.filter(e=>e.ok),o=e.filter(e=>!e.ok);r.length>0&&(l.oR.success(1===r.length?"\uD83D\uDCCE ".concat(r[0].meta.filename):"\uD83D\uDCCE ".concat(r.length," files attached")),null==t||t(r.map(e=>e.meta))),o.length>0&&l.oR.error(1===o.length?"업로드 실패: ".concat(o[0].reason.slice(0,80)):"".concat(o.length," 파일 업로드 실패"))}finally{p(!1)}};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=f.current)?void 0:e.click()},disabled:d,"aria-label":"attach files",title:"attach files (Files.app \xb7 iCloud \xb7 multi-select)",className:"rounded p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:d?(0,r.jsx)(o.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(a.A,{className:"h-3.5 w-3.5"})}),(0,r.jsx)("input",{ref:f,type:"file",multiple:!0,className:"hidden",onChange:h})]})}},21569:(e,t,n)=>{n.d(t,{K:()=>r}),n(60500);let r={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},30898:(e,t,n)=>{n.d(t,{g:()=>a,h:()=>s});let r=["coo-admin","release-schedule","release-checklist"],i=/^ {0,3}(`{3,}|~{3,})([^\r\n]*)$/,o=/^ {0,3}(`{3,}|~{3,})[ \t]*$/;function a(e){let t,n=[],a=[],s=0;for(let l of e.matchAll(/[^\r\n]*(?:\r?\n|$)/g)){let c=l[0];if(!c)continue;let u=l.index,d=c.replace(/\r?\n$/,"");if(!t){let e=i.exec(d);e&&!("`"===e[1][0]&&e[2].includes("`"))&&(t={marker:e[1],start:u,bodyStart:u+c.length,isCard:/^elanous-card[ \t]*$/.test(e[2])});continue}let p=o.exec(d);if(p&&p[1][0]===t.marker[0]&&!(p[1].length<t.marker.length)){if(t.isCard)try{let i=JSON.parse(e.slice(t.bodyStart,u));!(null===i||"object"!=typeof i||Array.isArray(i))&&"string"==typeof i.kind&&r.includes(i.kind)&&Array.isArray(i.items)&&i.items.every(e=>!(null===e||"object"!=typeof e||Array.isArray(e))&&"string"==typeof e.title&&(null===e.due||"string"==typeof e.due&&/^\d{4}-\d{2}-\d{2}$/.test(e.due))&&(null===e.daysLeft||"number"==typeof e.daysLeft&&Number.isFinite(e.daysLeft))&&"string"==typeof e.state&&"string"==typeof e.owner&&(void 0===e.url||"string"==typeof e.url))&&(n.push(i),a.push(e.slice(s,t.start)),s=u+c.length)}catch(e){}t=void 0}}return a.push(e.slice(s)),{text:a.join(""),cards:n}}function s(e){let t=[],n=(e,r)=>{if("string"==typeof e)return void t.push(e);if(!(r>2)&&null!==e&&"object"==typeof e){if(Array.isArray(e)){for(let t of e)n(t,r+1);return}for(let t of["output","text","content","result"])t in e&&n(e[t],r+1)}};return n(e,0),t.flatMap(e=>a(e).cards).map(e=>"```elanous-card\n"+JSON.stringify(e)+"\n```\n").join("")}},38223:(e,t,n)=>{n.d(t,{g:()=>s,q:()=>a});var r=n(86127);let i=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function o(e){return(0,r.t)(e.replace(/\s+/g," ")).trim()}function a(e){var t;let n=e.split("\n"),r=(e,t)=>{let n=e.trim();return t&&(n=(n=n.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),o(n=(n=(n=(n=(n=(n=n.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},i=r(null!=(t=n[0])?t:"",!0);if(i)return i;let a=n.slice(1).find(e=>e.trim());return a?r(a,!1):""}function s(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:i.map(t=>{var n;let{id:r,seat:i}=t,o=null==e?void 0:e.seats.find(e=>e.seat===r);return{seat:i,now:(null==o?void 0:o.now)&&Array.from(a(o.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==o?void 0:o.landed)==null?"못 읽음":o.landed.length,blocked:(null==o?void 0:o.blocked)==null?"못 읽음":o.blocked.length,decisionsWaiting:null!=(n=null==o?void 0:o.pendingDecisions)?n:"못 읽음"}}),runs:(null!=(n=null==t?void 0:t.entries)?n:[]).filter(e=>"running"===e.status).sort((e,t)=>{var n,r;return(Date.parse(null!=(n=t.lastActivityTimestamp)?n:"")||0)-(Date.parse(null!=(r=e.lastActivityTimestamp)?r:"")||0)}).slice(0,6).map(e=>{var t;let n=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&o(t.slice(0,6))||"못 읽음"}(e.runId),stage:o(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(n)?Math.max(0,Math.floor((r-n)/1e3)):"못 읽음"}})}}},46942:(e,t,n)=>{n.d(t,{z:()=>o});var r=n(38223);let i=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function o(e,t){return e?i.flatMap(n=>{var i;let{id:o,seat:a}=n,s=null==(i=e.seats.find(e=>e.seat===o))?void 0:i.now;if(!s)return[];let l=Array.from((0,r.q)(s.text)).slice(0,24).join("");if(!l)return[];let c=Math.max(0,Math.floor((t-Date.parse(s.at))/6e4));return[{seat:a,text:l,ago:c<1?"방금":c<60?"".concat(c,"분 전"):c<1440?"".concat(Math.floor(c/60),"시간 전"):"하루 넘음"}]}):[]}},53391:(e,t,n)=>{n.d(t,{bK:()=>ep,Ju:()=>en,yN:()=>eI,Wl:()=>Q,FM:()=>ex,uS:()=>q,$Q:()=>eT,tw:()=>eS,ki:()=>ei,ZH:()=>eP,py:()=>eE,lY:()=>eC,HD:()=>eA,er:()=>ee});var r=n(30898),i=n(86127),o=n(46942);let a={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},s="[A-Za-z0-9_-]{1,39}",l={seat:RegExp("^elanous://seat-loop/(?:OP|MK|TC|UX)/\\d{4}-\\d{2}-\\d{2}#\\d+$"),event:new RegExp("^elanous://context/event/".concat(s,"$")),cell:new RegExp("^elanous://release/\\d+\\.\\d+\\.\\d+/checklist#".concat(s,"$")),decision:new RegExp("^elanous://decisions/".concat(s,"$"))};function c(e,t){if(!l[e].test(t))return!1;let n="seat"===e?t.replace(/\/seat-loop\/(?:OP|MK|TC|UX)\//,"/seat-loop/seat/"):t;return(0,i.t)(n)===n}function u(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function d(e){if(!u(e)||"string"!=typeof e.source)return!1;switch(e.kind){case"version":return"string"==typeof e.version;case"cell":return"string"==typeof e.version&&"string"==typeof e.id&&"string"==typeof e.title&&"string"==typeof e.status&&(null===e.owner||"string"==typeof e.owner);case"decision":return"string"==typeof e.id&&"string"==typeof e.title&&"string"==typeof e.status&&(null===e.dueAt||"string"==typeof e.dueAt);case"seat":return"string"==typeof e.seat&&"string"==typeof e.at&&"string"==typeof e.status&&(null===e.id||"string"==typeof e.id)&&(null===e.title||"string"==typeof e.title);default:return!1}}function p(e){return u(e)&&"string"==typeof e.at&&"string"==typeof e.kind&&"string"==typeof e.summary&&"string"==typeof e.source}function f(e){return Array.from((0,i.t)(e).trim()).slice(0,30).join("")}function h(e,t){var n,r;return Number.isFinite(Date.parse(e))&&null!=(r=null==(n=(0,o.z)({date:"",seats:[{seat:"TC",now:{text:"출처",at:e},landed:null,blocked:null,pendingDecisions:null,checklist:null}]},t)[0])?void 0:n.ago)?r:null}function m(e,t){if(!(u(e)&&"string"==typeof e.at&&(null===e.topic||"string"==typeof e.topic)&&Array.isArray(e.facts)&&e.facts.every(d)&&Array.isArray(e.events)&&e.events.every(p)&&Array.isArray(e.guide)&&e.guide.every(e=>"string"==typeof e)))return null;let n=e.facts.filter(e=>"seat"===e.kind).sort((e,t)=>t.at.localeCompare(e.at)).filter(e=>Object.hasOwn(a,e.seat)&&c("seat",e.source)).map(e=>({label:(0,i.t)("".concat(a[e.seat]," 자리 루프").concat(e.title?" \xb7 ".concat(f(e.title)):"")),ago:h(e.at,t),source:e.source})),r=e.events.filter(e=>c("event",e.source)).sort((e,t)=>t.at.localeCompare(e.at)).map(e=>({label:(0,i.t)("조율 채널 \xb7 ".concat(f(e.summary))),ago:h(e.at,t),source:e.source}));return[...n,...r,...e.facts.filter(e=>"cell"===e.kind&&c("cell",e.source)).map(e=>({label:(0,i.t)("".concat(e.version," 체크리스트 ").concat(e.id)),ago:null,source:e.source})),...e.facts.filter(e=>"decision"===e.kind&&"open"===e.status&&c("decision",e.source)).map(e=>({label:(0,i.t)("결정 대기 ".concat(e.id)),ago:null,source:e.source}))].slice(0,6)}var g=n(10310),y=n(43712),v=n(1355);async function k(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r,i;let o=await e.fork(t,n);if(o.ok&&o.id)return{kind:"forked",id:o.id};if(!o.ok&&("not_found"===o.error||/^HTTP 404(?=\s|:|$)/.test(null!=(r=o.error)?r:"")))return{kind:"empty"};return{kind:"error",error:(null!=(i=o.error)?i:"Fork failed").split(/\r?\n/,1)[0]}}catch(t){if((null==t?void 0:t.status)===404)return{kind:"empty"};let e=t instanceof Error?t.message:String(t);if("not_found"===e||/^HTTP 404(?=\s|:|$)/.test(e))return{kind:"empty"};return{kind:"error",error:e.split(/\r?\n/,1)[0]}}}var b=n(79450),w=n(50733),x=n(63868);function I(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<=100?e:null}function A(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<=100?Math.round(e):null}function S(e){return e.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]+/g," ").trim()}function T(e){return e.ok&&Array.isArray(e.rows)?e.rows.map(e=>"".concat(S(e.provider)," ").concat(S(e.account)," \xb7 ").concat(function(e){var t,n,r,i,o,a,s;let l=(null==(t=e.subscription)?void 0:t.status)==="available"?A(e.subscription.remainingPercent):null;if(null!==l)return"남은 ".concat(l,"%").concat(function(e){if("number"!=typeof e||!Number.isFinite(e)||e<0)return"";let t=Math.ceil(e/6e4);return t<60?" \xb7 ".concat(t,"분 뒤 초기화"):t<1440?" \xb7 ".concat(Math.ceil(t/60),"시간 뒤 초기화"):" \xb7 ".concat(Math.ceil(t/1440),"일 뒤 초기화")}(null==(n=e.subscription)?void 0:n.resetsInMs));let c=(null==(r=e.credits)?void 0:r.status)==="ok"?A(e.credits.usedPercent):null;if(null!==c)return"사용 ".concat(c,"%");let u=null!=(s=null!=(a=null==(i=e.subscription)?void 0:i.reason)?a:null==(o=e.credits)?void 0:o.reason)?s:"정보 없음";return"못 읽음(".concat(S(u).slice(0,40),")")}(e))):[]}var C=n(63118),E=n(66290);let P={codex:"balanced",luna:"budget",terra:"better",sol:"best",sonnet:"better",opus:"best",grok:"better"},M=[...E.Ql,...Object.keys(P)].join(" \xb7 "),R=["low","medium","high"];function U(e,t){if("model"===e){if(!t.length)return{kind:"model"};let e=t[0].toLowerCase(),n=(0,E.mp)(e)?e:Object.hasOwn(P,e)?P[e]:void 0;return 1===t.length&&n?{kind:"model",tier:n}:{kind:"model",invalid:!0}}return"reasoning"===e?t.length?1===t.length&&R.includes(t[0])?{kind:"reasoning",level:t[0]}:{kind:"reasoning",invalid:!0}:{kind:"reasoning"}:t.length?1===t.length&&"next"===t[0]?{kind:"provider",action:"next"}:2===t.length&&"use"===t[0]?{kind:"provider",action:"use",name:t[1]}:{kind:"provider",action:"show",invalid:!0}:{kind:"provider",action:"show"}}async function j(e){try{return(await e.client.fetchJson("/v1/setup/llm-providers")).activeProvider||e.provider}catch(t){return e.provider}}async function _(e,t){var n,r,i,o,a,s,l;if("model"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(M);if(!e.tier){let e=t.daemon?null==(r=await (0,C.me)(t.daemon))?void 0:r.llm:void 0;return e?"현재 모델: ".concat(e," \xb7 ").concat((0,E.f7)(await j(t),e).model," \xb7 쓸 수 있는 값: ").concat(M):"현재 모델: 확인할 수 없음 \xb7 쓸 수 있는 값: ".concat(M)}if(!(null==(n=t.daemon)?void 0:n.baseUrl)||"synced"!==await (0,C.tM)(t.daemon,e.tier))return"모델 설정을 저장하지 못했습니다 — 데몬 연결을 확인하세요";let i=await j(t);return"모델: ".concat((0,E.f7)(i,e.tier).model,"(으)로 바꿨습니다")}if("reasoning"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(R.join(" \xb7 "));if(e.level)return"추론 강도는 설정 화면에서 바꾸세요";let n=t.daemon?null==(i=await (0,C.me)(t.daemon))?void 0:i.llm:void 0;return n?"현재 추론 단계: 확인할 수 없음 \xb7 모델 티어 기본값: ".concat(null!=(o=(0,E.f7)(await j(t),n).reasoningLevel)?o:"off"," \xb7 추론 강도는 설정 화면에서 바꾸세요"):"현재 추론 단계: 확인할 수 없음 \xb7 추론 강도는 설정 화면에서 바꾸세요"}if(e.invalid)return"쓸 수 있는 값: next \xb7 use <이름>";try{let n=await t.client.fetchJson("/v1/setup/llm-providers"),r=(null!=(s=n.providers)?s:[]).filter(e=>"apiKey"===e.flow&&e.hasSavedKey||"auto"===e.flow),i=r.map(e=>e.provider).join(" \xb7 ");if("show"===e.action)return"현재 프로바이더: ".concat(n.activeProvider||"(없음)"," \xb7 쓸 수 있는 값: ").concat(i||"(없음)");let o="next"===e.action?r[(r.findIndex(e=>e.provider===n.activeProvider)+1)%r.length]:r.find(t=>t.provider===e.name);if(!o)return"쓸 수 있는 값: ".concat(i||"(없음)");if("next"===e.action&&o.provider===n.activeProvider)return"현재 프로바이더: ".concat(n.activeProvider);let c=await t.client.fetchJson("/v1/setup/llm-provider",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({provider:o.provider})});return(null==c?void 0:c.error)?"프로바이더 전환 실패: ".concat(c.error):"프로바이더: ".concat(null!=(l=null==c||null==(a=c.active)?void 0:a.provider)?l:o.provider,"(으)로 바꿨습니다")}catch(e){return"프로바이더 상태를 읽거나 저장하지 못했습니다 — 데몬 연결을 확인하세요"}}var D=n(10037);let O="쓰는 법: /resume <id 앞자리> (4자 이상)",N="대화 목록을 못 읽었습니다",z="elanous-session-";function L(e){return e.startsWith(z)?e.slice(z.length):e}function Y(e,t){return"sessions"===e?{kind:"sessions",count:1===t.length&&/^[1-9]\d*$/.test(t[0])?Math.min(Number(t[0]),30):10}:{kind:"resume",...1===t.length&&t[0].length>=4?{prefix:t[0]}:{}}}function F(e,t){let n=L(e),r=n.toLowerCase(),i=8;for(let n of t){if(n.id===e)continue;let t=L(n.id).toLowerCase(),o=0;for(;o<r.length&&o<t.length&&r[o]===t[o];)o++;i=Math.max(i,o+1)}return n.slice(0,i)}async function B(e,t){if("resume"===e.kind&&!e.prefix)return{text:O};try{let n=await new b.jU(t.client).list();if(!n.ok||!Array.isArray(n.sessions))return{text:N};let r=n.sessions.map(D.C5);return"sessions"===e.kind?{text:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Date.now(),i=[...e].sort((e,t)=>(Date.parse(t.lastTurnAt)||0)-(Date.parse(e.lastTurnAt)||0)).slice(0,n);return[...0===i.length?["대화가 없습니다"]:i.map(n=>{var i;return"".concat(F(n.id,e)).concat(n.id===t?" (지금)":""," \xb7 ").concat(n.msgCount,"개 \xb7 ").concat((0,b.KW)(n.lastTurnAt,r)," \xb7 ").concat((null!=(i=n.lastMsgPreview)?i:"").slice(0,40))}),"이어가기: /resume <앞자리>"].join("\n")}(r,t.sessionId,e.count)}:function(e,t,n){let r=L(e).toLowerCase();if(r.length<4)return{text:O};let i=t.filter(e=>L(e.id).toLowerCase().startsWith(r));if(0===i.length)return{text:"그런 대화가 없습니다 — /sessions 로 목록"};if(i.length>1)return{text:"".concat(i.map(e=>F(e.id,t)).join(" \xb7 "),"\n더 길게 쳐 주세요")};let o=i[0].id;return o===n?{text:"이미 이 대화입니다"}:{newSessionId:o,text:"".concat(F(o,t)," 대화로 옮겼습니다")}}(e.prefix,r,t.sessionId)}catch(e){return{text:N}}}var W=n(93337),J=n(95734);let K=/^https?:\/\/[^\s"']+\.(png|jpe?g|webp|gif)(\?[^\s"']*)?$/i,$=/https?:\/\/[^\s"'<>)\]]+?\.(?:png|jpe?g|webp|gif)(?:\?[^\s"'<>)\]]*)?/gi;function Z(e){var t,n;let r=null==(t=(null!=(n=e.split("?")[0])?n:"").split(".").pop())?void 0:t.toLowerCase();return"jpg"===r||"jpeg"===r?"image/jpeg":"webp"===r?"image/webp":"gif"===r?"image/gif":"image/png"}function q(e){if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=new Set,n=[],r=[],i=(e,o)=>{if(o>4||null===e)return;if(Array.isArray(e)){for(let t of e)i(t,o+1);return}if("object"!=typeof e)return;let a="string"==typeof e.uri?e.uri:e.result_url;if("string"==typeof a&&K.test(a)&&!t.has(a)){t.add(a);let r="string"==typeof e.description?e.description:"string"==typeof e.name?e.name:void 0;n.push({src:a,mediaType:Z(a),...r?{alt:r}:{}})}for(let[t,n]of Object.entries(e)){if("string"==typeof n&&("output"===t||"text"===t)){r.push(n);continue}i(n,o+1)}};for(let o of(i(e,0),r))for(let e of o.matchAll($)){let r=e[0];t.has(r)||(t.add(r),n.push({src:r,mediaType:Z(r)}))}return n}let H=new Map,V=new Set,X=[],G=!1;function Q(){return G&&(X=Array.from(H.values()).sort((e,t)=>{var n,r;return(null!=(n=e.priority)?n:50)-(null!=(r=t.priority)?r:50)}),G=!1),X}function ee(e){return V.add(e),()=>{V.delete(e)}}function et(e){return"hud.segment"===e.kind&&("applied"===(0,g.VQ)(H,e)&&function(){for(let e of(G=!0,V))try{e()}catch(e){(0,w.cY)("chat-runtime.hud.subscriber-error",e)}}(),!0)}function en(e){et(e)}let er=/^\[elanous\/feedback\/[a-zA-Z]+\] /;function ei(e,t){let n=(0,r.h)(t);return!(!n||e.some(e=>"text"===e.kind&&e.text===n))&&(e.push({kind:"text",text:n}),!0)}function eo(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return;let n=(Array.isArray(e.content)?e.content:[]).filter(e=>null!==e&&"object"==typeof e&&!Array.isArray(e)&&"resource"===e.type).map(e=>e.resource).find(e=>{var n;return!(null===e||"object"!=typeof e||Array.isArray(e))&&e.uri===t&&"string"==typeof(n=e.mimeType)&&"text/html"===n.split(";")[0].trim().toLowerCase()&&"string"==typeof e.text});if(!n)return;let r=n._meta,i=r&&"object"==typeof r&&!Array.isArray(r)?r.ui:void 0,o=i&&"object"==typeof i&&!Array.isArray(i)?i.csp:void 0,a=o&&"object"==typeof o&&!Array.isArray(o)?o.connectDomains:void 0,s=o&&"object"==typeof o&&!Array.isArray(o)?o.resourceDomains:void 0,l=Array.isArray(a)?a.filter(e=>"string"==typeof e):void 0,c=Array.isArray(s)?s.filter(e=>"string"==typeof e):void 0;return{html:n.text,...l?{connectDomains:l}:{},...c?{resourceDomains:c}:{}}}let ea="예산 상태를 읽지 못했습니다",es="elanous:wish:pending:";function el(e){if(!/^[0-9a-f-]{36}$/.test(e))return;let t=localStorage.getItem("".concat(es).concat(e));if(!t)return;let n=JSON.parse(t);if(n&&"object"==typeof n&&n.id===e&&"string"==typeof n.baseUrl&&"string"==typeof n.sessionId&&"string"==typeof n.text&&"string"==typeof n.ref&&n.ref.startsWith("".concat(n.sessionId,":"))&&n.ref.endsWith(":".concat(e)))return{id:e,baseUrl:n.baseUrl,sessionId:n.sessionId,text:n.text,ref:n.ref}}async function ec(e,t){if(!(null==e?void 0:e.baseUrl))return null;try{let n=await fetch("".concat(e.baseUrl.replace(/\/$/,"")).concat(t),{headers:e.token?{authorization:"Bearer ".concat(e.token)}:{}});return n.ok?await n.json():null}catch(e){return null}}async function eu(e){let t=await ec(e,"/v1/usage");if(t&&"object"==typeof t&&"ok"in t&&!0===t.ok&&"rows"in t&&Array.isArray(t.rows))return t}async function ed(e,t){let[n,r]=await Promise.all([ec(e,"/v1/setup/llm-providers"),(null==e?void 0:e.baseUrl)?(0,C.me)(e):null]),i=n&&"object"==typeof n&&"activeProvider"in n&&"string"==typeof n.activeProvider&&n.activeProvider?n.activeProvider:t;return{provider:i,...n&&(0,E.D9)(i)&&(null==r?void 0:r.llm)?{model:(0,E.f7)(i,r.llm).model}:{}}}let ep=[{name:"help",description:"이 도움말 보기"},{name:"session",description:"현재 대화 ID 보기"},{name:"remaining",description:"계정별 남은 양과 초기화 시각 보기"},{name:"status",description:"현재 대화\xb7모델\xb7데몬 판\xb7남은 양 보기"},{name:"fork",description:"현재 대화를 복사해 새 대화로 분기"},{name:"rewind",description:"N개 사용자 턴 이전으로 분기 (/rewind N)"},{name:"undo",description:"마지막 사용자 턴 이전으로 분기"},{name:"budget",description:"이번 달 지출과 알림 기준 보기"},{name:"history",description:"최근 N개 로컬 대화 요약 (기본 10개, 역할: 앞 80자)"},{name:"clear",description:"로컬 대화 기록 지우기"},{name:"sessions",description:"최근 대화 목록 보기 (/sessions [N])"},{name:"resume",description:"대화 이어가기 (/resume <id 앞자리>)"},{name:"model",description:"모델 티어 보기\xb7바꾸기 (/model <티어|별칭>)"},{name:"reasoning",description:"추론 단계 보기\xb7설정 안내 (/reasoning <low|medium|high>)"},{name:"provider",description:"프로바이더 보기\xb7바꾸기 (/provider next|use <이름>)"},{name:"wish",description:"소원을 카드로 남기기 (:wish <소원 한 줄> \xb7 :wish --pending \xb7 :wish --retry <작업 ID>)"}],ef=["help","session","fork","budget","history","clear","wish"],eh=["메타 명령(:이름 또는 /이름) (Meta commands):",...ep.map(e=>{let{name:t,description:n}=e;return" ".concat(ef.includes(t)?":":"/").concat(t.padEnd(16)).concat(n)})].join("\n"),em=new Set(["help","?","resume","clear","cls","status","st","now","wish","remaining","setup","quit","q","exit","run-skill","rs","run","ad","design","design-check","local","ll","session","sess","fork","rewind","mission","resume-turn","context","ctx","paste","sync","s","plugin","plugins","widget","widgets","log","memory","mem","export","delta","diffs","theme","debug","rebind","api-allow","api","prompt","prompts","history","hist","inputs","research","rsh","harness","plan","chat","dashboard","dash","telegram","tg","tablet","surface","term","terminal","claude","codex","gemini","acp","conv","handoff","agent-room","showroom","sr","reply","capture","inject","relay","lane","control","default","qc","voice-chat","vc","auto-tts","tts","autotts","directive"]),eg={m:"model",r:"reasoning",think:"reasoning",p:"provider"},ey=new Set([...em].filter(e=>"harness"!==e&&!ep.some(t=>t.name===e))),ev=ef.filter(e=>"wish"!==e).map(e=>"/".concat(e)).join(" ");async function ek(e,t,n){var r;let i=(null!=(r=n.messages)?r:[]).filter(e=>"user"===e.role).length,o=(t,r)=>((0,w.cY)("webterm.chat.fork",{command:e,outcome:t,sessionId:n.sessionId}),{text:r});if("fork"===e&&t.length>0)return o("invalid","쓰는 법: /fork");if("undo"===e&&t.length>0)return o("invalid","쓰는 법: /undo");if("rewind"===e&&(1!==t.length||!/^[1-9]\d*$/.test(t[0])))return o("invalid","쓰는 법: /rewind N (양의 정수)");let a="undo"===e?1:"rewind"===e?Number(t[0]):0;if("fork"!==e&&(!Number.isSafeInteger(a)||a>i))return o("out-of-range","되돌릴 사용자 턴이 부족합니다 (".concat(i,"개)"));let s=await k(new b.jU(n.client),n.sessionId,"fork"===e?{}:{beforeUser:i-a+1});if("error"===s.kind)return o("error","대화 분기 실패 — ".concat(s.error));if("empty"===s.kind&&"fork"!==e)return o("empty","저장된 대화가 없어 되돌릴 수 없습니다");let l="forked"===s.kind?s.id:(0,v.Zr)();return(0,w.cY)("webterm.chat.fork",{command:e,outcome:"empty"===s.kind?"empty":"forked",sessionId:n.sessionId,newSessionId:l,..."fork"===e?{}:{beforeUser:i-a+1}}),{text:"fork"===e?"forked → new session ".concat(l):"".concat(a,"개 사용자 턴 이전으로 분기했습니다 → ").concat(l),newSessionId:l}}async function eb(e,t){if(!e)return{text:"무엇을 맡길까요? /harness <한 줄>"};try{let{acceptanceId:n}=await (0,J.ZJ)(t.client,e);return{text:"하니스 접수 \xb7 ".concat(n.slice(0,8)),harnessAsk:{acceptanceId:n}}}catch(t){let e=(t instanceof Error?t.message:String(t)).split(/\r?\n/,1)[0].slice(0,200);return{text:"하니스 접수 실패 — ".concat(e)}}}let ew={":help":async()=>({text:eh}),":session":async(e,t)=>({text:"session = ".concat(t.sessionId)}),":remaining":async(e,t)=>{let n=await eu(t.daemon),r=n?T(n):[],i=void 0!==n;return(0,w.cY)("webterm.chat.status",{cmd:"remaining",rows:r.length,ok:i}),{text:i?r.length?r.join("\n"):"등록된 계정이 없습니다":"남은 양을 읽지 못했습니다"}},":status":async(e,t)=>{let[n,r,i]=await Promise.all([ec(t.daemon,"/v1/health"),eu(t.daemon),ed(t.daemon,t.provider)]),o=n&&"object"==typeof n&&"nexusVersion"in n&&"string"==typeof n.nexusVersion?n.nexusVersion:void 0,a=r?T(r):[];return(0,w.cY)("webterm.chat.status",{cmd:"status",rows:a.length,ok:!!o||void 0!==r}),{text:function(e){let{sessionId:t,provider:n,model:r,version:i,usage:o}=e,a=(null==o?void 0:o.ok)&&Array.isArray(o.rows)?o.rows:[],s=e=>{var t,n;let r=(null==(t=e.subscription)?void 0:t.status)==="available"?I(e.subscription.remainingPercent):null;if(null!==r)return r;let i=(null==(n=e.credits)?void 0:n.status)==="ok"?I(e.credits.usedPercent):null;return null===i?null:100-i},l=a.reduce((e,t)=>{let n=s(t),r=e?s(e):null;return null!==n&&(null===r||n<r)?t:e},void 0),c=l?T({ok:!0,rows:[l]})[0]:a.length?T({ok:!0,rows:[a[0]]})[0]:(null==o?void 0:o.ok)&&Array.isArray(o.rows)?"등록된 계정이 없습니다":"남은 양을 읽지 못했습니다";return["대화: ".concat(t.slice(0,8)),"모델: ".concat(n,"/").concat(r||"미확인"),"데몬 판: ".concat(null!=i?i:"확인할 수 없음"),"남은 양: ".concat(c)].join("\n")}({sessionId:t.sessionId,...i,...o?{version:o}:{},...r?{usage:r}:{}})}},":fork":async()=>{let e=(0,v.Zr)();return{text:"forked → new session ".concat(e),newSessionId:e}},":rewind":async(e,t)=>ek("rewind",e,t),":undo":async(e,t)=>ek("undo",e,t),":budget":async(e,t)=>{let n=t.daemon;if(!(null==n?void 0:n.baseUrl))return{text:ea};let r=await (0,x.gh)(n);return r?{text:function(e){let t=Number.isFinite(e.monthSoFarUsd)?e.monthSoFarUsd:0;return"budget ".concat(e.monthYYYYMM,": $").concat(t.toFixed(2)," \xb7 알림 ").concat(e.notifyAtPct,"%")}(r)}:{text:ea}},":history":async(e,t)=>{var n;let r=Number(e[0]),i=Number.isFinite(r)&&r>0?Math.floor(r):10;return{text:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return 0===e.length?"아직 대화가 없습니다":e.slice(Math.max(0,e.length-t)).map(e=>"".concat(e.role,": ").concat(e.text.slice(0,80))).join("\n")}(null!=(n=t.messages)?n:[],i)}},":clear":async()=>({text:"__CLEAR__"}),":sessions":async(e,t)=>B(Y("sessions",e),t),":resume":async(e,t)=>B(Y("resume",e),t),":model":async(e,t)=>({text:await _(U("model",e),t)}),":reasoning":async(e,t)=>({text:await _(U("reasoning",e),t)}),":provider":async(e,t)=>({text:await _(U("provider",e),t)}),":wish":async(e,t)=>{let n,r=e.join(" ").trim();if(!r)return{text:":wish <소원 한 줄>"};let i=t.daemon;if(!(null==i?void 0:i.baseUrl))return{text:"소원 카드 저장 실패 — 데몬 연결이 없습니다"};let o=i.baseUrl.replace(/\/$/,"");try{if("--pending"===r){let e=function(e,t){let n=[];for(let r=0;r<localStorage.length;r++){let i=localStorage.key(r);if(null==i?void 0:i.startsWith(es))try{let r=el(i.slice(es.length));(null==r?void 0:r.baseUrl)===e&&r.sessionId===t&&n.push(r)}catch(e){}}return n}(o,t.sessionId);return{text:e.length?e.map(e=>{let{id:t,text:n}=e;return"".concat(t," — ").concat(n)}).join("\n"):"재시도할 소원이 없습니다"}}if(r.startsWith("--retry ")){let e=r.slice(8).trim(),i=el(e);if(!i||i.baseUrl!==o||i.sessionId!==t.sessionId)return{text:"소원 카드 저장 실패 — 재시도할 작업을 찾을 수 없습니다"};n=i}else{let e=crypto.randomUUID();n={id:e,baseUrl:o,sessionId:t.sessionId,text:r,ref:"".concat(t.sessionId,":").concat(Date.now(),":").concat(e)},localStorage.setItem("".concat(es).concat(e),JSON.stringify(n))}}catch(e){return{text:"소원 카드 저장 실패 — 작업 보존 불가: ".concat(e instanceof Error?e.message:String(e))}}try{let e=await fetch("".concat(o,"/v1/task-cards/wish"),{method:"POST",headers:{"content-type":"application/json",...i.token?{authorization:"Bearer ".concat(i.token)}:{}},body:JSON.stringify({text:n.text,ref:n.ref})});if(!e.ok)throw Error("HTTP ".concat(e.status));let t=await e.json();if(!t||"object"!=typeof t||!("title"in t)||"string"!=typeof t.title)throw Error("잘못된 응답");return localStorage.removeItem("".concat(es).concat(n.id)),{text:"소원 카드로 남겼습니다 — ".concat(t.title)}}catch(e){return{text:"소원 카드 저장 실패 — ".concat(e instanceof Error?e.message:String(e)," \xb7 재시도: :wish --retry ").concat(n.id)}}}};function ex(e){let t=e.trimStart();if(t.startsWith(":"))return!0;if(!t.startsWith("/")||t.length<2||/\s/.test(t[1]))return!1;let[n]=t.split(/\s+/);return!n.slice(1).includes("/")}async function eI(e,t){let n=e.trim(),r=(0,W.dz)(e);if(null!==r&&!n.startsWith("/"))return eb(r,t);if(!n.startsWith(":")&&!n.startsWith("/"))return null;let[i,...o]=n.split(/\s+/);if(i.startsWith("/")&&!ex(e))return null;if("/harness"===i&&null===r)return{text:"무엇을 맡길까요? /harness <한 줄>"};let a=i.startsWith("/"),s=a?":".concat(i.slice(1)):i,l=a&&Object.hasOwn(eg,i.slice(1))?eg[i.slice(1)]:i.slice(1),c=":".concat(l),u=!a&&":provider"===c&&o.length>0&&"next"!==o[0]&&"use"!==o[0],d=a&&":fork"===c?(e,t)=>ek("fork",e,t):!u&&Object.hasOwn(ew,c)?ew[c]:void 0;if(!d){if(a){let e=ey.has(i.slice(1));return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:e?"unsupported-tui":"unknown"}),{text:e?"".concat(i," 은 PWA 채팅에서 아직 안 됩니다 — 지금 되는 명령: ").concat(ev):"모르는 명령입니다: ".concat(i," — /help 로 목록 보기")}}return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:"unknown"}),{text:"unknown meta command: ".concat(i)}}return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:"ok"}),d(o,t)}async function eA(e,t){var n,r,i;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,w.cY)("webterm.chat.runturn.stream.start",{sessionId:t.sessionId,provider:t.provider,len:e.length,contentBlocks:null!=(r=null==(n=o.userContent)?void 0:n.length)?r:0});let a=[],s=-1,l=0,c=0,u=0,d=0,p=()=>a.map(e=>({...e})),f=e=>{(0,w.cY)("webterm.chat.runturn.stream.end",{stopReason:e.stopReason,sessionId:e.sessionId,...void 0!==e.error?{error:e.error}:{},images:l,tools:c,mcpApps:u,feedback:d})},h=await t.client.promptStream({sessionId:t.sessionId||void 0,userText:e,...o.userContent&&o.userContent.length>0?{userContent:o.userContent}:{},provider:t.provider||void 0},{onError:o.onError,onTextDelta:e=>{var t,n;let{full:r}=e;-1===s?(s=a.length,a.push({kind:"text",text:r})):a[s]={kind:"text",text:r},null==(t=o.onPartial)||t.call(o,r),null==(n=o.onPartialBlocks)||n.call(o,p())},onImageBlock:e=>{var t;let{src:n,mediaType:r,alt:i}=e;l+=1,a.push(void 0!==i?{kind:"image",src:n,mediaType:r,alt:i}:{kind:"image",src:n,mediaType:r}),null==(t=o.onPartialBlocks)||t.call(o,p())},onFeedback:e=>{if(!et(e)&&"applied"===(0,g.K4)(a,e)){var t;d+=1,null==(t=o.onPartialBlocks)||t.call(o,p())}},onToolCall:e=>{var t;let{id:n,name:r,args:i}=e;c+=1,a.push({kind:"tool_use",id:n,name:r,status:"running",startedAt:Date.now(),args:i}),null==(t=o.onPartialBlocks)||t.call(o,p())},onToolResult:e=>{var t;let{id:n,name:r,ok:i,summary:s,rawOutput:l,resourceUri:d}=e,f=a.findIndex(e=>"tool_use"===e.kind&&e.id===n),h=i?"done":"error",g="context_now"===r?m(l,Date.now()):null;if(-1===f)c+=1,a.push({kind:"tool_use",id:n,name:r,status:h,startedAt:Date.now(),endedAt:Date.now(),...void 0!==s?{summary:s}:{},...null!==g?{sources:g}:{}});else{let e={...a[f],status:h,endedAt:Date.now(),...void 0!==s?{summary:s}:{},...null!==g?{sources:g}:{}};null===g&&delete e.sources,a[f]=e}if(ei(a,l),"string"==typeof d&&d.trim().length>0){u+=1;let e=eo(l,d);a.push({kind:"mcp_app",toolId:n,toolName:r,screenUrl:d,...void 0!==l?{toolResult:l}:{},...e||{},...void 0!==s?{fallbackText:s}:{}})}null==(t=o.onPartialBlocks)||t.call(o,p())},...o.signal?{signal:o.signal}:{},...!0===o.debugTap?{debugTap:!0}:{}}).catch(e=>{var t;throw f({stopReason:(null==(t=o.signal)?void 0:t.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e});f({stopReason:h.stopReason,sessionId:h.sessionId}),-1!==s&&h.text&&(a[s]={kind:"text",text:h.text});let y=l>0||c>0||u>0||d>0;return{message:{id:"m-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(i=h.text)?i:"",timestamp:Date.now(),meta:{provider:t.provider,stopReason:h.stopReason},...y?{blocks:p()}:{}},newSessionId:h.sessionId!==t.sessionId?h.sessionId:void 0}}function eS(e,t){return{id:"u-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"user",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function eT(e,t){return{id:"meta-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"meta",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function eC(e,t,n){let r=null,i=[],o=-1,a=0,s=0,l=0,c=0,u=!1,d=()=>{r=null,i.length=0,o=-1,a=0,s=0,l=0,c=0,u=!1},p=()=>i.map(e=>({...e}));return e.subscribeChatEvents(t,{onTurnBegin:e=>{var t;if(d(),null==(t=n.isLocalTurnInFlight)?void 0:t.call(n)){u=!0;return}let i=n.onPlaceholder({sessionId:e.sessionId});if(null===i){u=!0;return}r=i},onTextDelta:e=>{let{full:t}=e;u||null===r||(-1===o?(o=i.length,i.push({kind:"text",text:t})):i[o]={kind:"text",text:t},n.onPartialBlocks(r,p()))},onImageBlock:e=>{let{src:t,mediaType:o,alt:s}=e;u||null===r||(a+=1,i.push(void 0!==s?{kind:"image",src:t,mediaType:o,alt:s}:{kind:"image",src:t,mediaType:o}),n.onPartialBlocks(r,p()))},onFeedback:e=>{et(e)||u||null===r||"applied"===(0,g.K4)(i,e)&&(c+=1,n.onPartialBlocks(r,p()))},onToolCall:e=>{let{id:t,name:o,args:a}=e;u||null===r||(s+=1,i.push({kind:"tool_use",id:t,name:o,status:"running",startedAt:Date.now(),args:a}),n.onPartialBlocks(r,p()))},onToolResult:e=>{let{id:t,name:o,ok:a,summary:c,rawOutput:d,resourceUri:f}=e;if(u||null===r)return;let h=i.findIndex(e=>"tool_use"===e.kind&&e.id===t),g=a?"done":"error",y="context_now"===o?m(d,Date.now()):null;if(-1===h)s+=1,i.push({kind:"tool_use",id:t,name:o,status:g,startedAt:Date.now(),endedAt:Date.now(),...void 0!==c?{summary:c}:{},...null!==y?{sources:y}:{}});else{let e={...i[h],status:g,endedAt:Date.now(),...void 0!==c?{summary:c}:{},...null!==y?{sources:y}:{}};null===y&&delete e.sources,i[h]=e}if(ei(i,d),"string"==typeof f&&f.trim().length>0){l+=1;let e=eo(d,f);i.push({kind:"mcp_app",toolId:t,toolName:o,screenUrl:f,...void 0!==d?{toolResult:d}:{},...e||{},...void 0!==c?{fallbackText:c}:{}})}n.onPartialBlocks(r,p())},onTurnEnd:e=>{var f;if(u||null===r){(0,w.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!0,reason:u?"dropped-turn":"no-placeholder"}),d();return}-1!==o&&e.text&&(i[o]={kind:"text",text:e.text});let h=a>0||s>0||l>0||c>0;(0,w.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!1,images:a,tools:s,mcpApps:l,feedback:c});let m={id:"m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(f=e.text)?f:"",timestamp:Date.now(),meta:{...n.provider?{provider:n.provider}:{},stopReason:e.stopReason},...h?{blocks:p()}:{}};n.onFinalize(r,m),d()},onError:e=>{null!==r&&n.onError&&n.onError(r,e),d()}})}async function eE(e,t,n){var r,i;let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n.sessionId;if(!a)throw Error("runChatTurnAcp: sessionId required (daemon handshake first)");let s=[],l=-1,c=0,u=0,d=0,p="",f=-1,h="",m=0,v=0,k=0,b=()=>{if(-1===f)return!1;let e=s[f];return!e.done&&(s[f]={...e,done:!0},!0)},x=()=>s.map(e=>({...e})),I=e.on("sessionUpdate",e=>{var t,n,r,i,w,I,A,S,T,C;let E=e.params;if(!E||E.sessionId!==a)return;let P=E.update;if(P){if("agent_message_chunk"===P.sessionUpdate){let e=P.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let r=e.text;p+=r,-1===l?(b(),l=s.length,s.push({kind:"text",text:p})):s[l]={kind:"text",text:p},null==(t=o.onPartial)||t.call(o,p),null==(n=o.onPartialBlocks)||n.call(o,x())}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){c+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),b(),s.push(t),null==(r=o.onPartialBlocks)||r.call(o,x())}}else if("agent_thought_chunk"===P.sessionUpdate){let e=P.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let t=function(e){let t=e.split("\n"),n=t[0];if(!n)return null;let r=/^\[elanous\/feedback\/([a-zA-Z]+)\] (.+)$/.exec(n);if(!r||"emit"!==r[1])return null;let i=[];for(let e=1;e<t.length;e+=1){let n=t[e];if(/^<<elanous-feedback-end /.test(n))break;i.push(n)}try{let e=JSON.parse(i.join("\n"));return(0,y.L)(e)?{method:"emit",payload:e}:null}catch(e){return null}}(e.text);if(t){et(t.payload)||"applied"===(0,g.K4)(s,t.payload)&&(v+=1,null==(w=o.onPartialBlocks)||w.call(o,x()));return}if(er.test(e.text)){k+=1;return}if(h+=e.text,-1===f)m+=1,f=s.length,s.push({kind:"agent_thinking",blockId:"acp-thought-".concat(a),msg:h,done:!1});else{let e=s[f];s[f]={...e,msg:h}}null==(i=o.onPartialBlocks)||i.call(o,x())}}else if("tool_call"===P.sessionUpdate&&"string"==typeof P.toolCallId)u+=1,s.push({kind:"tool_use",id:P.toolCallId,name:null!=(A=P.title)?A:"",status:"running",startedAt:Date.now(),...P.rawInput?{args:P.rawInput}:{}}),null==(I=o.onPartialBlocks)||I.call(o,x());else if("tool_call_update"===P.sessionUpdate&&"string"==typeof P.toolCallId){let e=s.findIndex(e=>"tool_use"===e.kind&&e.id===P.toolCallId),t="completed"===P.status?"done":"error";if(-1===e)u+=1,s.push({kind:"tool_use",id:P.toolCallId,name:null!=(T=P.title)?T:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...P.title?{summary:P.title}:{}});else{let n=s[e];s[e]={...n,status:t,endedAt:Date.now(),...P.title?{summary:P.title}:{}}}for(let e of(ei(s,P.rawOutput),q(P.rawOutput)))s.some(t=>"image"===t.kind&&t.src===e.src)||(c+=1,s.push({kind:"image",...e}));let n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t=e._meta,n=t&&"object"==typeof t&&!Array.isArray(t)?t.ui:void 0,r=n&&"object"==typeof n&&!Array.isArray(n)?n.resourceUri:void 0;if("string"==typeof r&&r.trim().length>0)return r;let i=e["ui/resourceUri"];return"string"==typeof i&&i.trim().length>0?i:void 0}(P.rawOutput);if(n){d+=1;let e=eo(P.rawOutput,n);s.push({kind:"mcp_app",toolId:P.toolCallId,toolName:null!=(C=P.title)?C:"",screenUrl:n,...void 0!==P.rawOutput?{toolResult:P.rawOutput}:{},...e||{},...P.title?{fallbackText:P.title}:{}})}null==(S=o.onPartialBlocks)||S.call(o,x())}}}),A=()=>{e.send("session/cancel",{sessionId:a}).catch(()=>{})},S=o.signal;if(S){if(S.aborted)throw I(),Error("aborted");S.addEventListener("abort",A,{once:!0})}let T=o.userContent&&o.userContent.length>0?o.userContent:[{type:"text",text:t}];(0,w.cY)("webterm.chat.runturn.acp.start",{sessionId:a,provider:n.provider,len:t.length,blocks:T.length});let C=e=>{(0,w.cY)("webterm.chat.runturn.acp.end",{sessionId:a,stopReason:e.stopReason,...void 0!==e.error?{error:e.error}:{},textLen:p.length,images:c,tools:u,mcpApps:d,thoughts:m,feedbackEnvelopes:k})};try{let t=await e.send("session/prompt",{sessionId:a,prompt:T}),i=null!=(r=null==t?void 0:t.stopReason)?r:"end_turn";b(),C({stopReason:i});let o=c>0||u>0||d>0||m>0||v>0;return{message:{id:"m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:p,timestamp:Date.now(),meta:{provider:n.provider,stopReason:i},...o?{blocks:x()}:{}}}}catch(e){throw C({stopReason:(null==S?void 0:S.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e}finally{b()&&(null==(i=o.onPartialBlocks)||i.call(o,x())),S&&S.removeEventListener("abort",A),I()}}function eP(e,t,n){var r;let i=null!=(r=n.idleFinalizeMs)?r:3e3,o=null,a=[],s=-1,l=0,c=0,u=null,d=()=>{if(null!==o)return!0;let e=n.onPlaceholder({sessionId:t});return null!==e&&(o=e,(0,w.cY)("webterm.chat.acp.foreign-turn.start",{id:e}),!0)},p=e.on("sessionUpdate",e=>{var r,p,f,h;if((null==(r=n.isLocalTurnInFlight)?void 0:r.call(n))||(null==(p=n.isRemoteSseTurnInFlight)?void 0:p.call(n)))return;let m=e.params;if(!m||m.sessionId!==t)return;let g=m.update;if(!g)return;let y=!1;if("agent_message_chunk"===g.sessionUpdate){let e=g.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){if(!d())return;let t=e.text;if(-1===s)s=a.length,a.push({kind:"text",text:t});else{let e=a[s];a[s]={kind:"text",text:e.text+t}}y=!0}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){if(!d())return;l+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),a.push(t),y=!0}}else if("tool_call"===g.sessionUpdate&&"string"==typeof g.toolCallId){if(!d())return;c+=1,a.push({kind:"tool_use",id:g.toolCallId,name:null!=(f=g.title)?f:"",status:"running",startedAt:Date.now(),...g.rawInput?{args:g.rawInput}:{}}),y=!0}else if("tool_call_update"===g.sessionUpdate&&"string"==typeof g.toolCallId){if(!d())return;let e=a.findIndex(e=>"tool_use"===e.kind&&e.id===g.toolCallId),t="completed"===g.status?"done":"error";if(-1===e)c+=1,a.push({kind:"tool_use",id:g.toolCallId,name:null!=(h=g.title)?h:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...g.title?{summary:g.title}:{}});else{let n=a[e];a[e]={...n,status:t,endedAt:Date.now(),...g.title?{summary:g.title}:{}}}y=!0}y&&null!==o&&(n.onPartialBlocks(o,a.map(e=>({...e}))),u&&clearTimeout(u),u=setTimeout(()=>{let e=o;if(e&&(0,w.cY)("webterm.chat.acp.foreign-turn.end",{id:e,images:l,tools:c}),u&&(clearTimeout(u),u=null),o=null,a=[],s=-1,l=0,c=0,e&&n.onFinalize)try{n.onFinalize(e)}catch(e){(0,w.cY)("webterm.chat.acp.finalize.error",{reason:String(e)})}},i))});return()=>{p(),u&&(clearTimeout(u),u=null)}}Object.defineProperty(ew,":harness",{value:async(e,t)=>eb(e.join(" "),t)})},55499:(e,t,n)=>{n.d(t,{K:()=>o,v:()=>i});var r=n(50733);async function i(e){var t;let n=e.baseUrl.replace(/\/$/,"");if(!n)return{ok:!1,status:0,reason:"baseUrl not configured"};let i=null!=(t=e.filename)?t:e.file instanceof File?e.file.name:"upload.bin";(0,r.cY)("webterm.attach.upload.begin",{filename:i,size:e.file.size,type:e.file.type});let o=new FormData;o.append("file",e.file,i),o.append("filename",i);try{let t=await fetch("".concat(n,"/v1/attachments"),{method:"POST",body:o,...e.token?{headers:{authorization:"Bearer ".concat(e.token)}}:{}});if(!t.ok){let e=await t.text().catch(()=>"");return(0,r.cY)("webterm.attach.upload.error",{status:t.status,detail:e.slice(0,200)}),{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let i=await t.json();return(0,r.cY)("webterm.attach.upload.ok",{id:i.id,size:i.size}),{ok:!0,meta:i}}catch(t){let e=String(t instanceof Error?t.message:t);return(0,r.cY)("webterm.attach.upload.exception",{reason:e}),{ok:!1,status:0,reason:e}}}async function o(e,t){return Promise.all(e.map(e=>i({baseUrl:t.baseUrl,...void 0!==t.token?{token:t.token}:{},file:e.file,...void 0!==e.filename?{filename:e.filename}:{}})))}},79450:(e,t,n)=>{n.d(t,{KW:()=>o,jU:()=>r,nj:()=>i});class r{async list(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.client.fetchJson("/v1/sessions/store".concat(e?"?includeEmpty=1":""))}async transcript(e){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)))}async fork(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e),"/fork"),{method:"POST",...void 0!==t.beforeUser?{headers:{"content-type":"application/json"},body:JSON.stringify({beforeUser:t.beforeUser})}:{}})}async delete(e){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)),{method:"DELETE"})}constructor(e){this.client=e}}function i(e,t){let n=t.trim().toLowerCase();if(!n)return{kind:"none"};let r=e.filter(e=>e.id.toLowerCase().startsWith(n));return 1===r.length?{kind:"one",id:r[0].id}:0===r.length?{kind:"none"}:{kind:"ambiguous",count:r.length}}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),n=Date.parse(e);if(!Number.isFinite(n))return"";let r=Math.max(0,Math.floor((t-n)/1e3));return r<30?"방금":r<3600?"".concat(Math.floor(r/60),"분 전"):r<86400?"".concat(Math.floor(r/3600),"시간 전"):"".concat(Math.floor(r/86400),"일 전")}},86127:(e,t,n)=>{n.d(t,{t:()=>d});let r=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,i=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,o=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,a=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),s=/\b(?:OP|MK|TC|UX)\b/g,l=/\bmsb(\d+)\b/gi,c=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,u={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function d(e){let t,n=e;do t=n,n=n.replace(r,(e,t)=>"run-".concat(t.slice(0,6))).replace(i,"").replace(o,"").replace(c,"").replace(a,"").replace(s,e=>u[e]).replace(l,(e,t)=>"remote-".concat(t));while(n!==t&&function(e){return[r,i,o,a,s,c,l].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(n).length>0);return n}},93337:(e,t,n)=>{function r(e){let t=e.trim();if(/^\/harness(?:[ \t]|$)/.test(t)){let e=t.slice(8).trim();return/[\r\n]/.test(e)?null:e}return/^하니스로\s/.test(t)?e:null}function i(e){switch(e){case"accepted":return"접수됨";case"flow-settled":return"골 저작 끝";case"launch-started":return"런 도는 중";case"launch-settled":return"런 끝";case"launch-failed":return"발사 실패";default:return"알 수 없는 단계"}}function o(e){return"launch-settled"===e||"launch-failed"===e}n.d(t,{SK:()=>i,dz:()=>r,rr:()=>o})},95734:(e,t,n)=>{n.d(t,{Gm:()=>c,IH:()=>o,PM:()=>s,ZJ:()=>a,cE:()=>i,dy:()=>l,sg:()=>u});let r=/https?:\/\/[^\s<>"']+/g;function i(e){return e.slice(0,40)}async function o(e,t){let n=function(e){var t;let n=null!=(t=e.match(r))?t:[];return 0===n.length?[{text:e}]:n.map(e=>({url:e}))}(t),i=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:n,source:"pwa"})});return{ids:i.ids,added:i.added,merged:i.merged}}async function a(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function s(e,t){return e.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(t)))}function l(e,t){return e.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(t)))}function c(e,t){return e.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(t)))}function u(e,t,n){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==n?void 0:n.classify)!==void 0?{classify:n.classify}:{}})})}}}]);