cuelo 0.10.13 → 0.10.15

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 (372) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -7
  3. package/.next/build-manifest.json +3 -3
  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 -12
  8. package/.next/server/app/_global-error/page.js +2 -2
  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/attachment-settings/route.js +1 -1
  35. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  36. package/.next/server/app/api/attachments/draft/route.js +1 -1
  37. package/.next/server/app/api/attachments/route.js +3 -3
  38. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  39. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  40. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  41. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/providers/route.js +1 -1
  43. package/.next/server/app/api/cwd/browse/route.js +1 -1
  44. package/.next/server/app/api/cwd/validate/route.js +1 -1
  45. package/.next/server/app/api/default-cwd/route.js +1 -1
  46. package/.next/server/app/api/display-settings/route.js +1 -1
  47. package/.next/server/app/api/document-text/route.js +2 -2
  48. package/.next/server/app/api/experiments/route.js +1 -1
  49. package/.next/server/app/api/file-index/route.js +1 -1
  50. package/.next/server/app/api/files/[...path]/route.js +1 -1
  51. package/.next/server/app/api/git/diff/route.js +2 -2
  52. package/.next/server/app/api/git/status/route.js +1 -1
  53. package/.next/server/app/api/github/projects/route.js +1 -1
  54. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  55. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  56. package/.next/server/app/api/gpt6/token/route.js +1 -1
  57. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  58. package/.next/server/app/api/home/route.js +1 -1
  59. package/.next/server/app/api/live/call/[callId]/route.js +13 -1
  60. package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
  61. package/.next/server/app/api/live/character-voice/route.js +1 -1
  62. package/.next/server/app/api/live/character-voice/route.js.nft.json +1 -1
  63. package/.next/server/app/api/live/events/route.js +14 -2
  64. package/.next/server/app/api/live/events/route.js.nft.json +1 -1
  65. package/.next/server/app/api/live/interpret/route.js +13 -0
  66. package/.next/server/app/api/live/interpret/route.js.nft.json +1 -0
  67. package/.next/server/app/api/live/interpret/route_client-reference-manifest.js +1 -0
  68. package/.next/server/app/api/live/offer/route.js +1 -1
  69. package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
  70. package/.next/server/app/api/live/voices/route.js +1 -1
  71. package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/route.js +2 -2
  73. package/.next/server/app/api/model-roles/route.js +1 -1
  74. package/.next/server/app/api/models/route.js +1 -1
  75. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  76. package/.next/server/app/api/models-config/discover/route.js +1 -1
  77. package/.next/server/app/api/models-config/route.js +3 -3
  78. package/.next/server/app/api/models-config/test/route.js +1 -1
  79. package/.next/server/app/api/office-avatars/[id]/route.js +1 -1
  80. package/.next/server/app/api/office-avatars/route.js +1 -1
  81. package/.next/server/app/api/plugins/route.js +1 -1
  82. package/.next/server/app/api/project-docs/route.js +1 -1
  83. package/.next/server/app/api/project-trust/route.js +1 -1
  84. package/.next/server/app/api/projects/route.js +2 -2
  85. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  86. package/.next/server/app/api/runs/route.js +1 -1
  87. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  88. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  89. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  90. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  91. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  92. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  93. package/.next/server/app/api/sessions/route.js +1 -1
  94. package/.next/server/app/api/sessions/search/route.js +1 -1
  95. package/.next/server/app/api/settings/route.js +1 -1
  96. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  97. package/.next/server/app/api/skills/check/route.js +1 -1
  98. package/.next/server/app/api/skills/install/route.js +2 -2
  99. package/.next/server/app/api/skills/route.js +1 -1
  100. package/.next/server/app/api/skills/search/route.js +1 -1
  101. package/.next/server/app/api/skills/update/route.js +1 -1
  102. package/.next/server/app/api/subagents/eta/route.js +1 -1
  103. package/.next/server/app/api/theme/route.js +1 -1
  104. package/.next/server/app/api/tool-image/route.js +1 -1
  105. package/.next/server/app/api/update-maintenance/route.js +3 -3
  106. package/.next/server/app/api/updates/route.js +1 -1
  107. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  108. package/.next/server/app/api/web-access/route.js +1 -1
  109. package/.next/server/app/api/web6/consults/route.js +1 -1
  110. package/.next/server/app/api/worktrees/route.js +1 -1
  111. package/.next/server/app/favicon.ico/route.js +1 -1
  112. package/.next/server/app/index.html +1 -1
  113. package/.next/server/app/index.rsc +6 -6
  114. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  115. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  116. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  118. package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  119. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  120. package/.next/server/app/office/page.js +2 -2
  121. package/.next/server/app/office/page.js.nft.json +1 -1
  122. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/office-preview/page.js +2 -2
  124. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  125. package/.next/server/app/office-preview.html +1 -1
  126. package/.next/server/app/office-preview.rsc +3 -3
  127. package/.next/server/app/office-preview.segments/_full.segment.rsc +3 -3
  128. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  129. package/.next/server/app/office-preview.segments/_index.segment.rsc +3 -3
  130. package/.next/server/app/office-preview.segments/_tree.segment.rsc +2 -2
  131. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  132. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  133. package/.next/server/app/office.html +1 -1
  134. package/.next/server/app/office.rsc +6 -6
  135. package/.next/server/app/office.segments/_full.segment.rsc +6 -6
  136. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  137. package/.next/server/app/office.segments/_index.segment.rsc +3 -3
  138. package/.next/server/app/office.segments/_tree.segment.rsc +3 -3
  139. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +4 -4
  140. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  141. package/.next/server/app/page.js +2 -2
  142. package/.next/server/app/page.js.nft.json +1 -1
  143. package/.next/server/app/page_client-reference-manifest.js +1 -1
  144. package/.next/server/app/recover/page.js +2 -2
  145. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  146. package/.next/server/app/recover.html +1 -1
  147. package/.next/server/app/recover.rsc +3 -3
  148. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  149. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  150. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  151. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  152. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  153. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  154. package/.next/server/app-paths-manifest.json +6 -7
  155. package/.next/server/chunks/205.js +3 -3
  156. package/.next/server/chunks/3379.js +1 -1
  157. package/.next/server/chunks/{5431.js → 3793.js} +2 -2
  158. package/.next/server/chunks/5489.js +12 -12
  159. package/.next/server/chunks/7362.js +1 -1
  160. package/.next/server/chunks/7467.js +3 -0
  161. package/.next/server/chunks/9108.js +1 -1
  162. package/.next/server/chunks/9280.js +3 -3
  163. package/.next/server/functions-config-manifest.json +0 -2
  164. package/.next/server/middleware-build-manifest.js +1 -1
  165. package/.next/server/pages/404.html +1 -1
  166. package/.next/server/pages/500.html +1 -1
  167. package/.next/server/server-reference-manifest.json +1 -1
  168. package/.next/static/ZDnE_0POahsY2h0bWcu9f/_buildManifest.js +1 -0
  169. package/.next/static/chunks/6110-0dce7f18ec095faa.js +1 -0
  170. package/.next/static/chunks/6379-7da431a165ac5d41.js +7 -0
  171. package/.next/static/chunks/9575-222df47a7f11cb57.js +24 -0
  172. package/.next/static/chunks/app/_global-error/page-95aaaafc49522a6b.js +1 -0
  173. package/.next/static/chunks/app/api/agent/[id]/account/route-95aaaafc49522a6b.js +1 -0
  174. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-95aaaafc49522a6b.js +1 -0
  175. package/.next/static/chunks/app/api/agent/[id]/events/route-95aaaafc49522a6b.js +1 -0
  176. package/.next/static/chunks/app/api/agent/[id]/route-95aaaafc49522a6b.js +1 -0
  177. package/.next/static/chunks/app/api/agent/new/route-95aaaafc49522a6b.js +1 -0
  178. package/.next/static/chunks/app/api/agent/running/route-95aaaafc49522a6b.js +1 -0
  179. package/.next/static/chunks/app/api/attachment-settings/route-95aaaafc49522a6b.js +1 -0
  180. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-95aaaafc49522a6b.js +1 -0
  181. package/.next/static/chunks/app/api/attachments/draft/route-95aaaafc49522a6b.js +1 -0
  182. package/.next/static/chunks/app/api/attachments/route-95aaaafc49522a6b.js +1 -0
  183. package/.next/static/chunks/app/api/auth/all-providers/route-95aaaafc49522a6b.js +1 -0
  184. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-95aaaafc49522a6b.js +1 -0
  185. package/.next/static/chunks/app/api/auth/login/[provider]/route-95aaaafc49522a6b.js +1 -0
  186. package/.next/static/chunks/app/api/auth/logout/[provider]/route-95aaaafc49522a6b.js +1 -0
  187. package/.next/static/chunks/app/api/auth/providers/route-95aaaafc49522a6b.js +1 -0
  188. package/.next/static/chunks/app/api/cwd/browse/route-95aaaafc49522a6b.js +1 -0
  189. package/.next/static/chunks/app/api/cwd/validate/route-95aaaafc49522a6b.js +1 -0
  190. package/.next/static/chunks/app/api/default-cwd/route-95aaaafc49522a6b.js +1 -0
  191. package/.next/static/chunks/app/api/display-settings/route-95aaaafc49522a6b.js +1 -0
  192. package/.next/static/chunks/app/api/document-text/route-95aaaafc49522a6b.js +1 -0
  193. package/.next/static/chunks/app/api/experiments/route-95aaaafc49522a6b.js +1 -0
  194. package/.next/static/chunks/app/api/file-index/route-95aaaafc49522a6b.js +1 -0
  195. package/.next/static/chunks/app/api/files/[...path]/route-95aaaafc49522a6b.js +1 -0
  196. package/.next/static/chunks/app/api/git/diff/route-95aaaafc49522a6b.js +1 -0
  197. package/.next/static/chunks/app/api/git/status/route-95aaaafc49522a6b.js +1 -0
  198. package/.next/static/chunks/app/api/github/projects/route-95aaaafc49522a6b.js +1 -0
  199. package/.next/static/chunks/app/api/gpt6/handles/route-95aaaafc49522a6b.js +1 -0
  200. package/.next/static/chunks/app/api/gpt6/reply/route-95aaaafc49522a6b.js +1 -0
  201. package/.next/static/chunks/app/api/gpt6/token/route-95aaaafc49522a6b.js +1 -0
  202. package/.next/static/chunks/app/api/gpt6/web6-session/route-95aaaafc49522a6b.js +1 -0
  203. package/.next/static/chunks/app/api/home/route-95aaaafc49522a6b.js +1 -0
  204. package/.next/static/chunks/app/api/live/call/[callId]/route-95aaaafc49522a6b.js +1 -0
  205. package/.next/static/chunks/app/api/live/character-voice/route-95aaaafc49522a6b.js +1 -0
  206. package/.next/static/chunks/app/api/live/events/route-95aaaafc49522a6b.js +1 -0
  207. package/.next/static/chunks/app/api/live/interpret/route-95aaaafc49522a6b.js +1 -0
  208. package/.next/static/chunks/app/api/live/offer/route-95aaaafc49522a6b.js +1 -0
  209. package/.next/static/chunks/app/api/live/voices/route-95aaaafc49522a6b.js +1 -0
  210. package/.next/static/chunks/app/api/mcp/route-95aaaafc49522a6b.js +1 -0
  211. package/.next/static/chunks/app/api/model-roles/route-95aaaafc49522a6b.js +1 -0
  212. package/.next/static/chunks/app/api/models/route-95aaaafc49522a6b.js +1 -0
  213. package/.next/static/chunks/app/api/models-config/catalog/route-95aaaafc49522a6b.js +1 -0
  214. package/.next/static/chunks/app/api/models-config/discover/route-95aaaafc49522a6b.js +1 -0
  215. package/.next/static/chunks/app/api/models-config/route-95aaaafc49522a6b.js +1 -0
  216. package/.next/static/chunks/app/api/models-config/test/route-95aaaafc49522a6b.js +1 -0
  217. package/.next/static/chunks/app/api/office-avatars/[id]/route-95aaaafc49522a6b.js +1 -0
  218. package/.next/static/chunks/app/api/office-avatars/route-95aaaafc49522a6b.js +1 -0
  219. package/.next/static/chunks/app/api/plugins/route-95aaaafc49522a6b.js +1 -0
  220. package/.next/static/chunks/app/api/project-docs/route-95aaaafc49522a6b.js +1 -0
  221. package/.next/static/chunks/app/api/project-trust/route-95aaaafc49522a6b.js +1 -0
  222. package/.next/static/chunks/app/api/projects/route-95aaaafc49522a6b.js +1 -0
  223. package/.next/static/chunks/app/api/runs/[runId]/route-95aaaafc49522a6b.js +1 -0
  224. package/.next/static/chunks/app/api/runs/route-95aaaafc49522a6b.js +1 -0
  225. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-95aaaafc49522a6b.js +1 -0
  226. package/.next/static/chunks/app/api/sessions/[id]/context/route-95aaaafc49522a6b.js +1 -0
  227. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-95aaaafc49522a6b.js +1 -0
  228. package/.next/static/chunks/app/api/sessions/[id]/export/route-95aaaafc49522a6b.js +1 -0
  229. package/.next/static/chunks/app/api/sessions/[id]/route-95aaaafc49522a6b.js +1 -0
  230. package/.next/static/chunks/app/api/sessions/[id]/state/route-95aaaafc49522a6b.js +1 -0
  231. package/.next/static/chunks/app/api/sessions/route-95aaaafc49522a6b.js +1 -0
  232. package/.next/static/chunks/app/api/sessions/search/route-95aaaafc49522a6b.js +1 -0
  233. package/.next/static/chunks/app/api/settings/route-95aaaafc49522a6b.js +1 -0
  234. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-95aaaafc49522a6b.js +1 -0
  235. package/.next/static/chunks/app/api/skills/check/route-95aaaafc49522a6b.js +1 -0
  236. package/.next/static/chunks/app/api/skills/install/route-95aaaafc49522a6b.js +1 -0
  237. package/.next/static/chunks/app/api/skills/route-95aaaafc49522a6b.js +1 -0
  238. package/.next/static/chunks/app/api/skills/search/route-95aaaafc49522a6b.js +1 -0
  239. package/.next/static/chunks/app/api/skills/update/route-95aaaafc49522a6b.js +1 -0
  240. package/.next/static/chunks/app/api/subagents/eta/route-95aaaafc49522a6b.js +1 -0
  241. package/.next/static/chunks/app/api/theme/route-95aaaafc49522a6b.js +1 -0
  242. package/.next/static/chunks/app/api/tool-image/route-95aaaafc49522a6b.js +1 -0
  243. package/.next/static/chunks/app/api/update-maintenance/route-95aaaafc49522a6b.js +1 -0
  244. package/.next/static/chunks/app/api/updates/route-95aaaafc49522a6b.js +1 -0
  245. package/.next/static/chunks/app/api/web-access/recovery/route-95aaaafc49522a6b.js +1 -0
  246. package/.next/static/chunks/app/api/web-access/route-95aaaafc49522a6b.js +1 -0
  247. package/.next/static/chunks/app/api/web6/consults/route-95aaaafc49522a6b.js +1 -0
  248. package/.next/static/chunks/app/api/worktrees/route-95aaaafc49522a6b.js +1 -0
  249. package/.next/static/chunks/app/{layout-4c592bc979a40fac.js → layout-dfbf07d80f807ad7.js} +1 -1
  250. package/.next/static/chunks/app/manifest.webmanifest/route-95aaaafc49522a6b.js +1 -0
  251. package/.next/static/chunks/app/office/page-84340f94c2d87fe6.js +1 -0
  252. package/.next/static/chunks/app/page-293acef3b072c778.js +1 -0
  253. package/.next/static/chunks/next/dist/client/components/builtin/app-error-95aaaafc49522a6b.js +1 -0
  254. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-95aaaafc49522a6b.js +1 -0
  255. package/.next/static/chunks/next/dist/client/components/builtin/not-found-95aaaafc49522a6b.js +1 -0
  256. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-95aaaafc49522a6b.js +1 -0
  257. package/.next/static/chunks/{webpack-68986b211ad38cf1.js → webpack-859f6c90bf471cc4.js} +1 -1
  258. package/.next/static/css/{078ee14f375802c0.css → 792a9d55c2fd2c0c.css} +1 -1
  259. package/.next/static/css/949fdc99cee51026.css +1 -0
  260. package/.next/trace +108 -108
  261. package/.next/trace-build +1 -1
  262. package/.next/types/app/api/{lounge/events → live/interpret}/route.ts +3 -3
  263. package/.next/types/routes.d.ts +2 -3
  264. package/.next/types/validator.ts +9 -18
  265. package/README.md +7 -9
  266. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  267. package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +37 -15
  268. package/Tools/OMP_Global_Config/agent/extensions/command-guard/interop-hint.ts +122 -0
  269. package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +11 -5
  270. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +347 -0
  271. package/package.json +1 -1
  272. package/.next/server/app/api/lounge/events/route.js +0 -4
  273. package/.next/server/app/api/lounge/events/route.js.nft.json +0 -1
  274. package/.next/server/app/api/lounge/events/route_client-reference-manifest.js +0 -1
  275. package/.next/server/app/api/lounge/route.js +0 -1
  276. package/.next/server/app/api/lounge/route.js.nft.json +0 -1
  277. package/.next/server/app/api/lounge/route_client-reference-manifest.js +0 -1
  278. package/.next/server/chunks/424.js +0 -3
  279. package/.next/server/chunks/4649.js +0 -1
  280. package/.next/server/chunks/7310.js +0 -5
  281. package/.next/static/B90WNxaFZ8Tg4XO_DiNPQ/_buildManifest.js +0 -1
  282. package/.next/static/chunks/6110-1db5217d11d7c23b.js +0 -1
  283. package/.next/static/chunks/8579-73b103d96227d1b8.js +0 -7
  284. package/.next/static/chunks/9575-f75f250a07112d4d.js +0 -24
  285. package/.next/static/chunks/app/_global-error/page-2fe6bfb5aa68a2a2.js +0 -1
  286. package/.next/static/chunks/app/api/agent/[id]/account/route-2fe6bfb5aa68a2a2.js +0 -1
  287. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-2fe6bfb5aa68a2a2.js +0 -1
  288. package/.next/static/chunks/app/api/agent/[id]/events/route-2fe6bfb5aa68a2a2.js +0 -1
  289. package/.next/static/chunks/app/api/agent/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
  290. package/.next/static/chunks/app/api/agent/new/route-2fe6bfb5aa68a2a2.js +0 -1
  291. package/.next/static/chunks/app/api/agent/running/route-2fe6bfb5aa68a2a2.js +0 -1
  292. package/.next/static/chunks/app/api/attachment-settings/route-2fe6bfb5aa68a2a2.js +0 -1
  293. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-2fe6bfb5aa68a2a2.js +0 -1
  294. package/.next/static/chunks/app/api/attachments/draft/route-2fe6bfb5aa68a2a2.js +0 -1
  295. package/.next/static/chunks/app/api/attachments/route-2fe6bfb5aa68a2a2.js +0 -1
  296. package/.next/static/chunks/app/api/auth/all-providers/route-2fe6bfb5aa68a2a2.js +0 -1
  297. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
  298. package/.next/static/chunks/app/api/auth/login/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
  299. package/.next/static/chunks/app/api/auth/logout/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
  300. package/.next/static/chunks/app/api/auth/providers/route-2fe6bfb5aa68a2a2.js +0 -1
  301. package/.next/static/chunks/app/api/cwd/browse/route-2fe6bfb5aa68a2a2.js +0 -1
  302. package/.next/static/chunks/app/api/cwd/validate/route-2fe6bfb5aa68a2a2.js +0 -1
  303. package/.next/static/chunks/app/api/default-cwd/route-2fe6bfb5aa68a2a2.js +0 -1
  304. package/.next/static/chunks/app/api/display-settings/route-2fe6bfb5aa68a2a2.js +0 -1
  305. package/.next/static/chunks/app/api/document-text/route-2fe6bfb5aa68a2a2.js +0 -1
  306. package/.next/static/chunks/app/api/experiments/route-2fe6bfb5aa68a2a2.js +0 -1
  307. package/.next/static/chunks/app/api/file-index/route-2fe6bfb5aa68a2a2.js +0 -1
  308. package/.next/static/chunks/app/api/files/[...path]/route-2fe6bfb5aa68a2a2.js +0 -1
  309. package/.next/static/chunks/app/api/git/diff/route-2fe6bfb5aa68a2a2.js +0 -1
  310. package/.next/static/chunks/app/api/git/status/route-2fe6bfb5aa68a2a2.js +0 -1
  311. package/.next/static/chunks/app/api/github/projects/route-2fe6bfb5aa68a2a2.js +0 -1
  312. package/.next/static/chunks/app/api/gpt6/handles/route-2fe6bfb5aa68a2a2.js +0 -1
  313. package/.next/static/chunks/app/api/gpt6/reply/route-2fe6bfb5aa68a2a2.js +0 -1
  314. package/.next/static/chunks/app/api/gpt6/token/route-2fe6bfb5aa68a2a2.js +0 -1
  315. package/.next/static/chunks/app/api/gpt6/web6-session/route-2fe6bfb5aa68a2a2.js +0 -1
  316. package/.next/static/chunks/app/api/home/route-2fe6bfb5aa68a2a2.js +0 -1
  317. package/.next/static/chunks/app/api/live/call/[callId]/route-2fe6bfb5aa68a2a2.js +0 -1
  318. package/.next/static/chunks/app/api/live/character-voice/route-2fe6bfb5aa68a2a2.js +0 -1
  319. package/.next/static/chunks/app/api/live/events/route-2fe6bfb5aa68a2a2.js +0 -1
  320. package/.next/static/chunks/app/api/live/offer/route-2fe6bfb5aa68a2a2.js +0 -1
  321. package/.next/static/chunks/app/api/live/voices/route-2fe6bfb5aa68a2a2.js +0 -1
  322. package/.next/static/chunks/app/api/lounge/events/route-2fe6bfb5aa68a2a2.js +0 -1
  323. package/.next/static/chunks/app/api/lounge/route-2fe6bfb5aa68a2a2.js +0 -1
  324. package/.next/static/chunks/app/api/mcp/route-2fe6bfb5aa68a2a2.js +0 -1
  325. package/.next/static/chunks/app/api/model-roles/route-2fe6bfb5aa68a2a2.js +0 -1
  326. package/.next/static/chunks/app/api/models/route-2fe6bfb5aa68a2a2.js +0 -1
  327. package/.next/static/chunks/app/api/models-config/catalog/route-2fe6bfb5aa68a2a2.js +0 -1
  328. package/.next/static/chunks/app/api/models-config/discover/route-2fe6bfb5aa68a2a2.js +0 -1
  329. package/.next/static/chunks/app/api/models-config/route-2fe6bfb5aa68a2a2.js +0 -1
  330. package/.next/static/chunks/app/api/models-config/test/route-2fe6bfb5aa68a2a2.js +0 -1
  331. package/.next/static/chunks/app/api/office-avatars/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
  332. package/.next/static/chunks/app/api/office-avatars/route-2fe6bfb5aa68a2a2.js +0 -1
  333. package/.next/static/chunks/app/api/plugins/route-2fe6bfb5aa68a2a2.js +0 -1
  334. package/.next/static/chunks/app/api/project-docs/route-2fe6bfb5aa68a2a2.js +0 -1
  335. package/.next/static/chunks/app/api/project-trust/route-2fe6bfb5aa68a2a2.js +0 -1
  336. package/.next/static/chunks/app/api/projects/route-2fe6bfb5aa68a2a2.js +0 -1
  337. package/.next/static/chunks/app/api/runs/[runId]/route-2fe6bfb5aa68a2a2.js +0 -1
  338. package/.next/static/chunks/app/api/runs/route-2fe6bfb5aa68a2a2.js +0 -1
  339. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-2fe6bfb5aa68a2a2.js +0 -1
  340. package/.next/static/chunks/app/api/sessions/[id]/context/route-2fe6bfb5aa68a2a2.js +0 -1
  341. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-2fe6bfb5aa68a2a2.js +0 -1
  342. package/.next/static/chunks/app/api/sessions/[id]/export/route-2fe6bfb5aa68a2a2.js +0 -1
  343. package/.next/static/chunks/app/api/sessions/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
  344. package/.next/static/chunks/app/api/sessions/[id]/state/route-2fe6bfb5aa68a2a2.js +0 -1
  345. package/.next/static/chunks/app/api/sessions/route-2fe6bfb5aa68a2a2.js +0 -1
  346. package/.next/static/chunks/app/api/sessions/search/route-2fe6bfb5aa68a2a2.js +0 -1
  347. package/.next/static/chunks/app/api/settings/route-2fe6bfb5aa68a2a2.js +0 -1
  348. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-2fe6bfb5aa68a2a2.js +0 -1
  349. package/.next/static/chunks/app/api/skills/check/route-2fe6bfb5aa68a2a2.js +0 -1
  350. package/.next/static/chunks/app/api/skills/install/route-2fe6bfb5aa68a2a2.js +0 -1
  351. package/.next/static/chunks/app/api/skills/route-2fe6bfb5aa68a2a2.js +0 -1
  352. package/.next/static/chunks/app/api/skills/search/route-2fe6bfb5aa68a2a2.js +0 -1
  353. package/.next/static/chunks/app/api/skills/update/route-2fe6bfb5aa68a2a2.js +0 -1
  354. package/.next/static/chunks/app/api/subagents/eta/route-2fe6bfb5aa68a2a2.js +0 -1
  355. package/.next/static/chunks/app/api/theme/route-2fe6bfb5aa68a2a2.js +0 -1
  356. package/.next/static/chunks/app/api/tool-image/route-2fe6bfb5aa68a2a2.js +0 -1
  357. package/.next/static/chunks/app/api/update-maintenance/route-2fe6bfb5aa68a2a2.js +0 -1
  358. package/.next/static/chunks/app/api/updates/route-2fe6bfb5aa68a2a2.js +0 -1
  359. package/.next/static/chunks/app/api/web-access/recovery/route-2fe6bfb5aa68a2a2.js +0 -1
  360. package/.next/static/chunks/app/api/web-access/route-2fe6bfb5aa68a2a2.js +0 -1
  361. package/.next/static/chunks/app/api/web6/consults/route-2fe6bfb5aa68a2a2.js +0 -1
  362. package/.next/static/chunks/app/api/worktrees/route-2fe6bfb5aa68a2a2.js +0 -1
  363. package/.next/static/chunks/app/manifest.webmanifest/route-2fe6bfb5aa68a2a2.js +0 -1
  364. package/.next/static/chunks/app/office/page-8dc604f9b5e6f220.js +0 -1
  365. package/.next/static/chunks/app/page-952b1ef4df5ac896.js +0 -1
  366. package/.next/static/chunks/next/dist/client/components/builtin/app-error-2fe6bfb5aa68a2a2.js +0 -1
  367. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2fe6bfb5aa68a2a2.js +0 -1
  368. package/.next/static/chunks/next/dist/client/components/builtin/not-found-2fe6bfb5aa68a2a2.js +0 -1
  369. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2fe6bfb5aa68a2a2.js +0 -1
  370. package/.next/static/css/27857d8746871d52.css +0 -1
  371. package/.next/types/app/api/lounge/route.ts +0 -351
  372. /package/.next/static/{B90WNxaFZ8Tg4XO_DiNPQ → ZDnE_0POahsY2h0bWcu9f}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":118293863,"timestamp":714059,"id":14,"parentId":1,"tags":{},"startTime":1791939358075,"traceId":"4479964e48aa09a4"},{"name":"run-typescript","duration":22163686,"timestamp":119405466,"id":11124,"parentId":1,"tags":{},"startTime":1791939476767,"traceId":"4479964e48aa09a4"},{"name":"static-check","duration":4360797,"timestamp":141660966,"id":11127,"parentId":1,"tags":{},"startTime":1791939499022,"traceId":"4479964e48aa09a4"},{"name":"static-generation","duration":12993696,"timestamp":146124342,"id":11303,"parentId":1,"tags":{},"startTime":1791939503486,"traceId":"4479964e48aa09a4"},{"name":"collect-build-traces","duration":22368011,"timestamp":146093136,"id":11300,"parentId":1,"tags":{},"startTime":1791939503454,"traceId":"4479964e48aa09a4"},{"name":"telemetry-flush","duration":89,"timestamp":168466111,"id":11312,"parentId":1,"tags":{},"startTime":1791939525827,"traceId":"4479964e48aa09a4"},{"name":"next-build","duration":167872935,"timestamp":593287,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791939357955,"traceId":"4479964e48aa09a4"}]
