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,211 +1,211 @@
1
- interface PreparedTaskSource {
2
- name: string;
3
- task: string;
4
- }
5
-
6
- interface PreparedTaskRecord extends PreparedTaskSource {
7
- batchId: string;
8
- context: string;
9
- }
10
-
11
- interface PreparedSessionState {
12
- batchesBySignature: Map<string, string[]>;
13
- records: Map<string, PreparedTaskRecord>;
14
- }
15
-
16
- interface PreparedTaskGlobalState {
17
- version: 1;
18
- sessions: Map<string, PreparedSessionState>;
19
- nextBatchId: number;
20
- }
21
-
22
- const PREPARED_TASK_STATE = Symbol.for("@oh-my-pi/omp/prepared-task-state/v1");
23
- const shared = (() => {
24
- const existing = Reflect.get(globalThis, PREPARED_TASK_STATE) as PreparedTaskGlobalState | undefined;
25
- if (existing) return existing;
26
- const created: PreparedTaskGlobalState = {
27
- version: 1,
28
- sessions: new Map(),
29
- nextBatchId: 0,
30
- };
31
- Reflect.set(globalThis, PREPARED_TASK_STATE, created);
32
- return created;
33
- })();
34
- const sessions = shared.sessions;
35
- const CONTEXT_REFERENCE = "PREPARED_CONTEXT";
36
- /**
37
- * exact 참조 한 줄. 추천 변경 근거는 maker_route 결과를 본 뒤에 정해지므로, 다음 줄에 `ROUTING_REASON:` 한 줄만
38
- * 더 받아 복원한 원문 끝에 붙인다. 근거는 beforeTask 게이트(`\S.+`)와 같은 최소 길이이고, 그 줄 뒤에는 줄바꿈
39
- * 하나만 허용한다(U+2028·U+2029 같은 줄 구분자도 거절). 그 밖의 덧붙임은 원문 보존을 위해 계속 거절한다.
40
- */
41
- const TASK_REFERENCE =
42
- /^PREPARED_TASK:\s*([A-Za-z0-9._-]+)(?:[ \t]*\r?\n[ \t]*(ROUTING_REASON:[ \t]*\S[^\r\n\u2028\u2029]*\S)[ \t]*(?:\r?\n)?|\s*)$/;
43
-
44
- function requireSessionId(sessionId: string): string {
45
- const normalized = sessionId.trim();
46
- if (!normalized) throw new Error("prepared task 참조에는 현재 session id가 필요합니다.");
47
- return normalized;
48
- }
49
-
50
- function stateFor(sessionId: string): PreparedSessionState {
51
- const key = requireSessionId(sessionId);
52
- let state = sessions.get(key);
53
- if (!state) {
54
- state = { batchesBySignature: new Map(), records: new Map() };
55
- sessions.set(key, state);
56
- }
57
- return state;
58
- }
59
-
60
- /** 같은 session의 같은 context+brief batch는 한 번만 저장하고 기존 참조를 재사용한다. */
61
- export function storePreparedTaskBatch(
62
- context: string,
63
- tasks: readonly PreparedTaskSource[],
64
- sessionId: string,
65
- ): string[] {
66
- if (tasks.length === 0) throw new Error("prepared task batch에는 task가 하나 이상 필요합니다.");
67
- const state = stateFor(sessionId);
68
- const signature = JSON.stringify([context, tasks.map((task) => [task.name, task.task])]);
69
- const existing = state.batchesBySignature.get(signature);
70
- if (existing) return [...existing];
71
-
72
- const batchId = `b${++shared.nextBatchId}`;
73
- const ids = tasks.map((task, index) => {
74
- if (!task.name.trim()) throw new Error("prepared task에는 비어 있지 않은 name이 필요합니다.");
75
- const id = `${batchId}.${index + 1}`;
76
- state.records.set(id, { batchId, context, name: task.name, task: task.task });
77
- return id;
78
- });
79
- state.batchesBySignature.set(signature, ids);
80
- return [...ids];
81
- }
82
-
83
- /** session lifecycle이 새로 시작될 때만 해당 session의 brief 참조를 해제한다. */
84
- export function clearPreparedTaskSession(sessionId: string): void {
85
- const key = sessionId.trim();
86
- if (key) sessions.delete(key);
87
- }
88
-
89
- /** 거절 진단에 싣는 사용자 입력 유래 값의 상한. task 원문 본문은 싣지 않는다. */
90
- const DIAGNOSTIC_VALUE_LIMIT = 60;
91
- const DIAGNOSTIC_LIST_LIMIT = 12;
92
-
93
- function clipped(value: string, limit = DIAGNOSTIC_VALUE_LIMIT): string {
94
- const single = value.replace(/\s+/g, " ").trim();
95
- return single.length > limit ? `${single.slice(0, limit)}…` : single;
96
- }
97
-
98
- /**
99
- * 참조로 보이지만 exact 문법이 아닌 task 값이 어디서 벗어났는지 한 줄로 집는다. 본문은 에코하지 않고
100
- * 참조 뒤에 붙은 줄·글자 수와 preparedId 토큰만 싣는다.
101
- */
102
- function describeReference(value: string): string {
103
- const trimmed = value.trim();
104
- const exact = TASK_REFERENCE.exec(trimmed);
105
- if (exact) return `앞뒤 공백이나 줄바꿈이 있어 exact 참조가 아닙니다(정확히 'PREPARED_TASK: ${clipped(exact[1]!)}'${exact[2] ? "와 다음 줄 'ROUTING_REASON: <근거>' 하나" : ""})`;
106
- const notes: string[] = [];
107
- if (!trimmed.startsWith("PREPARED_TASK:")) notes.push("'PREPARED_TASK:' 접두 표기가 다릅니다(대문자 접두 뒤 바로 콜론)");
108
- const after = trimmed.replace(/^PREPARED_TASK\s*:\s*/i, "");
109
- if (!after) {
110
- notes.push("'PREPARED_TASK:' 뒤에 preparedId가 없습니다");
111
- return notes.join(" · ");
112
- }
113
- const [id = "", ...rest] = after.split(/\s+/);
114
- const lines = trimmed.split(/\r?\n/).length;
115
- if (lines > 1) notes.push(`참조 뒤에 본문 ${lines - 1}줄이 더 붙었습니다(덧붙일 수 있는 것은 다음 줄 'ROUTING_REASON: <근거>' 한 줄뿐)`);
116
- if (!/^[A-Za-z0-9._-]+$/.test(id)) notes.push(`preparedId 형식이 아닙니다: '${clipped(id, 40)}' (허용 문자: A-Za-z0-9._-)`);
117
- else if (lines === 1 && rest.length > 0) notes.push(`참조 뒤에 다른 내용이 ${rest.join(" ").length}자 붙었습니다`);
118
- return notes.join(" · ") || "exact 참조 문법이 아닙니다";
119
- }
120
-
121
- /**
122
- * task의 기존 문자열 필드에 실린 prepared 참조를 canonical input으로 복원한다.
123
- * full input은 객체 identity까지 그대로 보존하며, 참조 입력은 얕은 복사본을 반환한다.
124
- */
125
- export function resolvePreparedTaskInput(
126
- input: Record<string, unknown>,
127
- sessionId: string,
128
- ): Record<string, unknown> {
129
- const items = (Array.isArray(input.tasks) ? input.tasks : [input]) as unknown[];
130
- const taskValues = items.map((item) =>
131
- item && typeof item === "object" && !Array.isArray(item)
132
- ? (item as Record<string, unknown>).task
133
- : undefined,
134
- );
135
- const matches = taskValues.map((value) => (typeof value === "string" ? TASK_REFERENCE.exec(value) : null));
136
- const references = matches.map((match) => match?.[1]);
137
- const referenceLike = taskValues.map((value) =>
138
- typeof value === "string" && /^PREPARED_TASK\s*:/i.test(value.trim()),
139
- );
140
- const hasReference = references.some((id) => id !== undefined);
141
- const hasContextMarker = input.context === CONTEXT_REFERENCE;
142
-
143
- if (!hasReference && !hasContextMarker && !referenceLike.some(Boolean)) return input;
144
- const malformedIndex = referenceLike.findIndex((like, index) => like && references[index] === undefined);
145
- if (malformedIndex >= 0) {
146
- throw new Error(
147
- `task[${malformedIndex}]의 task 값이 exact prepared 참조가 아닙니다: ${describeReference(taskValues[malformedIndex] as string)}. ` +
148
- "참조는 task 문자열 전체를 'PREPARED_TASK: <preparedId>' 하나로 두고(추천 변경 근거만 다음 줄 'ROUTING_REASON: <근거>' 한 줄로 덧붙일 수 있음), 원문은 maker_route가 보관한 그대로 복원되므로 다른 내용은 덧붙이지 않습니다.",
149
- );
150
- }
151
- if (hasReference && !hasContextMarker) {
152
- const received = input.context;
153
- const label = typeof received === "string" && received.length > 0 ? `'${clipped(received)}'` : "<없음>";
154
- throw new Error(
155
- `prepared 참조를 쓰려면 context를 정확히 '${CONTEXT_REFERENCE}'로 보내야 합니다: 받은 값 ${label}. ` +
156
- "원문 context는 참조가 복원하므로 함께 보내지 않습니다. 추천 변경 근거는 context가 아니라 해당 task 참조의 다음 줄 'ROUTING_REASON: <근거>'로 보냅니다.",
157
- );
158
- }
159
- if (!hasReference) {
160
- throw new Error(
161
- `context='${CONTEXT_REFERENCE}'인데 exact prepared 참조가 없습니다: task는 'PREPARED_TASK: <preparedId>' 하나이거나, ` +
162
- "참조 대신 full 원문을 그 context와 함께 보내야 합니다.",
163
- );
164
- }
165
- if (references.some((id) => id === undefined)) {
166
- const index = references.findIndex((id) => id === undefined);
167
- const mixed = taskValues[index];
168
- throw new Error(
169
- `${typeof mixed === "string" ? `task[${index}]는 prepared 참조가 아니라 full 원문입니다` : `task[${index}]의 task 값이 문자열이 아닙니다`}. ` +
170
- "한 호출에서 참조와 원문을 섞을 수 없습니다: 모든 task를 'PREPARED_TASK: <preparedId>'로 보내거나 모두 full 원문으로 보내세요.",
171
- );
172
- }
173
-
174
- const state = sessions.get(requireSessionId(sessionId));
175
- if (!state) throw new Error("현재 session에 prepared task 참조가 없습니다. 먼저 maker_route로 이 session의 발주를 준비하세요.");
176
- const records = references.map((id) => state.records.get(id!));
177
- if (records.some((record) => !record)) {
178
- const missing = references.filter((id, index) => !records[index]).map((id) => `'${clipped(id!, 40)}'`);
179
- const available = [...state.records.keys()];
180
- const shown = available.slice(0, DIAGNOSTIC_LIST_LIMIT);
181
- throw new Error(
182
- `prepared task 참조가 현재 session에 없거나 이미 해제되었습니다: ${missing.join(", ")}. ` +
183
- `이 session에 준비된 참조: ${available.length === 0 ? "없음" : shown.join(", ")}${available.length > shown.length ? ` 외 ${available.length - shown.length}개` : ""}. ` +
184
- "maker_route가 돌려준 preparedId를 그대로 쓰세요.",
185
- );
186
- }
187
- const resolved = records as PreparedTaskRecord[];
188
- const batchId = resolved[0]!.batchId;
189
- const context = resolved[0]!.context;
190
- if (resolved.some((record) => record.batchId !== batchId || record.context !== context)) {
191
- throw new Error("서로 다른 prepared batch의 task 참조를 한 호출에 섞을 수 없습니다.");
192
- }
193
-
194
- const restoredItems = items.map((item, index) => {
195
- const source = item as Record<string, unknown>;
196
- const record = resolved[index]!;
197
- // 참조에 이미 session·batch·ref로 묶인 name이 있으므로 생략만 그 name으로 복원한다. 명시한 값은 일치해야 한다.
198
- if (source.name !== undefined && source.name !== record.name) {
199
- throw new Error(
200
- `prepared task name이 일치하지 않습니다: prepared='${clipped(record.name, 40)}' 발주='${clipped(typeof source.name === "string" ? source.name : String(source.name), 40)}'. ` +
201
- "참조 발주는 name을 생략하거나 준비한 이름을 그대로 써야 합니다.",
202
- );
203
- }
204
- const reason = matches[index]![2]?.trim();
205
- return { ...source, name: record.name, task: reason ? `${record.task.trimEnd()}\n${reason}` : record.task };
206
- });
207
- if (Array.isArray(input.tasks)) {
208
- return { ...input, context, tasks: restoredItems };
209
- }
210
- return { ...restoredItems[0], context };
211
- }
1
+ interface PreparedTaskSource {
2
+ name: string;
3
+ task: string;
4
+ }
5
+
6
+ interface PreparedTaskRecord extends PreparedTaskSource {
7
+ batchId: string;
8
+ context: string;
9
+ }
10
+
11
+ interface PreparedSessionState {
12
+ batchesBySignature: Map<string, string[]>;
13
+ records: Map<string, PreparedTaskRecord>;
14
+ }
15
+
16
+ interface PreparedTaskGlobalState {
17
+ version: 1;
18
+ sessions: Map<string, PreparedSessionState>;
19
+ nextBatchId: number;
20
+ }
21
+
22
+ const PREPARED_TASK_STATE = Symbol.for("@oh-my-pi/omp/prepared-task-state/v1");
23
+ const shared = (() => {
24
+ const existing = Reflect.get(globalThis, PREPARED_TASK_STATE) as PreparedTaskGlobalState | undefined;
25
+ if (existing) return existing;
26
+ const created: PreparedTaskGlobalState = {
27
+ version: 1,
28
+ sessions: new Map(),
29
+ nextBatchId: 0,
30
+ };
31
+ Reflect.set(globalThis, PREPARED_TASK_STATE, created);
32
+ return created;
33
+ })();
34
+ const sessions = shared.sessions;
35
+ const CONTEXT_REFERENCE = "PREPARED_CONTEXT";
36
+ /**
37
+ * exact 참조 한 줄. 추천 변경 근거는 maker_route 결과를 본 뒤에 정해지므로, 다음 줄에 `ROUTING_REASON:` 한 줄만
38
+ * 더 받아 복원한 원문 끝에 붙인다. 근거는 beforeTask 게이트(`\S.+`)와 같은 최소 길이이고, 그 줄 뒤에는 줄바꿈
39
+ * 하나만 허용한다(U+2028·U+2029 같은 줄 구분자도 거절). 그 밖의 덧붙임은 원문 보존을 위해 계속 거절한다.
40
+ */
41
+ const TASK_REFERENCE =
42
+ /^PREPARED_TASK:\s*([A-Za-z0-9._-]+)(?:[ \t]*\r?\n[ \t]*(ROUTING_REASON:[ \t]*\S[^\r\n\u2028\u2029]*\S)[ \t]*(?:\r?\n)?|\s*)$/;
43
+
44
+ function requireSessionId(sessionId: string): string {
45
+ const normalized = sessionId.trim();
46
+ if (!normalized) throw new Error("prepared task 참조에는 현재 session id가 필요합니다.");
47
+ return normalized;
48
+ }
49
+
50
+ function stateFor(sessionId: string): PreparedSessionState {
51
+ const key = requireSessionId(sessionId);
52
+ let state = sessions.get(key);
53
+ if (!state) {
54
+ state = { batchesBySignature: new Map(), records: new Map() };
55
+ sessions.set(key, state);
56
+ }
57
+ return state;
58
+ }
59
+
60
+ /** 같은 session의 같은 context+brief batch는 한 번만 저장하고 기존 참조를 재사용한다. */
61
+ export function storePreparedTaskBatch(
62
+ context: string,
63
+ tasks: readonly PreparedTaskSource[],
64
+ sessionId: string,
65
+ ): string[] {
66
+ if (tasks.length === 0) throw new Error("prepared task batch에는 task가 하나 이상 필요합니다.");
67
+ const state = stateFor(sessionId);
68
+ const signature = JSON.stringify([context, tasks.map((task) => [task.name, task.task])]);
69
+ const existing = state.batchesBySignature.get(signature);
70
+ if (existing) return [...existing];
71
+
72
+ const batchId = `b${++shared.nextBatchId}`;
73
+ const ids = tasks.map((task, index) => {
74
+ if (!task.name.trim()) throw new Error("prepared task에는 비어 있지 않은 name이 필요합니다.");
75
+ const id = `${batchId}.${index + 1}`;
76
+ state.records.set(id, { batchId, context, name: task.name, task: task.task });
77
+ return id;
78
+ });
79
+ state.batchesBySignature.set(signature, ids);
80
+ return [...ids];
81
+ }
82
+
83
+ /** session lifecycle이 새로 시작될 때만 해당 session의 brief 참조를 해제한다. */
84
+ export function clearPreparedTaskSession(sessionId: string): void {
85
+ const key = sessionId.trim();
86
+ if (key) sessions.delete(key);
87
+ }
88
+
89
+ /** 거절 진단에 싣는 사용자 입력 유래 값의 상한. task 원문 본문은 싣지 않는다. */
90
+ const DIAGNOSTIC_VALUE_LIMIT = 60;
91
+ const DIAGNOSTIC_LIST_LIMIT = 12;
92
+
93
+ function clipped(value: string, limit = DIAGNOSTIC_VALUE_LIMIT): string {
94
+ const single = value.replace(/\s+/g, " ").trim();
95
+ return single.length > limit ? `${single.slice(0, limit)}…` : single;
96
+ }
97
+
98
+ /**
99
+ * 참조로 보이지만 exact 문법이 아닌 task 값이 어디서 벗어났는지 한 줄로 집는다. 본문은 에코하지 않고
100
+ * 참조 뒤에 붙은 줄·글자 수와 preparedId 토큰만 싣는다.
101
+ */
102
+ function describeReference(value: string): string {
103
+ const trimmed = value.trim();
104
+ const exact = TASK_REFERENCE.exec(trimmed);
105
+ if (exact) return `앞뒤 공백이나 줄바꿈이 있어 exact 참조가 아닙니다(정확히 'PREPARED_TASK: ${clipped(exact[1]!)}'${exact[2] ? "와 다음 줄 'ROUTING_REASON: <근거>' 하나" : ""})`;
106
+ const notes: string[] = [];
107
+ if (!trimmed.startsWith("PREPARED_TASK:")) notes.push("'PREPARED_TASK:' 접두 표기가 다릅니다(대문자 접두 뒤 바로 콜론)");
108
+ const after = trimmed.replace(/^PREPARED_TASK\s*:\s*/i, "");
109
+ if (!after) {
110
+ notes.push("'PREPARED_TASK:' 뒤에 preparedId가 없습니다");
111
+ return notes.join(" · ");
112
+ }
113
+ const [id = "", ...rest] = after.split(/\s+/);
114
+ const lines = trimmed.split(/\r?\n/).length;
115
+ if (lines > 1) notes.push(`참조 뒤에 본문 ${lines - 1}줄이 더 붙었습니다(덧붙일 수 있는 것은 다음 줄 'ROUTING_REASON: <근거>' 한 줄뿐)`);
116
+ if (!/^[A-Za-z0-9._-]+$/.test(id)) notes.push(`preparedId 형식이 아닙니다: '${clipped(id, 40)}' (허용 문자: A-Za-z0-9._-)`);
117
+ else if (lines === 1 && rest.length > 0) notes.push(`참조 뒤에 다른 내용이 ${rest.join(" ").length}자 붙었습니다`);
118
+ return notes.join(" · ") || "exact 참조 문법이 아닙니다";
119
+ }
120
+
121
+ /**
122
+ * task의 기존 문자열 필드에 실린 prepared 참조를 canonical input으로 복원한다.
123
+ * full input은 객체 identity까지 그대로 보존하며, 참조 입력은 얕은 복사본을 반환한다.
124
+ */
125
+ export function resolvePreparedTaskInput(
126
+ input: Record<string, unknown>,
127
+ sessionId: string,
128
+ ): Record<string, unknown> {
129
+ const items = (Array.isArray(input.tasks) ? input.tasks : [input]) as unknown[];
130
+ const taskValues = items.map((item) =>
131
+ item && typeof item === "object" && !Array.isArray(item)
132
+ ? (item as Record<string, unknown>).task
133
+ : undefined,
134
+ );
135
+ const matches = taskValues.map((value) => (typeof value === "string" ? TASK_REFERENCE.exec(value) : null));
136
+ const references = matches.map((match) => match?.[1]);
137
+ const referenceLike = taskValues.map((value) =>
138
+ typeof value === "string" && /^PREPARED_TASK\s*:/i.test(value.trim()),
139
+ );
140
+ const hasReference = references.some((id) => id !== undefined);
141
+ const hasContextMarker = input.context === CONTEXT_REFERENCE;
142
+
143
+ if (!hasReference && !hasContextMarker && !referenceLike.some(Boolean)) return input;
144
+ const malformedIndex = referenceLike.findIndex((like, index) => like && references[index] === undefined);
145
+ if (malformedIndex >= 0) {
146
+ throw new Error(
147
+ `task[${malformedIndex}]의 task 값이 exact prepared 참조가 아닙니다: ${describeReference(taskValues[malformedIndex] as string)}. ` +
148
+ "참조는 task 문자열 전체를 'PREPARED_TASK: <preparedId>' 하나로 두고(추천 변경 근거만 다음 줄 'ROUTING_REASON: <근거>' 한 줄로 덧붙일 수 있음), 원문은 maker_route가 보관한 그대로 복원되므로 다른 내용은 덧붙이지 않습니다.",
149
+ );
150
+ }
151
+ if (hasReference && !hasContextMarker) {
152
+ const received = input.context;
153
+ const label = typeof received === "string" && received.length > 0 ? `'${clipped(received)}'` : "<없음>";
154
+ throw new Error(
155
+ `prepared 참조를 쓰려면 context를 정확히 '${CONTEXT_REFERENCE}'로 보내야 합니다: 받은 값 ${label}. ` +
156
+ "원문 context는 참조가 복원하므로 함께 보내지 않습니다. 추천 변경 근거는 context가 아니라 해당 task 참조의 다음 줄 'ROUTING_REASON: <근거>'로 보냅니다.",
157
+ );
158
+ }
159
+ if (!hasReference) {
160
+ throw new Error(
161
+ `context='${CONTEXT_REFERENCE}'인데 exact prepared 참조가 없습니다: task는 'PREPARED_TASK: <preparedId>' 하나이거나, ` +
162
+ "참조 대신 full 원문을 그 context와 함께 보내야 합니다.",
163
+ );
164
+ }
165
+ if (references.some((id) => id === undefined)) {
166
+ const index = references.findIndex((id) => id === undefined);
167
+ const mixed = taskValues[index];
168
+ throw new Error(
169
+ `${typeof mixed === "string" ? `task[${index}]는 prepared 참조가 아니라 full 원문입니다` : `task[${index}]의 task 값이 문자열이 아닙니다`}. ` +
170
+ "한 호출에서 참조와 원문을 섞을 수 없습니다: 모든 task를 'PREPARED_TASK: <preparedId>'로 보내거나 모두 full 원문으로 보내세요.",
171
+ );
172
+ }
173
+
174
+ const state = sessions.get(requireSessionId(sessionId));
175
+ if (!state) throw new Error("현재 session에 prepared task 참조가 없습니다. 먼저 maker_route로 이 session의 발주를 준비하세요.");
176
+ const records = references.map((id) => state.records.get(id!));
177
+ if (records.some((record) => !record)) {
178
+ const missing = references.filter((id, index) => !records[index]).map((id) => `'${clipped(id!, 40)}'`);
179
+ const available = [...state.records.keys()];
180
+ const shown = available.slice(0, DIAGNOSTIC_LIST_LIMIT);
181
+ throw new Error(
182
+ `prepared task 참조가 현재 session에 없거나 이미 해제되었습니다: ${missing.join(", ")}. ` +
183
+ `이 session에 준비된 참조: ${available.length === 0 ? "없음" : shown.join(", ")}${available.length > shown.length ? ` 외 ${available.length - shown.length}개` : ""}. ` +
184
+ "maker_route가 돌려준 preparedId를 그대로 쓰세요.",
185
+ );
186
+ }
187
+ const resolved = records as PreparedTaskRecord[];
188
+ const batchId = resolved[0]!.batchId;
189
+ const context = resolved[0]!.context;
190
+ if (resolved.some((record) => record.batchId !== batchId || record.context !== context)) {
191
+ throw new Error("서로 다른 prepared batch의 task 참조를 한 호출에 섞을 수 없습니다.");
192
+ }
193
+
194
+ const restoredItems = items.map((item, index) => {
195
+ const source = item as Record<string, unknown>;
196
+ const record = resolved[index]!;
197
+ // 참조에 이미 session·batch·ref로 묶인 name이 있으므로 생략만 그 name으로 복원한다. 명시한 값은 일치해야 한다.
198
+ if (source.name !== undefined && source.name !== record.name) {
199
+ throw new Error(
200
+ `prepared task name이 일치하지 않습니다: prepared='${clipped(record.name, 40)}' 발주='${clipped(typeof source.name === "string" ? source.name : String(source.name), 40)}'. ` +
201
+ "참조 발주는 name을 생략하거나 준비한 이름을 그대로 써야 합니다.",
202
+ );
203
+ }
204
+ const reason = matches[index]![2]?.trim();
205
+ return { ...source, name: record.name, task: reason ? `${record.task.trimEnd()}\n${reason}` : record.task };
206
+ });
207
+ if (Array.isArray(input.tasks)) {
208
+ return { ...input, context, tasks: restoredItems };
209
+ }
210
+ return { ...restoredItems[0], context };
211
+ }