cuelo 0.10.11 → 0.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +10 -9
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +2 -2
  6. package/.next/required-server-files.json +2 -2
  7. package/.next/routes-manifest.json +6 -0
  8. package/.next/server/app/_global-error/page.js +3 -3
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +2 -2
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  29. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  31. package/.next/server/app/api/agent/[id]/route.js +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/running/route.js +1 -1
  34. package/.next/server/app/api/attachment-settings/route.js +1 -1
  35. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  36. package/.next/server/app/api/attachments/draft/route.js +1 -1
  37. package/.next/server/app/api/attachments/route.js +2 -2
  38. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  39. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  40. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  41. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/providers/route.js +1 -1
  43. package/.next/server/app/api/cwd/browse/route.js +1 -1
  44. package/.next/server/app/api/cwd/validate/route.js +1 -1
  45. package/.next/server/app/api/default-cwd/route.js +1 -1
  46. package/.next/server/app/api/display-settings/route.js +1 -1
  47. package/.next/server/app/api/document-text/route.js +2 -2
  48. package/.next/server/app/api/experiments/route.js +1 -1
  49. package/.next/server/app/api/file-index/route.js +1 -1
  50. package/.next/server/app/api/files/[...path]/route.js +1 -1
  51. package/.next/server/app/api/git/diff/route.js +1 -1
  52. package/.next/server/app/api/git/status/route.js +1 -1
  53. package/.next/server/app/api/github/projects/route.js +1 -1
  54. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  55. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  56. package/.next/server/app/api/gpt6/token/route.js +1 -1
  57. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  58. package/.next/server/app/api/home/route.js +1 -1
  59. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  60. package/.next/server/app/api/live/character-voice/route.js +1 -1
  61. package/.next/server/app/api/live/events/route.js +2 -2
  62. package/.next/server/app/api/live/offer/route.js +1 -1
  63. package/.next/server/app/api/live/voices/route.js +1 -1
  64. package/.next/server/app/api/lounge/events/route.js +2 -2
  65. package/.next/server/app/api/lounge/route.js +1 -1
  66. package/.next/server/app/api/mcp/route.js +2 -2
  67. package/.next/server/app/api/model-roles/route.js +1 -1
  68. package/.next/server/app/api/models/route.js +1 -1
  69. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  70. package/.next/server/app/api/models-config/discover/route.js +1 -1
  71. package/.next/server/app/api/models-config/route.js +3 -3
  72. package/.next/server/app/api/models-config/test/route.js +1 -1
  73. package/.next/server/app/api/office-avatars/[id]/route.js +1 -1
  74. package/.next/server/app/api/office-avatars/route.js +1 -1
  75. package/.next/server/app/api/plugins/route.js +1 -1
  76. package/.next/server/app/api/project-docs/route.js +1 -0
  77. package/.next/server/app/api/project-docs/route.js.nft.json +1 -0
  78. package/.next/server/app/api/project-docs/route_client-reference-manifest.js +1 -0
  79. package/.next/server/app/api/project-trust/route.js +1 -1
  80. package/.next/server/app/api/projects/route.js +2 -2
  81. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  82. package/.next/server/app/api/runs/route.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  84. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  85. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  86. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  87. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  88. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  89. package/.next/server/app/api/sessions/route.js +1 -1
  90. package/.next/server/app/api/sessions/search/route.js +1 -1
  91. package/.next/server/app/api/settings/route.js +1 -1
  92. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  93. package/.next/server/app/api/skills/check/route.js +1 -1
  94. package/.next/server/app/api/skills/install/route.js +2 -2
  95. package/.next/server/app/api/skills/route.js +2 -2
  96. package/.next/server/app/api/skills/search/route.js +1 -1
  97. package/.next/server/app/api/skills/update/route.js +1 -1
  98. package/.next/server/app/api/subagents/eta/route.js +1 -1
  99. package/.next/server/app/api/theme/route.js +1 -1
  100. package/.next/server/app/api/tool-image/route.js +1 -1
  101. package/.next/server/app/api/update-maintenance/route.js +3 -3
  102. package/.next/server/app/api/updates/route.js +1 -1
  103. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  104. package/.next/server/app/api/web-access/route.js +1 -1
  105. package/.next/server/app/api/web6/consults/route.js +1 -1
  106. package/.next/server/app/api/worktrees/route.js +1 -1
  107. package/.next/server/app/favicon.ico/route.js +1 -1
  108. package/.next/server/app/index.html +1 -1
  109. package/.next/server/app/index.rsc +5 -5
  110. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  111. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  112. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  113. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  114. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  115. package/.next/server/app/manifest.webmanifest/route.js +1 -1
  116. package/.next/server/app/office/page.js +2 -2
  117. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  118. package/.next/server/app/office-preview/page.js +2 -2
  119. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  120. package/.next/server/app/office-preview.html +1 -1
  121. package/.next/server/app/office-preview.rsc +3 -3
  122. package/.next/server/app/office-preview.segments/_full.segment.rsc +3 -3
  123. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  124. package/.next/server/app/office-preview.segments/_index.segment.rsc +3 -3
  125. package/.next/server/app/office-preview.segments/_tree.segment.rsc +2 -2
  126. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  127. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  128. package/.next/server/app/office.html +1 -1
  129. package/.next/server/app/office.rsc +5 -5
  130. package/.next/server/app/office.segments/_full.segment.rsc +5 -5
  131. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  132. package/.next/server/app/office.segments/_index.segment.rsc +3 -3
  133. package/.next/server/app/office.segments/_tree.segment.rsc +2 -2
  134. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
  135. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  136. package/.next/server/app/page.js +2 -2
  137. package/.next/server/app/page_client-reference-manifest.js +1 -1
  138. package/.next/server/app/recover/page.js +2 -2
  139. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  140. package/.next/server/app/recover.html +1 -1
  141. package/.next/server/app/recover.rsc +3 -3
  142. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  143. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  144. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  145. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  146. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  147. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  148. package/.next/server/app-paths-manifest.json +10 -9
  149. package/.next/server/chunks/5431.js +1 -1
  150. package/.next/server/chunks/5489.js +3 -3
  151. package/.next/server/chunks/7362.js +1 -1
  152. package/.next/server/chunks/9108.js +1 -1
  153. package/.next/server/chunks/9280.js +3 -3
  154. package/.next/server/middleware-build-manifest.js +1 -1
  155. package/.next/server/pages/404.html +1 -1
  156. package/.next/server/pages/500.html +1 -1
  157. package/.next/server/server-reference-manifest.json +1 -1
  158. package/.next/static/B90WNxaFZ8Tg4XO_DiNPQ/_buildManifest.js +1 -0
  159. package/.next/static/chunks/6110-1db5217d11d7c23b.js +1 -0
  160. package/.next/static/chunks/{9575-4d5fd3e3172f7444.js → 9575-f75f250a07112d4d.js} +11 -11
  161. package/.next/static/chunks/app/_global-error/{page-c6b67b5743edc755.js → page-2fe6bfb5aa68a2a2.js} +1 -1
  162. package/.next/static/chunks/app/api/agent/[id]/account/{route-c6b67b5743edc755.js → route-2fe6bfb5aa68a2a2.js} +1 -1
  163. package/.next/static/chunks/app/api/agent/[id]/bash-output/{route-c6b67b5743edc755.js → route-2fe6bfb5aa68a2a2.js} +1 -1
  164. package/.next/static/chunks/app/api/agent/[id]/events/{route-c6b67b5743edc755.js → route-2fe6bfb5aa68a2a2.js} +1 -1
  165. package/.next/static/chunks/app/api/agent/[id]/route-2fe6bfb5aa68a2a2.js +1 -0
  166. package/.next/static/chunks/app/api/agent/new/route-2fe6bfb5aa68a2a2.js +1 -0
  167. package/.next/static/chunks/app/api/agent/running/route-2fe6bfb5aa68a2a2.js +1 -0
  168. package/.next/static/chunks/app/api/attachment-settings/route-2fe6bfb5aa68a2a2.js +1 -0
  169. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-2fe6bfb5aa68a2a2.js +1 -0
  170. package/.next/static/chunks/app/api/attachments/draft/route-2fe6bfb5aa68a2a2.js +1 -0
  171. package/.next/static/chunks/app/api/attachments/route-2fe6bfb5aa68a2a2.js +1 -0
  172. package/.next/static/chunks/app/api/auth/all-providers/route-2fe6bfb5aa68a2a2.js +1 -0
  173. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-2fe6bfb5aa68a2a2.js +1 -0
  174. package/.next/static/chunks/app/api/auth/login/[provider]/route-2fe6bfb5aa68a2a2.js +1 -0
  175. package/.next/static/chunks/app/api/auth/logout/[provider]/route-2fe6bfb5aa68a2a2.js +1 -0
  176. package/.next/static/chunks/app/api/auth/providers/route-2fe6bfb5aa68a2a2.js +1 -0
  177. package/.next/static/chunks/app/api/cwd/browse/route-2fe6bfb5aa68a2a2.js +1 -0
  178. package/.next/static/chunks/app/api/cwd/validate/route-2fe6bfb5aa68a2a2.js +1 -0
  179. package/.next/static/chunks/app/api/default-cwd/route-2fe6bfb5aa68a2a2.js +1 -0
  180. package/.next/static/chunks/app/api/display-settings/route-2fe6bfb5aa68a2a2.js +1 -0
  181. package/.next/static/chunks/app/api/document-text/route-2fe6bfb5aa68a2a2.js +1 -0
  182. package/.next/static/chunks/app/api/experiments/route-2fe6bfb5aa68a2a2.js +1 -0
  183. package/.next/static/chunks/app/api/file-index/route-2fe6bfb5aa68a2a2.js +1 -0
  184. package/.next/static/chunks/app/api/files/[...path]/route-2fe6bfb5aa68a2a2.js +1 -0
  185. package/.next/static/chunks/app/api/git/diff/route-2fe6bfb5aa68a2a2.js +1 -0
  186. package/.next/static/chunks/app/api/git/status/route-2fe6bfb5aa68a2a2.js +1 -0
  187. package/.next/static/chunks/app/api/github/projects/route-2fe6bfb5aa68a2a2.js +1 -0
  188. package/.next/static/chunks/app/api/gpt6/handles/route-2fe6bfb5aa68a2a2.js +1 -0
  189. package/.next/static/chunks/app/api/gpt6/reply/route-2fe6bfb5aa68a2a2.js +1 -0
  190. package/.next/static/chunks/app/api/gpt6/token/route-2fe6bfb5aa68a2a2.js +1 -0
  191. package/.next/static/chunks/app/api/gpt6/web6-session/route-2fe6bfb5aa68a2a2.js +1 -0
  192. package/.next/static/chunks/app/api/home/route-2fe6bfb5aa68a2a2.js +1 -0
  193. package/.next/static/chunks/app/api/live/call/[callId]/route-2fe6bfb5aa68a2a2.js +1 -0
  194. package/.next/static/chunks/app/api/live/character-voice/route-2fe6bfb5aa68a2a2.js +1 -0
  195. package/.next/static/chunks/app/api/live/events/route-2fe6bfb5aa68a2a2.js +1 -0
  196. package/.next/static/chunks/app/api/live/offer/route-2fe6bfb5aa68a2a2.js +1 -0
  197. package/.next/static/chunks/app/api/live/voices/route-2fe6bfb5aa68a2a2.js +1 -0
  198. package/.next/static/chunks/app/api/lounge/events/route-2fe6bfb5aa68a2a2.js +1 -0
  199. package/.next/static/chunks/app/api/lounge/route-2fe6bfb5aa68a2a2.js +1 -0
  200. package/.next/static/chunks/app/api/mcp/route-2fe6bfb5aa68a2a2.js +1 -0
  201. package/.next/static/chunks/app/api/model-roles/route-2fe6bfb5aa68a2a2.js +1 -0
  202. package/.next/static/chunks/app/api/models/route-2fe6bfb5aa68a2a2.js +1 -0
  203. package/.next/static/chunks/app/api/models-config/catalog/route-2fe6bfb5aa68a2a2.js +1 -0
  204. package/.next/static/chunks/app/api/models-config/discover/route-2fe6bfb5aa68a2a2.js +1 -0
  205. package/.next/static/chunks/app/api/models-config/route-2fe6bfb5aa68a2a2.js +1 -0
  206. package/.next/static/chunks/app/api/models-config/test/route-2fe6bfb5aa68a2a2.js +1 -0
  207. package/.next/static/chunks/app/api/office-avatars/[id]/route-2fe6bfb5aa68a2a2.js +1 -0
  208. package/.next/static/chunks/app/api/office-avatars/route-2fe6bfb5aa68a2a2.js +1 -0
  209. package/.next/static/chunks/app/api/plugins/route-2fe6bfb5aa68a2a2.js +1 -0
  210. package/.next/static/chunks/app/api/project-docs/route-2fe6bfb5aa68a2a2.js +1 -0
  211. package/.next/static/chunks/app/api/project-trust/route-2fe6bfb5aa68a2a2.js +1 -0
  212. package/.next/static/chunks/app/api/projects/route-2fe6bfb5aa68a2a2.js +1 -0
  213. package/.next/static/chunks/app/api/runs/[runId]/route-2fe6bfb5aa68a2a2.js +1 -0
  214. package/.next/static/chunks/app/api/runs/route-2fe6bfb5aa68a2a2.js +1 -0
  215. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-2fe6bfb5aa68a2a2.js +1 -0
  216. package/.next/static/chunks/app/api/sessions/[id]/context/route-2fe6bfb5aa68a2a2.js +1 -0
  217. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-2fe6bfb5aa68a2a2.js +1 -0
  218. package/.next/static/chunks/app/api/sessions/[id]/export/route-2fe6bfb5aa68a2a2.js +1 -0
  219. package/.next/static/chunks/app/api/sessions/[id]/route-2fe6bfb5aa68a2a2.js +1 -0
  220. package/.next/static/chunks/app/api/sessions/[id]/state/route-2fe6bfb5aa68a2a2.js +1 -0
  221. package/.next/static/chunks/app/api/sessions/route-2fe6bfb5aa68a2a2.js +1 -0
  222. package/.next/static/chunks/app/api/sessions/search/route-2fe6bfb5aa68a2a2.js +1 -0
  223. package/.next/static/chunks/app/api/settings/route-2fe6bfb5aa68a2a2.js +1 -0
  224. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-2fe6bfb5aa68a2a2.js +1 -0
  225. package/.next/static/chunks/app/api/skills/check/route-2fe6bfb5aa68a2a2.js +1 -0
  226. package/.next/static/chunks/app/api/skills/install/route-2fe6bfb5aa68a2a2.js +1 -0
  227. package/.next/static/chunks/app/api/skills/route-2fe6bfb5aa68a2a2.js +1 -0
  228. package/.next/static/chunks/app/api/skills/search/route-2fe6bfb5aa68a2a2.js +1 -0
  229. package/.next/static/chunks/app/api/skills/update/route-2fe6bfb5aa68a2a2.js +1 -0
  230. package/.next/static/chunks/app/api/subagents/eta/route-2fe6bfb5aa68a2a2.js +1 -0
  231. package/.next/static/chunks/app/api/theme/route-2fe6bfb5aa68a2a2.js +1 -0
  232. package/.next/static/chunks/app/api/tool-image/route-2fe6bfb5aa68a2a2.js +1 -0
  233. package/.next/static/chunks/app/api/update-maintenance/route-2fe6bfb5aa68a2a2.js +1 -0
  234. package/.next/static/chunks/app/api/updates/route-2fe6bfb5aa68a2a2.js +1 -0
  235. package/.next/static/chunks/app/api/web-access/recovery/route-2fe6bfb5aa68a2a2.js +1 -0
  236. package/.next/static/chunks/app/api/web-access/route-2fe6bfb5aa68a2a2.js +1 -0
  237. package/.next/static/chunks/app/api/web6/consults/route-2fe6bfb5aa68a2a2.js +1 -0
  238. package/.next/static/chunks/app/api/worktrees/route-2fe6bfb5aa68a2a2.js +1 -0
  239. package/.next/static/chunks/app/{layout-41f95749f2546cbb.js → layout-4c592bc979a40fac.js} +1 -1
  240. package/.next/static/chunks/app/manifest.webmanifest/route-2fe6bfb5aa68a2a2.js +1 -0
  241. package/.next/static/chunks/next/dist/client/components/builtin/app-error-2fe6bfb5aa68a2a2.js +1 -0
  242. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2fe6bfb5aa68a2a2.js +1 -0
  243. package/.next/static/chunks/next/dist/client/components/builtin/not-found-2fe6bfb5aa68a2a2.js +1 -0
  244. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2fe6bfb5aa68a2a2.js +1 -0
  245. package/.next/static/css/{b7c4c1d5acb6c7ea.css → 27857d8746871d52.css} +1 -1
  246. package/.next/trace +108 -108
  247. package/.next/trace-build +1 -1
  248. package/.next/types/app/api/project-docs/route.ts +351 -0
  249. package/.next/types/routes.d.ts +2 -1
  250. package/.next/types/validator.ts +9 -0
  251. package/README.md +6 -1
  252. package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
  253. package/Tools/OMP_Global_Config/agent/RULES.md +4 -1
  254. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +3 -2
  255. package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +2 -2
  256. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +58 -4
  257. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +356 -0
  258. package/install.mjs +1 -0
  259. package/package.json +7 -7
  260. package/public/audio/completion/mitsu/01.wav +0 -0
  261. package/public/audio/completion/mitsu/02.wav +0 -0
  262. package/public/audio/completion/mitsu/03.wav +0 -0
  263. package/public/audio/completion/mitsu/04.wav +0 -0
  264. package/public/audio/completion/mitsu/05.wav +0 -0
  265. package/public/audio/completion/mitsu/06.wav +0 -0
  266. package/public/audio/completion/mitsu/approval/01.wav +0 -0
  267. package/public/audio/completion/mitsu/approval/02.wav +0 -0
  268. package/public/audio/completion/mitsu/approval/03.wav +0 -0
  269. package/public/audio/completion/mitsu/choice/01.wav +0 -0
  270. package/public/audio/completion/mitsu/choice/02.wav +0 -0
  271. package/public/audio/completion/mitsu/choice/03.wav +0 -0
  272. package/public/audio/completion/mitsu/failed/01.wav +0 -0
  273. package/public/audio/completion/mitsu/failed/02.wav +0 -0
  274. package/public/audio/completion/mitsu/failed/03.wav +0 -0
  275. package/public/audio/completion/mitsu/working/01.wav +0 -0
  276. package/public/audio/completion/mitsu/working/02.wav +0 -0
  277. package/public/audio/completion/mitsu/working/03.wav +0 -0
  278. package/public/avatars/mitsu.webp +0 -0
  279. package/public/stickers/mitsu/approval/01.webp +0 -0
  280. package/public/stickers/mitsu/approval/02.webp +0 -0
  281. package/public/stickers/mitsu/approval/03.webp +0 -0
  282. package/public/stickers/mitsu/choice/01.webp +0 -0
  283. package/public/stickers/mitsu/choice/02.webp +0 -0
  284. package/public/stickers/mitsu/choice/03.webp +0 -0
  285. package/public/stickers/mitsu/done/01.webp +0 -0
  286. package/public/stickers/mitsu/done/02.webp +0 -0
  287. package/public/stickers/mitsu/done/03.webp +0 -0
  288. package/public/stickers/mitsu/failed/01.webp +0 -0
  289. package/public/stickers/mitsu/failed/02.webp +0 -0
  290. package/public/stickers/mitsu/failed/03.webp +0 -0
  291. package/public/stickers/mitsu/working/01.webp +0 -0
  292. package/.next/static/7oFCc2ps2NBdX6L9v5ko3/_buildManifest.js +0 -1
  293. package/.next/static/chunks/6110-b6abad0258e1cf13.js +0 -1
  294. package/.next/static/chunks/app/api/agent/[id]/route-c6b67b5743edc755.js +0 -1
  295. package/.next/static/chunks/app/api/agent/new/route-c6b67b5743edc755.js +0 -1
  296. package/.next/static/chunks/app/api/agent/running/route-c6b67b5743edc755.js +0 -1
  297. package/.next/static/chunks/app/api/attachment-settings/route-c6b67b5743edc755.js +0 -1
  298. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-c6b67b5743edc755.js +0 -1
  299. package/.next/static/chunks/app/api/attachments/draft/route-c6b67b5743edc755.js +0 -1
  300. package/.next/static/chunks/app/api/attachments/route-c6b67b5743edc755.js +0 -1
  301. package/.next/static/chunks/app/api/auth/all-providers/route-c6b67b5743edc755.js +0 -1
  302. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-c6b67b5743edc755.js +0 -1
  303. package/.next/static/chunks/app/api/auth/login/[provider]/route-c6b67b5743edc755.js +0 -1
  304. package/.next/static/chunks/app/api/auth/logout/[provider]/route-c6b67b5743edc755.js +0 -1
  305. package/.next/static/chunks/app/api/auth/providers/route-c6b67b5743edc755.js +0 -1
  306. package/.next/static/chunks/app/api/cwd/browse/route-c6b67b5743edc755.js +0 -1
  307. package/.next/static/chunks/app/api/cwd/validate/route-c6b67b5743edc755.js +0 -1
  308. package/.next/static/chunks/app/api/default-cwd/route-c6b67b5743edc755.js +0 -1
  309. package/.next/static/chunks/app/api/display-settings/route-c6b67b5743edc755.js +0 -1
  310. package/.next/static/chunks/app/api/document-text/route-c6b67b5743edc755.js +0 -1
  311. package/.next/static/chunks/app/api/experiments/route-c6b67b5743edc755.js +0 -1
  312. package/.next/static/chunks/app/api/file-index/route-c6b67b5743edc755.js +0 -1
  313. package/.next/static/chunks/app/api/files/[...path]/route-c6b67b5743edc755.js +0 -1
  314. package/.next/static/chunks/app/api/git/diff/route-c6b67b5743edc755.js +0 -1
  315. package/.next/static/chunks/app/api/git/status/route-c6b67b5743edc755.js +0 -1
  316. package/.next/static/chunks/app/api/github/projects/route-c6b67b5743edc755.js +0 -1
  317. package/.next/static/chunks/app/api/gpt6/handles/route-c6b67b5743edc755.js +0 -1
  318. package/.next/static/chunks/app/api/gpt6/reply/route-c6b67b5743edc755.js +0 -1
  319. package/.next/static/chunks/app/api/gpt6/token/route-c6b67b5743edc755.js +0 -1
  320. package/.next/static/chunks/app/api/gpt6/web6-session/route-c6b67b5743edc755.js +0 -1
  321. package/.next/static/chunks/app/api/home/route-c6b67b5743edc755.js +0 -1
  322. package/.next/static/chunks/app/api/live/call/[callId]/route-c6b67b5743edc755.js +0 -1
  323. package/.next/static/chunks/app/api/live/character-voice/route-c6b67b5743edc755.js +0 -1
  324. package/.next/static/chunks/app/api/live/events/route-c6b67b5743edc755.js +0 -1
  325. package/.next/static/chunks/app/api/live/offer/route-c6b67b5743edc755.js +0 -1
  326. package/.next/static/chunks/app/api/live/voices/route-c6b67b5743edc755.js +0 -1
  327. package/.next/static/chunks/app/api/lounge/events/route-c6b67b5743edc755.js +0 -1
  328. package/.next/static/chunks/app/api/lounge/route-c6b67b5743edc755.js +0 -1
  329. package/.next/static/chunks/app/api/mcp/route-c6b67b5743edc755.js +0 -1
  330. package/.next/static/chunks/app/api/model-roles/route-c6b67b5743edc755.js +0 -1
  331. package/.next/static/chunks/app/api/models/route-c6b67b5743edc755.js +0 -1
  332. package/.next/static/chunks/app/api/models-config/catalog/route-c6b67b5743edc755.js +0 -1
  333. package/.next/static/chunks/app/api/models-config/discover/route-c6b67b5743edc755.js +0 -1
  334. package/.next/static/chunks/app/api/models-config/route-c6b67b5743edc755.js +0 -1
  335. package/.next/static/chunks/app/api/models-config/test/route-c6b67b5743edc755.js +0 -1
  336. package/.next/static/chunks/app/api/office-avatars/[id]/route-c6b67b5743edc755.js +0 -1
  337. package/.next/static/chunks/app/api/office-avatars/route-c6b67b5743edc755.js +0 -1
  338. package/.next/static/chunks/app/api/plugins/route-c6b67b5743edc755.js +0 -1
  339. package/.next/static/chunks/app/api/project-trust/route-c6b67b5743edc755.js +0 -1
  340. package/.next/static/chunks/app/api/projects/route-c6b67b5743edc755.js +0 -1
  341. package/.next/static/chunks/app/api/runs/[runId]/route-c6b67b5743edc755.js +0 -1
  342. package/.next/static/chunks/app/api/runs/route-c6b67b5743edc755.js +0 -1
  343. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-c6b67b5743edc755.js +0 -1
  344. package/.next/static/chunks/app/api/sessions/[id]/context/route-c6b67b5743edc755.js +0 -1
  345. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-c6b67b5743edc755.js +0 -1
  346. package/.next/static/chunks/app/api/sessions/[id]/export/route-c6b67b5743edc755.js +0 -1
  347. package/.next/static/chunks/app/api/sessions/[id]/route-c6b67b5743edc755.js +0 -1
  348. package/.next/static/chunks/app/api/sessions/[id]/state/route-c6b67b5743edc755.js +0 -1
  349. package/.next/static/chunks/app/api/sessions/route-c6b67b5743edc755.js +0 -1
  350. package/.next/static/chunks/app/api/sessions/search/route-c6b67b5743edc755.js +0 -1
  351. package/.next/static/chunks/app/api/settings/route-c6b67b5743edc755.js +0 -1
  352. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-c6b67b5743edc755.js +0 -1
  353. package/.next/static/chunks/app/api/skills/check/route-c6b67b5743edc755.js +0 -1
  354. package/.next/static/chunks/app/api/skills/install/route-c6b67b5743edc755.js +0 -1
  355. package/.next/static/chunks/app/api/skills/route-c6b67b5743edc755.js +0 -1
  356. package/.next/static/chunks/app/api/skills/search/route-c6b67b5743edc755.js +0 -1
  357. package/.next/static/chunks/app/api/skills/update/route-c6b67b5743edc755.js +0 -1
  358. package/.next/static/chunks/app/api/subagents/eta/route-c6b67b5743edc755.js +0 -1
  359. package/.next/static/chunks/app/api/theme/route-c6b67b5743edc755.js +0 -1
  360. package/.next/static/chunks/app/api/tool-image/route-c6b67b5743edc755.js +0 -1
  361. package/.next/static/chunks/app/api/update-maintenance/route-c6b67b5743edc755.js +0 -1
  362. package/.next/static/chunks/app/api/updates/route-c6b67b5743edc755.js +0 -1
  363. package/.next/static/chunks/app/api/web-access/recovery/route-c6b67b5743edc755.js +0 -1
  364. package/.next/static/chunks/app/api/web-access/route-c6b67b5743edc755.js +0 -1
  365. package/.next/static/chunks/app/api/web6/consults/route-c6b67b5743edc755.js +0 -1
  366. package/.next/static/chunks/app/api/worktrees/route-c6b67b5743edc755.js +0 -1
  367. package/.next/static/chunks/app/manifest.webmanifest/route-c6b67b5743edc755.js +0 -1
  368. package/.next/static/chunks/next/dist/client/components/builtin/app-error-c6b67b5743edc755.js +0 -1
  369. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-c6b67b5743edc755.js +0 -1
  370. package/.next/static/chunks/next/dist/client/components/builtin/not-found-c6b67b5743edc755.js +0 -1
  371. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c6b67b5743edc755.js +0 -1
  372. /package/.next/static/{7oFCc2ps2NBdX6L9v5ko3 → B90WNxaFZ8Tg4XO_DiNPQ}/_ssgManifest.js +0 -0