1
+ [{"name":"run-webpack","duration":99280607,"timestamp":676909,"id":14,"parentId":1,"tags":{},"startTime":1791992276436,"traceId":"b04c8895f5bd07bb"},{"name":"run-typescript","duration":17699234,"timestamp":100322529,"id":11105,"parentId":1,"tags":{},"startTime":1791992376083,"traceId":"b04c8895f5bd07bb"},{"name":"static-check","duration":3656023,"timestamp":118114181,"id":11108,"parentId":1,"tags":{},"startTime":1791992393876,"traceId":"b04c8895f5bd07bb"},{"name":"static-generation","duration":10196854,"timestamp":121855723,"id":11282,"parentId":1,"tags":{},"startTime":1791992397617,"traceId":"b04c8895f5bd07bb"},{"name":"collect-build-traces","duration":17566089,"timestamp":121835221,"id":11279,"parentId":1,"tags":{},"startTime":1791992397597,"traceId":"b04c8895f5bd07bb"},{"name":"telemetry-flush","duration":74,"timestamp":139405208,"id":11291,"parentId":1,"tags":{},"startTime":1791992415167,"traceId":"b04c8895f5bd07bb"},{"name":"next-build","duration":138830797,"timestamp":574508,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791992276333,"traceId":"b04c8895f5bd07bb"}]
@@ -1,10 +1,10 @@
1
- // File: D:\a\CUELO\CUELO\app\api\lounge\events\route.ts
2
- import * as entry from '../../../../../../app/api/lounge/events/route.js'
1
+ // File: D:\a\CUELO\CUELO\app\api\live\interpret\route.ts
2
+ import * as entry from '../../../../../../app/api/live/interpret/route.js'
3
3
  import type { NextRequest } from 'next/server.js'
