cuelo 0.10.52 → 0.10.53

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 (484) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +35 -35
  3. package/.next/build-manifest.json +4 -4
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +549 -561
  7. package/.next/required-server-files.js +25 -25
  8. package/.next/required-server-files.json +25 -25
  9. package/.next/server/app/_global-error/page.js +3 -3
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  26. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/account/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  32. package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  34. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/agent/[id]/route.js +1 -1
  36. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/agent/new/route.js +1 -1
  38. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/agent/running/route.js +1 -1
  40. package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/attachment-settings/route.js +1 -1
  42. package/.next/server/app/api/attachment-settings/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  44. package/.next/server/app/api/attachments/[id]/transcription/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/attachments/draft/route.js +1 -1
  46. package/.next/server/app/api/attachments/draft/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/attachments/route.js +2 -2
  48. package/.next/server/app/api/attachments/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  50. package/.next/server/app/api/auth/all-providers/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  52. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  54. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  56. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/auth/providers/route.js +1 -1
  58. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/character-mode/route.js +1 -2
  60. package/.next/server/app/api/character-mode/route.js.nft.json +1 -1
  61. package/.next/server/app/api/character-mode/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/cwd/browse/route.js +1 -1
  63. package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/cwd/validate/route.js +1 -1
  65. package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/default-cwd/route.js +1 -1
  67. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/display-settings/route.js +1 -1
  69. package/.next/server/app/api/display-settings/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/document-text/route.js +2 -2
  71. package/.next/server/app/api/document-text/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/experiments/route.js +1 -1
  73. package/.next/server/app/api/experiments/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/file-index/route.js +1 -1
  75. package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/files/[...path]/route.js +1 -1
  77. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/git/diff/route.js +1 -1
  79. package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/git/status/route.js +2 -2
  81. package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/github/projects/route.js +1 -1
  83. package/.next/server/app/api/github/projects/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  85. package/.next/server/app/api/gpt6/handles/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  87. package/.next/server/app/api/gpt6/reply/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/gpt6/token/route.js +1 -1
  89. package/.next/server/app/api/gpt6/token/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  91. package/.next/server/app/api/gpt6/web6-session/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/home/route.js +1 -1
  93. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/live/call/[callId]/route.js +2 -2
  95. package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/live/call/[callId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/live/events/route.js +2 -2
  98. package/.next/server/app/api/live/events/route.js.nft.json +1 -1
  99. package/.next/server/app/api/live/events/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/live/interpret/route.js +2 -2
  101. package/.next/server/app/api/live/interpret/route.js.nft.json +1 -1
  102. package/.next/server/app/api/live/interpret/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/live/offer/route.js +1 -1
  104. package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
  105. package/.next/server/app/api/live/offer/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/live/voices/route.js +1 -1
  107. package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
  108. package/.next/server/app/api/live/voices/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/mcp/route.js +2 -2
  110. package/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/model-roles/route.js +1 -1
  112. package/.next/server/app/api/model-roles/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/models/route.js +1 -1
  114. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  116. package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/models-config/discover/route.js +1 -1
  118. package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/models-config/route.js +3 -3
  120. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/models-config/test/route.js +1 -1
  122. package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/office-characters/[...path]/route.js +1 -2
  124. package/.next/server/app/api/office-characters/[...path]/route.js.nft.json +1 -1
  125. package/.next/server/app/api/office-characters/[...path]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/plugins/route.js +1 -1
  127. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/project-docs/route.js +1 -1
  129. package/.next/server/app/api/project-docs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/project-trust/route.js +1 -1
  131. package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/projects/route.js +2 -2
  133. package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/runs/[runId]/prelude/route.js +1 -1
  135. package/.next/server/app/api/runs/[runId]/prelude/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  137. package/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/runs/[runId]/turns/route.js +1 -1
  139. package/.next/server/app/api/runs/[runId]/turns/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/runs/route.js +1 -1
  141. package/.next/server/app/api/runs/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  143. package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  145. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  147. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  149. package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  151. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  153. package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/sessions/route.js +1 -1
  155. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/sessions/search/route.js +1 -1
  157. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/settings/route.js +1 -1
  159. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  161. package/.next/server/app/api/sidecars/[service]/[...path]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/skills/check/route.js +1 -1
  163. package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/skills/install/route.js +2 -2
  165. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/skills/route.js +1 -1
  167. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/skills/search/route.js +1 -1
  169. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/skills/update/route.js +1 -1
  171. package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/subagents/eta/route.js +1 -1
  173. package/.next/server/app/api/subagents/eta/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/theme/route.js +1 -1
  175. package/.next/server/app/api/theme/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/tool-image/route.js +1 -1
  177. package/.next/server/app/api/tool-image/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/update-maintenance/route.js +2 -2
  179. package/.next/server/app/api/update-maintenance/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/updates/route.js +1 -1
  181. package/.next/server/app/api/updates/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  183. package/.next/server/app/api/web-access/recovery/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/web-access/route.js +1 -1
  185. package/.next/server/app/api/web-access/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/web6/consults/route.js +1 -1
  187. package/.next/server/app/api/web6/consults/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/route.js +1 -1
  189. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/favicon.ico/route.js +1 -1
  191. package/.next/server/app/index.html +1 -1
  192. package/.next/server/app/index.rsc +4 -4
  193. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  194. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  195. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  196. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  197. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  198. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  199. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/page.js +5 -5
  201. package/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/recover/page.js +2 -2
  203. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  204. package/.next/server/app/recover.html +1 -1
  205. package/.next/server/app/recover.rsc +3 -3
  206. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  207. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  208. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  209. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  210. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +2 -2
  211. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  212. package/.next/server/app-paths-manifest.json +35 -35
  213. package/.next/server/chunks/1008.js +2 -2
  214. package/.next/server/chunks/1966.js +2 -0
  215. package/.next/server/chunks/319.js +3 -3
  216. package/.next/server/chunks/6429.js +2 -2
  217. package/.next/server/chunks/6775.js +7 -0
  218. package/.next/server/middleware-build-manifest.js +1 -1
  219. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  220. package/.next/server/middleware.js +9 -9
  221. package/.next/server/pages/404.html +1 -1
  222. package/.next/server/pages/500.html +1 -1
  223. package/.next/server/server-reference-manifest.json +1 -1
  224. package/.next/static/chunks/app/_not-found/page-041b64675adcdf82.js +1 -0
  225. package/.next/static/chunks/app/layout-3b1f8b74c7fc5e77.js +1 -0
  226. package/.next/static/chunks/app/{page-3640086c732eb87d.js → page-efae4fdcf84b7a14.js} +4 -4
  227. package/.next/static/chunks/app/recover/{page-c0c40b3c215078a4.js → page-2bcd6a351f3eda3d.js} +1 -1
  228. package/.next/static/chunks/{main-app-fbc4aa3c15d48613.js → main-app-ca46ab75db2b4e4b.js} +1 -1
  229. package/.next/static/chunks/main-dd4c9daba44bef88.js +5 -0
  230. package/.next/static/chunks/next/dist/client/components/builtin/global-error-dac2a58a3b9eb28e.js +1 -0
  231. package/.next/static/chunks/webpack-546c8221d1906945.js +1 -0
  232. package/.next/trace +107 -107
  233. package/.next/trace-build +1 -1
  234. package/.next/types/app/api/agent/[id]/account/route.ts +1 -1
  235. package/.next/types/app/api/agent/[id]/bash-output/route.ts +1 -1
  236. package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
  237. package/.next/types/app/api/agent/[id]/route.ts +1 -1
  238. package/.next/types/app/api/agent/new/route.ts +1 -1
  239. package/.next/types/app/api/agent/running/route.ts +1 -1
  240. package/.next/types/app/api/attachment-settings/route.ts +1 -1
  241. package/.next/types/app/api/attachments/[id]/transcription/route.ts +1 -1
  242. package/.next/types/app/api/attachments/draft/route.ts +1 -1
  243. package/.next/types/app/api/attachments/route.ts +1 -1
  244. package/.next/types/app/api/auth/all-providers/route.ts +1 -1
  245. package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
  246. package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
  247. package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
  248. package/.next/types/app/api/auth/providers/route.ts +1 -1
  249. package/.next/types/app/api/character-mode/route.ts +1 -1
  250. package/.next/types/app/api/cwd/browse/route.ts +1 -1
  251. package/.next/types/app/api/cwd/validate/route.ts +1 -1
  252. package/.next/types/app/api/default-cwd/route.ts +1 -1
  253. package/.next/types/app/api/display-settings/route.ts +1 -1
  254. package/.next/types/app/api/document-text/route.ts +1 -1
  255. package/.next/types/app/api/experiments/route.ts +1 -1
  256. package/.next/types/app/api/file-index/route.ts +1 -1
  257. package/.next/types/app/api/files/[...path]/route.ts +1 -1
  258. package/.next/types/app/api/git/diff/route.ts +1 -1
  259. package/.next/types/app/api/git/status/route.ts +1 -1
  260. package/.next/types/app/api/github/projects/route.ts +1 -1
  261. package/.next/types/app/api/gpt6/handles/route.ts +1 -1
  262. package/.next/types/app/api/gpt6/reply/route.ts +1 -1
  263. package/.next/types/app/api/gpt6/token/route.ts +1 -1
  264. package/.next/types/app/api/gpt6/web6-session/route.ts +1 -1
  265. package/.next/types/app/api/home/route.ts +1 -1
  266. package/.next/types/app/api/live/call/[callId]/route.ts +1 -1
  267. package/.next/types/app/api/live/events/route.ts +1 -1
  268. package/.next/types/app/api/live/interpret/route.ts +1 -1
  269. package/.next/types/app/api/live/offer/route.ts +1 -1
  270. package/.next/types/app/api/live/voices/route.ts +1 -1
  271. package/.next/types/app/api/mcp/route.ts +1 -1
  272. package/.next/types/app/api/model-roles/route.ts +1 -1
  273. package/.next/types/app/api/models/route.ts +1 -1
  274. package/.next/types/app/api/models-config/catalog/route.ts +1 -1
  275. package/.next/types/app/api/models-config/discover/route.ts +1 -1
  276. package/.next/types/app/api/models-config/route.ts +1 -1
  277. package/.next/types/app/api/models-config/test/route.ts +1 -1
  278. package/.next/types/app/api/office-characters/[...path]/route.ts +1 -1
  279. package/.next/types/app/api/plugins/route.ts +1 -1
  280. package/.next/types/app/api/project-docs/route.ts +1 -1
  281. package/.next/types/app/api/project-trust/route.ts +1 -1
  282. package/.next/types/app/api/projects/route.ts +1 -1
  283. package/.next/types/app/api/runs/[runId]/prelude/route.ts +1 -1
  284. package/.next/types/app/api/runs/[runId]/route.ts +1 -1
  285. package/.next/types/app/api/runs/[runId]/turns/route.ts +1 -1
  286. package/.next/types/app/api/runs/route.ts +1 -1
  287. package/.next/types/app/api/sessions/[id]/auto-name/route.ts +1 -1
  288. package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
  289. package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +1 -1
  290. package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
  291. package/.next/types/app/api/sessions/[id]/route.ts +1 -1
  292. package/.next/types/app/api/sessions/[id]/state/route.ts +1 -1
  293. package/.next/types/app/api/sessions/route.ts +1 -1
  294. package/.next/types/app/api/sessions/search/route.ts +1 -1
  295. package/.next/types/app/api/settings/route.ts +1 -1
  296. package/.next/types/app/api/sidecars/[service]/[...path]/route.ts +1 -1
  297. package/.next/types/app/api/skills/check/route.ts +1 -1
  298. package/.next/types/app/api/skills/install/route.ts +1 -1
  299. package/.next/types/app/api/skills/route.ts +1 -1
  300. package/.next/types/app/api/skills/search/route.ts +1 -1
  301. package/.next/types/app/api/skills/update/route.ts +1 -1
  302. package/.next/types/app/api/subagents/eta/route.ts +1 -1
  303. package/.next/types/app/api/theme/route.ts +1 -1
  304. package/.next/types/app/api/tool-image/route.ts +1 -1
  305. package/.next/types/app/api/update-maintenance/route.ts +1 -1
  306. package/.next/types/app/api/updates/route.ts +1 -1
  307. package/.next/types/app/api/web-access/recovery/route.ts +1 -1
  308. package/.next/types/app/api/web-access/route.ts +1 -1
  309. package/.next/types/app/api/web6/consults/route.ts +1 -1
  310. package/.next/types/app/api/worktrees/route.ts +1 -1
  311. package/.next/types/app/layout.ts +1 -1
  312. package/.next/types/app/page.ts +1 -1
  313. package/.next/types/app/recover/page.ts +1 -1
  314. package/LICENSE +22 -22
  315. package/README.md +273 -271
  316. package/Tools/CUELO_Setup/files/btw-server.js +346 -346
  317. package/Tools/CUELO_Setup/files/native-runtime-patch.js +238 -238
  318. package/Tools/CUELO_Setup/files/subagent-server.js +587 -587
  319. package/Tools/CUELO_Setup/files/usage-server.js +1057 -1057
  320. package/Tools/OMP_Global_Config/agent/AGENTS.md +144 -144
  321. package/Tools/OMP_Global_Config/agent/RULES.md +140 -140
  322. package/Tools/OMP_Global_Config/agent/TITLE_SYSTEM.md +17 -17
  323. package/Tools/OMP_Global_Config/agent/WATCHDOG.md +55 -55
  324. package/Tools/OMP_Global_Config/agent/agents/maker.md +413 -413
  325. package/Tools/OMP_Global_Config/agent/extensions/character-voice.ts +1035 -1035
  326. package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +1110 -1110
  327. package/Tools/OMP_Global_Config/agent/extensions/command-guard/interop-hint.ts +133 -133
  328. package/Tools/OMP_Global_Config/agent/extensions/command-guard/matcher.ts +2258 -2258
  329. package/Tools/OMP_Global_Config/agent/extensions/command-guard/powershell-syntax.ts +210 -210
  330. package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +1137 -1121
  331. package/Tools/OMP_Global_Config/agent/extensions/cross-review.ts +132 -132
  332. package/Tools/OMP_Global_Config/agent/extensions/docmap-route.ts +133 -133
  333. package/Tools/OMP_Global_Config/agent/extensions/draft/markdown.ts +226 -226
  334. package/Tools/OMP_Global_Config/agent/extensions/draft/ooxml.ts +222 -222
  335. package/Tools/OMP_Global_Config/agent/extensions/draft/pdf.ts +63 -63
  336. package/Tools/OMP_Global_Config/agent/extensions/draft/zip.ts +73 -73
  337. package/Tools/OMP_Global_Config/agent/extensions/draft.ts +204 -204
  338. package/Tools/OMP_Global_Config/agent/extensions/edit-lessons.ts +159 -159
  339. package/Tools/OMP_Global_Config/agent/extensions/external-advice-check.ts +36 -36
  340. package/Tools/OMP_Global_Config/agent/extensions/gitnexus-autosync.ts +406 -406
  341. package/Tools/OMP_Global_Config/agent/extensions/image-question-router.ts +55 -55
  342. package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +2700 -2700
  343. package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +190 -190
  344. package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +1208 -1208
  345. package/Tools/OMP_Global_Config/agent/extensions/lib/docmap-search.ts +612 -612
  346. package/Tools/OMP_Global_Config/agent/extensions/lib/job-observation.ts +182 -182
  347. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +1332 -1332
  348. package/Tools/OMP_Global_Config/agent/extensions/lib/mcp-selection.ts +361 -361
  349. package/Tools/OMP_Global_Config/agent/extensions/lib/memory-excerpt.ts +5 -5
  350. package/Tools/OMP_Global_Config/agent/extensions/lib/native-judge.ts +113 -113
  351. package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +211 -211
  352. package/Tools/OMP_Global_Config/agent/extensions/lib/routing-ledger.ts +538 -538
  353. package/Tools/OMP_Global_Config/agent/extensions/lib/session-identity.ts +34 -34
  354. package/Tools/OMP_Global_Config/agent/extensions/lib/task-progress.ts +492 -492
  355. package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +301 -301
  356. package/Tools/OMP_Global_Config/agent/extensions/prompt-compact.ts +67 -67
  357. package/Tools/OMP_Global_Config/agent/extensions/report-chart-guard.ts +102 -102
  358. package/Tools/OMP_Global_Config/agent/extensions/skim.ts +332 -332
  359. package/Tools/OMP_Global_Config/agent/extensions/steering-reply-gate.ts +207 -207
  360. package/Tools/OMP_Global_Config/agent/extensions/todo-nudge.ts +80 -80
  361. package/Tools/OMP_Global_Config/agent/extensions/turn-end-guard.ts +421 -421
  362. package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +147 -147
  363. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +49 -49
  364. package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +39 -39
  365. package/Tools/OMP_Global_Config/agent/rules/frontend.md +74 -74
  366. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1224 -1224
  367. package/Tools/OMP_Global_Config/agent/rules/legacy-encoding.md +21 -21
  368. package/Tools/OMP_Global_Config/agent/rules/meta-harness.md +45 -45
  369. package/Tools/OMP_Global_Config/agent/rules/omp-harness.md +151 -151
  370. package/Tools/OMP_Global_Config/agent/rules/subagent.md +750 -750
  371. package/Tools/OMP_Global_Config/agent/rules/task-guard.md +62 -62
  372. package/Tools/OMP_Global_Config/agent/rules/verdict.md +210 -210
  373. package/Tools/OMP_Global_Config/agent/rules/web6-consult.md +83 -83
  374. package/Tools/OMP_Global_Config/agent/sop/_common.md +136 -136
  375. package/Tools/OMP_Global_Config/agent/sop/_writer.md +259 -259
  376. package/Tools/OMP_Global_Config/agent/sop/maker.md +9 -9
  377. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/finalizer.ps1 +409 -409
  378. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +303 -303
  379. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/sync-checkout.ts +184 -184
  380. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/wsl-git.ts +96 -96
  381. package/Tools/OMP_Global_Config/agent/tools/windows-build/index.ts +387 -387
  382. package/Tools/OMP_Global_Config/agent/tools/windows-control/control.ps1 +200 -200
  383. package/Tools/OMP_Global_Config/agent/tools/windows-control/index.ts +255 -255
  384. package/Tools/OMP_Global_Config/notices/orchestrate.md +26 -26
  385. package/Tools/OMP_Global_Config/notices/ultrathink.md +9 -9
  386. package/Tools/OMP_Global_Config/notices/workflow.md +16 -16
  387. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +18339 -18304
  388. package/Tools/OMP_Global_Config/patches/apply-notices.mjs +135 -135
  389. package/bin/cuelo-options.js +38 -38
  390. package/bin/cuelo.js +273 -273
  391. package/bin/docker-entrypoint.mjs +19 -19
  392. package/bin/password-prompt.js +100 -100
  393. package/bin/prepare-runtime.js +112 -112
  394. package/bin/runtime.js +134 -134
  395. package/bin/web-auth-store.d.ts +104 -104
  396. package/bin/web-auth-store.js +593 -593
  397. package/install.mjs +427 -427
  398. package/next.config.ts +104 -104
  399. package/package.json +141 -141
  400. package/public/audio/completion/voices.json +1393 -1393
  401. package/public/fonts/cuelo-display/NOTICE.txt +15 -15
  402. package/public/fonts/fonts.css +288 -288
  403. package/public/fonts/jetbrains-mono/OFL.txt +93 -93
  404. package/public/fonts/wanted-sans/OFL.txt +93 -93
  405. package/public/icons/catppuccin/LICENSE +22 -22
  406. package/public/icons/catppuccin/README.md +8 -8
  407. package/public/icons/catppuccin/latte/_file.svg +3 -3
  408. package/public/icons/catppuccin/latte/_folder.svg +3 -3
  409. package/public/icons/catppuccin/latte/_folder_open.svg +3 -3
  410. package/public/icons/catppuccin/latte/bash.svg +7 -7
  411. package/public/icons/catppuccin/latte/bun-lock.svg +8 -8
  412. package/public/icons/catppuccin/latte/config.svg +3 -3
  413. package/public/icons/catppuccin/latte/css.svg +6 -6
  414. package/public/icons/catppuccin/latte/database.svg +3 -3
  415. package/public/icons/catppuccin/latte/docker.svg +3 -3
  416. package/public/icons/catppuccin/latte/env.svg +3 -3
  417. package/public/icons/catppuccin/latte/eslint.svg +6 -6
  418. package/public/icons/catppuccin/latte/git.svg +6 -6
  419. package/public/icons/catppuccin/latte/go.svg +3 -3
  420. package/public/icons/catppuccin/latte/graphql.svg +3 -3
  421. package/public/icons/catppuccin/latte/html.svg +6 -6
  422. package/public/icons/catppuccin/latte/javascript-react.svg +8 -8
  423. package/public/icons/catppuccin/latte/javascript.svg +6 -6
  424. package/public/icons/catppuccin/latte/json.svg +3 -3
  425. package/public/icons/catppuccin/latte/lock.svg +3 -3
  426. package/public/icons/catppuccin/latte/markdown.svg +3 -3
  427. package/public/icons/catppuccin/latte/ms-word.svg +6 -6
  428. package/public/icons/catppuccin/latte/next.svg +6 -6
  429. package/public/icons/catppuccin/latte/npm-lock.svg +7 -7
  430. package/public/icons/catppuccin/latte/pdf.svg +3 -3
  431. package/public/icons/catppuccin/latte/python.svg +8 -8
  432. package/public/icons/catppuccin/latte/rust.svg +6 -6
  433. package/public/icons/catppuccin/latte/sass.svg +3 -3
  434. package/public/icons/catppuccin/latte/terraform.svg +3 -3
  435. package/public/icons/catppuccin/latte/toml.svg +3 -3
  436. package/public/icons/catppuccin/latte/typescript-react.svg +8 -8
  437. package/public/icons/catppuccin/latte/typescript.svg +6 -6
  438. package/public/icons/catppuccin/latte/yaml.svg +3 -3
  439. package/public/icons/catppuccin/mocha/_file.svg +3 -3
  440. package/public/icons/catppuccin/mocha/_folder.svg +3 -3
  441. package/public/icons/catppuccin/mocha/_folder_open.svg +3 -3
  442. package/public/icons/catppuccin/mocha/bash.svg +7 -7
  443. package/public/icons/catppuccin/mocha/bun-lock.svg +8 -8
  444. package/public/icons/catppuccin/mocha/config.svg +3 -3
  445. package/public/icons/catppuccin/mocha/css.svg +6 -6
  446. package/public/icons/catppuccin/mocha/database.svg +3 -3
  447. package/public/icons/catppuccin/mocha/docker.svg +3 -3
  448. package/public/icons/catppuccin/mocha/env.svg +3 -3
  449. package/public/icons/catppuccin/mocha/eslint.svg +6 -6
  450. package/public/icons/catppuccin/mocha/git.svg +6 -6
  451. package/public/icons/catppuccin/mocha/go.svg +3 -3
  452. package/public/icons/catppuccin/mocha/graphql.svg +3 -3
  453. package/public/icons/catppuccin/mocha/html.svg +6 -6
  454. package/public/icons/catppuccin/mocha/javascript-react.svg +8 -8
  455. package/public/icons/catppuccin/mocha/javascript.svg +6 -6
  456. package/public/icons/catppuccin/mocha/json.svg +3 -3
  457. package/public/icons/catppuccin/mocha/lock.svg +3 -3
  458. package/public/icons/catppuccin/mocha/markdown.svg +3 -3
  459. package/public/icons/catppuccin/mocha/ms-word.svg +6 -6
  460. package/public/icons/catppuccin/mocha/next.svg +6 -6
  461. package/public/icons/catppuccin/mocha/npm-lock.svg +7 -7
  462. package/public/icons/catppuccin/mocha/pdf.svg +3 -3
  463. package/public/icons/catppuccin/mocha/python.svg +8 -8
  464. package/public/icons/catppuccin/mocha/rust.svg +6 -6
  465. package/public/icons/catppuccin/mocha/sass.svg +3 -3
  466. package/public/icons/catppuccin/mocha/terraform.svg +3 -3
  467. package/public/icons/catppuccin/mocha/toml.svg +3 -3
  468. package/public/icons/catppuccin/mocha/typescript-react.svg +8 -8
  469. package/public/icons/catppuccin/mocha/typescript.svg +6 -6
  470. package/public/icons/catppuccin/mocha/yaml.svg +3 -3
  471. package/public/icons/cuelo-icon.svg +8 -8
  472. package/public/offline.html +145 -145
  473. package/public/sw.js +135 -135
  474. package/.next/server/chunks/205.js +0 -7
  475. package/.next/server/chunks/7738.js +0 -1
  476. package/.next/static/chunks/1966.b8f83f7ba376c962.js +0 -1
  477. package/.next/static/chunks/3899.3f761f7e3a944e8c.js +0 -1
  478. package/.next/static/chunks/app/_not-found/page-9e5295df095e2e41.js +0 -1
  479. package/.next/static/chunks/app/layout-8b29ba206a96135e.js +0 -1
  480. package/.next/static/chunks/main-1ddb405481ce21f6.js +0 -5
  481. package/.next/static/chunks/next/dist/client/components/builtin/global-error-50782c8c9c06c8b5.js +0 -1
  482. package/.next/static/chunks/webpack-7b514b9855bd748c.js +0 -1
  483. /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_buildManifest.js +0 -0
  484. /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_ssgManifest.js +0 -0
@@ -1,210 +1,210 @@
1
- /**
2
- * OMP `bash` 도구의 셸은 PowerShell이 아니다(Windows는 내장 셸, WSL·Linux는 진짜 `/bin/bash`). PowerShell 전용
3
- * 문법을 실행 위치에 쓰면 실행 뒤에 `pi-natives:command: syntax error`나 bash 오류로만 드러나므로, 실행 전에
4
- * 같은 기준으로 거절한다.
5
- * 따옴표 안의 값(grep 패턴, echo 인자 등)과 heredoc 본문은 다른 프로그램의 데이터라 검사하지 않는다.
6
- */
7
-
8
- const CMDLETS = new Set(
9
- [
10
- "Add-Content", "ConvertFrom-Json", "ConvertTo-Json", "Copy-Item", "ForEach-Object",
11
- "Get-ChildItem", "Get-Command", "Get-Content", "Get-Date", "Get-Item", "Get-Location",
12
- "Get-Process", "Invoke-Expression", "Invoke-WebRequest", "Join-Path", "Measure-Object",
13
- "Move-Item", "New-Item", "Out-File", "Out-Null", "Out-String", "Pop-Location",
14
- "Push-Location", "Remove-Item", "Rename-Item", "Resolve-Path", "Select-Object",
15
- "Select-String", "Set-Content", "Set-Location", "Sort-Object", "Split-Path", "Start-Process",
16
- "Stop-Process", "Test-Path", "Where-Object", "Write-Error", "Write-Host", "Write-Output",
17
- ].map((name) => name.toLowerCase()),
18
- );
19
-
20
- const GUIDANCE_WINDOWS =
21
- "PowerShell 로직은 `write`로 .ps1 파일을 만든 뒤 PowerShell 7 `pwsh -NoProfile -ExecutionPolicy Bypass -File C:/절대/슬래시/경로.ps1`로 실행하세요(7이 없을 때만 `powershell.exe`).";
22
-
23
- // WSL의 bash는 진짜 bash라 따옴표·`\$`가 정상 처리되고, Windows 프로그램에는 Windows 경로를 넘겨야 한다.
24
- // Linux `pwsh`가 아니라 Windows PowerShell 7(`pwsh.exe`)을 부른다. 5.1은 BOM 없는 .ps1을 CP949로 읽는다.
25
- // 7도 WSL로 넘기는 stdout은 시스템 코드페이지(CP949)라 한글이 깨진다(2026-10-09 7.6.6에서 관측).
26
- const GUIDANCE_LINUX =
27
- "PowerShell 로직은 `write`로 .ps1 파일을 만든 뒤 Windows PowerShell 7 `pwsh.exe -NoProfile -ExecutionPolicy Bypass -File \"$(wslpath -w /절대/경로.ps1)\"`로 실행하세요(7이 없을 때만 `powershell.exe`). " +
28
- "한글을 출력하면 .ps1 첫 줄(짧은 `-Command`면 본문 맨 앞)에 `[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)`를 두세요. `powershell.exe`(5.1)로 실행하면 .ps1도 UTF-8 BOM으로 저장해야 합니다. " +
29
- "짧은 `-Command` 본문은 작은따옴표로 감싸거나 `\\$`로 이스케이프하면 통과합니다.";
30
-
31
- function reason(subject: string, platform: NodeJS.Platform): string {
32
- const windows = platform === "win32";
33
- return `bash 도구의 ${windows ? "내장 " : ""}셸은 PowerShell이 아니라서 ${subject}는 실행 전에 차단됩니다. ${windows ? GUIDANCE_WINDOWS : GUIDANCE_LINUX}`;
34
- }
35
-
36
- /** `<<[-]'WORD'` 형태의 heredoc 본문을 지워 스크립트 파일 내용이 명령으로 검사되지 않게 한다. */
37
- function stripHeredocBodies(command: string): string {
38
- const lines = command.split("\n");
39
- const kept: string[] = [];
40
- let delimiter: string | undefined;
41
- for (const line of lines) {
42
- if (delimiter !== undefined) {
43
- if (line.replace(/\r$/, "").trim() === delimiter) delimiter = undefined;
44
- continue;
45
- }
46
- kept.push(line);
47
- const marker = /<<-?\s*(?:'([^']+)'|"([^"]+)"|([A-Za-z_][\w]*))/.exec(line);
48
- if (marker) delimiter = marker[1] ?? marker[2] ?? marker[3];
49
- }
50
- return kept.join("\n");
51
- }
52
-
53
- /** 따옴표 안쪽 글자를 공백으로 바꿔 정규식이 데이터를 코드로 오인하지 않게 한다. */
54
- function maskQuoted(command: string): string {
55
- let out = "";
56
- let quote: "'" | '"' | undefined;
57
- for (let index = 0; index < command.length; index += 1) {
58
- const character = command[index];
59
- if (quote) {
60
- if (character === quote) {
61
- quote = undefined;
62
- out += character;
63
- } else if (quote === '"' && character === "\\" && index + 1 < command.length) {
64
- out += " ";
65
- index += 1;
66
- } else {
67
- out += character === "\n" ? "\n" : " ";
68
- }
69
- continue;
70
- }
71
- if (character === "'" || character === '"') quote = character;
72
- out += character;
73
- }
74
- return out;
75
- }
76
-
77
- interface Token {
78
- value: string;
79
- quoted: boolean;
80
- /** posix 모드에서 bash가 `$`를 확장할 자리(따옴표 밖이나 큰따옴표 안의 이스케이프 안 된 `$name`·`${`·`$(` 등)가 있었는가. */
81
- expands: boolean;
82
- }
83
-
84
- /**
85
- * 따옴표를 존중해 명령 구분자(; | & 줄바꿈 괄호)로 나눈 세그먼트별 토큰.
86
- * `posix`는 진짜 bash(WSL·Linux)의 따옴표·백슬래시 이스케이프 규칙을 따른다. Windows 내장 셸 기준(`posix` false)은
87
- * 백슬래시를 이스케이프로 읽지 않는 기존 동작을 그대로 유지한다.
88
- */
89
- function segmentTokens(command: string, posix: boolean): Token[][] {
90
- const segments: Token[][] = [];
91
- let tokens: Token[] = [];
92
- let value = "";
93
- let started = false;
94
- let quoted = false;
95
- let expands = false;
96
- let quote: "'" | '"' | undefined;
97
- const endToken = (): void => {
98
- if (started) tokens.push({ value, quoted, expands });
99
- value = "";
100
- started = false;
101
- quoted = false;
102
- expands = false;
103
- };
104
- const endSegment = (): void => {
105
- endToken();
106
- if (tokens.length > 0) segments.push(tokens);
107
- tokens = [];
108
- };
109
- for (let index = 0; index < command.length; index += 1) {
110
- const character = command[index];
111
- // bash가 확장하는 `$` 꼴(`$name`, `$1`, `$_`, `${`, `$(`, `$?` 등). 뒤가 공백·따옴표·끝이면 글자 그대로 남는다.
112
- const dollar = character === "$" && /[A-Za-z0-9_{(?!@*#$]/.test(command[index + 1] ?? "");
113
- if (quote) {
114
- if (character === quote) {
115
- quote = undefined;
116
- } else if (posix && quote === '"' && character === "\\" && index + 1 < command.length) {
117
- value += character + command[index + 1];
118
- index += 1;
119
- } else {
120
- if (posix && quote === '"' && dollar) expands = true;
121
- value += character;
122
- }
123
- continue;
124
- }
125
- if (posix && character === "\\" && index + 1 < command.length && command[index + 1] !== "\n") {
126
- value += character + command[index + 1];
127
- started = true;
128
- index += 1;
129
- } else if (character === "'" || character === '"') {
130
- quote = character;
131
- started = true;
132
- quoted = true;
133
- } else if (character === "#" && !started) {
134
- while (index + 1 < command.length && command[index + 1] !== "\n") index += 1;
135
- } else if (/\s/.test(character) && character !== "\n") {
136
- endToken();
137
- } else if (/[;|&\n(){}]/.test(character)) {
138
- endSegment();
139
- } else {
140
- if (posix && dollar) expands = true;
141
- value += character;
142
- started = true;
143
- }
144
- }
145
- endSegment();
146
- return segments;
147
- }
148
-
149
- function commandBasename(value: string): string {
150
- const normalized = value.replace(/\\/g, "/");
151
- return normalized.slice(normalized.lastIndexOf("/") + 1).toLowerCase().replace(/\.exe$/, "");
152
- }
153
-
154
- /** powershell/pwsh 호출의 판정: undefined면 허용, 문자열이면 차단 사유. */
155
- function matchPowerShellHost(args: Token[], platform: NodeJS.Platform): string | undefined {
156
- for (const arg of args) {
157
- const option = arg.value.toLowerCase();
158
- if (!arg.quoted && /^-f(?:i(?:le?)?)?$/.test(option)) return undefined;
159
- if (!arg.quoted && (option === "-encodedcommand" || option === "-e" || option === "-ec")) {
160
- return undefined;
161
- }
162
- }
163
- const commandIndex = args.findIndex(
164
- (arg) => !arg.quoted && ["-c", "-command", "-commandwithargs"].includes(arg.value.toLowerCase()),
165
- );
166
- if (commandIndex < 0) return undefined;
167
- // Windows 내장 셸은 따옴표 안의 `$`도 바꿔 넘기므로 모든 `$`를 막고, 진짜 bash는 확장되는 `$`만 막는다.
168
- const dollar = platform === "win32"
169
- ? (arg: Token) => arg.value.includes("$")
170
- : (arg: Token) => arg.expands;
171
- if (args.slice(commandIndex + 1).some(dollar)) {
172
- return reason("`-Command` 인자의 `$`(bash 층이 변형해 PowerShell이 다른 코드를 받습니다)", platform);
173
- }
174
- return undefined;
175
- }
176
-
177
- /**
178
- * bash 명령에 PowerShell 전용 문법이 실행 위치로 쓰였으면 차단 사유를, 아니면 undefined를 돌려준다.
179
- * `platform`은 bash 도구가 실제로 도는 OS(기본 `process.platform`)이며 안내문과 `-Command`의 `$` 판정을 가른다.
180
- */
181
- export function matchPowerShellSyntax(
182
- command: string,
183
- platform: NodeJS.Platform = process.platform,
184
- ): string | undefined {
185
- const body = stripHeredocBodies(command);
186
-
187
- for (const tokens of segmentTokens(body, platform !== "win32")) {
188
- const head = tokens[0];
189
- if (head.quoted) continue;
190
- const name = commandBasename(head.value);
191
- if (name === "powershell" || name === "pwsh") {
192
- const hostReason = matchPowerShellHost(tokens.slice(1), platform);
193
- if (hostReason) return hostReason;
194
- continue;
195
- }
196
- if (CMDLETS.has(name)) return reason(`cmdlet \`${head.value}\``, platform);
197
- }
198
-
199
- const masked = maskQuoted(body);
200
- const envVariable = /\$env:[A-Za-z_]\w*/i.exec(masked);
201
- if (envVariable) return reason(`\`${envVariable[0]}\``, platform);
202
-
203
- const assignment = /(?:^|[;&|{\n])[ \t]*(\$[A-Za-z_]\w*)[ \t]*(?:[-+*/]|\?\?)?=(?!=)/.exec(masked);
204
- if (assignment) return reason(`\`${assignment[1]} = ...\` 대입`, platform);
205
-
206
- const block = /(?:^|[;&|{\n])[ \t]*(if|elseif|foreach|while)[ \t]*\([^\n]*\)[ \t]*\{/i.exec(masked);
207
- if (block) return reason(`\`${block[1]} (...) { }\` 블록`, platform);
208
-
209
- return undefined;
210
- }
1
+ /**
2
+ * OMP `bash` 도구의 셸은 PowerShell이 아니다(Windows는 내장 셸, WSL·Linux는 진짜 `/bin/bash`). PowerShell 전용
3
+ * 문법을 실행 위치에 쓰면 실행 뒤에 `pi-natives:command: syntax error`나 bash 오류로만 드러나므로, 실행 전에
4
+ * 같은 기준으로 거절한다.
5
+ * 따옴표 안의 값(grep 패턴, echo 인자 등)과 heredoc 본문은 다른 프로그램의 데이터라 검사하지 않는다.
6
+ */
7
+
8
+ const CMDLETS = new Set(
9
+ [
10
+ "Add-Content", "ConvertFrom-Json", "ConvertTo-Json", "Copy-Item", "ForEach-Object",
11
+ "Get-ChildItem", "Get-Command", "Get-Content", "Get-Date", "Get-Item", "Get-Location",
12
+ "Get-Process", "Invoke-Expression", "Invoke-WebRequest", "Join-Path", "Measure-Object",
13
+ "Move-Item", "New-Item", "Out-File", "Out-Null", "Out-String", "Pop-Location",
14
+ "Push-Location", "Remove-Item", "Rename-Item", "Resolve-Path", "Select-Object",
15
+ "Select-String", "Set-Content", "Set-Location", "Sort-Object", "Split-Path", "Start-Process",
16
+ "Stop-Process", "Test-Path", "Where-Object", "Write-Error", "Write-Host", "Write-Output",
17
+ ].map((name) => name.toLowerCase()),
18
+ );
19
+
20
+ const GUIDANCE_WINDOWS =
21
+ "PowerShell 로직은 `write`로 .ps1 파일을 만든 뒤 PowerShell 7 `pwsh -NoProfile -ExecutionPolicy Bypass -File C:/절대/슬래시/경로.ps1`로 실행하세요(7이 없을 때만 `powershell.exe`).";
22
+
23
+ // WSL의 bash는 진짜 bash라 따옴표·`\$`가 정상 처리되고, Windows 프로그램에는 Windows 경로를 넘겨야 한다.
24
+ // Linux `pwsh`가 아니라 Windows PowerShell 7(`pwsh.exe`)을 부른다. 5.1은 BOM 없는 .ps1을 CP949로 읽는다.
25
+ // 7도 WSL로 넘기는 stdout은 시스템 코드페이지(CP949)라 한글이 깨진다(2026-10-09 7.6.6에서 관측).
26
+ const GUIDANCE_LINUX =
27
+ "PowerShell 로직은 `write`로 .ps1 파일을 만든 뒤 Windows PowerShell 7 `pwsh.exe -NoProfile -ExecutionPolicy Bypass -File \"$(wslpath -w /절대/경로.ps1)\"`로 실행하세요(7이 없을 때만 `powershell.exe`). " +
28
+ "한글을 출력하면 .ps1 첫 줄(짧은 `-Command`면 본문 맨 앞)에 `[Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)`를 두세요. `powershell.exe`(5.1)로 실행하면 .ps1도 UTF-8 BOM으로 저장해야 합니다. " +
29
+ "짧은 `-Command` 본문은 작은따옴표로 감싸거나 `\\$`로 이스케이프하면 통과합니다.";
30
+
31
+ function reason(subject: string, platform: NodeJS.Platform): string {
32
+ const windows = platform === "win32";
33
+ return `bash 도구의 ${windows ? "내장 " : ""}셸은 PowerShell이 아니라서 ${subject}는 실행 전에 차단됩니다. ${windows ? GUIDANCE_WINDOWS : GUIDANCE_LINUX}`;
34
+ }
35
+
36
+ /** `<<[-]'WORD'` 형태의 heredoc 본문을 지워 스크립트 파일 내용이 명령으로 검사되지 않게 한다. */
37
+ function stripHeredocBodies(command: string): string {
38
+ const lines = command.split("\n");
39
+ const kept: string[] = [];
40
+ let delimiter: string | undefined;
41
+ for (const line of lines) {
42
+ if (delimiter !== undefined) {
43
+ if (line.replace(/\r$/, "").trim() === delimiter) delimiter = undefined;
44
+ continue;
45
+ }
46
+ kept.push(line);
47
+ const marker = /<<-?\s*(?:'([^']+)'|"([^"]+)"|([A-Za-z_][\w]*))/.exec(line);
48
+ if (marker) delimiter = marker[1] ?? marker[2] ?? marker[3];
49
+ }
50
+ return kept.join("\n");
51
+ }
52
+
53
+ /** 따옴표 안쪽 글자를 공백으로 바꿔 정규식이 데이터를 코드로 오인하지 않게 한다. */
54
+ function maskQuoted(command: string): string {
55
+ let out = "";
56
+ let quote: "'" | '"' | undefined;
57
+ for (let index = 0; index < command.length; index += 1) {
58
+ const character = command[index];
59
+ if (quote) {
60
+ if (character === quote) {
61
+ quote = undefined;
62
+ out += character;
63
+ } else if (quote === '"' && character === "\\" && index + 1 < command.length) {
64
+ out += " ";
65
+ index += 1;
66
+ } else {
67
+ out += character === "\n" ? "\n" : " ";
68
+ }
69
+ continue;
70
+ }
71
+ if (character === "'" || character === '"') quote = character;
72
+ out += character;
73
+ }
74
+ return out;
75
+ }
76
+
77
+ interface Token {
78
+ value: string;
79
+ quoted: boolean;
80
+ /** posix 모드에서 bash가 `$`를 확장할 자리(따옴표 밖이나 큰따옴표 안의 이스케이프 안 된 `$name`·`${`·`$(` 등)가 있었는가. */
81
+ expands: boolean;
82
+ }
83
+
84
+ /**
85
+ * 따옴표를 존중해 명령 구분자(; | & 줄바꿈 괄호)로 나눈 세그먼트별 토큰.
86
+ * `posix`는 진짜 bash(WSL·Linux)의 따옴표·백슬래시 이스케이프 규칙을 따른다. Windows 내장 셸 기준(`posix` false)은
87
+ * 백슬래시를 이스케이프로 읽지 않는 기존 동작을 그대로 유지한다.
88
+ */
89
+ function segmentTokens(command: string, posix: boolean): Token[][] {
90
+ const segments: Token[][] = [];
91
+ let tokens: Token[] = [];
92
+ let value = "";
93
+ let started = false;
94
+ let quoted = false;
95
+ let expands = false;
96
+ let quote: "'" | '"' | undefined;
97
+ const endToken = (): void => {
98
+ if (started) tokens.push({ value, quoted, expands });
99
+ value = "";
100
+ started = false;
101
+ quoted = false;
102
+ expands = false;
103
+ };
104
+ const endSegment = (): void => {
105
+ endToken();
106
+ if (tokens.length > 0) segments.push(tokens);
107
+ tokens = [];
108
+ };
109
+ for (let index = 0; index < command.length; index += 1) {
110
+ const character = command[index];
111
+ // bash가 확장하는 `$` 꼴(`$name`, `$1`, `$_`, `${`, `$(`, `$?` 등). 뒤가 공백·따옴표·끝이면 글자 그대로 남는다.
112
+ const dollar = character === "$" && /[A-Za-z0-9_{(?!@*#$]/.test(command[index + 1] ?? "");
113
+ if (quote) {
114
+ if (character === quote) {
115
+ quote = undefined;
116
+ } else if (posix && quote === '"' && character === "\\" && index + 1 < command.length) {
117
+ value += character + command[index + 1];
118
+ index += 1;
119
+ } else {
120
+ if (posix && quote === '"' && dollar) expands = true;
121
+ value += character;
122
+ }
123
+ continue;
124
+ }
125
+ if (posix && character === "\\" && index + 1 < command.length && command[index + 1] !== "\n") {
126
+ value += character + command[index + 1];
127
+ started = true;
128
+ index += 1;
129
+ } else if (character === "'" || character === '"') {
130
+ quote = character;
131
+ started = true;
132
+ quoted = true;
133
+ } else if (character === "#" && !started) {
134
+ while (index + 1 < command.length && command[index + 1] !== "\n") index += 1;
135
+ } else if (/\s/.test(character) && character !== "\n") {
136
+ endToken();
137
+ } else if (/[;|&\n(){}]/.test(character)) {
138
+ endSegment();
139
+ } else {
140
+ if (posix && dollar) expands = true;
141
+ value += character;
142
+ started = true;
143
+ }
144
+ }
145
+ endSegment();
146
+ return segments;
147
+ }
148
+
149
+ function commandBasename(value: string): string {
150
+ const normalized = value.replace(/\\/g, "/");
151
+ return normalized.slice(normalized.lastIndexOf("/") + 1).toLowerCase().replace(/\.exe$/, "");
152
+ }
153
+
154
+ /** powershell/pwsh 호출의 판정: undefined면 허용, 문자열이면 차단 사유. */
155
+ function matchPowerShellHost(args: Token[], platform: NodeJS.Platform): string | undefined {
156
+ for (const arg of args) {
157
+ const option = arg.value.toLowerCase();
158
+ if (!arg.quoted && /^-f(?:i(?:le?)?)?$/.test(option)) return undefined;
159
+ if (!arg.quoted && (option === "-encodedcommand" || option === "-e" || option === "-ec")) {
160
+ return undefined;
161
+ }
162
+ }
163
+ const commandIndex = args.findIndex(
164
+ (arg) => !arg.quoted && ["-c", "-command", "-commandwithargs"].includes(arg.value.toLowerCase()),
165
+ );
166
+ if (commandIndex < 0) return undefined;
167
+ // Windows 내장 셸은 따옴표 안의 `$`도 바꿔 넘기므로 모든 `$`를 막고, 진짜 bash는 확장되는 `$`만 막는다.
168
+ const dollar = platform === "win32"
169
+ ? (arg: Token) => arg.value.includes("$")
170
+ : (arg: Token) => arg.expands;
171
+ if (args.slice(commandIndex + 1).some(dollar)) {
172
+ return reason("`-Command` 인자의 `$`(bash 층이 변형해 PowerShell이 다른 코드를 받습니다)", platform);
173
+ }
174
+ return undefined;
175
+ }
176
+
177
+ /**
178
+ * bash 명령에 PowerShell 전용 문법이 실행 위치로 쓰였으면 차단 사유를, 아니면 undefined를 돌려준다.
179
+ * `platform`은 bash 도구가 실제로 도는 OS(기본 `process.platform`)이며 안내문과 `-Command`의 `$` 판정을 가른다.
180
+ */
181
+ export function matchPowerShellSyntax(
182
+ command: string,
183
+ platform: NodeJS.Platform = process.platform,
184
+ ): string | undefined {
185
+ const body = stripHeredocBodies(command);
186
+
187
+ for (const tokens of segmentTokens(body, platform !== "win32")) {
188
+ const head = tokens[0];
189
+ if (head.quoted) continue;
190
+ const name = commandBasename(head.value);
191
+ if (name === "powershell" || name === "pwsh") {
192
+ const hostReason = matchPowerShellHost(tokens.slice(1), platform);
193
+ if (hostReason) return hostReason;
194
+ continue;
195
+ }
196
+ if (CMDLETS.has(name)) return reason(`cmdlet \`${head.value}\``, platform);
197
+ }
198
+
199
+ const masked = maskQuoted(body);
200
+ const envVariable = /\$env:[A-Za-z_]\w*/i.exec(masked);
201
+ if (envVariable) return reason(`\`${envVariable[0]}\``, platform);
202
+
203
+ const assignment = /(?:^|[;&|{\n])[ \t]*(\$[A-Za-z_]\w*)[ \t]*(?:[-+*/]|\?\?)?=(?!=)/.exec(masked);
204
+ if (assignment) return reason(`\`${assignment[1]} = ...\` 대입`, platform);
205
+
206
+ const block = /(?:^|[;&|{\n])[ \t]*(if|elseif|foreach|while)[ \t]*\([^\n]*\)[ \t]*\{/i.exec(masked);
207
+ if (block) return reason(`\`${block[1]} (...) { }\` 블록`, platform);
208
+
209
+ return undefined;
210
+ }