@@ -4439,6 +4439,320 @@ import { resolveUsedFraction } from "../usage";`,
4439
4439
  throw new Error(\`[CharacterSummonRuntime] \${exactOAuthLabel}의 지정 OAuth 계정이 현재 사용할 수 없습니다.\`);
4440
4440
  }`,
4441
4441
  },
4442
+ // 2026-10-13 사용자 결정: Anthropic 구독 좌석이 모두 주간(7d) 한도로 막혔을 때만 API 키로 요청을 넘긴다. 키 출처는
4443
+ // `<agentDir>/anthropic-fallback-api-key`(한 줄, trim) 파일 하나뿐이다. 주간 소진 판정이 참인 순간에만 읽고, env 에 넣거나
4444
+ // 캐시하지 않는다. env·config fallback·login tier 는 이 판정에 쓰지 않는다(env tier 는 키가 모든 자식 셸에 상속되고
4445
+ // affinity.ts activeOAuth 의 env 가드가 pin 없는 세션의 귀속을 끈다). 파일이 없거나 비었거나 못 읽으면 다른 키가
4446
+ // 설정돼 있어도 upstream last-resort(막힌 좌석으로 요청해 wire 의 usage-limit 의미를 받는다) 그대로다. 5h 단독 소진·
4447
+ // 인증·transient refresh·plan 실패도 그대로. restricted·exact summon(캐릭터 pin) 세션은 대상이 아니다. api_key affinity 를
4448
+ // 남기지 않으므로 좌석 block 이 끝나거나(reset) heal 되면 다음 resolve 의 strict pass 가 다시 OAuth 를 고른다. 폴백 중인
4449
+ // 세션은 affinity 표식으로 OAuth account_uuid 귀속에서 빠지고, 표식은 파일 키나 OAuth 를 실제로 돌려줄 때만 바뀐다.
4450
+ // 항목: select 판정 메서드·passes 진입점, cascade import·helper/공개 메서드·resolveOAuth 호출·OAuth 반환·파일 키 반환·
4451
+ // resolver() lastChance, affinity 표식·가드, 타입 두 곳, coding-agent resolver lastChance·registry 타입.
4452
+ // 검증: core-weekly-fallback-test.ts.
4453
+ {
4454
+ file: "../pi-ai/src/auth/select.ts",
4455
+ marker: "async cueloWeeklyExhausted(",
4456
+ anchor: "\t#syncOAuthSelectionFromStore(\n",
4457
+ patched: ` /**
4458
+ * CUELO: true when every OAuth seat this session may use for an Anthropic request is
4459
+ * blocked AND its usage report shows an exhausted weekly (7d) window, scoped to the
4460
+ * request model, whose reset is still ahead. 5h-only exhaustion, auth/refresh/plan
4461
+ * failures, or a missing report answer false so the upstream last-resort ladder runs.
4462
+ * The answer is re-validated after the report awaits: the same eligible seats (by durable
4463
+ * row id), all still blocked and all still inside their exhausted week.
4464
+ */
4465
+ async cueloWeeklyExhausted(
4466
+ provider: string,
4467
+ sessionId: string | undefined,
4468
+ options?: AuthApiKeyOptions,
4469
+ ): Promise<boolean> {
4470
+ if (provider !== "anthropic") return false;
4471
+ const strategy = this.#deps.strategies(provider);
4472
+ if (!strategy) return false;
4473
+ const nowMs = Date.now();
4474
+ await this.#deps.pool.adoptExternalChanges();
4475
+ type CueloSeat = { id: number; credential: OAuthCredential; index: number };
4476
+ const eligibleSeats = (): CueloSeat[] =>
4477
+ this.#deps.pool
4478
+ .entries(provider)
4479
+ .map((entry, index) => ({ id: entry.id, credential: entry.credential, index }))
4480
+ .filter(
4481
+ (seat): seat is CueloSeat =>
4482
+ seat.credential.type === "oauth" && this.#deps.affinity.allows(provider, sessionId, seat.credential),
4483
+ );
4484
+ const seats = eligibleSeats();
4485
+ if (seats.length === 0) return false;
4486
+ const providerKey = providerTypeKey(provider, "oauth");
4487
+ const rankingContext: CredentialRankingContext = { modelId: options?.modelId };
4488
+ const blockScopes = credentialBlockScopesForRequest(
4489
+ provider,
4490
+ strategy,
4491
+ rankingContext,
4492
+ strategy.blockScope?.(rankingContext),
4493
+ );
4494
+ const allBlocked = (current: CueloSeat[]) =>
4495
+ current.every(seat => this.#deps.blocks.isBlocked(provider, providerKey, seat.index, blockScopes));
4496
+ if (!allBlocked(seats)) return false;
4497
+ // Latest exhausted-week reset per seat, kept for the re-check below (no refetch).
4498
+ const weeklyResets: number[] = [];
4499
+ for (const seat of seats) {
4500
+ const usage = await this.#deps.usage.report(provider, seat.credential, {
4501
+ ...options,
4502
+ timeoutMs: this.#deps.usage.requestTimeoutMs,
4503
+ });
4504
+ if (!usage) return false;
4505
+ let weeklyResetAt: number | undefined;
4506
+ for (const limit of scopedUsageLimits(strategy, usage, rankingContext)) {
4507
+ const resetsAt = limit.window?.resetsAt;
4508
+ if (
4509
+ (limit.scope.windowId === "7d" || limit.window?.id === "7d") &&
4510
+ isUsageLimitReached([limit]) &&
4511
+ typeof resetsAt === "number" &&
4512
+ resetsAt > nowMs
4513
+ ) {
4514
+ weeklyResetAt = Math.max(weeklyResetAt ?? resetsAt, resetsAt);
4515
+ }
4516
+ }
4517
+ if (weeklyResetAt === undefined) return false;
4518
+ weeklyResets.push(weeklyResetAt);
4519
+ }
4520
+ // The awaits may have outlived a weekly reset, a block, or a pool change (seat added,
4521
+ // removed or replaced): any of them leaves the decision to the next resolve.
4522
+ const recheckNowMs = Date.now();
4523
+ if (weeklyResets.some(resetsAt => resetsAt <= recheckNowMs)) return false;
4524
+ const current = eligibleSeats();
4525
+ const probedIds = new Set(seats.map(seat => seat.id));
4526
+ if (current.length !== seats.length || current.some(seat => !probedIds.has(seat.id))) return false;
4527
+ return allBlocked(current);
4528
+ }
4529
+
4530
+ #syncOAuthSelectionFromStore(
4531
+ `,
4532
+ },
4533
+ {
4534
+ file: "../pi-ai/src/auth/select.ts",
4535
+ marker: "options?.cueloOnWeeklyExhausted !== undefined &&",
4536
+ anchor: ` for (const pass of passes) {
4537
+ for (const candidate of pass.allowBlocked ? lastResortCandidates : candidates) {`,
4538
+ patched: ` for (const pass of passes) {
4539
+ // CUELO: the strict pass found nothing. A weekly-exhausted Anthropic pool hands the
4540
+ // request to the cascade's fallback key file, when the cascade read a key from it,
4541
+ // instead of a last-resort blocked seat.
4542
+ if (
4543
+ pass === passes[1] &&
4544
+ options?.cueloOnWeeklyExhausted !== undefined &&
4545
+ (await this.cueloWeeklyExhausted(provider, sessionId, options)) &&
4546
+ options.cueloOnWeeklyExhausted()
4547
+ ) {
4548
+ return undefined;
4549
+ }
4550
+ for (const candidate of pass.allowBlocked ? lastResortCandidates : candidates) {`,
4551
+ },
4552
+ {
4553
+ file: "../pi-ai/src/auth/cascade.ts",
4554
+ marker: 'import { $env, $envExact, getAgentDir, logger } from "@oh-my-pi/pi-utils";',
4555
+ anchor: 'import { $env, $envExact, logger } from "@oh-my-pi/pi-utils";\n',
4556
+ patched: `import * as fs from "node:fs";
4557
+ import * as path from "node:path";
4558
+ import { $env, $envExact, getAgentDir, logger } from "@oh-my-pi/pi-utils";
4559
+ `,
4560
+ },
4561
+ {
4562
+ file: "../pi-ai/src/auth/cascade.ts",
4563
+ marker: "cueloOnWeeklyExhausted: () => {",
4564
+ anchor: "\t\ttry {\n\t\t\toauthResolved = await this.#deps.selector.resolveOAuth(provider, sessionId, options);\n",
4565
+ patched: ` // CUELO: the fallback key file is read only when the selector confirms the weekly decision.
4566
+ let cueloFileKey: string | undefined;
4567
+ try {
4568
+ oauthResolved = await this.#deps.selector.resolveOAuth(
4569
+ provider,
4570
+ sessionId,
4571
+ this.#cueloWeeklyFallbackAllowed(provider, sessionId)
4572
+ ? {
4573
+ ...options,
4574
+ cueloOnWeeklyExhausted: () => {
4575
+ cueloFileKey = this.#cueloReadFallbackKeyFile();
4576
+ return cueloFileKey !== undefined;
4577
+ },
4578
+ }
4579
+ : options,
4580
+ );
4581
+ `,
4582
+ },
4583
+ {
4584
+ file: "../pi-ai/src/auth/cascade.ts",
4585
+ marker: "this.#deps.affinity.cueloMarkKeyFallback(provider, sessionId, false);",
4586
+ anchor: "\t\tif (oauthResolved) {\n\t\t\tif (onCredentialId && oauthResolved.credentialId !== undefined) {\n",
4587
+ patched: ` if (oauthResolved) {
4588
+ // CUELO: OAuth actually serves this session again, so it is OAuth-attributed again.
4589
+ this.#deps.affinity.cueloMarkKeyFallback(provider, sessionId, false);
4590
+ if (onCredentialId && oauthResolved.credentialId !== undefined) {
4591
+ `,
4592
+ },
4593
+ {
4594
+ file: "../pi-ai/src/auth/cascade.ts",
4595
+ marker: "if (cueloFileKey !== undefined) {",
4596
+ anchor: "\t\tconst loginApiKeySelection = await this.#deps.selector.selectApiKey(\n",
4597
+ patched: ` if (cueloFileKey !== undefined) {
4598
+ // CUELO: weekly-exhausted pool served by the fallback key file. Leave OAuth without an
4599
+ // api_key sticky and keep this session out of OAuth account attribution.
4600
+ if (sessionId) this.#deps.affinity.forget(provider, sessionId);
4601
+ this.#deps.affinity.cueloMarkKeyFallback(provider, sessionId, true);
4602
+ return cueloFileKey;
4603
+ }
4604
+ const loginApiKeySelection = await this.#deps.selector.selectApiKey(
4605
+ `,
4606
+ },
4607
+ {
4608
+ file: "../pi-ai/src/auth/cascade.ts",
4609
+ marker: "async cueloWeeklyApiKeyFallback(",
4610
+ anchor: "\tasync #resolve(\n",
4611
+ patched: ` /** CUELO: \`<agentDir>/anthropic-fallback-api-key\`, the weekly fallback's only key source. */
4612
+ #cueloFallbackKeyPath(): string {
4613
+ return path.join(getAgentDir(), "anthropic-fallback-api-key");
4614
+ }
4615
+
4616
+ /**
4617
+ * CUELO: an Anthropic session that may leave OAuth for the fallback key file — not
4618
+ * restricted, no exact character pin, and the file exists (stat only; the key is read
4619
+ * after the weekly decision). Without the file every path stays upstream.
4620
+ */
4621
+ #cueloWeeklyFallbackAllowed(provider: string, sessionId: string | undefined): boolean {
4622
+ if (provider !== "anthropic") return false;
4623
+ if (this.#deps.affinity.isRestricted(provider, sessionId)) return false;
4624
+ if (this.#deps.affinity.exactLabel(provider, sessionId)) return false;
4625
+ return fs.existsSync(this.#cueloFallbackKeyPath());
4626
+ }
4627
+
4628
+ /**
4629
+ * CUELO: the fallback key file's one trimmed line. Undefined when missing, empty or
4630
+ * unreadable. Read per decision, never cached and never copied into the process environment.
4631
+ */
4632
+ #cueloReadFallbackKeyFile(): string | undefined {
4633
+ try {
4634
+ return fs.readFileSync(this.#cueloFallbackKeyPath(), "utf8").trim() || undefined;
4635
+ } catch {
4636
+ return undefined;
4637
+ }
4638
+ }
4639
+
4640
+ /**
4641
+ * CUELO: the answer for a usage-limit retry with no OAuth sibling. Returns the fallback
4642
+ * key file's key, read once after the weekly decision holds, and never an OAuth bearer;
4643
+ * otherwise undefined, so the caller keeps the upstream no-sibling backoff.
4644
+ */
4645
+ async cueloWeeklyApiKeyFallback(
4646
+ provider: string,
4647
+ sessionId?: string,
4648
+ options?: AuthApiKeyOptions,
4649
+ ): Promise<ResolvedApiKey | undefined> {
4650
+ if (!this.#cueloWeeklyFallbackAllowed(provider, sessionId)) return undefined;
4651
+ if (!(await this.#deps.selector.cueloWeeklyExhausted(provider, sessionId, options))) return undefined;
4652
+ const apiKey = this.#cueloReadFallbackKeyFile();
4653
+ if (apiKey === undefined) return undefined;
4654
+ if (sessionId) this.#deps.affinity.forget(provider, sessionId);
4655
+ this.#deps.affinity.cueloMarkKeyFallback(provider, sessionId, true);
4656
+ return { apiKey };
4657
+ }
4658
+
4659
+ async #resolve(
4660
+ `,
4661
+ },
4662
+ {
4663
+ file: "../pi-ai/src/auth/affinity.ts",
4664
+ marker: "\tcueloMarkKeyFallback(provider: string, sessionId: string | undefined, active: boolean): void {\n",
4665
+ anchor: "\tactiveOAuth(provider: string, sessionId?: string): OAuthCredential | undefined {\n",
4666
+ patched: ` /** CUELO: provider → sessions whose latest bearer is the weekly-fallback key file's key. */
4667
+ #cueloKeyFallbackSessions = new Map<string, Set<string>>();
4668
+
4669
+ /** CUELO: mark or clear a session as served by the weekly-exhaustion API key (no OAuth attribution). */
4670
+ cueloMarkKeyFallback(provider: string, sessionId: string | undefined, active: boolean): void {
4671
+ if (!sessionId) return;
4672
+ const sessions = this.#cueloKeyFallbackSessions.get(provider);
4673
+ if (active) {
4674
+ if (sessions) sessions.add(sessionId);
4675
+ else this.#cueloKeyFallbackSessions.set(provider, new Set([sessionId]));
4676
+ return;
4677
+ }
4678
+ sessions?.delete(sessionId);
4679
+ if (sessions?.size === 0) this.#cueloKeyFallbackSessions.delete(provider);
4680
+ }
4681
+
4682
+ activeOAuth(provider: string, sessionId?: string): OAuthCredential | undefined {
4683
+ `,
4684
+ },
4685
+ {
4686
+ file: "../pi-ai/src/auth/affinity.ts",
4687
+ marker: "this.#cueloKeyFallbackSessions.get(provider)?.has(sessionId ?? \"\")",
4688
+ anchor: "\t\tif (!restricted && !sessionPref && getEnvApiKey(provider)) return undefined;\n",
4689
+ patched: ` // CUELO: this session's latest bearer is the weekly-fallback key file's key. The mark wins over
4690
+ // a persisted OAuth pin (which forget() does not drop) and is cleared once OAuth serves again.
4691
+ if (this.#cueloKeyFallbackSessions.get(provider)?.has(sessionId ?? "")) return undefined;
4692
+ if (!restricted && !sessionPref && getEnvApiKey(provider)) return undefined;
4693
+ `,
4694
+ },
4695
+ {
4696
+ file: "../pi-ai/src/auth/cascade.ts",
4697
+ marker: "return this.cueloWeeklyApiKeyFallback(provider, sessionId, { baseUrl, modelId, signal });",
4698
+ anchor: "\t\t\t\t\tif (AIError.isUsageLimit(error) || isUsageLimitOutcome(status, message)) return undefined;\n",
4699
+ patched: ` if (AIError.isUsageLimit(error) || isUsageLimitOutcome(status, message)) {
4700
+ // CUELO: a weekly-exhausted pool finishes on the fallback key file's key.
4701
+ return this.cueloWeeklyApiKeyFallback(provider, sessionId, { baseUrl, modelId, signal });
4702
+ }
4703
+ `,
4704
+ },
4705
+ {
4706
+ file: "../pi-ai/src/auth/types.ts",
4707
+ marker: "\tcueloOnWeeklyExhausted?: () => boolean;\n",
4708
+ anchor: "\trecordAffinity?: boolean;\n};\n",
4709
+ patched: ` recordAffinity?: boolean;
4710
+ /**
4711
+ * CUELO: set by KeyCascade. Called once the selector finds every OAuth seat weekly-exhausted;
4712
+ * true means the cascade read a key from its fallback key file, so the selector skips its
4713
+ * last-resort blocked seat.
4714
+ */
4715
+ cueloOnWeeklyExhausted?: () => boolean;
4716
+ };
4717
+ `,
4718
+ },
4719
+ {
4720
+ file: "../pi-ai/src/auth/types.ts",
4721
+ marker: "\tcueloWeeklyApiKeyFallback?(\n",
4722
+ anchor: "\tresolver(provider: string, options?: { sessionId?: string; baseUrl?: string; modelId?: string }): ApiKeyResolver;\n}\n",
4723
+ patched: ` resolver(provider: string, options?: { sessionId?: string; baseUrl?: string; modelId?: string }): ApiKeyResolver;
4724
+ /**
4725
+ * CUELO: the fallback key file's key for a usage-limit retry when every OAuth seat this
4726
+ * session may use is blocked by an exhausted weekly window; undefined otherwise.
4727
+ */
4728
+ cueloWeeklyApiKeyFallback?(
4729
+ provider: string,
4730
+ sessionId?: string,
4731
+ options?: AuthApiKeyOptions,
4732
+ ): Promise<ResolvedApiKey | undefined>;
4733
+ }
4734
+ `,
4735
+ },
4736
+ {
4737
+ file: "src/config/api-key-resolver.ts",
4738
+ marker: "registry.authStorage.keys?.cueloWeeklyApiKeyFallback?.(",
4739
+ anchor: "\t\t\t\tif (AIError.isUsageLimit(error) || isUsageLimitOutcome(status, message)) return undefined;\n",
4740
+ patched: ` if (AIError.isUsageLimit(error) || isUsageLimitOutcome(status, message)) {
4741
+ // CUELO: a weekly-exhausted Anthropic pool finishes on the fallback key file's key.
4742
+ return registry.authStorage.keys?.cueloWeeklyApiKeyFallback?.(provider, sessionId, {
4743
+ baseUrl,
4744
+ modelId,
4745
+ signal,
4746
+ });
4747
+ }
4748
+ `,
4749
+ },
4750
+ {
4751
+ file: "src/config/api-key-resolver.ts",
4752
+ marker: "\tauthStorage: Pick<AuthStorage, \"limits\"> & { readonly keys?: Pick<AuthStorage[\"keys\"], \"cueloWeeklyApiKeyFallback\"> };\n",
4753
+ anchor: "\tauthStorage: Pick<AuthStorage, \"limits\">;\n",
4754
+ patched: "\tauthStorage: Pick<AuthStorage, \"limits\"> & { readonly keys?: Pick<AuthStorage[\"keys\"], \"cueloWeeklyApiKeyFallback\"> };\n",
4755
+ },
4442
4756
  {
4443
4757
  // usage-limit 표시: exact 대상은 block 을 기록하되 sibling 전환 가능으로 보고하지 않는다.
4444
4758
  file: "../pi-ai/src/auth/rotation.ts",
@@ -9007,6 +9321,15 @@ interface ComputerInputTarget {
9007
9321
  type(text: string, options?: ComputerInputOptions): Promise<ComputerActionResult>;
9008
9322
  /** Key chord such as \`"cmd+shift+p"\` or \`["cmd", "shift", "p"]\`. */
9009
9323
  press(chord: string | string[], options?: ComputerInputOptions): Promise<ComputerActionResult>;`,
9324
+ }, {
9325
+ // 2026-10-14 18.10.4 RETIRE: declarations.d.ts는 Codex Code Mode 설명(eval.ts #codeModeDescription의
9326
+ // codeModeDeclarations)만 읽던 파일이고, 18.10.4가 Code Mode와 함께 지웠다. 모델이 보는 결과·재획득·목표 대기
9327
+ // 규칙은 computer.md 항목이 그대로 싣는다. 이 판에는 대상이 없으므로 prelude 자산 목록(codeModeDeclarations가
9328
+ // 빠진 판에만 있는 줄)의 no-op으로 둔다. 아래 raise()·wait 항목도 같은 후보를 쓴다.
9329
+ file: "src/tools/computer/prelude-definition.ts",
9330
+ marker: "\tpython: computerPython,\n} as const;",
9331
+ anchor: "\tpython: computerPython,\n} as const;",
9332
+ patched: "\tpython: computerPython,\n} as const;",
9010
9333
  }],
9011
9334
  },
9012
9335
  {
@@ -9014,6 +9337,13 @@ interface ComputerInputTarget {
9014
9337
  marker: "\traise(): Promise<ComputerActionResult>;",
9015
9338
  anchor: "\traise(): Promise<void>;",
9016
9339
  patched: "\traise(): Promise<ComputerActionResult>;",
9340
+ // 2026-10-14 18.10.4 RETIRE: declarations.d.ts 삭제(위 ComputerActionResult 항목 참고). 같은 no-op 후보.
9341
+ alternates: [{
9342
+ file: "src/tools/computer/prelude-definition.ts",
9343
+ marker: "\tpython: computerPython,\n} as const;",
9344
+ anchor: "\tpython: computerPython,\n} as const;",
9345
+ patched: "\tpython: computerPython,\n} as const;",
9346
+ }],
9017
9347
  },
9018
9348
  {
9019
9349
  // 모델 지시: 재획득 규칙과 결과 필드를 읽는 법. 기존 takeover 규칙(다음 줄)은 그대로 둔다.
@@ -9240,6 +9570,13 @@ function goalProbeRefusal(method: string): ToolError {
9240
9570
  interval?: number;
9241
9571
  },
9242
9572
  ) => Promise<unknown>;`,
9573
+ // 2026-10-14 18.10.4 RETIRE: declarations.d.ts 삭제(ComputerActionResult 항목 참고). 같은 no-op 후보.
9574
+ alternates: [{
9575
+ file: "src/tools/computer/prelude-definition.ts",
9576
+ marker: "\tpython: computerPython,\n} as const;",
9577
+ anchor: "\tpython: computerPython,\n} as const;",
9578
+ patched: "\tpython: computerPython,\n} as const;",
9579
+ }],
9243
9580
  },
9244
9581
  {
9245
9582
  // 모델 지시: 행동은 한 번, 목표는 wait(predicate)로 읽고, 미달이면 다시 누르지 않는다.
@@ -10931,6 +11268,12 @@ function parentSubagentServiceTiers(
10931
11268
  marker: '{"source":"classes/anthropic.kdl:215","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
10932
11269
  anchor: '{"source":"classes/anthropic.kdl:215","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
10933
11270
  patched: '{"source":"classes/anthropic.kdl:215","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
11271
+ }, {
11272
+ // 2026-10-14 18.10.4: 출처 줄만 kdl:218로 이동했으며 prefixBinding 의미는 동일하다(no-op).
11273
+ file: "../pi-catalog/src/compat/rules.json",
11274
+ marker: '{"source":"classes/anthropic.kdl:218","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
11275
+ anchor: '{"source":"classes/anthropic.kdl:218","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
11276
+ patched: '{"source":"classes/anthropic.kdl:218","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
10934
11277
  }],
10935
11278
  },