4
4
 
5
5
  import type { InstantConfigForTypeCheckInternal } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
6
 
7
- type TEntry = typeof import('../../../../../../app/api/lounge/events/route.js')
7
+ type TEntry = typeof import('../../../../../../app/api/live/interpret/route.js')
8
8
 
9
9
  type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
10
  ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/office" | "/office-preview" | "/recover"
5
- type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/character-voice" | "/api/live/events" | "/api/live/offer" | "/api/live/voices" | "/api/lounge" | "/api/lounge/events" | "/api/mcp" | "/api/model-roles" | "/api/models" | "/api/models-config" | "/api/models-config/catalog" | "/api/models-config/discover" | "/api/models-config/test" | "/api/office-avatars" | "/api/office-avatars/[id]" | "/api/plugins" | "/api/project-docs" | "/api/project-trust" | "/api/projects" | "/api/runs" | "/api/runs/[runId]" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/auto-name" | "/api/sessions/[id]/context" | "/api/sessions/[id]/entries/[entryId]/thinking" | "/api/sessions/[id]/export" | "/api/sessions/[id]/state" | "/api/sessions/search" | "/api/settings" | "/api/sidecars/[service]/[...path]" | "/api/skills" | "/api/skills/check" | "/api/skills/install" | "/api/skills/search" | "/api/skills/update" | "/api/subagents/eta" | "/api/theme" | "/api/tool-image" | "/api/update-maintenance" | "/api/updates" | "/api/web-access" | "/api/web-access/recovery" | "/api/web6/consults" | "/api/worktrees"
5
+ type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/character-voice" | "/api/live/events" | "/api/live/interpret" | "/api/live/offer" | "/api/live/voices" | "/api/mcp" | "/api/model-roles" | "/api/models" | "/api/models-config" | "/api/models-config/catalog" | "/api/models-config/discover" | "/api/models-config/test" | "/api/office-avatars" | "/api/office-avatars/[id]" | "/api/plugins" | "/api/project-docs" | "/api/project-trust" | "/api/projects" | "/api/runs" | "/api/runs/[runId]" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/auto-name" | "/api/sessions/[id]/context" | "/api/sessions/[id]/entries/[entryId]/thinking" | "/api/sessions/[id]/export" | "/api/sessions/[id]/state" | "/api/sessions/search" | "/api/settings" | "/api/sidecars/[service]/[...path]" | "/api/skills" | "/api/skills/check" | "/api/skills/install" | "/api/skills/search" | "/api/skills/update" | "/api/subagents/eta" | "/api/theme" | "/api/tool-image" | "/api/update-maintenance" | "/api/updates" | "/api/web-access" | "/api/web-access/recovery" | "/api/web6/consults" | "/api/worktrees"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -46,10 +46,9 @@ interface ParamMap {
46
46
  "/api/live/call/[callId]": { "callId": string; }
47
47
  "/api/live/character-voice": {}
48
48
  "/api/live/events": {}
49
+ "/api/live/interpret": {}
49
50
  "/api/live/offer": {}
50
51
  "/api/live/voices": {}
51
- "/api/lounge": {}
52
- "/api/lounge/events": {}
53
52
  "/api/mcp": {}
54
53
  "/api/model-roles": {}
55
54
  "/api/models": {}
@@ -389,37 +389,28 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
389
389
  type __Unused = __Check
390
390
  }
