cuelo 0.6.5 → 0.6.7

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 (296) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +10 -9
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +6 -0
  8. package/.next/server/app/_global-error/page.js +3 -3
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +2 -2
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  29. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  31. package/.next/server/app/api/agent/[id]/route.js +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/running/route.js +1 -1
  34. package/.next/server/app/api/attachments/route.js +2 -2
  35. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  36. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  37. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  38. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  39. package/.next/server/app/api/auth/providers/route.js +1 -1
  40. package/.next/server/app/api/cwd/browse/route.js +1 -1
  41. package/.next/server/app/api/cwd/validate/route.js +1 -1
  42. package/.next/server/app/api/default-cwd/route.js +1 -1
  43. package/.next/server/app/api/display-settings/route.js +1 -1
  44. package/.next/server/app/api/document-text/route.js +2 -2
  45. package/.next/server/app/api/experiments/route.js +1 -1
  46. package/.next/server/app/api/file-index/route.js +1 -1
  47. package/.next/server/app/api/files/[...path]/route.js +1 -1
  48. package/.next/server/app/api/git/diff/route.js +2 -2
  49. package/.next/server/app/api/git/status/route.js +2 -2
  50. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  51. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  52. package/.next/server/app/api/gpt6/token/route.js +1 -1
  53. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  54. package/.next/server/app/api/home/route.js +1 -1
  55. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  56. package/.next/server/app/api/live/events/route.js +2 -2
  57. package/.next/server/app/api/live/offer/route.js +1 -1
  58. package/.next/server/app/api/live/voices/route.js +1 -1
  59. package/.next/server/app/api/lounge/events/route.js +2 -2
  60. package/.next/server/app/api/lounge/route.js +1 -1
  61. package/.next/server/app/api/mcp/route.js +2 -2
  62. package/.next/server/app/api/model-roles/route.js +1 -1
  63. package/.next/server/app/api/models/route.js +1 -1
  64. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  65. package/.next/server/app/api/models-config/discover/route.js +1 -1
  66. package/.next/server/app/api/models-config/route.js +3 -3
  67. package/.next/server/app/api/models-config/test/route.js +1 -1
  68. package/.next/server/app/api/plugins/route.js +1 -1
  69. package/.next/server/app/api/project-trust/route.js +1 -1
  70. package/.next/server/app/api/projects/route.js +1 -1
  71. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  72. package/.next/server/app/api/runs/route.js +1 -1
  73. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  74. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  75. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  76. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  77. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  78. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  79. package/.next/server/app/api/sessions/route.js +1 -1
  80. package/.next/server/app/api/sessions/search/route.js +1 -0
  81. package/.next/server/app/api/sessions/search/route.js.nft.json +1 -0
  82. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -0
  83. package/.next/server/app/api/settings/route.js +1 -1
  84. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  85. package/.next/server/app/api/skills/check/route.js +1 -1
  86. package/.next/server/app/api/skills/install/route.js +2 -2
  87. package/.next/server/app/api/skills/route.js +2 -2
  88. package/.next/server/app/api/skills/search/route.js +1 -1
  89. package/.next/server/app/api/skills/update/route.js +1 -1
  90. package/.next/server/app/api/theme/route.js +1 -1
  91. package/.next/server/app/api/tool-image/route.js +1 -1
  92. package/.next/server/app/api/update-maintenance/route.js +3 -3
  93. package/.next/server/app/api/updates/route.js +1 -1
  94. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  95. package/.next/server/app/api/web-access/route.js +1 -1
  96. package/.next/server/app/api/web6/consults/route.js +1 -1
  97. package/.next/server/app/api/worktrees/route.js +1 -1
  98. package/.next/server/app/favicon.ico/route.js +1 -1
  99. package/.next/server/app/index.html +1 -1
  100. package/.next/server/app/index.rsc +5 -5
  101. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  102. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  103. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  104. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  105. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  106. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  107. package/.next/server/app/page.js +17 -17
  108. package/.next/server/app/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/recover/page.js +2 -2
  110. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/recover.html +1 -1
  112. package/.next/server/app/recover.rsc +3 -3
  113. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  114. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  115. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  116. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  117. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  118. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  119. package/.next/server/app-paths-manifest.json +10 -9
  120. package/.next/server/chunks/1517.js +3 -3
  121. package/.next/server/chunks/3707.js +1 -1
  122. package/.next/server/chunks/6429.js +1 -1
  123. package/.next/server/chunks/9108.js +1 -1
  124. package/.next/server/chunks/9280.js +4 -4
  125. package/.next/server/middleware-build-manifest.js +1 -1
  126. package/.next/server/pages/404.html +1 -1
  127. package/.next/server/pages/500.html +1 -1
  128. package/.next/server/server-reference-manifest.json +1 -1
  129. package/.next/static/ZtmM1pqseDsjZJNTAi2i3/_buildManifest.js +1 -0
  130. package/.next/static/chunks/app/_global-error/page-701a3390117d7557.js +1 -0
  131. package/.next/static/chunks/app/api/agent/[id]/account/route-701a3390117d7557.js +1 -0
  132. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-701a3390117d7557.js +1 -0
  133. package/.next/static/chunks/app/api/agent/[id]/events/route-701a3390117d7557.js +1 -0
  134. package/.next/static/chunks/app/api/agent/[id]/route-701a3390117d7557.js +1 -0
  135. package/.next/static/chunks/app/api/agent/new/route-701a3390117d7557.js +1 -0
  136. package/.next/static/chunks/app/api/agent/running/route-701a3390117d7557.js +1 -0
  137. package/.next/static/chunks/app/api/attachments/route-701a3390117d7557.js +1 -0
  138. package/.next/static/chunks/app/api/auth/all-providers/route-701a3390117d7557.js +1 -0
  139. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-701a3390117d7557.js +1 -0
  140. package/.next/static/chunks/app/api/auth/login/[provider]/route-701a3390117d7557.js +1 -0
  141. package/.next/static/chunks/app/api/auth/logout/[provider]/route-701a3390117d7557.js +1 -0
  142. package/.next/static/chunks/app/api/auth/providers/route-701a3390117d7557.js +1 -0
  143. package/.next/static/chunks/app/api/cwd/browse/route-701a3390117d7557.js +1 -0
  144. package/.next/static/chunks/app/api/cwd/validate/route-701a3390117d7557.js +1 -0
  145. package/.next/static/chunks/app/api/default-cwd/route-701a3390117d7557.js +1 -0
  146. package/.next/static/chunks/app/api/display-settings/route-701a3390117d7557.js +1 -0
  147. package/.next/static/chunks/app/api/document-text/route-701a3390117d7557.js +1 -0
  148. package/.next/static/chunks/app/api/experiments/route-701a3390117d7557.js +1 -0
  149. package/.next/static/chunks/app/api/file-index/route-701a3390117d7557.js +1 -0
  150. package/.next/static/chunks/app/api/files/[...path]/route-701a3390117d7557.js +1 -0
  151. package/.next/static/chunks/app/api/git/diff/route-701a3390117d7557.js +1 -0
  152. package/.next/static/chunks/app/api/git/status/route-701a3390117d7557.js +1 -0
  153. package/.next/static/chunks/app/api/gpt6/handles/route-701a3390117d7557.js +1 -0
  154. package/.next/static/chunks/app/api/gpt6/reply/route-701a3390117d7557.js +1 -0
  155. package/.next/static/chunks/app/api/gpt6/token/route-701a3390117d7557.js +1 -0
  156. package/.next/static/chunks/app/api/gpt6/web6-session/route-701a3390117d7557.js +1 -0
  157. package/.next/static/chunks/app/api/home/route-701a3390117d7557.js +1 -0
  158. package/.next/static/chunks/app/api/live/call/[callId]/route-701a3390117d7557.js +1 -0
  159. package/.next/static/chunks/app/api/live/events/route-701a3390117d7557.js +1 -0
  160. package/.next/static/chunks/app/api/live/offer/route-701a3390117d7557.js +1 -0
  161. package/.next/static/chunks/app/api/live/voices/route-701a3390117d7557.js +1 -0
  162. package/.next/static/chunks/app/api/lounge/events/route-701a3390117d7557.js +1 -0
  163. package/.next/static/chunks/app/api/lounge/route-701a3390117d7557.js +1 -0
  164. package/.next/static/chunks/app/api/mcp/route-701a3390117d7557.js +1 -0
  165. package/.next/static/chunks/app/api/model-roles/route-701a3390117d7557.js +1 -0
  166. package/.next/static/chunks/app/api/models/route-701a3390117d7557.js +1 -0
  167. package/.next/static/chunks/app/api/models-config/catalog/route-701a3390117d7557.js +1 -0
  168. package/.next/static/chunks/app/api/models-config/discover/route-701a3390117d7557.js +1 -0
  169. package/.next/static/chunks/app/api/models-config/route-701a3390117d7557.js +1 -0
  170. package/.next/static/chunks/app/api/models-config/test/route-701a3390117d7557.js +1 -0
  171. package/.next/static/chunks/app/api/plugins/route-701a3390117d7557.js +1 -0
  172. package/.next/static/chunks/app/api/project-trust/route-701a3390117d7557.js +1 -0
  173. package/.next/static/chunks/app/api/projects/route-701a3390117d7557.js +1 -0
  174. package/.next/static/chunks/app/api/runs/[runId]/route-701a3390117d7557.js +1 -0
  175. package/.next/static/chunks/app/api/runs/route-701a3390117d7557.js +1 -0
  176. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-701a3390117d7557.js +1 -0
  177. package/.next/static/chunks/app/api/sessions/[id]/context/route-701a3390117d7557.js +1 -0
  178. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-701a3390117d7557.js +1 -0
  179. package/.next/static/chunks/app/api/sessions/[id]/export/route-701a3390117d7557.js +1 -0
  180. package/.next/static/chunks/app/api/sessions/[id]/route-701a3390117d7557.js +1 -0
  181. package/.next/static/chunks/app/api/sessions/[id]/state/route-701a3390117d7557.js +1 -0
  182. package/.next/static/chunks/app/api/sessions/route-701a3390117d7557.js +1 -0
  183. package/.next/static/chunks/app/api/sessions/search/route-701a3390117d7557.js +1 -0
  184. package/.next/static/chunks/app/api/settings/route-701a3390117d7557.js +1 -0
  185. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-701a3390117d7557.js +1 -0
  186. package/.next/static/chunks/app/api/skills/check/route-701a3390117d7557.js +1 -0
  187. package/.next/static/chunks/app/api/skills/install/route-701a3390117d7557.js +1 -0
  188. package/.next/static/chunks/app/api/skills/route-701a3390117d7557.js +1 -0
  189. package/.next/static/chunks/app/api/skills/search/route-701a3390117d7557.js +1 -0
  190. package/.next/static/chunks/app/api/skills/update/route-701a3390117d7557.js +1 -0
  191. package/.next/static/chunks/app/api/theme/route-701a3390117d7557.js +1 -0
  192. package/.next/static/chunks/app/api/tool-image/route-701a3390117d7557.js +1 -0
  193. package/.next/static/chunks/app/api/update-maintenance/route-701a3390117d7557.js +1 -0
  194. package/.next/static/chunks/app/api/updates/route-701a3390117d7557.js +1 -0
  195. package/.next/static/chunks/app/api/web-access/recovery/route-701a3390117d7557.js +1 -0
  196. package/.next/static/chunks/app/api/web-access/route-701a3390117d7557.js +1 -0
  197. package/.next/static/chunks/app/api/web6/consults/route-701a3390117d7557.js +1 -0
  198. package/.next/static/chunks/app/api/worktrees/route-701a3390117d7557.js +1 -0
  199. package/.next/static/chunks/app/{layout-1f400c6ff9faef10.js → layout-e2710f3d550fa365.js} +1 -1
  200. package/.next/static/chunks/app/manifest.webmanifest/route-701a3390117d7557.js +1 -0
  201. package/.next/static/chunks/app/page-6fbdefb38e5ea22f.js +22 -0
  202. package/.next/static/chunks/next/dist/client/components/builtin/app-error-701a3390117d7557.js +1 -0
  203. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-701a3390117d7557.js +1 -0
  204. package/.next/static/chunks/next/dist/client/components/builtin/not-found-701a3390117d7557.js +1 -0
  205. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-701a3390117d7557.js +1 -0
  206. package/.next/static/css/{1f257674fb782a57.css → d0ec5531aef136d6.css} +1 -1
  207. package/.next/trace +105 -105
  208. package/.next/trace-build +1 -1
  209. package/.next/types/app/api/sessions/search/route.ts +351 -0
  210. package/.next/types/routes.d.ts +2 -1
  211. package/.next/types/validator.ts +9 -0
  212. package/README.md +8 -1
  213. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  214. package/Tools/OMP_Global_Config/agent/RULES.md +1 -0
  215. package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +4 -0
  216. package/Tools/OMP_Global_Config/agent/extensions/command-guard/powershell-syntax.ts +168 -0
  217. package/Tools/OMP_Global_Config/agent/extensions/skim.ts +9 -2
  218. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +2 -1
  219. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +380 -0
  220. package/package.json +1 -1
  221. package/.next/static/chunks/app/_global-error/page-d1e510cc33aec52f.js +0 -1
  222. package/.next/static/chunks/app/api/agent/[id]/account/route-d1e510cc33aec52f.js +0 -1
  223. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-d1e510cc33aec52f.js +0 -1
  224. package/.next/static/chunks/app/api/agent/[id]/events/route-d1e510cc33aec52f.js +0 -1
  225. package/.next/static/chunks/app/api/agent/[id]/route-d1e510cc33aec52f.js +0 -1
  226. package/.next/static/chunks/app/api/agent/new/route-d1e510cc33aec52f.js +0 -1
  227. package/.next/static/chunks/app/api/agent/running/route-d1e510cc33aec52f.js +0 -1
  228. package/.next/static/chunks/app/api/attachments/route-d1e510cc33aec52f.js +0 -1
  229. package/.next/static/chunks/app/api/auth/all-providers/route-d1e510cc33aec52f.js +0 -1
  230. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-d1e510cc33aec52f.js +0 -1
  231. package/.next/static/chunks/app/api/auth/login/[provider]/route-d1e510cc33aec52f.js +0 -1
  232. package/.next/static/chunks/app/api/auth/logout/[provider]/route-d1e510cc33aec52f.js +0 -1
  233. package/.next/static/chunks/app/api/auth/providers/route-d1e510cc33aec52f.js +0 -1
  234. package/.next/static/chunks/app/api/cwd/browse/route-d1e510cc33aec52f.js +0 -1
  235. package/.next/static/chunks/app/api/cwd/validate/route-d1e510cc33aec52f.js +0 -1
  236. package/.next/static/chunks/app/api/default-cwd/route-d1e510cc33aec52f.js +0 -1
  237. package/.next/static/chunks/app/api/display-settings/route-d1e510cc33aec52f.js +0 -1
  238. package/.next/static/chunks/app/api/document-text/route-d1e510cc33aec52f.js +0 -1
  239. package/.next/static/chunks/app/api/experiments/route-d1e510cc33aec52f.js +0 -1
  240. package/.next/static/chunks/app/api/file-index/route-d1e510cc33aec52f.js +0 -1
  241. package/.next/static/chunks/app/api/files/[...path]/route-d1e510cc33aec52f.js +0 -1
  242. package/.next/static/chunks/app/api/git/diff/route-d1e510cc33aec52f.js +0 -1
  243. package/.next/static/chunks/app/api/git/status/route-d1e510cc33aec52f.js +0 -1
  244. package/.next/static/chunks/app/api/gpt6/handles/route-d1e510cc33aec52f.js +0 -1
  245. package/.next/static/chunks/app/api/gpt6/reply/route-d1e510cc33aec52f.js +0 -1
  246. package/.next/static/chunks/app/api/gpt6/token/route-d1e510cc33aec52f.js +0 -1
  247. package/.next/static/chunks/app/api/gpt6/web6-session/route-d1e510cc33aec52f.js +0 -1
  248. package/.next/static/chunks/app/api/home/route-d1e510cc33aec52f.js +0 -1
  249. package/.next/static/chunks/app/api/live/call/[callId]/route-d1e510cc33aec52f.js +0 -1
  250. package/.next/static/chunks/app/api/live/events/route-d1e510cc33aec52f.js +0 -1
  251. package/.next/static/chunks/app/api/live/offer/route-d1e510cc33aec52f.js +0 -1
  252. package/.next/static/chunks/app/api/live/voices/route-d1e510cc33aec52f.js +0 -1
  253. package/.next/static/chunks/app/api/lounge/events/route-d1e510cc33aec52f.js +0 -1
  254. package/.next/static/chunks/app/api/lounge/route-d1e510cc33aec52f.js +0 -1
  255. package/.next/static/chunks/app/api/mcp/route-d1e510cc33aec52f.js +0 -1
  256. package/.next/static/chunks/app/api/model-roles/route-d1e510cc33aec52f.js +0 -1
  257. package/.next/static/chunks/app/api/models/route-d1e510cc33aec52f.js +0 -1
  258. package/.next/static/chunks/app/api/models-config/catalog/route-d1e510cc33aec52f.js +0 -1
  259. package/.next/static/chunks/app/api/models-config/discover/route-d1e510cc33aec52f.js +0 -1
  260. package/.next/static/chunks/app/api/models-config/route-d1e510cc33aec52f.js +0 -1
  261. package/.next/static/chunks/app/api/models-config/test/route-d1e510cc33aec52f.js +0 -1
  262. package/.next/static/chunks/app/api/plugins/route-d1e510cc33aec52f.js +0 -1
  263. package/.next/static/chunks/app/api/project-trust/route-d1e510cc33aec52f.js +0 -1
  264. package/.next/static/chunks/app/api/projects/route-d1e510cc33aec52f.js +0 -1
  265. package/.next/static/chunks/app/api/runs/[runId]/route-d1e510cc33aec52f.js +0 -1
  266. package/.next/static/chunks/app/api/runs/route-d1e510cc33aec52f.js +0 -1
  267. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-d1e510cc33aec52f.js +0 -1
  268. package/.next/static/chunks/app/api/sessions/[id]/context/route-d1e510cc33aec52f.js +0 -1
  269. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-d1e510cc33aec52f.js +0 -1
  270. package/.next/static/chunks/app/api/sessions/[id]/export/route-d1e510cc33aec52f.js +0 -1
  271. package/.next/static/chunks/app/api/sessions/[id]/route-d1e510cc33aec52f.js +0 -1
  272. package/.next/static/chunks/app/api/sessions/[id]/state/route-d1e510cc33aec52f.js +0 -1
  273. package/.next/static/chunks/app/api/sessions/route-d1e510cc33aec52f.js +0 -1
  274. package/.next/static/chunks/app/api/settings/route-d1e510cc33aec52f.js +0 -1
  275. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-d1e510cc33aec52f.js +0 -1
  276. package/.next/static/chunks/app/api/skills/check/route-d1e510cc33aec52f.js +0 -1
  277. package/.next/static/chunks/app/api/skills/install/route-d1e510cc33aec52f.js +0 -1
  278. package/.next/static/chunks/app/api/skills/route-d1e510cc33aec52f.js +0 -1
  279. package/.next/static/chunks/app/api/skills/search/route-d1e510cc33aec52f.js +0 -1
  280. package/.next/static/chunks/app/api/skills/update/route-d1e510cc33aec52f.js +0 -1
  281. package/.next/static/chunks/app/api/theme/route-d1e510cc33aec52f.js +0 -1
  282. package/.next/static/chunks/app/api/tool-image/route-d1e510cc33aec52f.js +0 -1
  283. package/.next/static/chunks/app/api/update-maintenance/route-d1e510cc33aec52f.js +0 -1
  284. package/.next/static/chunks/app/api/updates/route-d1e510cc33aec52f.js +0 -1
  285. package/.next/static/chunks/app/api/web-access/recovery/route-d1e510cc33aec52f.js +0 -1
  286. package/.next/static/chunks/app/api/web-access/route-d1e510cc33aec52f.js +0 -1
  287. package/.next/static/chunks/app/api/web6/consults/route-d1e510cc33aec52f.js +0 -1
  288. package/.next/static/chunks/app/api/worktrees/route-d1e510cc33aec52f.js +0 -1
  289. package/.next/static/chunks/app/manifest.webmanifest/route-d1e510cc33aec52f.js +0 -1
  290. package/.next/static/chunks/app/page-73ab54909e09eb66.js +0 -22
  291. package/.next/static/chunks/next/dist/client/components/builtin/app-error-d1e510cc33aec52f.js +0 -1
  292. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1e510cc33aec52f.js +0 -1
  293. package/.next/static/chunks/next/dist/client/components/builtin/not-found-d1e510cc33aec52f.js +0 -1
  294. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1e510cc33aec52f.js +0 -1
  295. package/.next/static/p4VT4B7cMX4CRW9JBo9-M/_buildManifest.js +0 -1
  296. /package/.next/static/{p4VT4B7cMX4CRW9JBo9-M → ZtmM1pqseDsjZJNTAi2i3}/_ssgManifest.js +0 -0
@@ -2,4 +2,4 @@
2
2
  2:I[57121,[],""]
3
3
  3:I[74581,[],""]
4
4
  4:[]
5
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"p4VT4B7cMX4CRW9JBo9-M"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"ZtmM1pqseDsjZJNTAi2i3"}
@@ -22,11 +22,11 @@
22
22
  "/api/worktrees/route": "app/api/worktrees/route.js",
23
23
  "/favicon.ico/route": "app/favicon.ico/route.js",
24
24
  "/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
25
- "/api/agent/running/route": "app/api/agent/running/route.js",
26
25
  "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
26
+ "/api/agent/running/route": "app/api/agent/running/route.js",
27
+ "/api/agent/new/route": "app/api/agent/new/route.js",
27
28
  "/api/attachments/route": "app/api/attachments/route.js",