10936
11279
  {
@@ -10998,6 +11341,12 @@ function parentSubagentServiceTiers(
10998
11341
  marker: '{"source":"classes/anthropic.kdl:328","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
10999
11342
  anchor: '{"source":"classes/anthropic.kdl:328","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
11000
11343
  patched: '{"source":"classes/anthropic.kdl:328","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
11344
+ }, {
11345
+ // 2026-10-14 18.10.4: 출처 줄만 kdl:331로 이동했으며 provider·revision 경계도 동일하다(no-op).
11346
+ file: "../pi-catalog/src/compat/rules.json",
11347
+ marker: '{"source":"classes/anthropic.kdl:331","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
11348
+ anchor: '{"source":"classes/anthropic.kdl:331","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
11349
+ patched: '{"source":"classes/anthropic.kdl:331","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
11001
11350
  }],
11002
11351
  },
11003
11352
  // 위 세 항목과 짝: modelOverrides의 thinking은 buildModel이 규칙으로 채운 thinking을 통째로 덮어써서, override가
@@ -11288,6 +11637,13 @@ function parentSubagentServiceTiers(
11288
11637
  marker: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||Gxe(a))continue;let l=a.slice(0,-6),',
11289
11638
  anchor: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||Gxe(a))continue;let l=a.slice(0,-6),',