391
391
 
392
- // Validate ../../app/api/live/offer/route.ts
393
- {
394
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/offer">> = Specific
395
- const handler = {} as typeof import("../../app/api/live/offer/route.js")
396
- type __Check = __IsExpected<typeof handler>
397
- // @ts-ignore
398
- type __Unused = __Check
399
- }
400
-
401
- // Validate ../../app/api/live/voices/route.ts
392
+ // Validate ../../app/api/live/interpret/route.ts
402
393
  {
403
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/voices">> = Specific
404
- const handler = {} as typeof import("../../app/api/live/voices/route.js")
394
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/interpret">> = Specific
395
+ const handler = {} as typeof import("../../app/api/live/interpret/route.js")
405
396
  type __Check = __IsExpected<typeof handler>
406
397
  // @ts-ignore
407
398
  type __Unused = __Check
408
399
  }
409
400
 
410
- // Validate ../../app/api/lounge/events/route.ts
401
+ // Validate ../../app/api/live/offer/route.ts
411
402
  {
412
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/lounge/events">> = Specific
413
- const handler = {} as typeof import("../../app/api/lounge/events/route.js")
403
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/offer">> = Specific
404
+ const handler = {} as typeof import("../../app/api/live/offer/route.js")
414
405
  type __Check = __IsExpected<typeof handler>
415
406
  // @ts-ignore
416
407
  type __Unused = __Check
417
408
  }