28
29
  "/api/auth/all-providers/route": "app/api/auth/all-providers/route.js",
29
- "/api/agent/new/route": "app/api/agent/new/route.js",
30
30
  "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
31
31
  "/api/auth/logout/[provider]/route": "app/api/auth/logout/[provider]/route.js",
32
32
  "/api/auth/providers/route": "app/api/auth/providers/route.js",
@@ -40,33 +40,34 @@
40
40
  "/api/gpt6/web6-session/route": "app/api/gpt6/web6-session/route.js",
41
41
  "/api/live/call/[callId]/route": "app/api/live/call/[callId]/route.js",
42
42
  "/api/live/events/route": "app/api/live/events/route.js",
43
- "/api/live/voices/route": "app/api/live/voices/route.js",
44
43
  "/api/live/offer/route": "app/api/live/offer/route.js",
44
+ "/api/live/voices/route": "app/api/live/voices/route.js",
45
45
  "/api/lounge/events/route": "app/api/lounge/events/route.js",
46
46
  "/api/lounge/route": "app/api/lounge/route.js",
47
+ "/api/mcp/route": "app/api/mcp/route.js",
47
48
  "/api/model-roles/route": "app/api/model-roles/route.js",
48
49
  "/api/models-config/catalog/route": "app/api/models-config/catalog/route.js",
49
50
  "/api/models-config/discover/route": "app/api/models-config/discover/route.js",
50
51
  "/api/models-config/route": "app/api/models-config/route.js",
51
- "/api/mcp/route": "app/api/mcp/route.js",
52
52
  "/api/models-config/test/route": "app/api/models-config/test/route.js",
53
53
  "/api/models/route": "app/api/models/route.js",
54
+ "/api/plugins/route": "app/api/plugins/route.js",
54
55
  "/api/project-trust/route": "app/api/project-trust/route.js",
55
56
  "/api/runs/[runId]/route": "app/api/runs/[runId]/route.js",
56
- "/api/plugins/route": "app/api/plugins/route.js",
57
57
  "/api/runs/route": "app/api/runs/route.js",
58
58
  "/api/sessions/[id]/export/route": "app/api/sessions/[id]/export/route.js",
59
59
  "/api/sessions/route": "app/api/sessions/route.js",
60
+ "/api/sessions/search/route": "app/api/sessions/search/route.js",
60
61
  "/api/sidecars/[service]/[...path]/route": "app/api/sidecars/[service]/[...path]/route.js",
61
- "/api/skills/check/route": "app/api/skills/check/route.js",
62
62
  "/api/settings/route": "app/api/settings/route.js",
63
+ "/api/skills/check/route": "app/api/skills/check/route.js",
63
64
  "/api/skills/install/route": "app/api/skills/install/route.js",
64
65
  "/api/skills/route": "app/api/skills/route.js",
65
- "/api/theme/route": "app/api/theme/route.js",
66
- "/api/skills/update/route": "app/api/skills/update/route.js",
67
66
  "/api/skills/search/route": "app/api/skills/search/route.js",
68
- "/api/updates/route": "app/api/updates/route.js",
67
+ "/api/skills/update/route": "app/api/skills/update/route.js",
68
+ "/api/theme/route": "app/api/theme/route.js",
69
69
  "/api/update-maintenance/route": "app/api/update-maintenance/route.js",
70
+ "/api/updates/route": "app/api/updates/route.js",
70
71
  "/api/web-access/recovery/route": "app/api/web-access/recovery/route.js",
71
72
  "/api/web-access/route": "app/api/web-access/route.js",
72
73
  "/api/web6/consults/route": "app/api/web6/consults/route.js",