11290
11639
  patched: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||Gxe(a))continue;let l=a.slice(0,-6),',
11640
+ }, {
11641
+ // 2026-10-14 18.10.4: pve는 같은 isAdvisorTranscriptName 함수다(`e===uve||e.startsWith(\`${lve}.\`)&&e.endsWith(Cae)`,
11642
+ // lve="__advisor"). minified 이름만 바뀌었고 upstream 제외는 그대로다(RETIRE 유지).
11643
+ file: "dist/cli.js",
11644
+ marker: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||pve(a))continue;let l=a.slice(0,-6),',
11645
+ anchor: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||pve(a))continue;let l=a.slice(0,-6),',
11646
+ patched: 'if(!a.endsWith(".jsonl")||a.includes(".bak")||pve(a))continue;let l=a.slice(0,-6),',
11291
11647
  }],
11292
11648
  },
11293
11649
  // 18.4.5 는 /ratchet 을 새로 넣으면서 `src/ratchet/prelude.ts`(코드)와 `prelude.js`(eval 텍스트 자산)를 같은 stem 으로
package/install.mjs CHANGED
@@ -178,6 +178,7 @@ export const PROFILE_DEFAULTS = {
178
178
  eager: "preferred",
179
179
  maxEffort: "xhigh",
180
180
  isolation: { enabled: true },
181
+ structured: true,
181
182
  disabledAgents: ["scout", "sonic", "task", "reviewer", "security-reviewer"],
182
183
  },