418
409
 
419
- // Validate ../../app/api/lounge/route.ts
410
+ // Validate ../../app/api/live/voices/route.ts
420
411
  {
421
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/lounge">> = Specific
422
- const handler = {} as typeof import("../../app/api/lounge/route.js")
412
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/voices">> = Specific
413
+ const handler = {} as typeof import("../../app/api/live/voices/route.js")
423
414
  type __Check = __IsExpected<typeof handler>
424
415
  // @ts-ignore
425
416
  type __Unused = __Check
package/README.md CHANGED
@@ -105,15 +105,13 @@ Anthropic 구독 계정이 모두 주간 한도에 닿으면, 미리 둔 예비
105
105
  - ChatGPT 상담(SHION): 로컬 shim이 전용 ChatGPT 탭에서 받은 답을 현재 omp 세션에 투영하고, 상담 기록과 실패 기록이 대화창에 표시됩니다.
106
106
  - 실시간 음성: 브라우저 마이크로 Codex live 음성 세션을 엽니다. “끊어”, “알았어, 끊어봐”, “아니 통화 종료하라고”처럼 단독 종료 요청을 말하면 최종 전사를 받은 뒤 마이크와 통화를 종료합니다. 선택 기능인 캐릭터 음성은 **설정 → 통화 음성**에서 Cartesia API 키를 입력하고 음성 준비에 동의하면 현재 Main 캐릭터에 맞춰 적용됩니다. 통화 답변은 실제로 말한 캐릭터의 얼굴과 이름으로 표시되고, 캐릭터 음성 대신 기본 음성으로 말했으면 「기본 음성」이라고 함께 보입니다. 입력창에는 통화 시작·종료 버튼만 남으며, 좁은 화면에서는 모델 선택 등 다른 조작부와 겹치지 않게 줄바꿈합니다. 별도 음성 ID 입력은 필요하지 않으며, 키는 서버에만 보관합니다. 지원 플랜·크레딧 사용·전송 범위는 [캐릭터 통화 설정](./docs/live-voice.md)을 확인하세요.
107
107
 
108
- **단톡방**
109
-
110
- - 사이드바의 「단톡방」에서 멤버별 참여와 주간 사용량을 보고, 가운데 대화창에서 멘션·답장·반응을 주고받습니다. 방 전체와 멤버별 참여를 따로 켜고 끌 수 있습니다.
111
- - 작업 화면으로 돌아가도 선택한 세션·작성 중인 초안·진행 중인 작업은 유지됩니다. 단톡방 기록은 작업 대화와 별도로 보관하며, 멤버에게 작업 문맥이나 실행 도구를 전달하지 않습니다.
112
- - 단톡방의 계정 연결은 작업 세션의 계정을 바꾸지 않습니다. 연결한 계정을 사용할 수 없으면 다른 계정으로 넘어가지 않고 다시 선택하도록 안내합니다.
113
- - 단톡방에는 낮은 추론 강도(`low`)를 사용하며 작업 세션의 추론 설정은 바꾸지 않습니다. 시간당 호출은 최대 120회, 사용자 메시지 한 건에 대한 응답은 멤버끼리 이어 말하는 발언을 합쳐 최대 6회입니다. 실제 계정 한도 보호도 계속 적용합니다.
114
- - 사용자 메시지에 답한 뒤에도 멤버끼리 앞 사람 말을 받아 이어 갑니다. 답에서 부른 멤버가 먼저 받고, 부른 멤버가 없으면 가장 오래 말하지 않은 멤버가 받습니다. 답하지 못한 멤버가 있으면 건너뛰고 다음 멤버가 잇습니다.
115
- - 자동 수다는 직접 켜야 합니다. 켜 두면 조용할 때 멤버끼리 짧게 주고받습니다(속도에 따라 2·4·6회). 작업 중에는 자동 수다를 쉬고, 호출 상한과 사용량 보호를 적용합니다. 「중단」이나 방 끄기로 진행 중 응답을 멈출 수 있습니다.
116
- - 한국어로 대화하되 짧은 일본어 표현을 쓸 때는 이어지는 말에서 뜻을 보완하도록 안내합니다. 실제 표현은 참여 모델에 따라 달라집니다. SHION은 상담 전용으로 남습니다.
108
+ **통역**
109
+
110
+ - 사이드바의 「통역」을 고르면 작업 화면 위에 통역 화면이 열립니다. 한국어·영어·베트남어·일본어·태국어 가운데 내 언어와 상대 언어를 고르고 「통역 시작」을 누르면, 휴대폰을 두 사람 사이에 두고 각자 말하기만 하면 됩니다. 누가 말하든 상대 언어로 바로 소리 내어 옮깁니다. 버튼을 번갈아 누를 필요가 없습니다.
111
+ - 통역은 연결된 ChatGPT 계정의 Codex 라이브 음성 통화로 합니다. 통화에는 고른 두 언어로 만든 짧은 통역 지시만 들어가고, 작업 세션·하네스 규칙·대화 기록은 들어가지 않으며 작업을 위임하지도 않습니다. 목소리는 Codex 기본 음성입니다.
112
+ - 화면에는 오간 말이 말풍선 자막으로 쌓입니다. 큰 글씨가 통역, 작은 글씨가 들은 원문입니다. 글자(한글·가나·태국 문자·베트남어 성조 부호 등)로 누가 말했는지 가려 내 말은 오른쪽, 상대 말은 왼쪽에 둡니다. 영어와 베트남어처럼 같은 글자를 쓰는 짝에서 이름·숫자만 말해 가를 수 없으면 왼쪽에 둡니다.
113
+ - 통역 중에 언어를 바꾸면 새 언어 짝으로 다시 연결합니다. 「대화로」를 누르면 통화와 마이크를 끝냅니다. 마이크는 HTTPS 주소에서만 켜지며, 통역 기록은 화면이 열려 있는 동안만 보관하고 서버에 저장하지 않습니다. 직접 입력해 번역하는 칸과 말풍선 다시 듣기는 없습니다.
114
+ - 작업 화면으로 돌아가도 선택한 세션·작성 중인 초안·진행 중인 작업은 그대로입니다.
117
115
 
118
116
  **알림과 표현**
119
117
 
@@ -9,7 +9,7 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
9
9
  const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
10
10
  const EXPECTED = {
11
11
  name: 'cuelo',
12
- version: '0.10.13',
12
+ version: '0.10.15',
13
13
  distribution: 'cuelo',
14
14
  coreVersion: '18.10.4',
15
15
  };
@@ -1,5 +1,7 @@
1
1
  import { execFile } from "node:child_process";
2
- import { resolve } from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve } from "node:path";
3
5
 