@@ -1,13 +1,13 @@
1
- exports.id=1517,exports.ids=[1517],exports.modules={14362:(a,b,c)=>{"use strict";c.d(b,{BY:()=>h,P9:()=>i,UL:()=>j,dB:()=>d,dr:()=>e,iv:()=>f,mP:()=>g});let d=["main","maker","checker","advisor","unattributed"],e=["primary","rework","review"],f=["wait-attribution","unpriced-cost","effort-unrecorded","role-unattributed","busy-unrecorded"],g=50,h=20,i=60,j=30},25738:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Dq:()=>r,Oc:()=>C,XJ:()=>A,lV:()=>B,v:()=>z});var e=c(64978),f=c(84),g=c(47043),h=c(73024),i=c(48161),j=c(76760),k=c(14362),l=a([e,f,g]);[e,f,g]=l.then?(await l)():l;class C extends Error{constructor(a,b=500){super(a),this.status=b,this.name="RunXrayError"}}function m(a){let b=new Map;for(let c of a){let a=c.models[0]??"?",d=c.efforts[0]??null,e=JSON.stringify([c.kind,a,d]),f=b.get(e);f?f.count+=1:b.set(e,{kind:c.kind,model:a,effort:d,count:1})}let c=[...b.values()].sort((a,b)=>{let c=k.dB.indexOf(a.kind)-k.dB.indexOf(b.kind);if(0!==c)return c;if(a.model!==b.model)return a.model<b.model?-1:1;let d=a.effort??"?",e=b.effort??"?";return d===e?0:d<e?-1:1});return{signature:c.map(a=>`${"main"===a.kind?"main":`${a.kind} x${a.count}`}=${a.model}:${a.effort??"?"}`).join("|"),roles:c}}function n(a){if(0===a.length)return 0;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2==1?b[c]:(b[c-1]+b[c])/2}function o(){return{titles:new Map,effortTimeline:[],roleMap:new Map}}let D=new Map;function p(a){let b="";try{let c=(0,h.statSync)(a);b=`${a}:${c.mtimeMs}:${c.size}`}catch{return o()}let c=D.get(b);if(c)return D.delete(b),D.set(b,c),c;let d=function(a){let b,c=o();try{b=(0,h.readFileSync)(a,"utf8")}catch{return c}let d=[];for(let a of b.split("\n"))if(a.startsWith('{"type":"thinking_level_change"')){let b;try{b=JSON.parse(a)}catch{continue}let d=b,e="string"==typeof d.timestamp?Date.parse(d.timestamp):NaN;"string"==typeof d.thinkingLevel&&d.thinkingLevel&&Number.isFinite(e)&&c.effortTimeline.push({at:e,level:d.thinkingLevel})}else if(a.startsWith('{"type":"model_change"')||a.startsWith('{"type":"session"'))continue;else if(a.startsWith('{"type":"message"'))if(a.includes('"role":"user"')){let b;try{b=JSON.parse(a)}catch{continue}let d=b;if("string"!=typeof d.id)continue;let e=d.message?.content;if(!Array.isArray(e))continue;for(let a of e)if(a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text){c.titles.set(d.id,a.text.replace(/\s+/g," ").trim().slice(0,120));break}}else a.includes('"name":"task"')&&d.push(a);return c.roleMap=function(a){let b=new Map;for(let c of a){let a;if(!c.includes('"name":"task"'))continue;try{a=JSON.parse(c)}catch{continue}let d=a?.message?.content;if(Array.isArray(d))for(let a of d){if(!a||"object"!=typeof a||"toolCall"!==a.type||"task"!==a.name)continue;let c=a.arguments?.tasks;if(Array.isArray(c))for(let a of c){if(!a||"object"!=typeof a||"string"!=typeof a.name||!a.name)continue;let c=a.name.endsWith(".jsonl")?a.name.slice(0,-6):a.name;b.set(c,{agent:"string"==typeof a.agent?a.agent:"",purpose:"string"==typeof a.task?function(a){for(let b of a.split("\n")){let a=/^\s*PURPOSE:\s*(\S+)\s*$/.exec(b);if(a)return k.dr.includes(a[1])?a[1]:null}return null}(a.task):null})}}}return b}(d),c}(a);for(D.set(b,d);D.size>128;){let a=D.keys().next();if(a.done)break;D.delete(a.value)}return d}function q(){let a=(0,j.join)((0,i.homedir)(),".omp","stats.db");return(0,h.existsSync)(a)?new e.Database(a,{readonly:!0}):null}let E=null;function r(){return E??=(async()=>{try{await (0,f.syncAllSessions)({workers:1})}finally{(0,g.closeDb)()}})().catch(a=>{console.warn("[run-xray] stats sync failed; serving existing stats.db",a)}).finally(()=>{E=null})}let F=/_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i;function s(a,b){let c=`%\\_${b.replace(/[\\%_]/g,a=>`\\${a}`)}.jsonl`,d=a.query(`SELECT session_file FROM messages WHERE session_file LIKE ? ESCAPE '\\'
1
+ exports.id=1517,exports.ids=[1517],exports.modules={14362:(a,b,c)=>{"use strict";c.d(b,{BY:()=>h,P9:()=>i,UL:()=>j,dB:()=>d,dr:()=>e,iv:()=>f,mP:()=>g});let d=["main","maker","checker","advisor","unattributed"],e=["primary","rework","review"],f=["wait-attribution","unpriced-cost","effort-unrecorded","role-unattributed","busy-unrecorded"],g=50,h=20,i=60,j=30},25738:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Dq:()=>r,Oc:()=>C,XJ:()=>A,lV:()=>B,v:()=>z});var e=c(64978),f=c(84),g=c(47043),h=c(73024),i=c(48161),j=c(76760),k=c(14362),l=a([e,f,g]);[e,f,g]=l.then?(await l)():l;class C extends Error{constructor(a,b=500){super(a),this.status=b,this.name="RunXrayError"}}function m(a){let b=new Map;for(let c of a){let a=c.models[0]??"?",d=c.efforts[0]??null,e=JSON.stringify([c.kind,a,d]),f=b.get(e);f?f.count+=1:b.set(e,{kind:c.kind,model:a,effort:d,count:1})}let c=[...b.values()].sort((a,b)=>{let c=k.dB.indexOf(a.kind)-k.dB.indexOf(b.kind);if(0!==c)return c;if(a.model!==b.model)return a.model<b.model?-1:1;let d=a.effort??"?",e=b.effort??"?";return d===e?0:d<e?-1:1});return{signature:c.map(a=>`${"main"===a.kind?"main":`${a.kind} x${a.count}`}=${a.model}:${a.effort??"?"}`).join("|"),roles:c}}function n(a){if(0===a.length)return 0;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2==1?b[c]:(b[c-1]+b[c])/2}function o(){return{titles:new Map,effortTimeline:[],roleMap:new Map,helperEntries:new Map}}let D=new Map;function p(a){let b="";try{let c=(0,h.statSync)(a);b=`${a}:${c.mtimeMs}:${c.size}`}catch{return o()}let c=D.get(b);if(c)return D.delete(b),D.set(b,c),c;let d=function(a){let b,c=o();try{b=(0,h.readFileSync)(a,"utf8")}catch{return c}let d=[];for(let a of b.split("\n"))if(a.startsWith('{"type":"thinking_level_change"')){let b;try{b=JSON.parse(a)}catch{continue}let d=b,e="string"==typeof d.timestamp?Date.parse(d.timestamp):NaN;"string"==typeof d.thinkingLevel&&d.thinkingLevel&&Number.isFinite(e)&&c.effortTimeline.push({at:e,level:d.thinkingLevel})}else if(a.startsWith('{"type":"model_change"')||a.startsWith('{"type":"session"'))continue;else if(a.startsWith('{"type":"model_usage"')){let b;try{b=JSON.parse(a)}catch{continue}let d=b;if("string"!=typeof d.id||!d.id)continue;c.helperEntries.set(d.id,{purpose:"string"==typeof d.purpose&&d.purpose?d.purpose:"?",role:"string"==typeof d.role&&d.role?d.role:null})}else if(a.startsWith('{"type":"message"'))if(a.includes('"role":"user"')){let b;try{b=JSON.parse(a)}catch{continue}let d=b;if("string"!=typeof d.id)continue;let e=d.message?.content;if(!Array.isArray(e))continue;for(let a of e)if(a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text){c.titles.set(d.id,a.text.replace(/\s+/g," ").trim().slice(0,120));break}}else a.includes('"name":"task"')&&d.push(a);return c.roleMap=function(a){let b=new Map;for(let c of a){let a;if(!c.includes('"name":"task"'))continue;try{a=JSON.parse(c)}catch{continue}let d=a?.message?.content;if(Array.isArray(d))for(let a of d){if(!a||"object"!=typeof a||"toolCall"!==a.type||"task"!==a.name)continue;let c=a.arguments?.tasks;if(Array.isArray(c))for(let a of c){if(!a||"object"!=typeof a||"string"!=typeof a.name||!a.name)continue;let c=a.name.endsWith(".jsonl")?a.name.slice(0,-6):a.name;b.set(c,{agent:"string"==typeof a.agent?a.agent:"",purpose:"string"==typeof a.task?function(a){for(let b of a.split("\n")){let a=/^\s*PURPOSE:\s*(\S+)\s*$/.exec(b);if(a)return k.dr.includes(a[1])?a[1]:null}return null}(a.task):null})}}}return b}(d),c}(a);for(D.set(b,d);D.size>128;){let a=D.keys().next();if(a.done)break;D.delete(a.value)}return d}function q(){let a=(0,j.join)((0,i.homedir)(),".omp","stats.db");return(0,h.existsSync)(a)?new e.Database(a,{readonly:!0}):null}let E=null;function r(){return E??=(async()=>{try{await (0,f.syncAllSessions)({workers:1})}finally{(0,g.closeDb)()}})().catch(a=>{console.warn("[run-xray] stats sync failed; serving existing stats.db",a)}).finally(()=>{E=null})}let F=/_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i;function s(a,b){let c=`%\\_${b.replace(/[\\%_]/g,a=>`\\${a}`)}.jsonl`,d=a.query(`SELECT session_file FROM messages WHERE session_file LIKE ? ESCAPE '\\'
2
2
  UNION
3
3
  SELECT session_file FROM user_messages WHERE session_file LIKE ? ESCAPE '\\'`).all(c,c),e=`_${b}.jsonl`;return d.map(a=>a.session_file).filter(a=>(a.split(/[\\/]/).pop()??a).endsWith(e)).sort()[0]??null}function t(a,b,c){let d=c.slice(0,-6),e=d.replace(/[\\%_]/g,a=>`\\${a}`),f=a.query(`SELECT DISTINCT session_file FROM messages
4
4
  WHERE session_file LIKE ? ESCAPE '\\' OR session_file LIKE ? ESCAPE '\\'
5
5
  ORDER BY session_file ASC`).all(`${e}\\\\%`,`${e}/%`).map(a=>a.session_file).filter(a=>a!==c&&(a.startsWith(`${d}\\`)||a.startsWith(`${d}/`))),g=a.query(`SELECT entry_id, timestamp FROM user_messages
6
- WHERE session_file = ? ORDER BY timestamp ASC, entry_id ASC`).all(c),h=[c,...f],i=h.map(()=>"?").join(","),j=a.query(`SELECT session_file, entry_id, folder, model, provider, timestamp, duration,
6
+ WHERE session_file = ? ORDER BY timestamp ASC, entry_id ASC`).all(c),h=[c,...f],i=h.map(()=>"?").join(","),j=a.query(`SELECT session_file, entry_id, folder, model, provider, timestamp, duration, ttft,
7
7
  stop_reason, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens,
8
8
  total_tokens, cost_total, cost_unpriced, agent_type
9
9
  FROM messages WHERE session_file IN (${i}) ORDER BY timestamp ASC, id ASC`).all(...h),k=a.query(`SELECT session_file, tool_name, timestamp, is_error
10
- FROM tool_calls WHERE session_file IN (${i})`).all(...h),l=p(c),m=new Map;for(let a of f)m.set(a,p(a));return{sessionId:b,parentFile:c,childFiles:f,users:g,messages:j,toolCalls:k,parentScan:l,childScans:m}}function u(a,b){let c=0,d=a.length-1,e=0;for(;c<=d;){let f=c+d>>1;a[f].timestamp<=b?(e=f,c=f+1):d=f-1}return e}function v(a,b,c,d,e,f){let g=[],h=new Set,i=0,j=1/0,k=-1/0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;for(let a of d){let b=`${a.provider}/${a.model}`;h.has(b)||(h.add(b),g.push(b)),null===a.duration&&(s+=1),i+=a.duration??0;let c=a.timestamp,d=c+(a.duration??0);c<j&&(j=c),d>k&&(k=d),l+=a.input_tokens,m+=a.output_tokens,n+=a.cache_read_tokens,o+=a.cache_write_tokens,p+=a.total_tokens,a.total_tokens>0&&0===a.cost_total&&("xai-oauth"===a.provider||1===a.cost_unpriced)?r+=1:q+=a.cost_total,"error"===a.stop_reason||"length"===a.stop_reason?t+=1:"aborted"===a.stop_reason&&(u+=1)}return{id:a,kind:b,purpose:c,models:g,efforts:f,requestCount:d.length,busyMs:i,spanMs:k-j,startedAt:j,endedAt:k,inputTokens:l,outputTokens:m,cacheReadTokens:n,cacheWriteTokens:o,totalTokens:p,estimatedCostUsd:q,unpricedRequests:r,untimedRequests:s,errorCount:t,abortedCount:u,toolCalls:e}}function w(a){if(0===a.users.length)return[];let b=a.users.map(()=>[]);for(let c of a.messages)b[u(a.users,c.timestamp)].push(c);let c=a.users.map(()=>[]);for(let b of a.toolCalls)c[u(a.users,b.timestamp)].push(b);let d=a.users[a.users.length-1].timestamp,e=d;for(let b of a.messages){b.timestamp>d&&(d=b.timestamp);let a=b.timestamp+(b.duration??0);a>e&&(e=a)}for(let b of a.toolCalls)b.timestamp>d&&(d=b.timestamp),b.timestamp>e&&(e=b.timestamp);let f=[];for(let h=0;h<a.users.length;h+=1){var g;let i=a.users[h],j=i.timestamp,k=Math.max(h+1<a.users.length?a.users[h+1].timestamp:e,j),l=k-j,n=b[h],p=c[h],q=new Map;for(let a of n){let b=q.get(a.session_file)??[];b.push(a),q.set(a.session_file,b)}let r=new Map;for(let a of p)r.set(a.session_file,(r.get(a.session_file)??0)+1);let s=q.get(a.parentFile)??[],t=h+1<a.users.length,u=s.length>0?(g=s[s.length-1].stop_reason,"stop"===g?"completed":"error"===g||"length"===g?"error":"aborted"===g?"aborted":"running"):"running",w="running"===u&&t?"interrupted":u,y="running"===w?null:t?k:d,z=[];for(let b of(s.length>0&&z.push(v("main","main",null,s,r.get(a.parentFile)??0,x(a.parentScan,a.users,h,y))),a.childFiles)){let c=q.get(b);if(!c||0===c.length)continue;let d=function(a){let b=a.split(/[\\/]/).pop()??a;return b.endsWith(".jsonl")?b.slice(0,-6):b}(b),e=function(a,b){if("__advisor"===a)return{kind:"advisor",purpose:null};let c=b.get(a)??b.get(a.replace(/-\d+$/,""));return c&&("maker"===c.agent||"checker"===c.agent)?{kind:c.agent,purpose:c.purpose}:{kind:"unattributed",purpose:null}}(d,a.parentScan.roleMap),f=a.childScans.get(b)??o();z.push(v(d,e.kind,e.purpose,c,r.get(b)??0,x(f,a.users,h,y)))}let A=0,B=0,C=0,D=0;for(let a of z)A+=a.busyMs,B+=a.totalTokens,C+=a.estimatedCostUsd,D+=a.unpricedRequests;let E=n.map(a=>[a.timestamp,a.timestamp+(a.duration??0)]),F=Math.max(0,l-function(a,b,c){if(!(c>b))return 0;let d=[];for(let[e,f]of a){let a=Math.max(e,b),g=Math.min(f,c);g>a&&d.push([a,g])}d.sort((a,b)=>a[0]-b[0]||a[1]-b[1]);let e=0,f=0,g=0,h=!1;for(let[a,b]of d)!h||a>g?(h&&(e+=g-f),f=a,g=b,h=!0):b>g&&(g=b);return h&&(e+=g-f),e}(E,j,k)),G=[];F>0&&G.push("wait-attribution"),z.some(a=>a.unpricedRequests>0)&&G.push("unpriced-cost"),z.some(a=>0===a.efforts.length)&&G.push("effort-unrecorded"),z.some(a=>"unattributed"===a.kind)&&G.push("role-unattributed"),z.some(a=>a.untimedRequests>0)&&G.push("busy-unrecorded");let H=m(z.map(a=>({kind:a.kind,models:a.models,efforts:a.efforts})));f.push({runId:`${a.sessionId}:${i.entry_id}`,sessionId:a.sessionId,entryId:i.entry_id,index:h+1,title:a.parentScan.titles.get(i.entry_id)??null,startedAt:j,endedAt:"running"===w?null:k,wallClockMs:l,outcome:w,busyMs:A,childCount:z.filter(a=>"main"!==a.id).length,totalTokens:B,estimatedCostUsd:C,unpricedRequests:D,configSignature:H.signature,roles:z,bottlenecks:function(a,b){let c=a.map(a=>({kind:"role-busy",id:a.id,ms:a.ms}));b>0&&c.push({kind:"unmeasured-gap",id:"unmeasured",ms:b}),c.sort((a,b)=>b.ms-a.ms||(a.id<b.id?-1:+(a.id>b.id)));let d=c.slice(0,3),e=d[0]?.ms??0;return d.map(a=>({kind:a.kind,id:a.id,ms:a.ms,relative:e>0?a.ms/e:0}))}(z.map(a=>({id:a.id,ms:a.busyMs})),F),unmeasuredMs:F,toolTotals:function(a){let b=new Map;for(let c of a){let a=b.get(c.tool_name)??{calls:0,errors:0};a.calls+=1,(c.is_error??0)!==0&&(a.errors+=1),b.set(c.tool_name,a)}return[...b.entries()].map(([a,b])=>({toolName:a,calls:b.calls,errors:b.errors})).sort((a,b)=>b.calls-a.calls||(a.toolName<b.toolName?-1:+(a.toolName>b.toolName))).slice(0,8)}(p),unmeasured:G})}return f}function x(a,b,c,d){let e=b[c].timestamp,f=[],g=new Set,h=null;for(let i of a.effortTimeline){if(i.at<=e){h=i.level;continue}(null===d||!(i.at>d))&&u(b,i.at)===c&&(null===h||g.has(h)||(g.add(h),f.push(h),h=null),g.has(i.level)||(g.add(i.level),f.push(i.level)))}return null===h||g.has(h)||f.push(h),f}function y(a){let b=new Set;for(let c of a)for(let a of c.unmeasured)b.add(a);return k.iv.filter(a=>b.has(a))}function z(a,b=k.BY){if(!a.trim())throw new C("sessionId가 필요합니다.",400);let c=Math.min(Math.max(Math.floor(b),1),k.mP),d=q();if(!d)return{sessionId:a,runs:[],unmeasured:[]};try{let b=s(d,a);if(!b)return{sessionId:a,runs:[],unmeasured:[]};let e=w(t(d,a,b));e.sort((a,b)=>b.startedAt-a.startedAt||b.index-a.index);let f=e.slice(0,c);return{sessionId:a,runs:f.map(a=>({runId:a.runId,sessionId:a.sessionId,entryId:a.entryId,index:a.index,title:a.title,startedAt:a.startedAt,endedAt:a.endedAt,wallClockMs:a.wallClockMs,outcome:a.outcome,busyMs:a.busyMs,childCount:a.childCount,totalTokens:a.totalTokens,estimatedCostUsd:a.estimatedCostUsd,unpricedRequests:a.unpricedRequests,configSignature:a.configSignature})),unmeasured:y(f)}}finally{d.close()}}function A(a,b){if(!a.trim()||!b.trim())throw new C("runId 형식이 올바르지 않습니다.",400);let c=q();if(!c)throw new C("기록을 찾을 수 없습니다.",404);try{let d=s(c,a);if(!d)throw new C("기록을 찾을 수 없습니다.",404);let e=w(t(c,a,d)).find(a=>a.entryId===b);if(!e)throw new C("기록을 찾을 수 없습니다.",404);return e}finally{c.close()}}function B(a,b=k.UL,c="all"){let d=Math.min(Math.max(Math.floor(b),1),k.P9),e=q();if(!e)return{folder:a,folders:[],scope:c,configs:[],runCount:0,sessionCount:0,excludedRunCount:0,unmeasured:[]};try{let b=e.query(`SELECT f.folder AS folder FROM (
10
+ FROM tool_calls WHERE session_file IN (${i})`).all(...h),l=p(c),m=new Map;for(let a of f)m.set(a,p(a));return{sessionId:b,parentFile:c,childFiles:f,users:g,messages:j,toolCalls:k,parentScan:l,childScans:m}}function u(a,b){let c=0,d=a.length-1,e=0;for(;c<=d;){let f=c+d>>1;a[f].timestamp<=b?(e=f,c=f+1):d=f-1}return e}function v(a,b,c,d,e,f,g){let h=[],i=new Set,j=new Map,k=0,l=0,m=1/0,n=-1/0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;for(let a of d){let b=`${a.provider}/${a.model}`,c=a.timestamp,d=c+(a.duration??0);c<m&&(m=c),d>n&&(n=d),o+=a.input_tokens,p+=a.output_tokens,q+=a.cache_read_tokens,r+=a.cache_write_tokens,s+=a.total_tokens;let f=a.total_tokens>0&&0===a.cost_total&&("xai-oauth"===a.provider||1===a.cost_unpriced),g=f?0:a.cost_total;f&&(u+=1),t+=g;let A="error"===a.stop_reason||"length"===a.stop_reason,B=e.get(a.entry_id);if(B){let c=JSON.stringify([B.purpose,B.role,b]),d=j.get(c)??{purpose:B.purpose,role:B.role,model:b,requestCount:0,inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalTokens:0,estimatedCostUsd:0,unpricedRequests:0,errorCount:0};d.requestCount+=1,d.inputTokens+=a.input_tokens,d.outputTokens+=a.output_tokens,d.cacheReadTokens+=a.cache_read_tokens,d.cacheWriteTokens+=a.cache_write_tokens,d.totalTokens+=a.total_tokens,d.estimatedCostUsd+=g,f&&(d.unpricedRequests+=1),A&&(d.errorCount+=1),j.set(c,d);continue}k+=1,i.has(b)||(i.add(b),h.push(b)),null===a.duration&&(v+=1),l+=a.duration??0,null!==a.ttft&&(w+=a.ttft,x+=1),A?y+=1:"aborted"===a.stop_reason&&(z+=1)}return{id:a,kind:b,purpose:c,models:h,efforts:g,requestCount:k,busyMs:l,spanMs:n-m,startedAt:m,endedAt:n,inputTokens:o,outputTokens:p,cacheReadTokens:q,cacheWriteTokens:r,totalTokens:s,estimatedCostUsd:t,unpricedRequests:u,untimedRequests:v,ttftMs:x>0?w:null,ttftRequests:x,helpers:[...j.values()].sort((a,b)=>b.estimatedCostUsd-a.estimatedCostUsd||b.totalTokens-a.totalTokens||(a.purpose<b.purpose?-1:a.purpose>b.purpose?1:a.model<b.model?-1:+(a.model>b.model))),errorCount:y,abortedCount:z,toolCalls:f}}function w(a){if(0===a.users.length)return[];let b=a.users.map(()=>[]);for(let c of a.messages)b[u(a.users,c.timestamp)].push(c);let c=a.users.map(()=>[]);for(let b of a.toolCalls)c[u(a.users,b.timestamp)].push(b);let d=a.users[a.users.length-1].timestamp,e=d;for(let b of a.messages){b.timestamp>d&&(d=b.timestamp);let a=b.timestamp+(b.duration??0);a>e&&(e=a)}for(let b of a.toolCalls)b.timestamp>d&&(d=b.timestamp),b.timestamp>e&&(e=b.timestamp);let f=[];for(let h=0;h<a.users.length;h+=1){var g;let i=a.users[h],j=i.timestamp,k=Math.max(h+1<a.users.length?a.users[h+1].timestamp:e,j),l=k-j,n=b[h],p=c[h],q=new Map;for(let a of n){let b=q.get(a.session_file)??[];b.push(a),q.set(a.session_file,b)}let r=new Map;for(let a of p)r.set(a.session_file,(r.get(a.session_file)??0)+1);let s=q.get(a.parentFile)??[],t=s.findLast(b=>!a.parentScan.helperEntries.has(b.entry_id)),u=h+1<a.users.length,w=t?(g=t.stop_reason,"stop"===g?"completed":"error"===g||"length"===g?"error":"aborted"===g?"aborted":"running"):"running",y="running"===w&&u?"interrupted":w,z="running"===y?null:u?k:d,A=[];for(let b of(s.length>0&&A.push(v("main","main",null,s,a.parentScan.helperEntries,r.get(a.parentFile)??0,x(a.parentScan,a.users,h,z))),a.childFiles)){let c=q.get(b);if(!c||0===c.length)continue;let d=function(a){let b=a.split(/[\\/]/).pop()??a;return b.endsWith(".jsonl")?b.slice(0,-6):b}(b),e=function(a,b){if("__advisor"===a)return{kind:"advisor",purpose:null};let c=b.get(a)??b.get(a.replace(/-\d+$/,""));return c&&("maker"===c.agent||"checker"===c.agent)?{kind:c.agent,purpose:c.purpose}:{kind:"unattributed",purpose:null}}(d,a.parentScan.roleMap),f=a.childScans.get(b)??o();A.push(v(d,e.kind,e.purpose,c,f.helperEntries,r.get(b)??0,x(f,a.users,h,z)))}let B=0,C=0,D=0,E=0;for(let a of A)B+=a.busyMs,C+=a.totalTokens,D+=a.estimatedCostUsd,E+=a.unpricedRequests;let F=n.map(a=>[a.timestamp,a.timestamp+(a.duration??0)]),G=Math.max(0,l-function(a,b,c){if(!(c>b))return 0;let d=[];for(let[e,f]of a){let a=Math.max(e,b),g=Math.min(f,c);g>a&&d.push([a,g])}d.sort((a,b)=>a[0]-b[0]||a[1]-b[1]);let e=0,f=0,g=0,h=!1;for(let[a,b]of d)!h||a>g?(h&&(e+=g-f),f=a,g=b,h=!0):b>g&&(g=b);return h&&(e+=g-f),e}(F,j,k)),H=[];G>0&&H.push("wait-attribution"),A.some(a=>a.unpricedRequests>0)&&H.push("unpriced-cost"),A.some(a=>0===a.efforts.length)&&H.push("effort-unrecorded"),A.some(a=>"unattributed"===a.kind)&&H.push("role-unattributed"),A.some(a=>a.untimedRequests>0)&&H.push("busy-unrecorded");let I=m(A.map(a=>({kind:a.kind,models:a.models,efforts:a.efforts})));f.push({runId:`${a.sessionId}:${i.entry_id}`,sessionId:a.sessionId,entryId:i.entry_id,index:h+1,title:a.parentScan.titles.get(i.entry_id)??null,startedAt:j,endedAt:"running"===y?null:k,wallClockMs:l,outcome:y,busyMs:B,childCount:A.filter(a=>"main"!==a.id).length,totalTokens:C,estimatedCostUsd:D,unpricedRequests:E,configSignature:I.signature,roles:A,bottlenecks:function(a,b){let c=a.map(a=>({kind:"role-busy",id:a.id,ms:a.ms}));b>0&&c.push({kind:"unmeasured-gap",id:"unmeasured",ms:b}),c.sort((a,b)=>b.ms-a.ms||(a.id<b.id?-1:+(a.id>b.id)));let d=c.slice(0,3),e=d[0]?.ms??0;return d.map(a=>({kind:a.kind,id:a.id,ms:a.ms,relative:e>0?a.ms/e:0}))}(A.map(a=>({id:a.id,ms:a.busyMs})),G),unmeasuredMs:G,toolTotals:function(a){let b=new Map;for(let c of a){let a=b.get(c.tool_name)??{calls:0,errors:0};a.calls+=1,(c.is_error??0)!==0&&(a.errors+=1),b.set(c.tool_name,a)}return[...b.entries()].map(([a,b])=>({toolName:a,calls:b.calls,errors:b.errors})).sort((a,b)=>b.calls-a.calls||(a.toolName<b.toolName?-1:+(a.toolName>b.toolName))).slice(0,8)}(p),unmeasured:H})}return f}function x(a,b,c,d){let e=b[c].timestamp,f=[],g=new Set,h=null;for(let i of a.effortTimeline){if(i.at<=e){h=i.level;continue}(null===d||!(i.at>d))&&u(b,i.at)===c&&(null===h||g.has(h)||(g.add(h),f.push(h),h=null),g.has(i.level)||(g.add(i.level),f.push(i.level)))}return null===h||g.has(h)||f.push(h),f}function y(a){let b=new Set;for(let c of a)for(let a of c.unmeasured)b.add(a);return k.iv.filter(a=>b.has(a))}function z(a,b=k.BY){if(!a.trim())throw new C("sessionId가 필요합니다.",400);let c=Math.min(Math.max(Math.floor(b),1),k.mP),d=q();if(!d)return{sessionId:a,runs:[],unmeasured:[]};try{let b=s(d,a);if(!b)return{sessionId:a,runs:[],unmeasured:[]};let e=w(t(d,a,b));e.sort((a,b)=>b.startedAt-a.startedAt||b.index-a.index);let f=e.slice(0,c);return{sessionId:a,runs:f.map(a=>({runId:a.runId,sessionId:a.sessionId,entryId:a.entryId,index:a.index,title:a.title,startedAt:a.startedAt,endedAt:a.endedAt,wallClockMs:a.wallClockMs,outcome:a.outcome,busyMs:a.busyMs,childCount:a.childCount,totalTokens:a.totalTokens,estimatedCostUsd:a.estimatedCostUsd,unpricedRequests:a.unpricedRequests,configSignature:a.configSignature})),unmeasured:y(f)}}finally{d.close()}}function A(a,b){if(!a.trim()||!b.trim())throw new C("runId 형식이 올바르지 않습니다.",400);let c=q();if(!c)throw new C("기록을 찾을 수 없습니다.",404);try{let d=s(c,a);if(!d)throw new C("기록을 찾을 수 없습니다.",404);let e=w(t(c,a,d)).find(a=>a.entryId===b);if(!e)throw new C("기록을 찾을 수 없습니다.",404);return e}finally{c.close()}}function B(a,b=k.UL,c="all"){let d=Math.min(Math.max(Math.floor(b),1),k.P9),e=q();if(!e)return{folder:a,folders:[],scope:c,configs:[],runCount:0,sessionCount:0,excludedRunCount:0,unmeasured:[]};try{let b=e.query(`SELECT f.folder AS folder FROM (
11
11
  SELECT folder FROM messages GROUP BY folder
12
12
  UNION
13
13
  SELECT folder FROM user_messages GROUP BY folder
@@ -1,5 +1,5 @@
1
1
  "use strict";exports.id=3707,exports.ids=[3707],exports.modules={15837:(a,b,c)=>{c.d(b,{eB:()=>y,jm:()=>u,CW:()=>x});var d=c(77598),e=c(37712);let f={slow:1,normal:2,active:3},g={slow:36e4,normal:18e4,active:9e4},h={slow:2,normal:4,active:6};function i(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}let j=String.raw`(?:^|[\s,.!?~()\[\]"'「」『』:;])`,k=String.raw`(?=$|[\s,.!?~()\[\]"'「」『』:;]|아|야|이|님|씨|은|는|가|도|한테|에게|랑|의|를|을|께)`,l=String.raw`(?![A-Za-z0-9])`;function m(a,b){let c=[];for(let d of b){let b=1/0;for(let c of function(a){let b=i(a.id),c=i(a.koreanName);return[RegExp(`@(?:${b}${l}|${c})`,"giu"),RegExp(`${j}${b}${l}`,"giu"),RegExp(`${j}${c}${k}`,"gu")]}(d)){let d=c.exec(a);d&&(b=Math.min(b,d.index))}Number.isFinite(b)&&c.push({id:d.id,index:b})}return c.sort((a,b)=>a.index-b.index).map(a=>a.id)}let n=/@(?:all|everyone|전원|모두|다들)(?=$|[\s,.!?~()[\]"'「」『』:;])/iu,o=RegExp(String.raw`${j}(?:전원|모두|다들|여러분)[,\s]+(?:(?:각자|한\s*번씩|한마디|의견(?:을)?|생각(?:을)?|답변(?:을)?|인사(?:를)?)\s+){0,3}(?:말|답|대답|인사|이야기|얘기)?(?:해줘|해봐|해주세요)(?=$|[\s,.!?~])`,"u");function p(a,b){return a.map((a,c)=>({member:a,order:c,at:b.get(a.id)??-1})).sort((a,b)=>a.at-b.at||a.order-b.order).map(a=>a.member)}function q(a){let b=new Map;for(let c of a)"user"!==c.memberId&&b.set(c.memberId,c.createdAt);return b}function r(a){return"user"===a?"사용자":e.x.find(b=>b.id===a)?.alias??a}var s=c(90170),t=c(97506);class u extends Error{constructor(a,b){super(a),this.until=b,this.name="LoungeUnavailableError"}}let v={set(a,b){let c=setTimeout(a,b);return c.unref(),c},clear(a){clearTimeout(a)}};function w(a){return a instanceof Error?a.message:String(a)}function x(a){if(!(0,s.u4)(a))return{ok:!1,error:"본문은 JSON object여야 합니다."};let{action:b,requestId:c,roomId:d}=a;if("string"!=typeof c||""===c.trim()||c.length>200)return{ok:!1,error:"requestId가 필요합니다."};if(d!==t.rB)return{ok:!1,error:`roomId는 "${t.rB}"여야 합니다.`};switch(b){case"send":{if("string"!=typeof a.text)return{ok:!1,error:"text가 필요합니다."};let e=a.text.trim();if(""===e)return{ok:!1,error:"빈 메시지는 보낼 수 없습니다."};if(e.length>t.c8)return{ok:!1,error:`메시지는 ${t.c8}자까지입니다.`};if(void 0!==a.replyToId&&"string"!=typeof a.replyToId)return{ok:!1,error:"replyToId 형식이 올바르지 않습니다."};return{ok:!0,action:{action:b,requestId:c,roomId:d,text:e,...a.replyToId?{replyToId:a.replyToId}:{}}}}case"stop":return{ok:!0,action:{action:b,requestId:c,roomId:d}};case"reaction":{if("string"!=typeof a.messageId||""===a.messageId)return{ok:!1,error:"messageId가 필요합니다."};if("string"!=typeof a.emoji)return{ok:!1,error:"emoji가 필요합니다."};let e=a.emoji.trim();if(""===e||e.length>t.T6)return{ok:!1,error:"emoji 형식이 올바르지 않습니다."};return{ok:!0,action:{action:b,requestId:c,roomId:d,messageId:a.messageId,emoji:e}}}case"settings":{let f,g={};if(void 0!==a.enabled){if("boolean"!=typeof a.enabled)return{ok:!1,error:"enabled는 boolean이어야 합니다."};g.enabled=a.enabled}if(void 0!==a.autoTalk){if("boolean"!=typeof a.autoTalk)return{ok:!1,error:"autoTalk은 boolean이어야 합니다."};g.autoTalk=a.autoTalk}if(void 0!==a.participants){if(!Array.isArray(a.participants)||!a.participants.every(a=>"string"==typeof a))return{ok:!1,error:"participants는 문자열 배열이어야 합니다."};let b=new Set(a.participants);g.participants=e.x.filter(a=>b.has(a.id)).map(a=>a.id)}if(void 0!==a.pace){if("string"!=typeof a.pace||!0!==s.eW[a.pace])return{ok:!1,error:"pace는 slow|normal|active 중 하나여야 합니다."};g.pace=a.pace}if(void 0!==a.sleepAfterMinutes){if(!(0,s.Bf)(a.sleepAfterMinutes)||!Number.isInteger(a.sleepAfterMinutes)||a.sleepAfterMinutes<t.o8||a.sleepAfterMinutes>t.IP)return{ok:!1,error:`sleepAfterMinutes는 ${t.o8}~${t.IP} 정수여야 합니다.`};g.sleepAfterMinutes=a.sleepAfterMinutes}if(void 0!==a.accountBindings){if(!(0,s.u4)(a.accountBindings)||!Object.entries(a.accountBindings).every(([a,b])=>e.x.some(b=>b.id===a)&&"number"==typeof b&&Number.isSafeInteger(b)&&b>0))return{ok:!1,error:"accountBindings에 유효한 멤버와 계정 ID가 필요합니다."};f=a.accountBindings}return{ok:!0,action:{action:b,requestId:c,roomId:d,...g,...f?{accountBindings:f}:{}}}}default:return{ok:!1,error:"action은 settings|send|stop|reaction 중 하나여야 합니다."}}}class y{#a;#b;#c;#d;#e;#f;#g;#h;#i;#j;#k;#l;#m;constructor(a){this.#b=null,this.#d="",this.#f=0,this.#g=null,this.#h=null,this.#i=new Set,this.#j=!1,this.#l=0,this.#m=new Map,this.#a={store:a.store,invoker:a.invoker,workingMemberIds:a.workingMemberIds,autoTalkBlockReason:a.autoTalkBlockReason??(()=>void 0),now:a.now??Date.now,timers:a.timers??v,newId:a.newId??d.randomUUID},this.#e=1e3*this.#a.now();try{this.#b=this.#a.store.load()}catch(a){this.#c=a instanceof s.fC?`${a.message} (${this.#a.store.path})`:`기록을 읽지 못했습니다: ${w(a)} (${this.#a.store.path})`}}async refreshAccounts(){await this.#a.invoker.refreshAccounts?.()}get generation(){return this.#f}subscribe(a){return this.#i.add(a),()=>{this.#i.delete(a)}}currentDelta(){let a=this.#h;return a&&this.#g&&a.generation===this.#f?{event:"delta",data:{revision:this.#e,generation:a.generation,messageId:a.messageId,memberId:a.memberId,text:a.text}}:null}snapshot(){let a=this.#b,b=a?a.messages.slice():[],c=this.#n(),d=this.#o(),e=this.#p(),f=JSON.stringify({room:c,members:d,run:e});return f!==this.#d&&(this.#d=f,this.#q()),{revision:this.#e,room:c,members:d,messages:b,run:e,...this.#c?{loadError:this.#c}:{}}}dispatch(a){let b=this.#b;if(!b)return{status:503,body:{error:this.#c??"단톡방 기록을 사용할 수 없습니다."}};if(b.requests.some(b=>b.id===a.requestId))return{status:200,body:{duplicate:!0,accepted:!1,snapshot:this.snapshot()}};switch(a.action){case"settings":return this.#r(b,a);case"send":return this.#s(b,a);case"stop":return this.#t(b,a.requestId);case"reaction":return this.#u(b,a)}}dispose(){this.#v(),this.#w(),this.#i.clear()}#x(a){try{this.#a.store.save(a)}catch(a){return{ok:!1,result:{status:500,body:{error:`단톡방 기록을 저장하지 못했습니다: ${w(a)}`}}}}return this.#b=a,{ok:!0}}#y(a,b){return[...a.requests,{id:b,at:this.#a.now()}]}#z(a){return{status:200,body:{duplicate:!1,accepted:a,snapshot:this.snapshot()}}}#r(a,b){let c={};void 0!==b.enabled&&(c.enabled=b.enabled),void 0!==b.autoTalk&&(c.autoTalk=b.autoTalk),void 0!==b.participants&&(c.participants=b.participants),void 0!==b.pace&&(c.pace=b.pace),void 0!==b.sleepAfterMinutes&&(c.sleepAfterMinutes=b.sleepAfterMinutes);let d={...a.settings,...c},f={...a.accountBindings};for(let[a,c]of Object.entries(b.accountBindings??{})){let b=e.x.find(b=>b.id===a);if(!(this.#a.invoker.account?.(b,c)?.choices??[]).some(a=>a.credentialId===c))return{status:400,body:{error:"해당 멤버의 사용 가능한 계정을 선택하세요."}};f[a]=c}for(let c of b.participants??[]){if(a.settings.participants.includes(c)||void 0!==f[c])continue;let b=e.x.find(a=>a.id===c),d=this.#a.invoker.defaultAccount?.(b);void 0!==d&&(f[c]=d)}d.enabled||(this.#v(),this.#j=!1,this.#w());let g=this.#x({...a,settings:d,accountBindings:f,requests:this.#y(a,b.requestId)});if(!g.ok)return g.result;for(let a of Object.keys(b.accountBindings??{}))this.#m.delete(a);let h=this.#g;if(d.enabled&&h){let b=new Set(d.participants);h.currentMemberId&&(!b.has(h.currentMemberId)||a.accountBindings[h.currentMemberId]!==f[h.currentMemberId])?this.#v():h.queue=h.queue.filter(a=>b.has(a))}return this.#A(),this.#B(),this.#z(!1)}#s(a,b){if(!a.settings.enabled)return{status:409,body:{error:"단톡방이 꺼져 있습니다."}};let c=b.replyToId?a.messages.find(a=>a.id===b.replyToId):void 0;if(b.replyToId&&!c)return{status:400,body:{error:"답장할 메시지를 찾지 못했습니다."}};let d=this.#a.now(),g={id:this.#a.newId(),memberId:"user",text:b.text,createdAt:d,...b.replyToId?{replyToId:b.replyToId}:{},reactions:[]},h=[...a.messages,g],i=this.#x({...a,messages:h,requests:this.#y(a,b.requestId),lastUserActivityAt:d});if(!i.ok)return i.result;this.#j=!0,this.#C({event:"message",data:{revision:this.#q(),message:g}});let j=this.#D({excludeWorking:!1}),k=function(a){let{text:b,replyToMemberId:c,candidates:d,messages:g,pace:h}=a,i=new Set(d.map(a=>a.id));if(n.test(b)||o.test(b)){let a=d.slice(0,6).map(a=>a.id);return{memberIds:a,everyone:!0,allowFollowUp:!1,perTurnLimit:a.length}}let j=m(b,e.x);return j.length>0?{memberIds:j.filter(a=>i.has(a)).slice(0,6),everyone:!1,allowFollowUp:!0,perTurnLimit:6}:c?{memberIds:i.has(c)?[c]:[],everyone:!1,allowFollowUp:!0,perTurnLimit:6}:{memberIds:p(d,q(g)).slice(0,f[h]).map(a=>a.id),everyone:!1,allowFollowUp:!0,perTurnLimit:6}}({text:b.text,replyToMemberId:c&&"user"!==c.memberId?c.memberId:void 0,candidates:j,messages:h,pace:a.settings.pace}),l=k.memberIds.length>0&&this.#E()>0;return l?this.#F("reply",k.memberIds,k.perTurnLimit,k.allowFollowUp):this.#A(),this.#B(),this.#z(l)}#t(a,b){this.#v(),this.#j=!1,this.#w(),this.#A();let c=this.#x({...a,requests:this.#y(a,b)});return c.ok?this.#z(!1):c.result}#u(a,b){let c,d=a.messages.findIndex(a=>a.id===b.messageId);if(d<0)return{status:404,body:{error:"반응할 메시지를 찾지 못했습니다."}};let e=a.messages[d],f=e.reactions.find(a=>a.emoji===b.emoji);if(f)if(f.by.includes("user")){let a=f.by.filter(a=>"user"!==a);c=a.length>0?e.reactions.map(b=>b===f?{...b,by:a}:b):e.reactions.filter(a=>a!==f)}else c=e.reactions.map(a=>a===f?{...a,by:[...a.by,"user"]}:a);else c=[...e.reactions,{emoji:b.emoji,by:["user"]}];let g={...e,reactions:c},h=a.messages.slice();h[d]=g;let i=this.#x({...a,messages:h,requests:this.#y(a,b.requestId)});return i.ok?(this.#C({event:"message",data:{revision:this.#q(),message:g}}),this.#z(!1)):i.result}#v(){let a=this.#g;this.#f+=1,this.#g=null,this.#h=null,a?.controller.abort()}#F(a,b,c,d){let e=this.#g;if(e){e.kind=a,e.queue=b.slice(),e.calls=0,e.perTurnLimit=c,e.allowFollowUp=d,this.#A();return}let f={generation:this.#f,controller:new AbortController,kind:a,queue:b.slice(),calls:0,perTurnLimit:c,allowFollowUp:d,startedAt:this.#a.now(),currentMemberId:null};this.#g=f,this.#w(),this.#A(),this.#G(f)}#H(a){return this.#g===a&&a.generation===this.#f&&!a.controller.signal.aborted}async #G(a){try{for(;this.#H(a)&&a.queue.length>0&&a.calls<a.perTurnLimit;){let b,c=a.queue.shift(),d=this.#b,f=e.x.find(a=>a.id===c);if(!f||!d.settings.enabled||!d.settings.participants.includes(c)||!this.#I(f).ok||"auto"===a.kind&&this.#a.workingMemberIds(d.accountBindings).has(c)){this.#J(a,c,"");continue}if(0>=this.#E())break;let g=this.#a.now(),h=[...d.callTimestamps.filter(a=>a>g-36e5),g];try{this.#a.store.save({...d,callTimestamps:h})}catch(a){this.#m.set(c,{reason:`기록 저장 실패: ${w(a)}`,until:g+3e5});break}this.#b={...d,callTimestamps:h},a.calls+=1,a.currentMemberId=c;let i=this.#a.newId();this.#h={generation:a.generation,messageId:i,memberId:c,text:""},this.#A();let j=e.x.filter(a=>d.settings.participants.includes(a.id)),k=function(a){let{member:b,participants:c,messages:d,mode:e,lastSpeaker:f}=a,g=c.filter(a=>a.id!==b.id).map(a=>a.alias),h=[`너는 단톡방 참여자 ${b.alias}다.`,`이 방에는 사용자${g.length>0?`와 ${g.join(", ")}`:""}가 있다.`,"화자 표시나 이름 접두 없이 네가 할 말만 쓴다. 짧게 1~3문장.\n사용자 말만 기다리지 않는다. 바로 앞 발언이 다른 참여자면 그 말에 맞장구\xb7반박\xb7되묻기로 이어 가고, 다른 참여자에게 말을 걸어도 된다.\n기본은 한국어다. 분위기에 맞는 짧은 감탄\xb7한마디만 가끔 일본어로 표현해도 되지만, 문장마다 섞거나 긴 답변 전체를 일본어로 쓰지 않는다. 사용자가 일본어로 말하거나 대화 자체가 일본어로 이어질 때만 그 흐름을 따른다. 억지로 일본어를 넣을 필요는 없다.\n앞 발언에 아직 뜻이 풀리지 않은 일본어가 있으면 네 말 속에서 한국어 뜻을 짧게 풀어 준다.",f?"이번에는 네 뒤에 이어 말할 참여자가 없으니, 네가 일본어 한마디를 쓰면 짧은 한국어 뜻을 곁들인다.":"네 뒤에 다른 참여자가 이어 말한다.","상태\xb7오류\xb7승인\xb7중단 설명은 한국어로 명확히 한다.\n다른 참여자를 부를 때는 @이름을 쓴다. 이 방에서는 도구\xb7파일\xb7작업을 실행할 수 없다."].join("\n"),i=new Map(d.map(a=>[a.id,a])),j=d.slice(-30).map(a=>{let b=a.replyToId?i.get(a.replyToId):void 0,c=b?` (↳ ${r(b.memberId)}: "${b.text.slice(0,60)}")`:"";return`[${r(a.memberId)}]${c} ${a.text}`}),k="auto"===e?`대화가 잠시 조용하다. ${b.alias}로서 자연스럽게 한마디 해라.`:`위 대화에 ${b.alias}로서 이어서 한 번 말해라.`;return{systemPrompt:h,userText:j.length>0?`단톡방 최근 대화:
2
2
  ${j.join("\n")}
3
3
 
4
- ${k}`:k}}({member:f,participants:j,messages:this.#b.messages,mode:"auto"===a.kind&&1===a.calls?"auto":"reply",lastSpeaker:0===a.queue.length&&(!a.allowFollowUp||a.calls>=a.perTurnLimit)});try{b=await this.#a.invoker.invoke({member:f,credentialId:this.#b.accountBindings[f.id],systemPrompt:k.systemPrompt,userText:k.userText,signal:a.controller.signal,onText:b=>{this.#H(a)&&this.#h?.messageId===i&&(this.#h.text=b,this.#C({event:"delta",data:{revision:this.#q(),generation:a.generation,messageId:i,memberId:c,text:b}}))}})}catch(e){if(!this.#H(a))return;let b=this.#a.now(),d=e instanceof u&&e.until&&e.until>b?e.until:b+3e5;this.#m.set(c,{reason:w(e),until:d}),this.#h=null,a.currentMemberId=null,this.#A(),this.#J(a,c,"");continue}if(!this.#H(a))return;this.#m.delete(c),this.#h=null,a.currentMemberId=null;let l=b.trim().slice(0,t.c8);if(""===l){this.#A(),this.#J(a,c,"");continue}let m=this.#b,n={id:i,memberId:c,text:l,createdAt:this.#a.now(),reactions:[]},o={...m,messages:[...m.messages,n]};try{this.#a.store.save(o)}catch(a){this.#m.set(c,{reason:`기록 저장 실패: ${w(a)}`,until:this.#a.now()+3e5});break}this.#b=o,this.#C({event:"message",data:{revision:this.#q(),message:n}}),this.#J(a,c,l)}}finally{this.#g===a&&(this.#g=null,this.#h=null,this.#A(),this.#B())}}#J(a,b,c){var d;let e,f;if(!a.allowFollowUp||a.calls>=a.perTurnLimit)return;let g=(e=(d={replyText:c,speakerId:b,candidates:this.#D({excludeWorking:"auto"===a.kind}).filter(b=>!a.queue.includes(b.id)),messages:this.#b?.messages??[],queueEmpty:0===a.queue.length}).candidates.filter(a=>a.id!==d.speakerId),(f=m(d.replyText,e)[0])||(d.queueEmpty?p(e,q(d.messages))[0]?.id:void 0));g&&a.queue.push(g)}#w(){void 0!==this.#k&&this.#a.timers.clear(this.#k),this.#k=void 0}#K(){let a=this.#b;return a?.settings.enabled&&a.settings.autoTalk&&this.#j&&null!==a.lastUserActivityAt?a.lastUserActivityAt+6e4*a.settings.sleepAfterMinutes:null}#L(){let a=this.#b,b=this.#K();if(!a||null===b||b<=this.#a.now()||this.#g)return null;let c=Math.max(a.messages.at(-1)?.createdAt??a.lastUserActivityAt??this.#a.now(),this.#l)+g[a.settings.pace];return c<b?c:null}#B(){this.#w();let a=this.#L();null!==a&&(this.#k=this.#a.timers.set(()=>{this.#k=void 0,this.#M()},Math.max(0,a-this.#a.now())))}#M(){let a=this.#L();if(null===a)return void this.#A();if(a>this.#a.now())return void this.#B();if(this.#l=this.#a.now(),this.#a.autoTalkBlockReason()){this.#A(),this.#B();return}if(0>=this.#E())return void this.#A();let b=this.#b,c=p(this.#D({excludeWorking:!0}),q(b.messages))[0];c?this.#F("auto",[c.id],h[b.settings.pace],!0):this.#B()}#E(){let a=this.#b;if(!a)return 0;let b=this.#a.now()-36e5;return 120-a.callTimestamps.filter(a=>a>b).length}#I(a){let b=this.#m.get(a.id);if(b&&b.until>this.#a.now())return{ok:!1,reason:b.reason};try{return this.#a.invoker.availability(a,this.#b?.accountBindings[a.id])}catch(a){return{ok:!1,reason:w(a)}}}#D(a){let b=this.#b;if(!b?.settings.enabled)return[];let c=a.excludeWorking?this.#a.workingMemberIds(b.accountBindings):new Set;return e.x.filter(a=>b.settings.participants.includes(a.id)&&!c.has(a.id)&&this.#I(a).ok)}#n(){let a=this.#b?.settings,b=a?.enabled===!0,c=this.#K(),d=this.#a.now();return{id:t.rB,enabled:b,autoTalk:a?.autoTalk??!1,participants:a?.participants.slice()??[],pace:a?.pace??"normal",sleepAfterMinutes:a?.sleepAfterMinutes??10,asleep:b&&a?.autoTalk===!0&&(null===c||c<=d),sleepAt:null!==c&&c>d?c:null,autoTalkPausedReason:a?.autoTalk?this.#a.autoTalkBlockReason():void 0}}#o(){let a,b=this.#b?.settings,c=this.#g;try{a=this.#a.workingMemberIds(this.#b?.accountBindings??{})}catch{a=new Set}return e.x.map(d=>{let e=this.#I(d),f=b?.participants.includes(d.id)===!0,g="off";return b?.enabled&&f&&(g=c?.currentMemberId===d.id?"speaking":e.ok?c?.queue.includes(d.id)?"reading":a.has(d.id)?"working":"idle":"offline"),{id:d.id,alias:d.alias,seed:d.seed,provider:d.provider,model:d.model,enabled:f,available:e.ok,state:g,...e.ok?{}:{reason:e.reason},account:this.#a.invoker.account?.(d,this.#b?.accountBindings[d.id])}})}#p(){let a=this.#g,b=this.#b,c=this.#a.now()-36e5;return{active:null!==a,generation:this.#f,currentMemberId:a?.currentMemberId??null,queuedMemberIds:a?.queue.slice()??[],startedAt:a?.startedAt??null,calls:{used:b?b.callTimestamps.filter(a=>a>c).length:0,limit:120,windowMs:36e5},perTurnLimit:a?.perTurnLimit??6}}#q(){return this.#e+=1,this.#e}#A(){let a=this.#q();this.#C({event:"state",data:{revision:a,members:this.#o(),room:this.#n(),run:this.#p(),...this.#c?{loadError:this.#c}:{}}})}#C(a){for(let b of this.#i)try{b(a)}catch{}}}},19225:(a,b,c)=>{a.exports=c(44870)},29867:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{T:()=>n});var e=c(76760),f=c(38741),g=c(56429),h=c(37712),i=c(15837),j=c(90170),k=c(54878),l=a([f,g,k]);function m(a){let b=new Set;for(let c of(0,g.HG)()){let d=(0,g.A4)(c)?.inner,e=d?.model;if(!d||!e)continue;let f=(d.modelRegistry.authStorage?.oauth.accounts(e.provider,d.sessionId)??[]).find(a=>a.active);for(let c of h.x)c.provider===e.provider&&c.model===e.id&&f&&a[c.id]===f.credentialId&&b.add(c.id)}return b}function n(){return globalThis.__cueloLoungePromise??=(0,f.getOmpRuntime)().then(a=>new i.eB({store:(0,j.Kp)((0,e.join)(a.agentDir,"cuelo-lounge","room-main.json")),invoker:(0,k.J)(a),workingMemberIds:m,autoTalkBlockReason:()=>(0,g.HG)().length>0?"작업이 실행 중이라 자동 발언을 쉬고 있어요.":void 0})).catch(a=>{throw globalThis.__cueloLoungePromise=void 0,a}),globalThis.__cueloLoungePromise}[f,g,k]=l.then?(await l)():l,d()}catch(a){d(a)}})},37712:(a,b,c)=>{c.d(b,{x:()=>f});let d=[{alias:"RIN(린)",file:"rin.webp"},{alias:"MIO(미오)",file:"mio.webp"},{alias:"NOVA(노바)",file:"nova.webp",provider:"opencode-go"},{alias:"YUKI(유키)",file:"yuki.webp",provider:"openai-codex"},{alias:"ISANA(이사나)",file:"isana.webp",provider:"b-ai"},{alias:"SHION(시온)",file:"shion.webp",provider:"web6"},{alias:"HIKARI(히카리)",file:"hikari.webp",provider:"google-antigravity"}],e=[{seed:3,alias:d[3].alias,provider:"openai-codex",model:"gpt-6-astra",voice:"빠른 판단\xb7선명한 결론\xb7영리한 장난기",summonExample:"유키 불러와",switchExample:"유키로 교체해"},{seed:4,alias:d[4].alias,provider:"b-ai",model:"deepseek-v4.1-flash",voice:"호기심과 실행력\xb7생기 있는 관찰\xb7솔직함",summonExample:"이사나 불러와",switchExample:"이사나로 교체해"},{seed:0,alias:d[0].alias,provider:"anthropic",model:"claude-opus-5-5",oauthPosition:0,voice:"조용한 집중\xb7날카로운 분석\xb7건조한 유머",summonExample:"린 불러와",switchExample:"린으로 교체해"},{seed:1,alias:d[1].alias,provider:"anthropic",model:"claude-opus-5-5",oauthPosition:1,voice:"따뜻하고 세심함\xb7부드럽고 안정적인 설명",summonExample:"미오 불러와",switchExample:"미오로 교체해"},{seed:2,alias:d[2].alias,provider:"opencode-go",model:"muse-spark-1.3-contributor",voice:"번뜩이는 발상\xb7즉흥적 시제품\xb7낙천적 재도전",summonExample:"노바 불러와",switchExample:"노바로 교체해"},{seed:6,alias:d[6].alias,provider:"google-antigravity",model:"gemini-3.8-flash",voice:"빠른 관찰\xb7톡 쏘는 한마디\xb7장난스러운 여유",summonExample:"히카리 불러와",switchExample:"히카리로 교체해"},{seed:5,alias:d[5].alias,provider:"web6",model:"gpt-6-pro",voice:"우아한 전략\xb7넓은 시야\xb7은근한 장난기",summonExample:"시온 불러와",switchExample:null,summonNote:"WEB6 상담으로 호출합니다.",switchNote:"SHION은 WEB6 상담 전용이라 Main으로 교체할 수 없습니다."}];e.filter(a=>null!==a.switchExample),d.filter(a=>!("provider"in a)).length,[...new Map(d.flatMap((a,b)=>"provider"in a?[[a.provider,b]]:[]))].map(([a,b])=>[a,{seed:b,alias:d[b].alias}]);let f=e.filter(a=>"web6"!==a.provider).map(function(a){let b=/^([A-Za-z]+)\((.+)\)$/.exec(a.alias);if(!b)throw Error(`roster alias 형식이 올바르지 않습니다: ${a.alias}`);return{id:b[1].toLowerCase(),alias:a.alias,koreanName:b[2],seed:a.seed,provider:a.provider,model:a.model,...void 0!==a.oauthPosition?{oauthPosition:a.oauthPosition}:{}}}).sort((a,b)=>a.seed-b.seed)},54878:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J:()=>k});var e=c(77598),f=c(11746),g=c(36609),h=c(92178),i=c(15837),j=a([f,g,h]);[f,g,h]=j.then?(await j)():j;let l=h.THINKING_EFFORTS.find(a=>"low"===String(a));function k({authStorage:a,modelRegistry:b,fetch:c}){let d,h=!1,j=-1,m=new Set,n=b=>void 0!==b.oauthPosition||(0,g.authPolicyFor)(b.provider)?.login?.kind==="oauth-code"||a.oauth.accounts(b.provider).length>0||m.has(b.provider),o=()=>d??=(async()=>{h=!1;try{await a.credentials.revalidate();let b=await a.credentials.listDisabled();m=new Set(b.filter(a=>"oauth"===a.type).map(a=>a.provider)),j=a.credentials.generation,h=!0}catch{}})().finally(()=>{d=void 0});return{refreshAccounts:o,account(b,c){if(!n(b)&&void 0===c)return;let d=a.oauth.accounts(b.provider).map((a,b)=>{let c=Number.isInteger(a.position)?a.position:b;return{credentialId:a.credentialId,position:c,label:`계정 ${c+1} \xb7 ID ${a.credentialId}`}});return{credentialId:c,choices:h?d:[],selectionRequired:!h||!d.some(a=>a.credentialId===c)}},defaultAccount(b){if(!(!h||j!==a.credentials.generation||m.has(b.provider))&&n(b)){var c;let d;return(c=a.oauth.accounts(b.provider),d=b.oauthPosition??0,c.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===d))?.credentialId}},availability(c,d){let e=b.find(c.provider,c.model);if(!e)return{ok:!1,reason:"등록된 모델을 찾지 못했습니다."};if(!b.hasConfiguredAuth(e))return{ok:!1,reason:"인증된 계정이 없습니다."};let f=a.oauth.accounts(c.provider).find(a=>a.credentialId===d);if(n(c)||void 0!==d){if(!h)return{ok:!1,reason:"계정 목록을 확인하지 못했습니다."};if(!f)return{ok:!1,reason:void 0===d?"단톡방 전용 계정을 선택하세요. 계정 자리만으로는 연결을 확정할 수 없습니다.":"연결한 계정이 비활성화되었거나 없어졌습니다. 사용할 계정을 다시 선택하세요."}}return f&&a.blocks.list([f.credentialId]).some(a=>a.blockedUntilMs>Date.now()&&(""===a.blockScope||a.blockScope===`model:${e.id}`))?{ok:!1,reason:"사용량 한도로 계정이 일시 차단됐습니다."}:{ok:!0}},async invoke(d){let{member:j}=d,k=AbortSignal.any([d.signal,AbortSignal.timeout(9e4)]);k.throwIfAborted(),await o(),k.throwIfAborted();let m=b.find(j.provider,j.model);if(!m||!b.hasConfiguredAuth(m))throw new i.jm("모델 또는 인증을 사용할 수 없습니다.");let p=`cuelo-lounge:${(0,e.randomUUID)()}`,q=a.oauth.accounts(j.provider).find(a=>a.credentialId===d.credentialId);if((n(j)||void 0!==d.credentialId)&&(!h||!q))throw new i.jm("연결한 계정을 사용할 수 없습니다. 단톡방 전용 계정을 다시 선택하세요.");let r="";try{let e,h;if(q){if(h=q.credentialId,!a.sessions.pin(j.provider,p,h)||!a.oauth.accounts(j.provider,p).some(a=>a.credentialId===h&&a.active))throw new i.jm("단톡방 전용 계정 연결을 확인하지 못했습니다.");let b=await a.oauth.accessById(j.provider,h,{modelId:m.id,baseUrl:m.baseUrl,signal:k});if(k.throwIfAborted(),!b?.ok||b.credentialId!==h)throw new i.jm("지정한 계정의 인증을 갱신하지 못했습니다.");e=(0,g.authPolicyFor)(j.provider)?.apiKeyFormat==="structured"?JSON.stringify({token:b.accessToken,accountId:b.accountId,projectId:b.projectId,enterpriseUrl:b.enterpriseUrl,email:b.email,apiEndpoint:b.apiEndpoint}):b.accessToken}else{let a=await b.getApiKeyWithCredentialForProvider(j.provider,p,{modelId:m.id,baseUrl:m.baseUrl,signal:k});e=a?.apiKey,h=a?.credentialId}if(k.throwIfAborted(),!e)throw new i.jm("인증 정보를 사용할 수 없습니다.");if(void 0!==h){let b=a.blocks.list([h]).find(a=>a.blockedUntilMs>Date.now()&&(""===a.blockScope||a.blockScope===`model:${m.id}`));if(b)throw new i.jm("사용량 한도로 계정이 일시 차단됐습니다.",b.blockedUntilMs)}let n=await a.health.model(j.provider,{modelId:m.id,baseUrl:m.baseUrl,sessionId:p,reserveFraction:0,signal:k});k.throwIfAborted();let o=void 0===h?void 0:n.accounts.find(a=>a.credentialId===h);if(o?.state==="depleted"||!o&&"depleted"===n.state)throw new i.jm("사용량 한도에 도달했습니다. 해제 후 다시 참여할 수 있습니다.",o?.resetsAt);let s=await b.resolveModelHeaders(m,k);k.throwIfAborted();let t=!1;for await(let b of(0,f.streamSimple)(m,{systemPrompt:[d.systemPrompt],messages:[{role:"user",content:d.userText,timestamp:Date.now()}],tools:[]},{apiKey:e,credentialId:h,headers:s,signal:k,sessionId:p,maxTokens:512,reasoning:l,cacheRetention:"none",statefulResponses:!1,codexSseMaxAttempts:1,acceptEmptyResponse:!0,maxRetryDelayMs:1,...c?{fetch:c}:{},onResponse(b){try{a.usage.ingestHeaders(j.provider,b.headers,{sessionId:p,baseUrl:m.baseUrl,responseStatus:b.status})}catch{t=!0}}}))if(k.throwIfAborted(),"text_delta"===b.type)r+=b.delta,d.onText(r);else if("error"===b.type)throw new i.jm("모델 응답을 받지 못했습니다. 인증\xb7사용량\xb7연결 상태를 확인하세요.");else"done"===b.type&&(a.usage.observe({provider:j.provider,model:m.id,usage:b.message.usage,costUsd:b.message.usage.cost.total}),r=b.message.content.filter(a=>"text"===a.type).map(a=>a.text).join(""));if(t)throw new i.jm("사용량 응답을 기록하지 못했습니다.");return r}finally{a.sessions.release(j.provider,p)}}}}d()}catch(a){d(a)}})},66544:(a,b,c)=>{c.d(b,{E2:()=>j,EN:()=>i});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.CUELO_HOSTNAME,...process.env.CUELO_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}function h(a){try{return new URL(a).origin}catch{return null}}function i(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||!(a.headers.has("origin")||a.headers.has("sec-fetch-site"))||function(a){let b,c,d=a.headers.get("origin");if("cross-site"===a.headers.get("sec-fetch-site"))return!1;if(!d)return!0;let e=(b=new URL(a.url),(c=a.headers.get("host"))?h(`${b.protocol}//${c}`):null);return null!==e&&h(d)===e}(a))}function j(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},90170:(a,b,c)=>{c.d(b,{Bf:()=>l,Kp:()=>o,eW:()=>j,fC:()=>h,u4:()=>k});var d=c(73024),e=c(76760),f=c(8102),g=c(97506);class h extends Error{constructor(...a){super(...a),this.name="LoungeLoadError"}}let i={enabled:!1,autoTalk:!1,participants:[],pace:"normal",sleepAfterMinutes:10},j={slow:!0,normal:!0,active:!0};function k(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function l(a){return"number"==typeof a&&Number.isFinite(a)}function m(a){return Array.isArray(a)&&a.every(a=>"string"==typeof a)}function n(a){return!!k(a)&&"string"==typeof a.id&&"string"==typeof a.memberId&&"string"==typeof a.text&&!!l(a.createdAt)&&(void 0===a.replyToId||"string"==typeof a.replyToId)&&Array.isArray(a.reactions)&&a.reactions.every(a=>k(a)&&"string"==typeof a.emoji&&m(a.by))}function o(a){return{path:a,load(){let b,c;try{b=(0,d.readFileSync)(a,"utf8")}catch(a){if("ENOENT"===a.code)return{version:1,settings:{...i,participants:[]},messages:[],requests:[],callTimestamps:[],lastUserActivityAt:null,accountBindings:{}};throw new h(`기록 파일을 읽지 못했습니다: ${a instanceof Error?a.message:String(a)}`)}var e,f=b;try{c=JSON.parse(f)}catch(a){throw new h(`JSON이 아닙니다: ${a instanceof Error?a.message:String(a)}`)}if(!k(c)||1!==c.version)throw new h("지원하지 않는 기록 형식입니다.");if(!(k(e=c.settings)&&"boolean"==typeof e.enabled&&"boolean"==typeof e.autoTalk&&m(e.participants)&&"string"==typeof e.pace&&!0===j[e.pace]&&l(e.sleepAfterMinutes)&&e.sleepAfterMinutes>=g.o8&&e.sleepAfterMinutes<=g.IP))throw new h("방 설정 형식이 올바르지 않습니다.");if(!Array.isArray(c.messages)||!c.messages.every(n))throw new h("메시지 형식이 올바르지 않습니다.");if(!Array.isArray(c.requests)||!c.requests.every(a=>k(a)&&"string"==typeof a.id&&l(a.at)))throw new h("요청 기록 형식이 올바르지 않습니다.");if(!Array.isArray(c.callTimestamps)||!c.callTimestamps.every(l))throw new h("호출 기록 형식이 올바르지 않습니다.");if(null!==c.lastUserActivityAt&&!l(c.lastUserActivityAt))throw new h("활동 시각 형식이 올바르지 않습니다.");if(!k(c.accountBindings)||!Object.values(c.accountBindings).every(a=>"number"==typeof a&&Number.isSafeInteger(a)&&a>0))throw new h("계정 연결 기록 형식이 올바르지 않습니다.");return{version:1,settings:c.settings,messages:c.messages,requests:c.requests,callTimestamps:c.callTimestamps,lastUserActivityAt:c.lastUserActivityAt,accountBindings:c.accountBindings}},save(b){(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0}),(0,f.$)(a,`${JSON.stringify(b)}
4
+ ${k}`:k}}({member:f,participants:j,messages:this.#b.messages,mode:"auto"===a.kind&&1===a.calls?"auto":"reply",lastSpeaker:0===a.queue.length&&(!a.allowFollowUp||a.calls>=a.perTurnLimit)});try{b=await this.#a.invoker.invoke({member:f,credentialId:this.#b.accountBindings[f.id],systemPrompt:k.systemPrompt,userText:k.userText,signal:a.controller.signal,onText:b=>{this.#H(a)&&this.#h?.messageId===i&&(this.#h.text=b,this.#C({event:"delta",data:{revision:this.#q(),generation:a.generation,messageId:i,memberId:c,text:b}}))}})}catch(e){if(!this.#H(a))return;let b=this.#a.now(),d=e instanceof u&&e.until&&e.until>b?e.until:b+3e5;this.#m.set(c,{reason:w(e),until:d}),this.#h=null,a.currentMemberId=null,this.#A(),this.#J(a,c,"");continue}if(!this.#H(a))return;this.#m.delete(c),this.#h=null,a.currentMemberId=null;let l=b.trim().slice(0,t.c8);if(""===l){this.#A(),this.#J(a,c,"");continue}let m=this.#b,n={id:i,memberId:c,text:l,createdAt:this.#a.now(),reactions:[]},o={...m,messages:[...m.messages,n]};try{this.#a.store.save(o)}catch(a){this.#m.set(c,{reason:`기록 저장 실패: ${w(a)}`,until:this.#a.now()+3e5});break}this.#b=o,this.#C({event:"message",data:{revision:this.#q(),message:n}}),this.#J(a,c,l)}}finally{this.#g===a&&(this.#g=null,this.#h=null,this.#A(),this.#B())}}#J(a,b,c){var d;let e,f;if(!a.allowFollowUp||a.calls>=a.perTurnLimit)return;let g=(e=(d={replyText:c,speakerId:b,candidates:this.#D({excludeWorking:"auto"===a.kind}).filter(b=>!a.queue.includes(b.id)),messages:this.#b?.messages??[],queueEmpty:0===a.queue.length}).candidates.filter(a=>a.id!==d.speakerId),(f=m(d.replyText,e)[0])||(d.queueEmpty?p(e,q(d.messages))[0]?.id:void 0));g&&a.queue.push(g)}#w(){void 0!==this.#k&&this.#a.timers.clear(this.#k),this.#k=void 0}#K(){let a=this.#b;return a?.settings.enabled&&a.settings.autoTalk&&this.#j&&null!==a.lastUserActivityAt?a.lastUserActivityAt+6e4*a.settings.sleepAfterMinutes:null}#L(){let a=this.#b,b=this.#K();if(!a||null===b||b<=this.#a.now()||this.#g)return null;let c=Math.max(a.messages.at(-1)?.createdAt??a.lastUserActivityAt??this.#a.now(),this.#l)+g[a.settings.pace];return c<b?c:null}#B(){this.#w();let a=this.#L();null!==a&&(this.#k=this.#a.timers.set(()=>{this.#k=void 0,this.#M()},Math.max(0,a-this.#a.now())))}#M(){let a=this.#L();if(null===a)return void this.#A();if(a>this.#a.now())return void this.#B();if(this.#l=this.#a.now(),this.#a.autoTalkBlockReason()){this.#A(),this.#B();return}if(0>=this.#E())return void this.#A();let b=this.#b,c=p(this.#D({excludeWorking:!0}),q(b.messages))[0];c?this.#F("auto",[c.id],h[b.settings.pace],!0):this.#B()}#E(){let a=this.#b;if(!a)return 0;let b=this.#a.now()-36e5;return 120-a.callTimestamps.filter(a=>a>b).length}#I(a){let b=this.#m.get(a.id);if(b&&b.until>this.#a.now())return{ok:!1,reason:b.reason};try{return this.#a.invoker.availability(a,this.#b?.accountBindings[a.id])}catch(a){return{ok:!1,reason:w(a)}}}#D(a){let b=this.#b;if(!b?.settings.enabled)return[];let c=a.excludeWorking?this.#a.workingMemberIds(b.accountBindings):new Set;return e.x.filter(a=>b.settings.participants.includes(a.id)&&!c.has(a.id)&&this.#I(a).ok)}#n(){let a=this.#b?.settings,b=a?.enabled===!0,c=this.#K(),d=this.#a.now();return{id:t.rB,enabled:b,autoTalk:a?.autoTalk??!1,participants:a?.participants.slice()??[],pace:a?.pace??"normal",sleepAfterMinutes:a?.sleepAfterMinutes??10,asleep:b&&a?.autoTalk===!0&&(null===c||c<=d),sleepAt:null!==c&&c>d?c:null,autoTalkPausedReason:a?.autoTalk?this.#a.autoTalkBlockReason():void 0}}#o(){let a,b=this.#b?.settings,c=this.#g;try{a=this.#a.workingMemberIds(this.#b?.accountBindings??{})}catch{a=new Set}return e.x.map(d=>{let e=this.#I(d),f=b?.participants.includes(d.id)===!0,g="off";return b?.enabled&&f&&(g=c?.currentMemberId===d.id?"speaking":e.ok?c?.queue.includes(d.id)?"reading":a.has(d.id)?"working":"idle":"offline"),{id:d.id,alias:d.alias,seed:d.seed,provider:d.provider,model:d.model,enabled:f,available:e.ok,state:g,...e.ok?{}:{reason:e.reason},account:this.#a.invoker.account?.(d,this.#b?.accountBindings[d.id])}})}#p(){let a=this.#g,b=this.#b,c=this.#a.now()-36e5;return{active:null!==a,generation:this.#f,currentMemberId:a?.currentMemberId??null,queuedMemberIds:a?.queue.slice()??[],startedAt:a?.startedAt??null,calls:{used:b?b.callTimestamps.filter(a=>a>c).length:0,limit:120,windowMs:36e5},perTurnLimit:a?.perTurnLimit??6}}#q(){return this.#e+=1,this.#e}#A(){let a=this.#q();this.#C({event:"state",data:{revision:a,members:this.#o(),room:this.#n(),run:this.#p(),...this.#c?{loadError:this.#c}:{}}})}#C(a){for(let b of this.#i)try{b(a)}catch{}}}},19225:(a,b,c)=>{a.exports=c(44870)},29867:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{T:()=>n});var e=c(76760),f=c(38741),g=c(56429),h=c(37712),i=c(15837),j=c(90170),k=c(54878),l=a([f,g,k]);function m(a){let b=new Set;for(let c of(0,g.HG)()){let d=(0,g.A4)(c)?.inner,e=d?.model;if(!d||!e)continue;let f=(d.modelRegistry.authStorage?.oauth.accounts(e.provider,d.sessionId)??[]).find(a=>a.active);for(let c of h.x)c.provider===e.provider&&c.model===e.id&&f&&a[c.id]===f.credentialId&&b.add(c.id)}return b}function n(){return globalThis.__cueloLoungePromise??=(0,f.getOmpRuntime)().then(a=>new i.eB({store:(0,j.Kp)((0,e.join)(a.agentDir,"cuelo-lounge","room-main.json")),invoker:(0,k.J)(a),workingMemberIds:m,autoTalkBlockReason:()=>(0,g.HG)().length>0?"작업이 실행 중이라 자동 발언을 쉬고 있어요.":void 0})).catch(a=>{throw globalThis.__cueloLoungePromise=void 0,a}),globalThis.__cueloLoungePromise}[f,g,k]=l.then?(await l)():l,d()}catch(a){d(a)}})},37712:(a,b,c)=>{c.d(b,{x:()=>f});let d=[{alias:"RIN(린)",file:"rin.webp"},{alias:"MIO(미오)",file:"mio.webp"},{alias:"NOVA(노바)",file:"nova.webp",provider:"opencode-go"},{alias:"YUKI(유키)",file:"yuki.webp",provider:"openai-codex"},{alias:"ISANA(이사나)",file:"isana.webp",provider:"b-ai"},{alias:"SHION(시온)",file:"shion.webp",provider:"web6"},{alias:"HIKARI(히카리)",file:"hikari.webp",provider:"google-antigravity"}],e=[{seed:3,alias:d[3].alias,provider:"openai-codex",model:"gpt-6-astra",voice:"빠른 판단\xb7선명한 결론\xb7영리한 장난기",summonExample:"유키 불러와",switchExample:"유키로 교체해"},{seed:4,alias:d[4].alias,provider:"b-ai",model:"deepseek-v4.1-flash",voice:"호기심과 실행력\xb7생기 있는 관찰\xb7솔직함",summonExample:"이사나 불러와",switchExample:"이사나로 교체해"},{seed:0,alias:d[0].alias,provider:"anthropic",model:"claude-opus-5-5",oauthPosition:0,voice:"조용한 집중\xb7날카로운 분석\xb7건조한 유머",summonExample:"린 불러와",switchExample:"린으로 교체해"},{seed:1,alias:d[1].alias,provider:"anthropic",model:"claude-opus-5-5",oauthPosition:1,voice:"따뜻하고 세심함\xb7부드럽고 안정적인 설명",summonExample:"미오 불러와",switchExample:"미오로 교체해"},{seed:2,alias:d[2].alias,provider:"opencode-go",model:"muse-spark-1.3-contributor",voice:"번뜩이는 발상\xb7즉흥적 시제품\xb7낙천적 재도전",summonExample:"노바 불러와",switchExample:"노바로 교체해"},{seed:6,alias:d[6].alias,provider:"google-antigravity",model:"gemini-3.8-flash",voice:"빠른 관찰\xb7톡 쏘는 한마디\xb7장난스러운 여유",summonExample:"히카리 불러와",switchExample:"히카리로 교체해"},{seed:5,alias:d[5].alias,provider:"web6",model:"gpt-6-pro",voice:"우아한 전략\xb7넓은 시야\xb7은근한 장난기",summonExample:"시온 불러와",switchExample:null,summonNote:"WEB6 상담으로 호출합니다.",switchNote:"SHION은 WEB6 상담 전용이라 Main으로 교체할 수 없습니다."}];e.filter(a=>null!==a.switchExample),d.filter(a=>!("provider"in a)).length,[...new Map(d.flatMap((a,b)=>"provider"in a?[[a.provider,b]]:[]))].map(([a,b])=>[a,{seed:b,alias:d[b].alias}]);let f=e.filter(a=>"web6"!==a.provider).map(function(a){let b=/^([A-Za-z]+)\((.+)\)$/.exec(a.alias);if(!b)throw Error(`roster alias 형식이 올바르지 않습니다: ${a.alias}`);return{id:b[1].toLowerCase(),alias:a.alias,koreanName:b[2],seed:a.seed,provider:a.provider,model:a.model,...void 0!==a.oauthPosition?{oauthPosition:a.oauthPosition}:{}}}).sort((a,b)=>a.seed-b.seed)},54878:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J:()=>k});var e=c(77598),f=c(11746),g=c(36609),h=c(92178),i=c(15837),j=a([f,g,h]);[f,g,h]=j.then?(await j)():j;let l=h.THINKING_EFFORTS.find(a=>"low"===String(a));function k({authStorage:a,modelRegistry:b,fetch:c}){let d,h=!1,j=-1,m=new Set,n=b=>void 0!==b.oauthPosition||(0,g.authPolicyFor)(b.provider)?.login?.kind==="oauth-code"||a.oauth.accounts(b.provider).length>0||m.has(b.provider),o=()=>d??=(async()=>{h=!1;try{await a.credentials.revalidate();let b=await a.credentials.listDisabled();m=new Set(b.filter(a=>"oauth"===a.type).map(a=>a.provider)),j=a.credentials.generation,h=!0}catch{}})().finally(()=>{d=void 0});return{refreshAccounts:o,account(b,c){if(!n(b)&&void 0===c)return;let d=a.oauth.accounts(b.provider).map((a,b)=>{let c=Number.isInteger(a.position)?a.position:b;return{credentialId:a.credentialId,position:c,label:`계정 ${c+1} \xb7 ID ${a.credentialId}`}});return{credentialId:c,choices:h?d:[],selectionRequired:!h||!d.some(a=>a.credentialId===c)}},defaultAccount(b){if(!(!h||j!==a.credentials.generation||m.has(b.provider))&&n(b)){var c;let d;return(c=a.oauth.accounts(b.provider),d=b.oauthPosition??0,c.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===d))?.credentialId}},availability(c,d){let e=b.find(c.provider,c.model);if(!e)return{ok:!1,reason:"등록된 모델을 찾지 못했습니다."};if(!b.hasConfiguredAuth(e))return{ok:!1,reason:"인증된 계정이 없습니다."};let f=a.oauth.accounts(c.provider).find(a=>a.credentialId===d);if(n(c)||void 0!==d){if(!h)return{ok:!1,reason:"계정 목록을 확인하지 못했습니다."};if(!f)return{ok:!1,reason:void 0===d?"단톡방 전용 계정을 선택하세요. 계정 자리만으로는 연결을 확정할 수 없습니다.":"연결한 계정이 비활성화되었거나 없어졌습니다. 사용할 계정을 다시 선택하세요."}}return f&&a.blocks.list([f.credentialId]).some(a=>a.blockedUntilMs>Date.now()&&(""===a.blockScope||a.blockScope===`model:${e.id}`))?{ok:!1,reason:"사용량 한도로 계정이 일시 차단됐습니다."}:{ok:!0}},async invoke(d){let{member:j}=d,k=AbortSignal.any([d.signal,AbortSignal.timeout(9e4)]);k.throwIfAborted(),await o(),k.throwIfAborted();let m=b.find(j.provider,j.model);if(!m||!b.hasConfiguredAuth(m))throw new i.jm("모델 또는 인증을 사용할 수 없습니다.");let p=`cuelo-lounge:${(0,e.randomUUID)()}`,q=a.oauth.accounts(j.provider).find(a=>a.credentialId===d.credentialId);if((n(j)||void 0!==d.credentialId)&&(!h||!q))throw new i.jm("연결한 계정을 사용할 수 없습니다. 단톡방 전용 계정을 다시 선택하세요.");let r="";try{let e,h;if(q){if(h=q.credentialId,!a.sessions.pin(j.provider,p,h)||!a.oauth.accounts(j.provider,p).some(a=>a.credentialId===h&&a.active))throw new i.jm("단톡방 전용 계정 연결을 확인하지 못했습니다.");let b=await a.oauth.accessById(j.provider,h,{modelId:m.id,baseUrl:m.baseUrl,signal:k});if(k.throwIfAborted(),!b?.ok||b.credentialId!==h)throw new i.jm("지정한 계정의 인증을 갱신하지 못했습니다.");e=(0,g.authPolicyFor)(j.provider)?.apiKeyFormat==="structured"?JSON.stringify({token:b.accessToken,accountId:b.accountId,projectId:b.projectId,enterpriseUrl:b.enterpriseUrl,email:b.email,apiEndpoint:b.apiEndpoint}):b.accessToken}else{let a=await b.getApiKeyWithCredentialForProvider(j.provider,p,{modelId:m.id,baseUrl:m.baseUrl,signal:k});e=a?.apiKey,h=a?.credentialId}if(k.throwIfAborted(),!e)throw new i.jm("인증 정보를 사용할 수 없습니다.");if(void 0!==h){let b=a.blocks.list([h]).find(a=>a.blockedUntilMs>Date.now()&&(""===a.blockScope||a.blockScope===`model:${m.id}`));if(b)throw new i.jm("사용량 한도로 계정이 일시 차단됐습니다.",b.blockedUntilMs)}let n=await a.health.model(j.provider,{modelId:m.id,baseUrl:m.baseUrl,sessionId:p,reserveFraction:0,signal:k});k.throwIfAborted();let o=void 0===h?void 0:n.accounts.find(a=>a.credentialId===h);if(o?.state==="depleted"||!o&&"depleted"===n.state)throw new i.jm("사용량 한도에 도달했습니다. 해제 후 다시 참여할 수 있습니다.",o?.resetsAt);let s=await b.resolveModelHeaders(m,k);k.throwIfAborted();let t=!1;for await(let b of(0,f.streamSimple)(m,{systemPrompt:[d.systemPrompt],messages:[{role:"user",content:d.userText,timestamp:Date.now()}],tools:[]},{apiKey:e,credentialId:h,headers:s,signal:k,sessionId:p,maxTokens:512,reasoning:l,cacheRetention:"none",statefulResponses:!1,codexSseMaxAttempts:1,acceptEmptyResponse:!0,maxRetryDelayMs:1,...c?{fetch:c}:{},onResponse(b){try{a.usage.ingestHeaders(j.provider,b.headers,{sessionId:p,baseUrl:m.baseUrl,responseStatus:b.status})}catch{t=!0}}}))if(k.throwIfAborted(),"text_delta"===b.type)r+=b.delta,d.onText(r);else if("error"===b.type){let a=b.error.errorMessage?.trim().slice(0,300);throw new i.jm(`모델 응답을 받지 못했습니다${a?`: ${a}`:". 인증\xb7사용량\xb7연결 상태를 확인하세요."}`)}else"done"===b.type&&(a.usage.observe({provider:j.provider,model:m.id,usage:b.message.usage,costUsd:b.message.usage.cost.total}),r=b.message.content.filter(a=>"text"===a.type).map(a=>a.text).join(""));if(t)throw new i.jm("사용량 응답을 기록하지 못했습니다.");return r}finally{a.sessions.release(j.provider,p)}}}}d()}catch(a){d(a)}})},66544:(a,b,c)=>{c.d(b,{E2:()=>j,EN:()=>i});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.CUELO_HOSTNAME,...process.env.CUELO_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}function h(a){try{return new URL(a).origin}catch{return null}}function i(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||!(a.headers.has("origin")||a.headers.has("sec-fetch-site"))||function(a){let b,c,d=a.headers.get("origin");if("cross-site"===a.headers.get("sec-fetch-site"))return!1;if(!d)return!0;let e=(b=new URL(a.url),(c=a.headers.get("host"))?h(`${b.protocol}//${c}`):null);return null!==e&&h(d)===e}(a))}function j(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},90170:(a,b,c)=>{c.d(b,{Bf:()=>l,Kp:()=>o,eW:()=>j,fC:()=>h,u4:()=>k});var d=c(73024),e=c(76760),f=c(8102),g=c(97506);class h extends Error{constructor(...a){super(...a),this.name="LoungeLoadError"}}let i={enabled:!1,autoTalk:!1,participants:[],pace:"normal",sleepAfterMinutes:10},j={slow:!0,normal:!0,active:!0};function k(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function l(a){return"number"==typeof a&&Number.isFinite(a)}function m(a){return Array.isArray(a)&&a.every(a=>"string"==typeof a)}function n(a){return!!k(a)&&"string"==typeof a.id&&"string"==typeof a.memberId&&"string"==typeof a.text&&!!l(a.createdAt)&&(void 0===a.replyToId||"string"==typeof a.replyToId)&&Array.isArray(a.reactions)&&a.reactions.every(a=>k(a)&&"string"==typeof a.emoji&&m(a.by))}function o(a){return{path:a,load(){let b,c;try{b=(0,d.readFileSync)(a,"utf8")}catch(a){if("ENOENT"===a.code)return{version:1,settings:{...i,participants:[]},messages:[],requests:[],callTimestamps:[],lastUserActivityAt:null,accountBindings:{}};throw new h(`기록 파일을 읽지 못했습니다: ${a instanceof Error?a.message:String(a)}`)}var e,f=b;try{c=JSON.parse(f)}catch(a){throw new h(`JSON이 아닙니다: ${a instanceof Error?a.message:String(a)}`)}if(!k(c)||1!==c.version)throw new h("지원하지 않는 기록 형식입니다.");if(!(k(e=c.settings)&&"boolean"==typeof e.enabled&&"boolean"==typeof e.autoTalk&&m(e.participants)&&"string"==typeof e.pace&&!0===j[e.pace]&&l(e.sleepAfterMinutes)&&e.sleepAfterMinutes>=g.o8&&e.sleepAfterMinutes<=g.IP))throw new h("방 설정 형식이 올바르지 않습니다.");if(!Array.isArray(c.messages)||!c.messages.every(n))throw new h("메시지 형식이 올바르지 않습니다.");if(!Array.isArray(c.requests)||!c.requests.every(a=>k(a)&&"string"==typeof a.id&&l(a.at)))throw new h("요청 기록 형식이 올바르지 않습니다.");if(!Array.isArray(c.callTimestamps)||!c.callTimestamps.every(l))throw new h("호출 기록 형식이 올바르지 않습니다.");if(null!==c.lastUserActivityAt&&!l(c.lastUserActivityAt))throw new h("활동 시각 형식이 올바르지 않습니다.");if(!k(c.accountBindings)||!Object.values(c.accountBindings).every(a=>"number"==typeof a&&Number.isSafeInteger(a)&&a>0))throw new h("계정 연결 기록 형식이 올바르지 않습니다.");return{version:1,settings:c.settings,messages:c.messages,requests:c.requests,callTimestamps:c.callTimestamps,lastUserActivityAt:c.lastUserActivityAt,accountBindings:c.accountBindings}},save(b){(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0}),(0,f.$)(a,`${JSON.stringify(b)}
5
5
  `)}}}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},97506:(a,b,c)=>{c.d(b,{IP:()=>h,T6:()=>f,c8:()=>e,o8:()=>g,rB:()=>d});let d="main",e=2e3,f=16,g=1,h=120}};
@@ -6,5 +6,5 @@ Status: ${g.status}${g.enabled?"":" (paused)"}
6
6
  Tokens: ${f}
7
7
  Time spent: ${a=g.timeUsedSeconds,b=Math.max(0,Math.round(a)),c=Math.floor(b/3600),d=Math.floor(b%3600/60),c>0?`${c}h ${d}m`:d>0?`${d}m ${b%60}s`:`${b}s`}`),status:g}}async #v(a){if(!a)return this.#p("Usage: /goal set <objective>");if(!this.enabled&&this.#w())return this.#p("Resume the current goal first, or drop it before setting a new objective.");if(!this.enabled)return await this.#x(a);let b=await this.#a.goalRuntime.replaceGoal({objective:a});return this.#a.setGoalModeState?.(b),this.#g=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),{message:"Goal replaced.",prompt:a,status:this.getStatus()}}async #x(a){let b=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),c=await this.#a.goalRuntime.createGoal({objective:a});return this.#c=b,await this.#a.setActiveToolsByName([...new Set([...b,"goal"])]),this.#a.setGoalModeState?.(c),this.#g=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),this.#o(),{message:"Goal mode enabled.",prompt:a,status:this.getStatus()}}async #r(){return this.enabled?(await this.#a.goalRuntime.pauseGoal(),await this.#y({reason:"paused"}),{message:"Goal mode paused.",status:this.getStatus()}):this.#p("No active goal to pause.")}async #s(){if(!this.#w())return this.#p("No paused goal to resume.");let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),b=await this.#a.goalRuntime.resumeGoal();return this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])]),this.#a.setGoalModeState?.(b),this.#g=!1,this.#o(),this.#z(),{message:"Goal mode resumed.",status:this.getStatus()}}async #t(){return this.enabled||this.#w()?(await this.#a.goalRuntime.dropGoal(),await this.#y({reason:"dropped"}),{message:"Goal dropped.",status:this.getStatus()}):this.#p("No goal to drop.")}async #u(a){let b=this.#a.getGoalModeState?.();if(!this.enabled||!b?.enabled)return this.#p(this.#w()?"Resume the goal before adjusting the budget.":"No active goal.");if("complete"===b.goal.status)return this.#p("Goal is already complete.");if(!a)return this.#p("Usage: /goal budget <N|off>");let{budget:c,error:d}=function(a){let b=a.trim().toLowerCase();if("off"===b)return{};let c=Number.parseInt(b,10);return!Number.isInteger(c)||c<=0||String(c)!==b?{error:"Goal budget must be a positive integer or `off`."}:{budget:c}}(a);return d?this.#p(d):(await this.#a.goalRuntime.onBudgetMutated(c),this.#g=!1,this.#o(),this.#z(),{message:void 0===c?"Goal budget cleared.":`Goal budget set to ${c.toLocaleString()}.`,status:this.getStatus()})}async #y(a){let b=this.#c;if(b&&await this.#a.setActiveToolsByName(b),"completed"===a.reason){let a=this.#a.getGoalModeState?.()?.goal;this.#a.setGoalModeState?.(void 0),this.#a.sessionManager.appendModeChange("none"),this.#a.sessionManager.appendCustomEntry("goal-completed",{objective:a?.objective,tokensUsed:a?.tokensUsed,tokenBudget:a?.tokenBudget,timeUsedSeconds:a?.timeUsedSeconds})}this.#c=void 0,this.#e=!1,this.#j(),this.#o()}async #n(){let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a);this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])])}#z(){var a;if(this.#j(),this.#h||(a=e.cfgGoalContinuationModes.get(this.#a.settings),!(Array.isArray(a)&&h.some(b=>a.includes(b)))||this.#a.getPlanModeState?.()?.enabled||this.#g))return;let b=this.#a.getGoalModeState?.();!b?.enabled||"active"!==b.goal.status||this.#a.goalRuntime.buildContinuationPrompt()&&(this.#d=setTimeout(()=>{this.#d=void 0,this.#A()},this.#b.continuationDelayMs??800))}async #A(){if(this.#h||this.#g||this.#b.isBusy())return;let a=this.#a.getGoalModeState?.();if(!a?.enabled||"active"!==a.goal.status)return;let b=this.#a.goalRuntime.buildContinuationPrompt();if(b){this.#e=!0;try{await this.#b.runContinuation(b)}catch{this.#e=!1}}}#j(){this.#d&&(clearTimeout(this.#d),this.#d=void 0)}#p(a){return{error:a,status:this.getStatus()}}#m(){return!1!==e.cfgGoalEnabled.get(this.#a.settings)}#w(){let a=this.#a.getGoalModeState?.();if(a?.goal&&!a.enabled&&"paused"===a.goal.status)return a}#l(){let a=this.#a.sessionManager.getEntries();for(let b=a.length-1;b>=0;b-=1)if(a[b]?.type==="mode_change")return a[b]}#o(){this.#b.onStatusChange?.(this.getStatus())}}d()}catch(a){d(a)}})},41761:(a,b,c)=>{c.d(b,{C1:()=>d});let d=["read","bash","edit","write","grep","glob"];Object.fromEntries(d.map(a=>[a,!0]))},45935:(a,b,c)=>{c.d(b,{Hm:()=>p,Q:()=>h,RI:()=>o,Uc:()=>m,rt:()=>n});var d=c(28967),e=c(72498);function f(){return globalThis.__cueloProjectTrustChanges??=new Map,globalThis.__cueloProjectTrustChanges}function g(){return globalThis.__cueloProjectTrustErrors??=new Map,globalThis.__cueloProjectTrustErrors}class h extends Error{constructor(){super("This project has no resources that require trust")}}function i(a,b){return[...new Set(a.sessions())].filter(a=>(0,e.LV)(a.cwd)===b)}function j(a){console.error("[cuelo] failed to shut down a session after a project trust change:",a instanceof Error?a.message:a)}function k(a,b,c){let h=i(a,b),k=(0,e.Y1)(b,c.agentDir),l=!1;for(let a of h)!k.trusted&&a.projectCodeLoaded&&(a.isSafelyIdle()&&a.beginClose({onlyWhenIdle:!0})?a.shutdown().catch(j):(l=!0,a.watchBackgroundWork()));if(c.grant){if(!k.requiresTrust||k.trusted)return void f().delete(b);if(a.isStarting(b))return;let i=h.filter(a=>!a.isSafelyIdle());if(i.length>0){for(let a of i)a.watchBackgroundWork();return}let l=[];for(let a of h){if(!a.beginClose({onlyWhenIdle:!0})){for(let a of l)a.cancelClose();return}l.push(a)}f().delete(b);try{(0,e.er)(b,c.agentDir)}catch(a){for(let a of l)a.cancelClose();g().set(b,a instanceof Error?a.message:String(a));return}for(let a of((0,d.kn)(),l))a.shutdown().catch(j);return}l||a.isStarting(b)||f().delete(b)}let l=!1;function m(a){let b=f();if(0!==b.size&&!l){l=!0;try{for(let[c,d]of[...b])try{k(a,c,d)}catch(a){console.error("[cuelo] failed to apply a project trust change:",a instanceof Error?a.message:a)}}finally{l=!1}}}function n(a){let b=f();if(0===b.size)return!1;let c=b.get((0,e.LV)(a));return void 0!==c&&!(0,e.Y1)(a,c.agentDir).trusted}function o(a,b,c){let d=(0,e.LV)(b),h=(0,e.Y1)(b,c),j=i(a,d),k=j.filter(a=>a.projectCodeLoaded).length,l=g().get(d),m=null;return f().get(d)?.grant?m="grant":h.requiresTrust&&!h.trusted&&k>0&&(m="revoke"),{...h,pending:m,runtime:{sessions:j.length,running:j.filter(a=>a.isRunning()).length,projectCodeLoaded:k},...l?{error:l}:{}}}function p(a,b,c,i){let j=(0,e.LV)(b),m=f();if(g().delete(j),"grant"===i){if(!(0,e.Y1)(b,c).requiresTrust)throw new h;m.set(j,{agentDir:c,grant:!0})}else"revoke"===i?(m.delete(j),(0,e.wK)(b,c,!1),(0,d.kn)(),m.set(j,{agentDir:c,grant:!1})):m.get(j)?.grant&&m.set(j,{agentDir:c,grant:!1});let n=m.get(j);if(n){l=!0;try{k(a,j,n)}finally{l=!1}}return o(a,b,c)}},53923:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>i});var e=c(58505),f=c(4327),g=a([e,f]);function h(a,b){return(0,e.findConfigFile)(a,{user:!1,cwd:b})??(0,e.findConfigFile)(a,{user:!0,cwd:b})}async function i(a){let[b,c]=await Promise.all([(0,f.resolvePromptInput)(h("SYSTEM.md",a),"system prompt"),(0,f.resolvePromptInput)(h("APPEND_SYSTEM.md",a),"append system prompt")]);return{systemPrompt:b,appendPrompt:c}}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>ae,Bp:()=>af,CL:()=>au,HG:()=>ag,KI:()=>P,MT:()=>ac,OF:()=>ai});var e=c(63411),f=c(92582),g=c(33594),h=c(94285),i=c(59895),j=c(28315),k=c(25167),l=c(14882),m=c(1740),n=c(9655),o=c(82512),p=c(78310),q=c(3330),r=c(34722),s=c(43696),t=c(90431),u=c(26854),v=c(55511),w=c(29021),x=c(33873),y=c(78970),z=c(36208),A=c(28967),B=c(18904),C=c(40402),D=c(72498),E=c(45935),F=c(53923),G=c(25429),H=c(38741),I=c(5908),J=c(41761),K=c(4157),L=c(39873),M=c(65667),N=c(71069),O=a([e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]);function P(a){let b,c=null,d=!1,e=()=>{if(b&&(clearTimeout(b),b=void 0),d||!c)return;let e=c;c=null,a(e)};return{push:f=>{if(!d){if("message_update"===f.type){c=f,b||(b=setTimeout(()=>{b=void 0,e()},33));return}e(),a(f)}},flush:e,close:()=>{d=!0,c=null,clearTimeout(b),b=void 0}}}[e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]=O.then?(await O)():O;let aj=new Set(["agent_start","agent_end","agent_settled","auto_compaction_start","auto_compaction_end","compaction_start","compaction_end"]),ak=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),al={abort:!0,extension_ui_input:!0,extension_ui_response:!0,get_commands:!0,get_last_assistant_text:!0,get_session_stats:!0,get_state:!0,get_subagent_messages:!0,get_subagents:!0,get_tools:!0},am={bash:!0,compact:!0,follow_up:!0,fork:!0,handoff:!0,prompt:!0,steer:!0},an={set_model:!0,set_role_model:!0,set_thinking_level:!0};async function Q(a,b){let c=a.modelRegistry.authStorage;if(!c?.oauth)return{ok:!1,reason:"이 세션은 OAuth 계정 목록을 읽을 수 없습니다."};try{return await c.reload?.(),{ok:!0,accounts:c.oauth.accounts(b,a.sessionId)}}catch(a){return{ok:!1,reason:`계정 목록을 읽지 못했습니다: ${a instanceof Error?a.message:String(a)}`}}}async function R(a,b){let c=await Q(a,b);return c.ok?{ok:!0,snapshot:{provider:b,credentialId:c.accounts.find(a=>a.active)?.credentialId}}:{ok:!1,reason:c.reason}}async function S(a,b){if(!b)return!1;let c=a.modelRegistry.authStorage;if(!c)return!1;try{if(void 0!==b.credentialId)return c.sessions?.pin(b.provider,a.sessionId,b.credentialId)??!1;return c.sessions?.release(b.provider,a.sessionId)??!1}catch{return!1}}async function T(a,b,c){if(!Number.isSafeInteger(c)||c<0)return{ok:!1,reason:`OAuth 저장 위치 ${String(c)}가 올바르지 않습니다.`};if(!a.modelRegistry.authStorage?.sessions)return{ok:!1,reason:"이 세션은 OAuth 계정 pin을 지원하지 않습니다."};let d=await Q(a,b);if(!d.ok)return{ok:!1,reason:d.reason};if(0===d.accounts.length)return{ok:!1,reason:"저장된 OAuth 계정이 없습니다."};let e=d.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c);if(!e)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c}의 계정이 없습니다.`};let f=!1;try{f=a.modelRegistry.authStorage.sessions.pin(b,a.sessionId,e.credentialId)}catch{f=!1}if(!f)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c} 계정을 이 세션의 선호 계정으로 설정하지 못했습니다.`};let g=await Q(a,b),h=g.ok?g.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c):void 0;return h?.active!==!0?{ok:!1,reason:`${b} OAuth 저장 위치 ${c}이 이 세션의 선호 계정으로 설정되지 않았습니다.`}:{ok:!0}}async function U(a,b){let c=await W(a,b.previousModel,b.previousRole),d=void 0===b.account||await S(a,b.account),e=!0;if(void 0!==b.previousThinking&&a.configuredThinkingLevel()!==b.previousThinking){try{a.setThinkingLevel(b.previousThinking)}catch{}e=a.configuredThinkingLevel()===b.previousThinking}return{model:c,account:d,thinking:e}}function V(a){let b=[];return a.model||b.push("모델"),a.account||b.push("계정 선호"),a.thinking||b.push("thinking 강도"),0===b.length?"모델\xb7계정\xb7강도를 되돌렸습니다.":`${b.join("\xb7")} 복원에 실패했습니다 — 이전 상태로 돌아가지 않았습니다.`}async function W(a,b,c){if(!b)return!1;let d=a.model;if(d?.provider===b.provider&&d?.id===b.id)return!0;try{return await a.setModel(b,c),!0}catch{return!1}}let ao=Object.fromEntries(J.C1.map(a=>[a,!0]));class ap extends f.Theme{constructor(){super({thinkingXhigh:""},{},"truecolor","unicode",{})}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let aq=new ap,ar=new u.KeybindingsManager(u.TUI_KEYBINDINGS);function X(a,b){if(0===b.length)return[];let c=a.getAllToolNames().filter(a=>!0!==ao[a]);return[...new Set([...b,...c])]}function Y(a,b,c){let d=c.name.trim();!d||b.has(d)||(b.add(d),a.push({...c,name:d}))}let as=["fork","goal"];async function Z(a){let b=[],c=new Set;for(let a of as){let d=i.BUILTIN_SLASH_COMMAND_DEFS.find(b=>b.name===a);if(!d)continue;let e=d.inlineHint;Y(b,c,{name:d.name,aliases:d.aliases,description:d.description,source:"builtin",...e?{input:{hint:e}}:{},...d.subcommands?{subcommands:d.subcommands}:{}})}for(let d of(await (0,g.buildAvailableSlashCommands)(a)))Y(b,c,d);for(let d of a.promptTemplates)Y(b,c,{name:d.name,description:d.description,source:"prompt",...d.source?{path:d.source}:{}});return b}function $(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"getRunningJobs"in b&&"function"==typeof b.getRunningJobs&&"hasPendingDeliveries"in b&&"function"==typeof b.hasPendingDeliveries&&"waitForAll"in b&&"function"==typeof b.waitForAll)return b}async function _(a,b){let{promise:c,resolve:d}=Promise.withResolvers(),e=setTimeout(()=>d(!1),Math.max(0,b-Date.now()));try{return await Promise.race([a.then(()=>!0),c])}finally{clearTimeout(e)}}class at{constructor(a,b){this.inner=a,this.listeners=[],this.pendingUiResponses=new Map,this.keepAliveListeners=new Set,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.modelMutations=0,this.presetMutation=!1,this.handoffRunning=!1,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.subagentHistory=new Map,this.goalModeController=null,this._alive=!0,this.closing=!1,this.projectCodeLoaded=!1,this.backgroundSettleWatch=null,this.subagents=new s.RpcSubagentRegistry(b,a=>{this.rememberSubagentFrame(a),this.emit(a),this.resetIdleTimer(),ah()}),this.subagents.setSubscriptionLevel("progress")}rememberSubagentSnapshot(a){if(this.subagentHistory.set(a.id,a),this.subagentHistory.size<=128)return;let b=[...this.subagentHistory.values()].filter(a=>"pending"!==a.status&&"running"!==a.status).sort((a,b)=>a.lastUpdate-b.lastUpdate);for(;this.subagentHistory.size>128&&b.length>0;){let a=b.shift();a&&this.subagentHistory.delete(a.id)}}rememberSubagentFrame(a){if("subagent_progress"===a.type){let b=a.payload,c=b?.progress?.id;if(!c)return;let d=this.subagents.getSubagents().find(a=>a.id===c);d&&this.rememberSubagentSnapshot(d);return}if("subagent_lifecycle"!==a.type)return;let b=a.payload;if(!b?.id||!b.status)return;let c=this.subagents.getSubagents().find(a=>a.id===b.id);if("started"===b.status){c&&this.rememberSubagentSnapshot(c);return}let d=c??this.subagentHistory.get(b.id),e="failed"===b.status?"failed":"aborted"===b.status?"aborted":"completed";this.rememberSubagentSnapshot({id:b.id,index:b.index??d?.index??0,agent:b.agent??d?.agent??b.id,agentSource:b.agentSource??d?.agentSource??"bundled",description:b.description??d?.description,status:e,task:d?.task,assignment:d?.assignment,sessionFile:b.sessionFile??d?.sessionFile,lastUpdate:Date.now(),parentToolCallId:b.parentToolCallId??d?.parentToolCallId,progress:d?.progress?{...d.progress,status:e}:void 0})}getSubagentSnapshots(){for(let a of this.subagents.getSubagents())this.rememberSubagentSnapshot(a);let a=new Map(this.subagentHistory);for(let b of this.subagents.getSubagents())a.set(b.id,b);return[...a.values()].sort((a,b)=>{let c="pending"===a.status||"running"===a.status,d="pending"===b.status||"running"===b.status;return c!==d?c?-1:1:c?a.index-b.index||a.id.localeCompare(b.id):b.lastUpdate-a.lastUpdate||a.id.localeCompare(b.id)})}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}isAlive(){return this._alive}isRunning(){return this._alive&&(this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning||this.subagents.getSubagents().length>0)}isSafelyIdle(){if(!this._alive||this.closing||this.isRunning()||this.pendingUiResponses.size>0)return!1;let a=$(this.inner);if(a&&(a.getRunningJobs().length>0||a.hasPendingDeliveries()))return!1;let b="hasPendingAsyncWork"in this.inner?this.inner.hasPendingAsyncWork:void 0;if("function"==typeof b&&!0===b.call(this.inner))return!1;let c=this.inner.getGoalModeState?.();return!(c?.enabled&&"active"===c.goal.status)}watchBackgroundWork(){if(this.backgroundSettleWatch||!this._alive)return;let a=$(this.inner);a&&0!==a.getRunningJobs().length&&(this.backgroundSettleWatch=a.waitForAll().catch(()=>{}).finally(()=>{this.backgroundSettleWatch=null,this._alive&&ah()}))}beginClose({onlyWhenIdle:a=!1}={}){return!this._alive||!(a&&!this.closing&&this.isRunning())&&(this.closing=!0,!0)}cancelClose(){this._alive&&!this.shutdownPromise&&(this.closing=!1)}bindToolUiContext(a){a(this.createExtensionUiContext(),!0)}start(){this.syncPlanModeFromSession(),this.goalMode.restore().catch(a=>{console.error("[cuelo] failed to restore goal mode:",a instanceof Error?a.message:a)}),this.unsubscribe=this.inner.subscribe(a=>{"agent_end"===a.type&&(0,C.mD)(),ak.has(a.type)&&this.resetIdleTimer(),this.emit(a),aj.has(a.type)&&ah(),this.goalMode.handleSessionEvent(a).catch(a=>{console.error("[cuelo] goal mode failed to handle a session event:",a instanceof Error?a.message:a)})}),this.resetIdleTimer(),ah()}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[cuelo] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyForcedEmptySystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{this._alive&&(await (0,n.initializeExtensions)(this.inner,{uiContext:this.createExtensionUiContext(),reportSendError:(a,b)=>this.emit({type:"extension_error",extensionPath:a,event:"send",error:b.message}),reportRuntimeError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error}),onShutdown:()=>this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in CUELO."})}),this.extensionsBound=!0,this.applyForcedEmptySystemPrompt(),console.log(`[cuelo] session_start dispatched to extensions for session ${this.inner.sessionId}`))})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"handoff"===a||"get_commands"===a||"execute_slash_command"===a||"goal"===a}async withFinalRunningNotification(a){try{return await a()}finally{this.resetIdleTimer(),ah()}}async shutdownAfterCommittedFork(a){try{await this.shutdown()}catch(b){console.error(`[cuelo] fork created session ${a}, but wrapper shutdown failed:`,b instanceof Error?b.message:b)}}applyForcedEmptySystemPrompt(){this.forceEmptySystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=[])}get goalMode(){return this.goalModeController||(this.goalModeController=new L.zd(this.inner,{isBusy:()=>this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning,runContinuation:a=>this.runGoalContinuation(a),onStatusChange:a=>this.emit({type:"goal_status",status:a})})),this.goalModeController}async runGoalContinuation(a){this.promptRunning=!0,ah();try{await this.inner.promptCustomMessage({customType:"goal-continuation",content:a,display:!1,attribution:"user"})}catch(a){throw this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),a}finally{this.promptRunning=!1,this.resetIdleTimer(),this.emit({type:"prompt_done"}),ah()}}syncPlanModeFromSession(){let a=this.inner.getPlanModeState?.();if(!a){let b,c=this.inner.sessionManager.getEntries();for(let a=c.length-1;a>=0;a-=1)if(c[a]?.type==="mode_change"){b=c[a];break}let d=b?.data?.planFilePath;b?.mode==="plan"&&"string"==typeof d&&d.length>0&&(a={enabled:!0,planFilePath:d,workflow:b.data?.workflow==="sequential"?"sequential":"parallel",reentry:!0},this.inner.setPlanModeState?.(a))}a?.enabled&&this.inner.setPlanProposalHandler?.(a=>this.handlePlanProposal(a))}async handlePlanProposal(a){let b=this.inner.getPlanModeState?.();if(!b?.enabled||!this.inner.preparePlanForReview)throw Error("Plan mode is not active.");let c=await this.inner.preparePlanForReview(a),d=c.details?.planFilePath,e=c.details?.title;if(!d||!e)throw Error("The proposed plan could not be resolved.");let f=await (0,o.readPlanFile)(d,{cwd:this.cwd,localProtocolOptions:{getArtifactsDir:()=>this.inner.sessionManager.getArtifactsDir(),getSessionId:()=>this.inner.sessionManager.getSessionId()}});if(!f?.trim())throw Error(`Plan file not found at ${d}`);let g=await this.requestExtensionUi({method:"plan_review",title:e,planFilePath:d,planContent:f},JSON.stringify({action:"refine"}),a=>"value"in a?a.value:JSON.stringify({action:"refine"})),h={};try{h=JSON.parse(g)}catch{}let i={planFilePath:d,title:e,planExists:!0};if("approve"===h.action)return this.inner.setPlanReferencePath?.(d),this.inner.setPlanProposalHandler?.(null),this.inner.setPlanModeState?.(void 0),this.inner.sessionManager.appendModeChange("none"),{content:[{type:"text",text:`Plan approved at ${d}. Plan mode exited; proceed with the implementation.`}],details:i};b.planFilePath!==d&&(this.inner.setPlanModeState?.({...b,planFilePath:d}),this.inner.sessionManager.appendModeChange("plan",{planFilePath:d}));let j="string"==typeof h.feedback?h.feedback.trim():"";return{content:[{type:"text",text:["Plan refinement requested.",j?`User feedback:
8
8
  ${j}`:"",`Update the plan file, then write ${e} to xd://propose again when ready.`].filter(Boolean).join("\n\n")}],details:i}}publishSessionSnapshot(a,b){this.emit({type:"session_snapshot",sessionId:this.sessionId,entryId:a,context:b})}emit(a){for(let b of this.listeners)b(a)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.keepAliveListeners.size>0||this.isRunning()?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},6e5)}persistBashOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,w.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,w.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,C.O8)(this.inner.sessionId,b)}onEvent(a,b={}){for(let c of(this.listeners.push(a),b.keepAlive&&(this.keepAliveListeners.add(a),this.resetIdleTimer()),this.pendingUiRequests.values()))a(c);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.keepAliveListeners.delete(a)&&0===this.keepAliveListeners.size&&this._alive&&this.resetIdleTimer()}}onDestroy(a){this.onDestroyCallback=a}async sendInternalPrompt(a){return this.send({type:"prompt",message:a},!0)}async emitGenuineUserInput(a,b){let c=this.inner.extensionRunner;if(!c?.hasHandlers?.("input"))return{text:a,images:b};let d=await c.emitInput?.(a,b,"rpc");return d?!0===d.handled?(console.log(`[cuelo] input event consumed by an extension for session ${this.inner.sessionId}`),null):{text:void 0!==d.text?d.text.trim():a,images:void 0!==d.images?d.images:b}:{text:a,images:b}}async send(a,b=!1){this.resetIdleTimer();let c=a.type;if(this.shouldWaitForExtensions(c)&&await this.waitForExtensionsBound(),this.closing&&!0===am[c])throw Error("Session is closing");if(this.handoffRunning&&!0!==al[c])throw Error("Cannot modify the session while a handoff is in progress");let d="set_model"===c&&(void 0!==a.thinkingLevel||void 0!==a.oauthPosition);if(!0===an[c]&&(this.presetMutation||d&&this.modelMutations>0))throw Error("Cannot change the model while another model change is in progress");if("prompt"===c&&!b&&this.presetMutation)throw Error("Cannot send a prompt while a Main preset is being applied");if(("prompt"===c||"steer"===c||"follow_up"===c)&&this.syncPlanModeFromSession(),"prompt"===c||"steer"===c||"follow_up"===c){let b=(0,y.kc)(a.images);if(b)throw Error(b)}switch(c){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.goalMode.onUserPrompt();let c=a.message,d=a.images,e=a.streamingBehavior;if(!b&&void 0===e){let a=await this.emitGenuineUserInput(c,d);if(null===a||(c=a.text,d=a.images,!c&&!d?.length))return null}let f=(0,k.resolveRpcSkillInvocation)(this.inner,c),g=f?(0,j.buildSkillPromptMessage)(f.skill,f,"user").then(a=>this.inner.promptCustomMessage({customType:l.SKILL_PROMPT_MESSAGE_TYPE,content:d?.length?[{type:"text",text:a.message},...d]:a.message,display:!0,details:a.details,attribution:"user"},{...e?{streamingBehavior:e}:{},queueChipText:c})):this.inner.prompt(c,{...d?.length?{images:d}:{},...e?{streamingBehavior:e}:{},userInitiated:!0});return this.promptRunning=!0,ah(),g.then(()=>{this.promptRunning=!1,this.resetIdleTimer(),e||this.emit({type:"prompt_done"}),ah()}).catch(a=>{this.promptRunning=!1,this.resetIdleTimer(),(0,C.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),e||this.emit({type:"prompt_done"}),ah()}),null}case"abort":return this.goalMode.onAbort(),await this.withFinalRunningNotification(()=>this.inner.abort()),null;case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,isHandoffRunning:this.handoffRunning,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.queuedMessageCount,queuedMessages:{steering:[...this.inner.getQueuedMessages().steering],followUp:[...this.inner.getQueuedMessages().followUp]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:[this.inner.agent.state?.systemPrompt??""].flat().join("\n"),thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",configuredThinkingLevel:this.inner.configuredThinkingLevel()??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),subagents:this.getSubagentSnapshots(),todoPhases:this.inner.getTodoPhases(),goal:this.goalMode.getStatus()}}case"get_subagents":return{subagents:this.getSubagentSnapshots()};case"get_subagent_messages":{let b=this.subagents.resolveSessionFile(a);return(0,s.readRpcSubagentTranscript)(b,a.fromByte)}case"set_model":{let{provider:b,modelId:c,role:d,oauthPosition:e,thinkingLevel:f}=a,g=void 0!==f||void 0!==e;this.modelMutations+=1,g&&(this.presetMutation=!0);try{let a,g=await (0,H.findModelWithRecovery)(this.inner.modelRegistry,b,c,{forceDiscovery:!0});if(g.miss)throw Error((0,I.zX)(g.miss));let h=g.model,i=this.inner.model,j=void 0!==e||void 0!==f?function(a){try{let b=a.sessionManager.getBranch();if(!Array.isArray(b))return;for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(c?.type==="model_change")return"string"==typeof c.role?c.role:void 0}}catch{}}(this.inner):void 0,k=void 0!==f?this.inner.configuredThinkingLevel():void 0;if(void 0!==e){let b=await R(this.inner,h.provider);if(!b.ok)throw Error(`${b.reason} 계정 변경을 시작하지 않았습니다.`);a=b.snapshot}if(await this.inner.setModel(h,d),void 0!==e){let b=await T(this.inner,h.provider,e);if(!b.ok){let c=await U(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b.reason} ${V(c)}`)}}if(void 0!==f)try{this.inner.setThinkingLevel(f)}catch(d){let b=`thinking level ${f} 적용에 실패했습니다: ${d instanceof Error?d.message:String(d)}`,c=await U(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b} ${V(c)}`)}return(0,A.kn)(),(0,C.mD)(),{id:h.id,provider:h.provider,...d?{role:d}:{}}}finally{g&&(this.presetMutation=!1),this.modelMutations-=1}}case"set_role_model":{let b=a.role;this.modelMutations+=1;try{await (0,H.recoverMissingModelRefs)(this.inner.modelRegistry,(0,G.Ex)(this.inner.settings));let a=this.inner.resolveRoleModel(b);if(!a)throw Error(`No model configured for role "${b}"`);return await this.inner.setModel(a,b),(0,A.kn)(),(0,C.mD)(),{id:a.id,provider:a.provider,role:b}}finally{this.modelMutations-=1}}case"fork":{let b;if(this.inner.isBashRunning)throw Error("Cannot fork while a shell command is running");let c=this.inner.sessionManager,d=function(a,b){if("string"==typeof b&&b.length>0)return b;for(let b=a.length-1;b>=0;b-=1){let c=a[b];if(c?.type==="message"&&c.message?.role==="user"&&c.id)return c.id}}(c.getBranch(),a.entryId);if(!d)throw Error("No user message to fork from yet");let e=this.inner.sessionFile;if(!e)return{cancelled:!0};let g=c.getEntry(d);if(!g)throw Error("Invalid entry ID for forking");let h=c.getSessionDir();if(g.parentId){let a=(await f.SessionManager.open(e,h)).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=f.SessionManager.create(c.getCwd(),h);await a.newSession({parentSession:e}),await a.ensureOnDisk(),b=a.getSessionFile()}let i=(await f.SessionManager.open(b,h)).getSessionId();return(0,C.O8)(i,b),(0,C.mD)(),await this.shutdownAfterCommittedFork(i),{cancelled:!1,newSessionId:i}}case"handoff":{if(this.handoffRunning||this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot hand off while the session is busy");let b=a.customInstructions;this.handoffRunning=!0,ah();try{if(!await this.inner.handoff(b))return{cancelled:!0};return(0,C.mD)(),{cancelled:!1}}finally{this.handoffRunning=!1,ah()}}case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;this.modelMutations+=1;try{return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,C.mD)(),null}finally{this.modelMutations-=1}}case"compact":try{return await this.withFinalRunningNotification(()=>this.inner.compact(a.customInstructions))}finally{(0,C.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return await this.inner.sessionManager.setSessionName(b,"user"),(0,C.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":return this.inner.clearQueue();case"remove_queued_message":{let b=a.queue;if("string"!=typeof a.message)throw Error("message must be a string");if("steering"!==b&&"followUp"!==b)throw Error('queue must be "steering" or "followUp"');return{removed:this.inner.removeQueuedMessage(a.message,b)}}case"steer":{let b=a.images;var e,g=this.sessionId,i=a.message;try{(0,w.appendFileSync)((0,x.join)((0,f.getAgentDir)(),"steering-received.jsonl"),`${JSON.stringify({ts:Date.now(),sessionId:g??null,via:"steer",length:"string"==typeof i?i.length:0})}
9
- `)}catch{}return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=new Set(this.inner.getActiveToolNames());return(e=this.inner).getAllToolNames().map(a=>({name:a,description:e.getToolByName(a)?.description??""})).map(b=>({name:b.name,description:b.description,active:a.has(b.name)}))}case"get_commands":return{commands:await Z(this.inner)};case"goal":return await this.goalMode.handleCommand(a.args??"");case"execute_slash_command":{let b=[],c=await (0,h.executeAcpBuiltinSlashCommand)(a.message,{session:this.inner,sessionManager:this.inner.sessionManager,settings:this.inner.settings,cwd:this.cwd,output:a=>{b.push(a)},refreshCommands:()=>{},reloadPlugins:async()=>{await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)()}});if(!1===c)return{handled:!1,output:b};return{handled:!0,output:b,..."prompt"in c?{prompt:c.prompt}:{}}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),await this.inner.setActiveToolsByName(this.goalMode.reconcileToolNames(X(this.inner,b))),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)(),{success:!0};case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});ah();try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,C.mD)(),ah()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${c}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.goalModeController?.dispose(),this.subagents.dispose(),this.subagentHistory.clear(),this.keepAliveListeners.clear(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear();try{this.inner.dispose?.()}finally{try{this.onDestroyCallback?.()}finally{ah()}}}}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}await this.inner.extensionRunner?.emit?.({type:"session_shutdown",reason:"quit"})}finally{this.destroy()}})(),this.shutdownPromise):void 0}async stopBackgroundWorkForDrain(a){let b=Date.now()+a,c=function(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"cancelAll"in b&&"waitForAll"in b&&"function"==typeof b.cancelAll&&"function"==typeof b.waitForAll)return b}(this.inner);for(let a of(c?.cancelAll(void 0,t.ASYNC_JOB_MANAGER_SHUTDOWN_REASON),this.subagents.getSubagents()))p.AgentRegistry.global().get(a.id)?.session?.abort().catch(()=>{});let d=!c||await _(c.waitForAll(),b);for(;this.subagents.getSubagents().length>0&&Date.now()<b;)await function(){let{promise:a,resolve:b}=Promise.withResolvers();return setTimeout(b,100),a}();return d&&0===this.subagents.getSubagents().length}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return N.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return N.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,v.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,N.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,aq,ar,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=(0,v.randomUUID)(),g={type:"extension_ui_request",id:f,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise(a=>{let h,i=()=>{h&&clearTimeout(h),e?.removeEventListener("abort",k),this.pendingUiRequests.delete(f),this.pendingUiResponses.delete(f)},j=(b,c=!1)=>{i(),c&&this.emit({...g,closed:!0}),a(b)},k=()=>j(b,!0);d&&(h=setTimeout(()=>j(b),d)),e?.addEventListener("abort",k,{once:!0}),this.pendingUiRequests.set(f,g),this.pendingUiResponses.set(f,{resolve:a=>j(c(a)),cancel:()=>j(b)}),this.emit(g)})}createExtensionUiContext(){return{timeoutStartsOnPresentation:!1,askDialog:(a,b)=>this.requestExtensionUi({method:"ask",questions:a,...b?.timeout?{timeout:b.timeout}:{}},void 0,a=>{if("value"in a)try{return JSON.parse(a.value)}catch{return}},b?.timeout,b?.signal),select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return aq},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in CUELO extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}}function aa(){if(!globalThis.__ompSessions){globalThis.__ompSessions=new Map;let a=()=>globalThis.__ompSessions?.forEach(a=>a.destroy());process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompSessions}function ab(){return globalThis.__ompClosingSessionIds||(globalThis.__ompClosingSessionIds=new Set),globalThis.__ompClosingSessionIds}function ac(a,{onlyWhenIdle:b=!1}={}){let c=ab();if(c.has(a))return{reserved:!1,release:()=>{}};let d=aa().get(a);if(d?!d.beginClose({onlyWhenIdle:b}):b&&ag().includes(a))return{reserved:!1,release:()=>{}};c.add(a);let e=!1;return{reserved:!0,release:()=>{e||(e=!0,c.delete(a),d?.cancelClose())}}}function ad(){return globalThis.__ompStartingSessionCwds||(globalThis.__ompStartingSessionCwds=new Map),globalThis.__ompStartingSessionCwds}function ae(a){return aa().get(a)}function af(){let a=[];for(let b of aa().values()){if(!b.isAlive())continue;let c=b.inner.sessionManager,d=c.getHeader(),e=c.getEntries(),f=e.filter(a=>"message"===a.type),g=f.find(a=>"user"===a.message.role),h=c.getSessionFile()??b.sessionFile,i=!!(h&&(0,w.existsSync)(h));if(!i&&(!b.isRunning()||!g))continue;let j=d?.timestamp??e[0]?.timestamp??new Date().toISOString(),k=new Date(j).getTime(),l=Number.isNaN(k)?Date.now():k;for(let a of f){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(l=Math.max(l,b))}a.push({path:h??"",id:d?.id??b.sessionId,cwd:d?.cwd??b.cwd,name:c.getSessionName(),created:j,modified:new Date(l).toISOString(),messageCount:f.length,firstMessage:g&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content,c="string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ");return(0,z.we)(c)}(g)||"(no messages)",transient:!i})}return a}let au={sessions:()=>aa().values(),isStarting:a=>ad().has(a)};function ag(){let a=new Set;for(let[b,c]of aa())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function ah(){let a=ag();(0,K.p8)(a),(0,E.Uc)(au)}async function ai(a,b,c,d={}){let{toolNames:g,initialModel:h,thinkingLevel:i,accountOauthPosition:j}=d,k=aa(),l=(globalThis.__ompStartLocks||(globalThis.__ompStartLocks=new Map),globalThis.__ompStartLocks);if(ab().has(a))throw Error("Session is closing");let n=k.get(a);if(n?.isAlive())return{session:n,realSessionId:a};let o=l.get(a);if(o)return o;let p=(async()=>{let d,l;await (0,f.initTheme)(!1);let n=(0,f.getAgentDir)(),o=b?await f.SessionManager.open(b,void 0):(()=>{if(!c)throw Error("cwd is required for a new session");return f.SessionManager.create(c,void 0)})(),p=o.getCwd(),s=(d=ad(),l=(0,D.LV)(p),d.set(l,(d.get(l)??0)+1),()=>{let a=(d.get(l)??1)-1;a>0?d.set(l,a):d.delete(l)});try{let b,c=await (0,H.getOmpRuntime)(),d=await (0,H.getSettingsForCwd)(p);void 0!==g&&(b=0===g.length?[]:void 0);let[l,s]=await Promise.all([(0,f.discoverSessionExtensionPaths)({},p,d),(0,m.discoverCustomToolPaths)([],p)]),t=(0,D.qm)(p,n,{extensionPaths:l,customToolPaths:s}),u=await (0,F.D)(p),{modelRegistry:v}=c;await (0,H.recoverMissingModelRefs)(v,[...(0,G.Ex)(d),...h?[h]:[]]);let w=await (0,B.p)(v,e.cfgEnabledModels.get(d),d),x=(0,G.Ff)(d),y=h?void 0:x?.thinkingLevel,z=i??y,A=o.buildSessionContext().messages.length>0?{scopedModels:[...w.scopedModels],model:void 0,thinkingLevel:void 0}:(0,B.I)(w,{...h?{requestedModel:h}:{},...x?{defaultModel:x}:{},...z?{thinkingLevel:z}:{}}),I={cwd:p,agentDir:n,settings:d,sessionManager:o,modelRegistry:v,hasUI:!0,...A.model?{model:A.model}:{},...A.thinkingLevel?{thinkingLevel:A.thinkingLevel}:{},...A.scopedModels.length>0?{scopedModels:A.scopedModels}:{},...void 0!==b?{toolNames:b,restrictToolNames:!0}:{},...t??{}};(0,f.applyResolvedSystemPromptInputs)(I,u.systemPrompt,u.appendPrompt);let{session:J,eventBus:K,subagentEventBus:L,setToolUIContext:N}=await (0,f.createAgentSession)(I);g&&g.length>0&&await J.setActiveToolsByName(X(J,g));let O=new at(J,K);if(O.projectCodeLoaded=void 0===t,O.bindToolUiContext(N),void 0!==j){let a=J.model?.provider;if(!a)throw O.destroy(),Error("이 세션의 provider를 알 수 없어 OAuth 계정을 지정하지 못했습니다.");let b=await T(J,a,j);if(!b.ok)throw O.destroy(),Error(b.reason)}g?.length===0&&O.setForceEmptySystemPrompt(!0);let P=J.sessionId,Q=ab();if(Q.has(a)||Q.has(P))throw O.destroy(),Error("Session is closing");if(O.projectCodeLoaded&&(0,E.rt)(p))throw O.destroy(),Error("Project trust was revoked while this session was starting. Please try again.");O.start();let R=J.sessionFile;R&&(0,C.O8)(P,R);let S=R?(0,M.Be)(R,(0,q.createPersistedSubagentReviverFactory)({session:J,authStorage:c.authStorage,modelRegistry:v,settings:d,enableLsp:void 0===b,eventBus:K,subagentEventBus:L}),()=>Math.trunc(Number(r.cfgTaskAgentIdleTtlMs.get(c.settings))||0)):void 0;return O.onDestroy(()=>{S?.(),k.delete(P)}),k.set(P,O),O.beginExtensionBinding({forceEmptySystemPrompt:g?.length===0}),{session:O,realSessionId:P}}finally{s()}})().finally(()=>{l.delete(a)});return l.set(a,p),p}d()}catch(a){d(a)}})},65667:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Be:()=>i});var e=c(76760),f=c.n(e),g=c(96175),h=a([g]);function i(a,b,c){let d=(globalThis.__cueloRootRevivers??=new Map,globalThis.__cueloRootRevivers);return d.set(a,b),g.AgentLifecycleManager.global().setPersistedSubagentReviverFactory(async a=>{if(!a.sessionFile)return;let b=function(a,b){let c=f().resolve(a);for(let a of b){let b=f().resolve(a);if(b.endsWith(".jsonl")&&c.startsWith(`${b.slice(0,-6)}${f().sep}`))return a}}(a.sessionFile,d.keys());return b?d.get(b)(a):void 0},c),()=>{d.get(a)===b&&d.delete(a)}}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.d(b,{LV:()=>k,TK:()=>p,Y1:()=>m,er:()=>n,qm:()=>r,wK:()=>o});var d=c(29021),e=c(33873),f=c(13229),g=c(8102);let h=[".omp/extensions",".omp/hooks",".omp/tools",".pi/extensions",".pi/hooks",".pi/tools",".claude/extensions",".claude/hooks",".claude/tools",".agents/extensions",".agents/hooks",".agents/tools"],i=[".mcp.json",".omp/.mcp.json",".omp/mcp.json",".claude/.mcp.json",".claude/mcp.json",".cursor/mcp.json"];function j(a){return(0,e.join)(a,"cuelo-trusted-projects.json")}function k(a){let b=(0,e.resolve)(a);try{return(0,d.realpathSync)(b)}catch{return b}}function l(a){try{(0,f.adoptLegacyStateFile)(j(a),"omp-web-trusted-projects.json");let b=JSON.parse((0,d.readFileSync)(j(a),"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))return{};return Object.fromEntries(Object.entries(b).filter(a=>"boolean"==typeof a[1]))}catch{return{}}}function m(a,b){return a&&function(a){if(!a)return!1;for(let b of h)if((0,d.existsSync)((0,e.join)(a,b)))return!0;for(let b of i)if((0,d.existsSync)((0,e.join)(a,b)))return!0;return!1}(a)?{requiresTrust:!0,trusted:!0===l(b)[k(a)]}:{requiresTrust:!1,trusted:!0}}function n(a,b){let c=m(a,b);return c.requiresTrust?(o(a,b,!0),{requiresTrust:!0,trusted:!0}):c}function o(a,b,c){let e=l(b);e[k(a)]=c,(0,d.mkdirSync)(b,{recursive:!0}),(0,g.$)(j(b),`${JSON.stringify(e,null,2)}
9
+ `)}catch{}return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=new Set(this.inner.getActiveToolNames());return(e=this.inner).getAllToolNames().map(a=>({name:a,description:e.getToolByName(a)?.description??""})).map(b=>({name:b.name,description:b.description,active:a.has(b.name)}))}case"get_commands":return{commands:await Z(this.inner)};case"goal":return await this.goalMode.handleCommand(a.args??"");case"execute_slash_command":{let b=[],c=await (0,h.executeAcpBuiltinSlashCommand)(a.message,{session:this.inner,sessionManager:this.inner.sessionManager,settings:this.inner.settings,cwd:this.cwd,output:a=>{b.push(a)},refreshCommands:()=>{},reloadPlugins:async()=>{await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)()}});if(!1===c)return{handled:!1,output:b};return{handled:!0,output:b,..."prompt"in c?{prompt:c.prompt}:{}}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),await this.inner.setActiveToolsByName(this.goalMode.reconcileToolNames(X(this.inner,b))),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)(),{success:!0};case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});ah();try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,C.mD)(),ah()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${c}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.goalModeController?.dispose(),this.subagents.dispose(),this.subagentHistory.clear(),this.keepAliveListeners.clear(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear();try{this.inner.dispose?.()}finally{try{this.onDestroyCallback?.()}finally{ah()}}}}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}await this.inner.extensionRunner?.emit?.({type:"session_shutdown",reason:"quit"})}finally{this.destroy()}})(),this.shutdownPromise):void 0}async stopBackgroundWorkForDrain(a){let b=Date.now()+a,c=function(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"cancelAll"in b&&"waitForAll"in b&&"function"==typeof b.cancelAll&&"function"==typeof b.waitForAll)return b}(this.inner);for(let a of(c?.cancelAll(void 0,t.ASYNC_JOB_MANAGER_SHUTDOWN_REASON),this.subagents.getSubagents()))p.AgentRegistry.global().get(a.id)?.session?.abort().catch(()=>{});let d=!c||await _(c.waitForAll(),b);for(;this.subagents.getSubagents().length>0&&Date.now()<b;)await function(){let{promise:a,resolve:b}=Promise.withResolvers();return setTimeout(b,100),a}();return d&&0===this.subagents.getSubagents().length}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return N.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return N.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){if("string"!=typeof b)return;let c=this.activeCustomUis.get(a);if(!c){"activity"===b&&this.pendingUiResponses.get(a)?.activity?.();return}try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,v.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,N.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,aq,ar,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e,f){let g;if(e?.aborted)return Promise.resolve(b);let h=(0,v.randomUUID)(),i={type:"extension_ui_request",id:h,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}},{promise:j,resolve:k}=Promise.withResolvers(),l=!1,m=()=>{clearTimeout(g),e?.removeEventListener("abort",o),this.pendingUiRequests.delete(h),this.pendingUiResponses.delete(h)},n=(a,b=!1)=>{l||(l=!0,m(),b&&this.emit({...i,closed:!0}),k(a))},o=()=>n(b,!0),p=()=>{g&&clearTimeout(g),g=setTimeout(()=>n(f?f():b,!0),d)};return d&&p(),e?.addEventListener("abort",o,{once:!0}),this.pendingUiRequests.set(h,i),this.pendingUiResponses.set(h,{resolve:a=>n(c(a)),cancel:()=>n(b),...d&&f?{activity:()=>{p();let a=this.pendingUiRequests.get(h);a&&this.pendingUiRequests.set(h,{...a,expiresAt:Date.now()+d})}}:{}}),this.emit(i),j}createExtensionUiContext(){return{timeoutStartsOnPresentation:!1,askDialog:(a,b)=>this.requestExtensionUi({method:"ask",questions:a,...b?.timeout?{timeout:b.timeout}:{}},void 0,a=>{if("value"in a)try{return JSON.parse(a.value)}catch{return}},b?.timeout,b?.signal,()=>(function(a){let b=[];for(let c of a){let a=void 0===c.recommended?void 0:c.options[c.recommended];if(!a)return;b.push({id:c.id,question:c.question,options:c.options.map(a=>a.label),multi:c.multi??!1,selectedOptions:[a.label],timedOut:!0})}return{kind:"submit",results:b}})(a)),select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return aq},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in CUELO extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}}function aa(){if(!globalThis.__ompSessions){globalThis.__ompSessions=new Map;let a=()=>globalThis.__ompSessions?.forEach(a=>a.destroy());process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompSessions}function ab(){return globalThis.__ompClosingSessionIds||(globalThis.__ompClosingSessionIds=new Set),globalThis.__ompClosingSessionIds}function ac(a,{onlyWhenIdle:b=!1}={}){let c=ab();if(c.has(a))return{reserved:!1,release:()=>{}};let d=aa().get(a);if(d?!d.beginClose({onlyWhenIdle:b}):b&&ag().includes(a))return{reserved:!1,release:()=>{}};c.add(a);let e=!1;return{reserved:!0,release:()=>{e||(e=!0,c.delete(a),d?.cancelClose())}}}function ad(){return globalThis.__ompStartingSessionCwds||(globalThis.__ompStartingSessionCwds=new Map),globalThis.__ompStartingSessionCwds}function ae(a){return aa().get(a)}function af(){let a=[];for(let b of aa().values()){if(!b.isAlive())continue;let c=b.inner.sessionManager,d=c.getHeader(),e=c.getEntries(),f=e.filter(a=>"message"===a.type),g=f.find(a=>"user"===a.message.role),h=c.getSessionFile()??b.sessionFile,i=!!(h&&(0,w.existsSync)(h));if(!i&&(!b.isRunning()||!g))continue;let j=d?.timestamp??e[0]?.timestamp??new Date().toISOString(),k=new Date(j).getTime(),l=Number.isNaN(k)?Date.now():k;for(let a of f){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(l=Math.max(l,b))}a.push({path:h??"",id:d?.id??b.sessionId,cwd:d?.cwd??b.cwd,name:c.getSessionName(),created:j,modified:new Date(l).toISOString(),messageCount:f.length,firstMessage:g&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content,c="string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ");return(0,z.we)(c)}(g)||"(no messages)",transient:!i})}return a}let au={sessions:()=>aa().values(),isStarting:a=>ad().has(a)};function ag(){let a=new Set;for(let[b,c]of aa())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function ah(){let a=ag();(0,K.p8)(a),(0,E.Uc)(au)}async function ai(a,b,c,d={}){let{toolNames:g,initialModel:h,thinkingLevel:i,accountOauthPosition:j}=d,k=aa(),l=(globalThis.__ompStartLocks||(globalThis.__ompStartLocks=new Map),globalThis.__ompStartLocks);if(ab().has(a))throw Error("Session is closing");let n=k.get(a);if(n?.isAlive())return{session:n,realSessionId:a};let o=l.get(a);if(o)return o;let p=(async()=>{let d,l;await (0,f.initTheme)(!1);let n=(0,f.getAgentDir)(),o=b?await f.SessionManager.open(b,void 0):(()=>{if(!c)throw Error("cwd is required for a new session");return f.SessionManager.create(c,void 0)})(),p=o.getCwd(),s=(d=ad(),l=(0,D.LV)(p),d.set(l,(d.get(l)??0)+1),()=>{let a=(d.get(l)??1)-1;a>0?d.set(l,a):d.delete(l)});try{let b,c=await (0,H.getOmpRuntime)(),d=await (0,H.getSettingsForCwd)(p);void 0!==g&&(b=0===g.length?[]:void 0);let[l,s]=await Promise.all([(0,f.discoverSessionExtensionPaths)({},p,d),(0,m.discoverCustomToolPaths)([],p)]),t=(0,D.qm)(p,n,{extensionPaths:l,customToolPaths:s}),u=await (0,F.D)(p),{modelRegistry:v}=c;await (0,H.recoverMissingModelRefs)(v,[...(0,G.Ex)(d),...h?[h]:[]]);let w=await (0,B.p)(v,e.cfgEnabledModels.get(d),d),x=(0,G.Ff)(d),y=h?void 0:x?.thinkingLevel,z=i??y,A=o.buildSessionContext().messages.length>0?{scopedModels:[...w.scopedModels],model:void 0,thinkingLevel:void 0}:(0,B.I)(w,{...h?{requestedModel:h}:{},...x?{defaultModel:x}:{},...z?{thinkingLevel:z}:{}}),I={cwd:p,agentDir:n,settings:d,sessionManager:o,modelRegistry:v,hasUI:!0,...A.model?{model:A.model}:{},...A.thinkingLevel?{thinkingLevel:A.thinkingLevel}:{},...A.scopedModels.length>0?{scopedModels:A.scopedModels}:{},...void 0!==b?{toolNames:b,restrictToolNames:!0}:{},...t??{}};(0,f.applyResolvedSystemPromptInputs)(I,u.systemPrompt,u.appendPrompt);let{session:J,eventBus:K,subagentEventBus:L,setToolUIContext:N}=await (0,f.createAgentSession)(I);g&&g.length>0&&await J.setActiveToolsByName(X(J,g));let O=new at(J,K);if(O.projectCodeLoaded=void 0===t,O.bindToolUiContext(N),void 0!==j){let a=J.model?.provider;if(!a)throw O.destroy(),Error("이 세션의 provider를 알 수 없어 OAuth 계정을 지정하지 못했습니다.");let b=await T(J,a,j);if(!b.ok)throw O.destroy(),Error(b.reason)}g?.length===0&&O.setForceEmptySystemPrompt(!0);let P=J.sessionId,Q=ab();if(Q.has(a)||Q.has(P))throw O.destroy(),Error("Session is closing");if(O.projectCodeLoaded&&(0,E.rt)(p))throw O.destroy(),Error("Project trust was revoked while this session was starting. Please try again.");O.start();let R=J.sessionFile;R&&(0,C.O8)(P,R);let S=R?(0,M.Be)(R,(0,q.createPersistedSubagentReviverFactory)({session:J,authStorage:c.authStorage,modelRegistry:v,settings:d,enableLsp:void 0===b,eventBus:K,subagentEventBus:L}),()=>Math.trunc(Number(r.cfgTaskAgentIdleTtlMs.get(c.settings))||0)):void 0;return O.onDestroy(()=>{S?.(),k.delete(P)}),k.set(P,O),O.beginExtensionBinding({forceEmptySystemPrompt:g?.length===0}),{session:O,realSessionId:P}}finally{s()}})().finally(()=>{l.delete(a)});return l.set(a,p),p}d()}catch(a){d(a)}})},65667:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Be:()=>i});var e=c(76760),f=c.n(e),g=c(96175),h=a([g]);function i(a,b,c){let d=(globalThis.__cueloRootRevivers??=new Map,globalThis.__cueloRootRevivers);return d.set(a,b),g.AgentLifecycleManager.global().setPersistedSubagentReviverFactory(async a=>{if(!a.sessionFile)return;let b=function(a,b){let c=f().resolve(a);for(let a of b){let b=f().resolve(a);if(b.endsWith(".jsonl")&&c.startsWith(`${b.slice(0,-6)}${f().sep}`))return a}}(a.sessionFile,d.keys());return b?d.get(b)(a):void 0},c),()=>{d.get(a)===b&&d.delete(a)}}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.d(b,{LV:()=>k,TK:()=>p,Y1:()=>m,er:()=>n,qm:()=>r,wK:()=>o});var d=c(29021),e=c(33873),f=c(13229),g=c(8102);let h=[".omp/extensions",".omp/hooks",".omp/tools",".pi/extensions",".pi/hooks",".pi/tools",".claude/extensions",".claude/hooks",".claude/tools",".agents/extensions",".agents/hooks",".agents/tools"],i=[".mcp.json",".omp/.mcp.json",".omp/mcp.json",".claude/.mcp.json",".claude/mcp.json",".cursor/mcp.json"];function j(a){return(0,e.join)(a,"cuelo-trusted-projects.json")}function k(a){let b=(0,e.resolve)(a);try{return(0,d.realpathSync)(b)}catch{return b}}function l(a){try{(0,f.adoptLegacyStateFile)(j(a),"omp-web-trusted-projects.json");let b=JSON.parse((0,d.readFileSync)(j(a),"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))return{};return Object.fromEntries(Object.entries(b).filter(a=>"boolean"==typeof a[1]))}catch{return{}}}function m(a,b){return a&&function(a){if(!a)return!1;for(let b of h)if((0,d.existsSync)((0,e.join)(a,b)))return!0;for(let b of i)if((0,d.existsSync)((0,e.join)(a,b)))return!0;return!1}(a)?{requiresTrust:!0,trusted:!0===l(b)[k(a)]}:{requiresTrust:!1,trusted:!0}}function n(a,b){let c=m(a,b);return c.requiresTrust?(o(a,b,!0),{requiresTrust:!0,trusted:!0}):c}function o(a,b,c){let e=l(b);e[k(a)]=c,(0,d.mkdirSync)(b,{recursive:!0}),(0,g.$)(j(b),`${JSON.stringify(e,null,2)}
10
10
  `)}function p(a){return l(a)}function q(a,b){let c=(0,e.relative)((0,e.resolve)(b),(0,e.resolve)(a));return""===c||!(0,e.isAbsolute)(c)&&".."!==c&&!c.startsWith(`..${e.sep}`)&&!c.startsWith("../")}function r(a,b,c){let d=m(a,b);if(d.requiresTrust&&!d.trusted)return{preloadedExtensionPaths:c.extensionPaths.filter(b=>!q(b,a)),preloadedCustomToolPaths:c.customToolPaths.filter(b=>b.source?.level!=="project"&&!q(b.path,a)),enableMCP:!1}}},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!function(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}(a.data);return null!==b&&b<=0xa00000}(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}}};