183
184
  eval: { autoBackground: { enabled: true } },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.10.11",
3
+ "version": "0.10.13",
4
4
  "description": "CUELO — open-source AI coding agent workspace and harness for omp (oh-my-pi)",
5
5
  "homepage": "https://github.com/gim47656-ship-it/CUELO#readme",
6
6
  "repository": {
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "cueloBuild": {
32
32
  "distribution": "cuelo",
33
- "coreVersion": "18.10.3"
33
+ "coreVersion": "18.10.4"
34
34
  },
35
35
  "engines": {
36
36
  "node": ">=22.19.0",
@@ -89,11 +89,11 @@
89
89
  "test:coverage": "bun test --coverage ./app ./components ./hooks ./lib ./public ./bin ./install.test.mjs"
90
90
  },
91
91
  "dependencies": {
92
- "@oh-my-pi/pi-agent-core": "18.10.3",
93
- "@oh-my-pi/pi-ai": "18.10.3",
94
- "@oh-my-pi/pi-coding-agent": "18.10.3",
95
- "@oh-my-pi/pi-tui": "18.10.3",
96
- "@oh-my-pi/pi-utils": "18.10.3",
92
+ "@oh-my-pi/pi-agent-core": "18.10.4",
93
+ "@oh-my-pi/pi-ai": "18.10.4",
94
+ "@oh-my-pi/pi-coding-agent": "18.10.4",
95
+ "@oh-my-pi/pi-tui": "18.10.4",
96
+ "@oh-my-pi/pi-utils": "18.10.4",
97
97
  "@seed-design/css": "2.8.0",
98
98
  "@seed-design/react": "2.4.1",
99
99
  "@seed-design/tailwind4-theme": "2.4.0",
Binary file
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:65,errorRate:1e-4,numBits:1247,numHashes:14,bitArray:[1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,1,0]},__routerFilterDynamic:{numItems:11,errorRate:1e-4,numBits:211,numHashes:14,bitArray:[0,0,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0]},sortedPages:["/_app"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();