4
6
  import { isToolCallEventType, type ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
5
7
  import { resolveToCwd } from "@oh-my-pi/pi-coding-agent/tools/path-utils";
@@ -15,6 +17,7 @@ import { resolvePreparedTaskInput } from "../lib/prepared-task";
15
17
  import { selectGitExecutor, type GitExecutor } from "../../tools/git-finalizer/wsl-git";
16
18
 
17
19
  import { matchBlockedCommand } from "./matcher";
20
+ import { interopHint, windowsOutputCommand } from "./interop-hint";
18
21
  import { matchPowerShellSyntax } from "./powershell-syntax";
19
22
  import {
20
23
  bindSpawnAliases,
@@ -45,6 +48,16 @@ import {
45
48
  type TreeSnapshot,
46
49
  } from "./task-guard";
47
50
 
51
+ /** WSL에서 Windows 실행 파일을 부를 수 있는지(binfmt interop 등록). Windows 출력 변환을 이때만 붙인다. */
52
+ const WSL_INTEROP = process.platform === "linux" && existsSync("/proc/sys/fs/binfmt_misc/WSLInterop");
53
+
54
+ /** eval이 자동으로 고르는 관리 Python 환경(코어 `getPythonEnvDir()` 기본값). WSL(Linux)에만 안내한다. */
55
+ function managedPythonPath(): string | undefined {
56
+ if (process.platform !== "linux") return undefined;
57
+ const python = join(homedir(), ".omp", "python-env", "bin", "python");
58
+ return existsSync(python) ? python : undefined;
59
+ }
60
+
48
61
  function normalizeRepositoryPath(value: string): string {
49
62
  return resolve(value).replace(/\\/g, "/").toLowerCase();
50
63
  }
@@ -941,22 +954,25 @@ export default function commandGuard(pi: ExtensionAPI): void {
941
954
  return false;
942
955
  },
943
956
  });
944
- if (targetDirectories.length === 0 && windowsGitTargets.length === 0) {
945
- if (preliminaryReason) return { block: true, reason: preliminaryReason };
946
- return;
957
+ let reason = preliminaryReason;
958
+ if (targetDirectories.length > 0 || windowsGitTargets.length > 0) {
959
+ const [isSessionRepository, usesWindowsGit] = await Promise.all([
960
+ targetDirectories.length > 0
961
+ ? repositoryMatcher(sessionCwd, targetDirectories)
962
+ : (_directory: string) => true,
963
+ windowsGitMatcher(windowsGitTargets),
964
+ ]);
965
+ reason = matchBlockedCommand(event.input.command, {
966
+ cwd,
967
+ isSessionRepository,
968
+ usesWindowsGit,
969
+ });
947
970
  }
948
- const [isSessionRepository, usesWindowsGit] = await Promise.all([
949
- targetDirectories.length > 0
950
- ? repositoryMatcher(sessionCwd, targetDirectories)
951
- : (_directory: string) => true,
952
- windowsGitMatcher(windowsGitTargets),
953
- ]);
954
- const reason = matchBlockedCommand(event.input.command, {
955
- cwd,
956
- isSessionRepository,
957
- usesWindowsGit,
958
- });
959
971
  if (reason) return { block: true, reason };
972
+ // 통과한 명령 중 Windows 실행 파일을 부르는 것은 출력이 UTF-8로 오도록 감싸 실행한다(interop-hint.ts).
973
+ const pty = (event.input as { pty?: unknown }).pty === true;
974
+ const command = windowsOutputCommand(event.input.command, { wsl: WSL_INTEROP, pty });
975
+ return command ? { input: { ...event.input, command } } : undefined;
960
976
  });
961
977
 
962
978
  // 실행된 task 호출(tool_result)과 실행 전에 끝난 호출(tool_execution_end)은 같은 항목 단위 정산을 탄다.
@@ -988,6 +1004,12 @@ export default function commandGuard(pi: ExtensionAPI): void {
988
1004
  return { content: [...event.content, { type: "text", text: lines.join("\n") }] };
989
1005
  }
990
1006
 
1007
+ if (event.toolName === "bash") {
1008
+ const command = typeof event.input.command === "string" ? event.input.command : "";
1009
+ const output = event.content.map((part) => (part.type === "text" ? part.text : "")).join("\n");
1010
+ const hint = interopHint(command, output, { managedPython: managedPythonPath() });
1011
+ return hint ? { content: [...event.content, { type: "text", text: hint }] } : undefined;
1012
+ }
991
1013
  if (event.isError) return;
992
1014
  const path = typeof event.input.path === "string" ? event.input.path.trim() : "";
993
1015
  // 18.3.0 write/read 결과의 proc:// details는 선언 타입에 없으므로 unknown으로 좁힌다.
@@ -0,0 +1,122 @@
1
+ /**
2
+ * WSL bash에서 Windows/Linux 차이로 생기는 실패를 다룬다.
3
+ *
4
+ * 근거(2026-10-14 세션 기록 집계, WSL 이관 10-07 이후):
5
+ * - Windows 실행 파일 출력의 CP949 한글이 U+FFFD로 깨진 호출 66건. pi-natives가 bash 출력을 UTF-8로
6
+ * 손실 해석하므로 결과 쪽에서는 되살릴 수 없다. 그래서 실행 전에 출력이 UTF-8이 되도록 명령을 감싼다
7
+ * ({@link windowsOutputCommand}). 감싸지 못한 명령이 깨지면 다시 실행할 방법을 안내한다.
8
+ * - 시스템 `python3`에 PyMuPDF·openpyxl·Pillow·ezdxf·python-docx가 없어 실패한 호출 28건.
9
+ * 관리 Python 환경(`~/.omp/python-env`, eval이 자동으로 고르는 환경)에는 설치돼 있다.
10
+ */
11
+
12
+ // 실행 파일 이름 끝의 `.exe`만 본다(`x.exe.log` 같은 인자는 아니다). `powershell`·`pwsh`도 낱말 하나일 때만(`powershell.md`는 아니다).
13
+ const WINDOWS_EXECUTABLE = /\.exe(?=["'\s;&|)<>]|$)|(?<=^|[\s;&|(/"'=])(?:powershell|pwsh)(?=["'\s;&|)<>]|$)/im;
14
+ const MOJIBAKE = /\uFFFD{2,}/;
15
+ const MISSING_PYTHON_MODULE = /ModuleNotFoundError: No module named '([\w.]+)'/;
16
+ // `python3`, `python3.12`, `/usr/bin/python3`, `"/usr/bin/python3"`처럼 경로·따옴표를 붙인 호출도 잡는다.
17
+ const PYTHON_COMMAND = /(?:^|[\s;&|(/"'])python3?(?:\.\d+)?(?=["'\s;&|)]|$)/m;
18
+
19
+ export interface InteropHintContext {
20
+ /** 관리 Python 환경의 python 실행 파일. 없으면 Python 안내를 내지 않는다. */
21
+ managedPython?: string;
22
+ }
23
+
24
+ // 출력 줄이 UTF-8로 읽히면 그대로 두고, 아니면 CP949로 읽어 UTF-8로 낸다. Windows의 UTF-8 출력
25
+ // (`git.exe`, `WSL_UTF8`을 받은 `wsl.exe`, BOM `.ps1`)과 Linux 출력은 바뀌지 않는다.
26
+ const DECODER = [
27
+ "import sys",
28
+ "w = sys.stdout.buffer",
29
+ "for b in iter(sys.stdin.buffer.readline, b''):",
30
+ " try:",
31
+ " t = b.decode('utf-8')",
32
+ " except UnicodeDecodeError:",
33
+ " t = b.decode('cp949', 'replace')",
34
+ " w.write(t.encode('utf-8'))",
35
+ " w.flush()",
36
+ ].join("\n");
37
+ // 출력이 변환기 하나를 거치도록 원래 명령을 실제 bash 한 번으로 돌리고, 그 종료 코드를 그대로 돌려준다.
38
+ // 원문과 변환기는 base64로 넘겨 따옴표·heredoc이 어떤 모양이든 그대로 실행된다.
39
+ const RUNNER =
40
+ 'c=$(printf %s "$1" | base64 -d) && p=$(printf %s "$2" | base64 -d) || exit 2; ' +
41
+ 'bash -c "$c" 2>&1 | python3 -u -c "$p"; exit "${PIPESTATUS[0]}"';
42
+ // 명령에 든 Windows 프로그램 이름(경로 마지막 조각)을 모두 찾는다.
43
+ const WINDOWS_PROGRAM = /[\w.-]*\.exe(?=["'\s;&|)<>]|$)|(?<=^|[\s;&|(/"'=])(?:powershell|pwsh)(?=["'\s;&|)<>]|$)/gim;
44
+
45
+ /**
46
+ * bash 따옴표·이스케이프를 따라가며 따옴표 밖의 백그라운드 `&`가 있는지 본다(`&&`·`&>`·`>&`·`<&`·`|&` 제외).
47
+ * 백그라운드 자식이 출력 파이프를 붙잡으면 감싼 호출이 끝나지 않으므로 그런 명령은 감싸지 않는다.
48
+ * 따옴표 안의 `&`(PowerShell 호출 연산자 등)와 `\&`는 bash 연산자가 아니다.
49
+ */
50
+ function hasBackgroundAmpersand(command: string): boolean {
51
+ let quote: string | undefined;
52
+ for (let index = 0; index < command.length; index++) {
53
+ const char = command[index];
54
+ if (quote === "'") {
55
+ if (char === "'") quote = undefined;
56
+ continue;
57
+ }
58
+ if (char === "\\") {
59
+ index++;
60
+ continue;
61
+ }
62
+ if (quote === '"') {
63
+ if (char === '"') quote = undefined;
64
+ continue;
65
+ }
66
+ if (char === "'" || char === '"') {
67
+ quote = char;
68
+ continue;
69
+ }
70
+ if (char !== "&") continue;
71
+ const previous = command[index - 1] ?? "";
72
+ const next = command[index + 1] ?? "";
73
+ if (next === "&") {
74
+ index++;
75
+ continue;
76
+ }
77
+ if (next === ">" || previous === ">" || previous === "<" || previous === "|") continue;
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+
83
+ export interface WindowsOutputContext {
84
+ /** WSL에서 Windows 실행 파일을 부를 수 있을 때만 감싼다. */
85
+ wsl: boolean;
86
+ /** 대화형 pty 실행은 감싸지 않는다. */
87
+ pty?: boolean;
88
+ }
89
+
90
+ /**
91
+ * Windows 실행 파일을 부르는 bash 명령을, 출력을 UTF-8로 바꿔 내는 명령으로 감싼다. 감쌀 필요가 없거나
92
+ * 감싸면 동작이 달라질 수 있는 명령은 `undefined`를 돌려준다.
93
+ *
94
+ * 감싼 명령은 지속 셸이 아니라 새 bash에서 돌므로, 그 안의 `cd`·변수 대입은 다음 호출로 이어지지 않는다
95
+ * (export된 환경과 작업 폴더는 물려받는다).
96
+ */
97
+ export function windowsOutputCommand(command: string, context: WindowsOutputContext): string | undefined {
98
+ if (!context.wsl || context.pty) return undefined;
99
+ if (/\biconv\b/.test(command) || hasBackgroundAmpersand(command)) return undefined;
100
+ // `git.exe`는 UTF-8로 내고 /mnt 저장소에서 가장 자주 부르므로, Windows 프로그램이 그것뿐이면 감싸지 않는다.
101
+ const programs = [...command.matchAll(WINDOWS_PROGRAM)].map((match) => match[0].toLowerCase());
102
+ if (programs.every((program) => program === "git.exe")) return undefined;
103
+ const encodedCommand = Buffer.from(command, "utf8").toString("base64");
104
+ const encodedDecoder = Buffer.from(DECODER, "utf8").toString("base64");
105
+ return `bash -c '${RUNNER}' cuelo-windows-output '${encodedCommand}' '${encodedDecoder}'`;
106
+ }
107
+
108
+ export function interopHint(command: string, output: string, context: InteropHintContext = {}): string | undefined {
109
+ const hints: string[] = [];
110
+ if (WINDOWS_EXECUTABLE.test(command) && !/\biconv\b/.test(command) && MOJIBAKE.test(output)) {
111
+ hints.push(
112
+ "[WSL interop] Windows 프로그램 출력의 한글이 CP949라 깨졌다(�). 자동 UTF-8 변환은 `&` 백그라운드·pty·`iconv`가 든 명령을 감싸지 않는다. 이 결과는 복구할 수 없으니 `| iconv -f cp949 -t utf-8`을 붙여 다시 실행한다. `wsl.exe`는 `WSL_UTF8=1 WSLENV=WSL_UTF8`을 쓴다.",
113
+ );
114
+ }
115
+ const missing = MISSING_PYTHON_MODULE.exec(output);
116
+ if (missing && context.managedPython && PYTHON_COMMAND.test(command) && !command.includes("python-env/bin/python")) {
117
+ hints.push(
118
+ `[WSL interop] 시스템 python3에는 '${missing[1]}'이 없다. 관리 Python 환경 \`${context.managedPython}\`(eval도 이 환경을 쓴다)으로 다시 실행하고, 그래도 없으면 그 환경에 \`-m pip install\`로 넣는다.`,
119
+ );
120
+ }
121
+ return hints.length > 0 ? hints.join("\n") : undefined;
122
+ }
@@ -40,6 +40,8 @@ export const SLOT: Record<Family, string> = { openai: "crossReviewOpenAI", anthr
40
40
  export const DELETED_BLOB = "deleted";
41
41
  /** 원장에 남기는 reviewer 원문 발췌 길이. 전문은 사본 디렉터리의 raw-<계열>.txt에 둔다. */
42
42
  const RAW_EXCERPT_CHARS = 20_000;
43
+ /** 도구 결과로 Main에 돌려주는 발췌 길이. 더 필요하면 rawFile을 읽는다(긴 답을 매번 컨텍스트에 싣지 않는다). */
44
+ const RESULT_EXCERPT_CHARS = 2_000;
43
45
 
44
46
  // ── 계열 매핑 ────────────────────────────────────────────────────────────────
45
47
 
@@ -567,7 +569,7 @@ export interface ReviewDeps {
567
569
  export interface ReviewResult {
568
570
  reviewId: string;
569
571
  round: 1 | 2;
570
- reviewers: { family: Family; model: string; status: CrossReviewReviewer["status"]; elapsedSec: number; raw?: string; rawFile?: string; error?: string }[];
572
+ reviewers: { family: Family; model: string; status: CrossReviewReviewer["status"]; elapsedSec: number; raw?: string; rawChars?: number; rawFile?: string; error?: string }[];
571
573
  triggers: string[];
572
574
  highRisk: boolean;
573
575
  findings: CrossReviewFinding[];
@@ -757,12 +759,12 @@ export async function runReview(input: ReviewInput, deps: ReviewDeps, signal: Ab
757
759
 
758
760
  const reviewers: CrossReviewReviewer[] = [];
759
761
  const findings: CrossReviewFinding[] = [];
760
- const fullRaw: Partial<Record<Family, string>> = {};
762
+ const rawChars: Partial<Record<Family, number>> = {};
761
763
  const keepRaw = (item: { family: Family; text: string }): { raw: string; rawFile: string } => {
762
- // 답 전문은 사본 디렉터리의 파일로 남기고(원장에는 앞 20 KB 발췌와 그 경로만), 결과로는 전부 돌려준다.
764
+ // 답 전문은 사본 디렉터리의 파일로 남긴다. 원장에는 앞 20 KB 발췌, 결과에는 앞 2,000자와 전체 길이·경로만 준다.
763
765
  const rawFile = join(snapshotDir, `raw-${item.family}.txt`);
764
766
  writeFileSync(rawFile, item.text, { mode: 0o600 });
765
- fullRaw[item.family] = item.text;
767
+ rawChars[item.family] = item.text.length;
766
768
  return { raw: item.text.slice(0, RAW_EXCERPT_CHARS), rawFile };
767
769
  };
768
770
  for (const item of settled) {
@@ -782,7 +784,11 @@ export async function runReview(input: ReviewInput, deps: ReviewDeps, signal: Ab
782
784
  };
783
785
  if (!deps.append(record)) throw new Error(`The review ran but could not be recorded in the routing ledger (${reviewId}); it cannot be resolved. Re-run it.`);
784
786
  return {
785
- reviewId, round, reviewers: reviewers.map((reviewer) => ({ family: reviewer.family, model: reviewer.model, status: reviewer.status, elapsedSec: Math.round(reviewer.elapsedMs / 1000), ...(fullRaw[reviewer.family] ? { raw: fullRaw[reviewer.family], rawFile: reviewer.rawFile } : {}), ...(reviewer.error ? { error: reviewer.error } : {}) })),
787
+ reviewId, round, reviewers: reviewers.map((reviewer) => ({
788
+ family: reviewer.family, model: reviewer.model, status: reviewer.status, elapsedSec: Math.round(reviewer.elapsedMs / 1000),
789
+ ...(reviewer.raw !== undefined ? { raw: reviewer.raw.slice(0, RESULT_EXCERPT_CHARS), rawChars: rawChars[reviewer.family], rawFile: reviewer.rawFile } : {}),
790
+ ...(reviewer.error ? { error: reviewer.error } : {}),
791
+ })),
786
792
  triggers: record.triggers, highRisk: record.highRisk, findings, skipped, redacted, passable, snapshotDir, nextStep: describeNext(round, passable, findings.length),
787
793
  };
788
794
  }