cuelo 0.7.0 → 0.7.2

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 (321) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -8
  3. package/.next/build-manifest.json +3 -3
  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/attachments/route.js +1 -1
  35. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  36. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  37. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  38. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  39. package/.next/server/app/api/auth/providers/route.js +1 -1
  40. package/.next/server/app/api/cwd/browse/route.js +1 -1
  41. package/.next/server/app/api/cwd/validate/route.js +1 -1
  42. package/.next/server/app/api/default-cwd/route.js +1 -1
  43. package/.next/server/app/api/display-settings/route.js +1 -1
  44. package/.next/server/app/api/document-text/route.js +1 -1
  45. package/.next/server/app/api/experiments/route.js +1 -1
  46. package/.next/server/app/api/file-index/route.js +1 -1
  47. package/.next/server/app/api/files/[...path]/route.js +1 -1
  48. package/.next/server/app/api/git/diff/route.js +2 -2
  49. package/.next/server/app/api/git/status/route.js +2 -2
  50. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  51. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  52. package/.next/server/app/api/gpt6/token/route.js +1 -1
  53. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  54. package/.next/server/app/api/home/route.js +1 -1
  55. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  56. package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/live/character-voice/route.js +1 -0
  58. package/.next/server/app/api/live/character-voice/route.js.nft.json +1 -0
  59. package/.next/server/app/api/live/character-voice/route_client-reference-manifest.js +1 -0
  60. package/.next/server/app/api/live/events/route.js +2 -2
  61. package/.next/server/app/api/live/events/route.js.nft.json +1 -1
  62. package/.next/server/app/api/live/offer/route.js +1 -1
  63. package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
  64. package/.next/server/app/api/live/voices/route.js +1 -1
  65. package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
  66. package/.next/server/app/api/lounge/events/route.js +2 -2
  67. package/.next/server/app/api/lounge/events/route.js.nft.json +1 -1
  68. package/.next/server/app/api/lounge/route.js +1 -1
  69. package/.next/server/app/api/lounge/route.js.nft.json +1 -1
  70. package/.next/server/app/api/mcp/route.js +2 -2
  71. package/.next/server/app/api/model-roles/route.js +1 -1
  72. package/.next/server/app/api/models/route.js +1 -1
  73. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  74. package/.next/server/app/api/models-config/discover/route.js +1 -1
  75. package/.next/server/app/api/models-config/route.js +3 -3
  76. package/.next/server/app/api/models-config/test/route.js +1 -1
  77. package/.next/server/app/api/plugins/route.js +1 -1
  78. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  79. package/.next/server/app/api/project-trust/route.js +1 -1
  80. package/.next/server/app/api/projects/route.js +1 -1
  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 +1 -1
  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/theme/route.js +1 -1
  99. package/.next/server/app/api/tool-image/route.js +1 -1
  100. package/.next/server/app/api/update-maintenance/route.js +3 -3
  101. package/.next/server/app/api/updates/route.js +1 -1
  102. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  103. package/.next/server/app/api/web-access/route.js +1 -1
  104. package/.next/server/app/api/web6/consults/route.js +1 -1
  105. package/.next/server/app/api/worktrees/route.js +1 -1
  106. package/.next/server/app/favicon.ico/route.js +1 -1
  107. package/.next/server/app/index.html +1 -1
  108. package/.next/server/app/index.rsc +6 -6
  109. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  110. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  111. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  112. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  113. package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  114. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  115. package/.next/server/app/page.js +19 -19
  116. package/.next/server/app/page_client-reference-manifest.js +1 -1
  117. package/.next/server/app/recover/page.js +2 -2
  118. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  119. package/.next/server/app/recover.html +1 -1
  120. package/.next/server/app/recover.rsc +3 -3
  121. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  122. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  123. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  124. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  125. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  126. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  127. package/.next/server/app-paths-manifest.json +9 -8
  128. package/.next/server/chunks/205.js +6 -0
  129. package/.next/server/chunks/424.js +3 -0
  130. package/.next/server/chunks/4649.js +1 -0
  131. package/.next/server/chunks/5582.js +2 -2
  132. package/.next/server/chunks/6429.js +2 -2
  133. package/.next/server/chunks/7310.js +5 -0
  134. package/.next/server/chunks/9108.js +1 -1
  135. package/.next/server/chunks/9280.js +4 -4
  136. package/.next/server/middleware-build-manifest.js +1 -1
  137. package/.next/server/pages/404.html +1 -1
  138. package/.next/server/pages/500.html +1 -1
  139. package/.next/server/server-reference-manifest.json +1 -1
  140. package/.next/static/5vW3pyOv87cK3zk2pchwv/_buildManifest.js +1 -0
  141. package/.next/static/chunks/app/_global-error/{page-701a3390117d7557.js → page-2bfa6c2cae0dc17e.js} +1 -1
  142. package/.next/static/chunks/app/api/agent/[id]/account/{route-701a3390117d7557.js → route-2bfa6c2cae0dc17e.js} +1 -1
  143. package/.next/static/chunks/app/api/agent/[id]/bash-output/{route-701a3390117d7557.js → route-2bfa6c2cae0dc17e.js} +1 -1
  144. package/.next/static/chunks/app/api/agent/[id]/events/{route-701a3390117d7557.js → route-2bfa6c2cae0dc17e.js} +1 -1
  145. package/.next/static/chunks/app/api/agent/[id]/route-2bfa6c2cae0dc17e.js +1 -0
  146. package/.next/static/chunks/app/api/agent/new/route-2bfa6c2cae0dc17e.js +1 -0
  147. package/.next/static/chunks/app/api/agent/running/route-2bfa6c2cae0dc17e.js +1 -0
  148. package/.next/static/chunks/app/api/attachments/route-2bfa6c2cae0dc17e.js +1 -0
  149. package/.next/static/chunks/app/api/auth/all-providers/route-2bfa6c2cae0dc17e.js +1 -0
  150. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-2bfa6c2cae0dc17e.js +1 -0
  151. package/.next/static/chunks/app/api/auth/login/[provider]/route-2bfa6c2cae0dc17e.js +1 -0
  152. package/.next/static/chunks/app/api/auth/logout/[provider]/route-2bfa6c2cae0dc17e.js +1 -0
  153. package/.next/static/chunks/app/api/auth/providers/route-2bfa6c2cae0dc17e.js +1 -0
  154. package/.next/static/chunks/app/api/cwd/browse/route-2bfa6c2cae0dc17e.js +1 -0
  155. package/.next/static/chunks/app/api/cwd/validate/route-2bfa6c2cae0dc17e.js +1 -0
  156. package/.next/static/chunks/app/api/default-cwd/route-2bfa6c2cae0dc17e.js +1 -0
  157. package/.next/static/chunks/app/api/display-settings/route-2bfa6c2cae0dc17e.js +1 -0
  158. package/.next/static/chunks/app/api/document-text/route-2bfa6c2cae0dc17e.js +1 -0
  159. package/.next/static/chunks/app/api/experiments/route-2bfa6c2cae0dc17e.js +1 -0
  160. package/.next/static/chunks/app/api/file-index/route-2bfa6c2cae0dc17e.js +1 -0
  161. package/.next/static/chunks/app/api/files/[...path]/route-2bfa6c2cae0dc17e.js +1 -0
  162. package/.next/static/chunks/app/api/git/diff/route-2bfa6c2cae0dc17e.js +1 -0
  163. package/.next/static/chunks/app/api/git/status/route-2bfa6c2cae0dc17e.js +1 -0
  164. package/.next/static/chunks/app/api/gpt6/handles/route-2bfa6c2cae0dc17e.js +1 -0
  165. package/.next/static/chunks/app/api/gpt6/reply/route-2bfa6c2cae0dc17e.js +1 -0
  166. package/.next/static/chunks/app/api/gpt6/token/route-2bfa6c2cae0dc17e.js +1 -0
  167. package/.next/static/chunks/app/api/gpt6/web6-session/route-2bfa6c2cae0dc17e.js +1 -0
  168. package/.next/static/chunks/app/api/home/route-2bfa6c2cae0dc17e.js +1 -0
  169. package/.next/static/chunks/app/api/live/call/[callId]/route-2bfa6c2cae0dc17e.js +1 -0
  170. package/.next/static/chunks/app/api/live/character-voice/route-2bfa6c2cae0dc17e.js +1 -0
  171. package/.next/static/chunks/app/api/live/events/route-2bfa6c2cae0dc17e.js +1 -0
  172. package/.next/static/chunks/app/api/live/offer/route-2bfa6c2cae0dc17e.js +1 -0
  173. package/.next/static/chunks/app/api/live/voices/route-2bfa6c2cae0dc17e.js +1 -0
  174. package/.next/static/chunks/app/api/lounge/events/route-2bfa6c2cae0dc17e.js +1 -0
  175. package/.next/static/chunks/app/api/lounge/route-2bfa6c2cae0dc17e.js +1 -0
  176. package/.next/static/chunks/app/api/mcp/route-2bfa6c2cae0dc17e.js +1 -0
  177. package/.next/static/chunks/app/api/model-roles/route-2bfa6c2cae0dc17e.js +1 -0
  178. package/.next/static/chunks/app/api/models/route-2bfa6c2cae0dc17e.js +1 -0
  179. package/.next/static/chunks/app/api/models-config/catalog/route-2bfa6c2cae0dc17e.js +1 -0
  180. package/.next/static/chunks/app/api/models-config/discover/route-2bfa6c2cae0dc17e.js +1 -0
  181. package/.next/static/chunks/app/api/models-config/route-2bfa6c2cae0dc17e.js +1 -0
  182. package/.next/static/chunks/app/api/models-config/test/route-2bfa6c2cae0dc17e.js +1 -0
  183. package/.next/static/chunks/app/api/plugins/route-2bfa6c2cae0dc17e.js +1 -0
  184. package/.next/static/chunks/app/api/project-trust/route-2bfa6c2cae0dc17e.js +1 -0
  185. package/.next/static/chunks/app/api/projects/route-2bfa6c2cae0dc17e.js +1 -0
  186. package/.next/static/chunks/app/api/runs/[runId]/route-2bfa6c2cae0dc17e.js +1 -0
  187. package/.next/static/chunks/app/api/runs/route-2bfa6c2cae0dc17e.js +1 -0
  188. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-2bfa6c2cae0dc17e.js +1 -0
  189. package/.next/static/chunks/app/api/sessions/[id]/context/route-2bfa6c2cae0dc17e.js +1 -0
  190. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-2bfa6c2cae0dc17e.js +1 -0
  191. package/.next/static/chunks/app/api/sessions/[id]/export/route-2bfa6c2cae0dc17e.js +1 -0
  192. package/.next/static/chunks/app/api/sessions/[id]/route-2bfa6c2cae0dc17e.js +1 -0
  193. package/.next/static/chunks/app/api/sessions/[id]/state/route-2bfa6c2cae0dc17e.js +1 -0
  194. package/.next/static/chunks/app/api/sessions/route-2bfa6c2cae0dc17e.js +1 -0
  195. package/.next/static/chunks/app/api/sessions/search/route-2bfa6c2cae0dc17e.js +1 -0
  196. package/.next/static/chunks/app/api/settings/route-2bfa6c2cae0dc17e.js +1 -0
  197. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-2bfa6c2cae0dc17e.js +1 -0
  198. package/.next/static/chunks/app/api/skills/check/route-2bfa6c2cae0dc17e.js +1 -0
  199. package/.next/static/chunks/app/api/skills/install/route-2bfa6c2cae0dc17e.js +1 -0
  200. package/.next/static/chunks/app/api/skills/route-2bfa6c2cae0dc17e.js +1 -0
  201. package/.next/static/chunks/app/api/skills/search/route-2bfa6c2cae0dc17e.js +1 -0
  202. package/.next/static/chunks/app/api/skills/update/route-2bfa6c2cae0dc17e.js +1 -0
  203. package/.next/static/chunks/app/api/theme/route-2bfa6c2cae0dc17e.js +1 -0
  204. package/.next/static/chunks/app/api/tool-image/route-2bfa6c2cae0dc17e.js +1 -0
  205. package/.next/static/chunks/app/api/update-maintenance/route-2bfa6c2cae0dc17e.js +1 -0
  206. package/.next/static/chunks/app/api/updates/route-2bfa6c2cae0dc17e.js +1 -0
  207. package/.next/static/chunks/app/api/web-access/recovery/route-2bfa6c2cae0dc17e.js +1 -0
  208. package/.next/static/chunks/app/api/web-access/route-2bfa6c2cae0dc17e.js +1 -0
  209. package/.next/static/chunks/app/api/web6/consults/route-2bfa6c2cae0dc17e.js +1 -0
  210. package/.next/static/chunks/app/api/worktrees/route-2bfa6c2cae0dc17e.js +1 -0
  211. package/.next/static/chunks/app/{layout-89b7963cbc4da94d.js → layout-fc24ec6959a6cba5.js} +1 -1
  212. package/.next/static/chunks/app/manifest.webmanifest/route-2bfa6c2cae0dc17e.js +1 -0
  213. package/.next/static/chunks/app/page-11dfb512f246679c.js +22 -0
  214. package/.next/static/chunks/next/dist/client/components/builtin/app-error-2bfa6c2cae0dc17e.js +1 -0
  215. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2bfa6c2cae0dc17e.js +1 -0
  216. package/.next/static/chunks/next/dist/client/components/builtin/not-found-2bfa6c2cae0dc17e.js +1 -0
  217. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2bfa6c2cae0dc17e.js +1 -0
  218. package/.next/static/chunks/{webpack-13c58b226bf07c7e.js → webpack-b1a76402d0d0fa1a.js} +1 -1
  219. package/.next/static/css/27f16a2ddaff39eb.css +1 -0
  220. package/.next/static/css/88929dd0c6d44c84.css +1 -0
  221. package/.next/trace +106 -105
  222. package/.next/trace-build +1 -1
  223. package/.next/types/app/api/live/character-voice/route.ts +351 -0
  224. package/.next/types/routes.d.ts +2 -1
  225. package/.next/types/validator.ts +9 -0
  226. package/README.md +7 -3
  227. package/Tools/CUELO_Setup/files/native-runtime-patch.js +5 -5
  228. package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +289 -64
  229. package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +174 -0
  230. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +72 -25
  231. package/Tools/OMP_Global_Config/agent/extensions/lib/routing-ledger.ts +25 -1
  232. package/Tools/OMP_Global_Config/agent/rules/subagent.md +12 -1
  233. package/Tools/OMP_Global_Config/agent/rules/verdict.md +3 -0
  234. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +241 -20
  235. package/package.json +7 -7
  236. package/public/audio/live/ACML-1.0.txt +85 -0
  237. package/public/audio/live/hikari-reference.wav +0 -0
  238. package/public/audio/live/isana-reference.wav +0 -0
  239. package/public/audio/live/mio-reference.wav +0 -0
  240. package/public/audio/live/nova-reference.wav +0 -0
  241. package/public/audio/live/rin-reference.wav +0 -0
  242. package/public/audio/live/shion-reference.wav +0 -0
  243. package/public/audio/live/voices.json +275 -0
  244. package/public/audio/live/yuki-reference.wav +0 -0
  245. package/.next/server/chunks/3707.js +0 -5
  246. package/.next/server/chunks/6775.js +0 -6
  247. package/.next/static/JfkwRK2BKBsxwumh964am/_buildManifest.js +0 -1
  248. package/.next/static/chunks/app/api/agent/[id]/route-701a3390117d7557.js +0 -1
  249. package/.next/static/chunks/app/api/agent/new/route-701a3390117d7557.js +0 -1
  250. package/.next/static/chunks/app/api/agent/running/route-701a3390117d7557.js +0 -1
  251. package/.next/static/chunks/app/api/attachments/route-701a3390117d7557.js +0 -1
  252. package/.next/static/chunks/app/api/auth/all-providers/route-701a3390117d7557.js +0 -1
  253. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-701a3390117d7557.js +0 -1
  254. package/.next/static/chunks/app/api/auth/login/[provider]/route-701a3390117d7557.js +0 -1
  255. package/.next/static/chunks/app/api/auth/logout/[provider]/route-701a3390117d7557.js +0 -1
  256. package/.next/static/chunks/app/api/auth/providers/route-701a3390117d7557.js +0 -1
  257. package/.next/static/chunks/app/api/cwd/browse/route-701a3390117d7557.js +0 -1
  258. package/.next/static/chunks/app/api/cwd/validate/route-701a3390117d7557.js +0 -1
  259. package/.next/static/chunks/app/api/default-cwd/route-701a3390117d7557.js +0 -1
  260. package/.next/static/chunks/app/api/display-settings/route-701a3390117d7557.js +0 -1
  261. package/.next/static/chunks/app/api/document-text/route-701a3390117d7557.js +0 -1
  262. package/.next/static/chunks/app/api/experiments/route-701a3390117d7557.js +0 -1
  263. package/.next/static/chunks/app/api/file-index/route-701a3390117d7557.js +0 -1
  264. package/.next/static/chunks/app/api/files/[...path]/route-701a3390117d7557.js +0 -1
  265. package/.next/static/chunks/app/api/git/diff/route-701a3390117d7557.js +0 -1
  266. package/.next/static/chunks/app/api/git/status/route-701a3390117d7557.js +0 -1
  267. package/.next/static/chunks/app/api/gpt6/handles/route-701a3390117d7557.js +0 -1
  268. package/.next/static/chunks/app/api/gpt6/reply/route-701a3390117d7557.js +0 -1
  269. package/.next/static/chunks/app/api/gpt6/token/route-701a3390117d7557.js +0 -1
  270. package/.next/static/chunks/app/api/gpt6/web6-session/route-701a3390117d7557.js +0 -1
  271. package/.next/static/chunks/app/api/home/route-701a3390117d7557.js +0 -1
  272. package/.next/static/chunks/app/api/live/call/[callId]/route-701a3390117d7557.js +0 -1
  273. package/.next/static/chunks/app/api/live/events/route-701a3390117d7557.js +0 -1
  274. package/.next/static/chunks/app/api/live/offer/route-701a3390117d7557.js +0 -1
  275. package/.next/static/chunks/app/api/live/voices/route-701a3390117d7557.js +0 -1
  276. package/.next/static/chunks/app/api/lounge/events/route-701a3390117d7557.js +0 -1
  277. package/.next/static/chunks/app/api/lounge/route-701a3390117d7557.js +0 -1
  278. package/.next/static/chunks/app/api/mcp/route-701a3390117d7557.js +0 -1
  279. package/.next/static/chunks/app/api/model-roles/route-701a3390117d7557.js +0 -1
  280. package/.next/static/chunks/app/api/models/route-701a3390117d7557.js +0 -1
  281. package/.next/static/chunks/app/api/models-config/catalog/route-701a3390117d7557.js +0 -1
  282. package/.next/static/chunks/app/api/models-config/discover/route-701a3390117d7557.js +0 -1
  283. package/.next/static/chunks/app/api/models-config/route-701a3390117d7557.js +0 -1
  284. package/.next/static/chunks/app/api/models-config/test/route-701a3390117d7557.js +0 -1
  285. package/.next/static/chunks/app/api/plugins/route-701a3390117d7557.js +0 -1
  286. package/.next/static/chunks/app/api/project-trust/route-701a3390117d7557.js +0 -1
  287. package/.next/static/chunks/app/api/projects/route-701a3390117d7557.js +0 -1
  288. package/.next/static/chunks/app/api/runs/[runId]/route-701a3390117d7557.js +0 -1
  289. package/.next/static/chunks/app/api/runs/route-701a3390117d7557.js +0 -1
  290. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-701a3390117d7557.js +0 -1
  291. package/.next/static/chunks/app/api/sessions/[id]/context/route-701a3390117d7557.js +0 -1
  292. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-701a3390117d7557.js +0 -1
  293. package/.next/static/chunks/app/api/sessions/[id]/export/route-701a3390117d7557.js +0 -1
  294. package/.next/static/chunks/app/api/sessions/[id]/route-701a3390117d7557.js +0 -1
  295. package/.next/static/chunks/app/api/sessions/[id]/state/route-701a3390117d7557.js +0 -1
  296. package/.next/static/chunks/app/api/sessions/route-701a3390117d7557.js +0 -1
  297. package/.next/static/chunks/app/api/sessions/search/route-701a3390117d7557.js +0 -1
  298. package/.next/static/chunks/app/api/settings/route-701a3390117d7557.js +0 -1
  299. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-701a3390117d7557.js +0 -1
  300. package/.next/static/chunks/app/api/skills/check/route-701a3390117d7557.js +0 -1
  301. package/.next/static/chunks/app/api/skills/install/route-701a3390117d7557.js +0 -1
  302. package/.next/static/chunks/app/api/skills/route-701a3390117d7557.js +0 -1
  303. package/.next/static/chunks/app/api/skills/search/route-701a3390117d7557.js +0 -1
  304. package/.next/static/chunks/app/api/skills/update/route-701a3390117d7557.js +0 -1
  305. package/.next/static/chunks/app/api/theme/route-701a3390117d7557.js +0 -1
  306. package/.next/static/chunks/app/api/tool-image/route-701a3390117d7557.js +0 -1
  307. package/.next/static/chunks/app/api/update-maintenance/route-701a3390117d7557.js +0 -1
  308. package/.next/static/chunks/app/api/updates/route-701a3390117d7557.js +0 -1
  309. package/.next/static/chunks/app/api/web-access/recovery/route-701a3390117d7557.js +0 -1
  310. package/.next/static/chunks/app/api/web-access/route-701a3390117d7557.js +0 -1
  311. package/.next/static/chunks/app/api/web6/consults/route-701a3390117d7557.js +0 -1
  312. package/.next/static/chunks/app/api/worktrees/route-701a3390117d7557.js +0 -1
  313. package/.next/static/chunks/app/manifest.webmanifest/route-701a3390117d7557.js +0 -1
  314. package/.next/static/chunks/app/page-042cc56cc090bf73.js +0 -22
  315. package/.next/static/chunks/next/dist/client/components/builtin/app-error-701a3390117d7557.js +0 -1
  316. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-701a3390117d7557.js +0 -1
  317. package/.next/static/chunks/next/dist/client/components/builtin/not-found-701a3390117d7557.js +0 -1
  318. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-701a3390117d7557.js +0 -1
  319. package/.next/static/css/bb6b220f400250d8.css +0 -1
  320. package/.next/static/css/d0ec5531aef136d6.css +0 -1
  321. /package/.next/static/{JfkwRK2BKBsxwumh964am → 5vW3pyOv87cK3zk2pchwv}/_ssgManifest.js +0 -0
@@ -53,6 +53,17 @@ function resolveTarget() {
53
53
  return found ?? seen[seen.length - 1];
54
54
  }
55
55
 
56
+ /**
57
+ * #310(Opus 5.5 Claude API 구운 models.json 행)의 18.4.6 후보. 18.4.10 후보는 이 문자열에서 만든다(EDITS 의
58
+ * pi-catalog models.json 항목 주석). 18.4.6 라이브 적용본이 그대로 applied 여야 하므로 바꾸지 않는다.
59
+ */
60
+ const OPUS55_ROW_1846 = {
61
+ file: "../pi-catalog/src/models.json",
62
+ marker: '"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
63
+ anchor: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":false',
64
+ patched: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
65
+ };
66
+
56
67
  /** 각 항목: 원본 앵커를 찾아 patched 로 바꾼다. marker 가 있으면 이미 적용된 것으로 본다. */
57
68
  const EDITS = [
58
69
  {
@@ -1587,15 +1598,29 @@ function resolveSubagentRetryFallbackCandidates(
1587
1598
  {
1588
1599
  // 승인 후보로 돌았어도 세션의 첫 model_change 는 요청 selector 를 함께 남겨야
1589
1600
  // 한다(코어가 대체한 셀렉터만 남기면 요청과 실제가 구분되지 않는다).
1601
+ // 18.4.10(#14040)은 옵션 빌더 함수를 `sessionSpec: SubagentSessionSpec = { options: { … } }`로 바꿔 한 단계 더
1602
+ // 들여쓴다. 같은 options 객체가 spawn·revive 모두에 쓰이는 점은 그대로다. alternate는 18.4.6 형태다. 두 후보의
1603
+ // marker는 줄 앞 개행과 들여쓰기까지 넣어 서로의 결과에 들어 있지 않게 했다.
1590
1604
  file: "src/task/executor.ts",
1591
- marker: "modelPatternRequested: modelPatterns.length > 0",
1592
- anchor: ` modelPatternAuthFallback:
1605
+ marker: "\n\t\t\t\t\tmodelPatternRequested: modelPatterns.length > 0",
1606
+ anchor: ` modelPatternAuthFallback:
1607
+ model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,`,
1608
+ patched: ` modelPatternAuthFallback:
1609
+ model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,
1610
+ modelPatternAuthFallbackUsed:
1611
+ authFallbackUsed || approvedModelSelection?.substituted === true || undefined,
1612
+ modelPatternRequested: modelPatterns.length > 0 ? modelPatterns.join(", ") : undefined,`,
1613
+ alternates: [{
1614
+ file: "src/task/executor.ts",
1615
+ marker: "\n\t\t\t\tmodelPatternRequested: modelPatterns.length > 0",
1616
+ anchor: ` modelPatternAuthFallback:
1593
1617
  model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,`,
1594
- patched: ` modelPatternAuthFallback:
1618
+ patched: ` modelPatternAuthFallback:
1595
1619
  model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,
1596
1620
  modelPatternAuthFallbackUsed:
1597
1621
  authFallbackUsed || approvedModelSelection?.substituted === true || undefined,
1598
1622
  modelPatternRequested: modelPatterns.length > 0 ? modelPatterns.join(", ") : undefined,`,
1623
+ }],
1599
1624
  },
1600
1625
  {
1601
1626
  // 대체된 모델로 시작한 세션을 transcript 에서 구분할 수 있게 남긴다. 요청 selector
@@ -2996,6 +3021,79 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
2996
3021
  : {}),
2997
3022
  };`,
2998
3023
  },
3024
+ // 18.4.9(#14001)는 같은 계정 재기록의 persisted row 쓰기를 건너뛴다(#persistedSticky: type·credentialId·explicit·60초).
3025
+ // 이 비교에 exactLabel이 없으면 같은 계정에서 summon label만 바뀐 pin(일반 명시 pin → exact summon, 또는 그 반대)이
3026
+ // DB 행에 반영되지 않아, 다른 프로세스·재시작이 옛 정체성으로 복원한다(RIN exact pin이 사라져 sibling 회전 가능).
3027
+ // 아래 세 항목이 그 비교·기록·복원에 exactLabel을 넣는다. 검증: core-character-affinity-test.ts [7].
3028
+ // 18.4.6 은 record 마다 행을 다시 쓰므로(dedupe 없음) 할 일이 없다: alternate는 그 판의 매번-쓰기 줄 no-op이다.
3029
+ {
3030
+ file: "../pi-ai/src/auth/affinity.ts",
3031
+ marker: "a label-only change must rewrite the row",
3032
+ anchor: "\texplicit: boolean;\n\tlastUsedAtMs: number;\n};\n",
3033
+ patched: "\texplicit: boolean;\n\tlastUsedAtMs: number;\n\t/** CUELO: exact summon label stored in the row; a label-only change must rewrite the row. */\n\texactLabel: string | undefined;\n};\n",
3034
+ alternates: [{
3035
+ file: "../pi-ai/src/auth/affinity.ts",
3036
+ marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3037
+ anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3038
+ patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3039
+ }],
3040
+ },
3041
+ {
3042
+ file: "../pi-ai/src/auth/affinity.ts",
3043
+ marker: "\t\t\tpersisted.exactLabel === keptExactLabel &&\n",
3044
+ anchor: ` persisted.explicit === isExplicit &&
3045
+ Math.abs(nowMs - persisted.lastUsedAtMs) < SESSION_STICKY_PERSIST_INTERVAL_MS
3046
+ ) {
3047
+ return;
3048
+ }
3049
+ try {
3050
+ this.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);
3051
+ this.#persistedSticky.set(cacheKey, {
3052
+ type,
3053
+ credentialId,
3054
+ explicit: isExplicit,
3055
+ lastUsedAtMs: nowMs,
3056
+ });`,
3057
+ patched: ` persisted.explicit === isExplicit &&
3058
+ persisted.exactLabel === keptExactLabel &&
3059
+ Math.abs(nowMs - persisted.lastUsedAtMs) < SESSION_STICKY_PERSIST_INTERVAL_MS
3060
+ ) {
3061
+ return;
3062
+ }
3063
+ try {
3064
+ this.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);
3065
+ this.#persistedSticky.set(cacheKey, {
3066
+ type,
3067
+ credentialId,
3068
+ explicit: isExplicit,
3069
+ lastUsedAtMs: nowMs,
3070
+ exactLabel: keptExactLabel,
3071
+ });`,
3072
+ alternates: [{
3073
+ file: "../pi-ai/src/auth/affinity.ts",
3074
+ marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3075
+ anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3076
+ patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3077
+ }],
3078
+ },
3079
+ {
3080
+ // 복원한 행을 dedupe 기준으로 삼을 때도 그 행의 label을 같이 기억한다(바로 위 sessionVal은 위 항목이 trim한 값).
3081
+ file: "../pi-ai/src/auth/affinity.ts",
3082
+ marker: "\t\t\t\t\t\texactLabel: sessionVal.exactLabel,\n",
3083
+ anchor: ` explicit: val.explicit === true,
3084
+ lastUsedAtMs: val.lastUsedAtMs,
3085
+ });`,
3086
+ patched: ` explicit: val.explicit === true,
3087
+ lastUsedAtMs: val.lastUsedAtMs,
3088
+ exactLabel: sessionVal.exactLabel,
3089
+ });`,
3090
+ alternates: [{
3091
+ file: "../pi-ai/src/auth/affinity.ts",
3092
+ marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3093
+ anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3094
+ patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
3095
+ }],
3096
+ },
2999
3097
  {
3000
3098
  file: "../pi-ai/src/auth/affinity.ts",
3001
3099
  marker: "exactLabel(provider: string, sessionId: string | undefined): string | undefined {",
@@ -8138,21 +8236,32 @@ function parentSubagentServiceTiers(
8138
8236
  // controls가 둘 다 참일 때만 나간다(anthropic.ts prefixMismatchBehavior). models.yml은 thinking override의
8139
8237
  // prefixBinding을 스키마에서 조용히 버리고 공개 설치에는 없으므로 설정으로 켜지 않는다.
8140
8238
  {
8239
+ // 18.4.10(#14019)은 이 행에 prefixBinding을 넣었지만 binding controls는 false로 남긴다. 18.4.10 후보는 binding controls만 켠다.
8240
+ // 그 결과가 18.4.6 적용본과 바이트까지 같으면 두 후보가 함께 applied(ambiguous)이고, 문맥으로도 가를 수 없다(가장 가까운
8241
+ // 18.4.6↔18.4.10 차이가 앵커 앞 53K자·뒤 249K자). 그래서 18.4.10 결과만 `": true"` 공백으로 구분한다. JSON.parse는 이 공백을 무시한다.
8141
8242
  file: "../pi-catalog/src/models.json",
8142
- marker: '"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
8143
- anchor: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":false',
8144
- patched: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
8145
- },
8146
- {
8147
- // 모든 provider의 Opus 5.5 규칙 계보에 prefixBinding(Sonnet 5.5 규칙과 같은 모양). 18.4.6은 kdl 한 줄 이동으로
8148
- // source가 kdl:61이고 규칙 본문은 같다. alternate는 18.4.4·18.4.5 공통 kdl:60 앵커다. 두 후보의 marker는 source가
8149
- // 달라 서로의 결과·순정본에 들어 있지 않다. 18.4.4 적용본은 kdl:60 patched 바로 뒤에 binding controls 규칙이 붙어
8150
- // 있어 alternate marker가 그대로 성립한다.
8243
+ marker: OPUS55_ROW_1846.marker.replace('"supportsThinkingBindingControls":true', '"supportsThinkingBindingControls": true'),
8244
+ anchor: OPUS55_ROW_1846.anchor.replace('"supportsDisplay":true}', '"supportsDisplay":true,"prefixBinding":true}'),
8245
+ patched: OPUS55_ROW_1846.patched.replace('"supportsThinkingBindingControls":true', '"supportsThinkingBindingControls": true'),
8246
+ alternates: [OPUS55_ROW_1846],
8247
+ },
8248
+ {
8249
+ // 모든 provider의 Opus 5.5 규칙 계보에 prefixBinding(Sonnet 5.5 규칙과 같은 모양). 18.4.10은 upstream #14019가 kdl:61에
8250
+ // 같은 thinking.prefixBinding을 넣었으므로 할 일이 없다(본 후보: 그 upstream 줄의 no-op). 18.4.6 적용 결과와 18.4.10
8251
+ // 순정의 kdl:61 규칙은 바이트까지 같아서, 두 후보 모두 바로 뒤 Sonnet 5.5 규칙의 source(18.4.6 kdl:70, 18.4.10 kdl:77)까지
8252
+ // 앵커에 넣어 가른다. 그러지 않으면 18.4.10 순정이 18.4.6 후보로 applied가 되고 --revert가 upstream prefixBinding을 지운다.
8253
+ // alternate는 18.4.6(kdl:61)과 18.4.4·18.4.5 공통 kdl:60 앵커다. 18.4.4 적용본은 kdl:60 patched 바로 뒤에 binding
8254
+ // controls 규칙이 붙어 있어 kdl:60 marker가 그대로 성립한다.
8151
8255
  file: "../pi-catalog/src/compat/rules.json",
8152
- marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
8153
- anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}}',
8154
- patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
8256
+ marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
8257
+ anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
8258
+ patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
8155
8259
  alternates: [{
8260
+ file: "../pi-catalog/src/compat/rules.json",
8261
+ marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:70",',
8262
+ anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}},{"source":"classes/anthropic.kdl:70",',
8263
+ patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:70",',
8264
+ }, {
8156
8265
  file: "../pi-catalog/src/compat/rules.json",
8157
8266
  marker: '{"source":"classes/anthropic.kdl:60","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
8158
8267
  anchor: '{"source":"classes/anthropic.kdl:60","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}}',
@@ -8161,16 +8270,23 @@ function parentSubagentServiceTiers(
8161
8270
  },
8162
8271
  {
8163
8272
  // binding controls 규칙은 그 버전의 upstream Sonnet 5.5 binding 규칙 바로 뒤에 같은 provider 범위로 둔다.
8164
- // 18.4.6: kdl:129, alternate 18.4.5: kdl:128(둘 다 anthropic·cloudflare, 규칙 본문 동일). alternate 18.4.4:
8165
- // kdl:106(anthropic·cloudflare·vertex). 18.4.6·18.4.5 후보는 추가 규칙이 같아 marker를 앞 Sonnet 규칙까지 포함한
8273
+ // 18.4.10: kdl:139(#13996이 Vertex를 뺀 supportsPerMessageEffort가 같은 Sonnet 규칙에 붙었다. provider 범위는 그대로
8274
+ // anthropic·cloudflare이고 추가하는 Opus 규칙 본문도 같다). alternate 18.4.6: kdl:129, 18.4.5: kdl:128(둘 다 anthropic·cloudflare,
8275
+ // 규칙 본문 동일). alternate 18.4.4:
8276
+ // kdl:106(anthropic·cloudflare·vertex). 18.4.10·18.4.6·18.4.5 후보는 추가 규칙이 같아 marker를 앞 Sonnet 규칙까지 포함한
8166
8277
  // patched 전체로 둔다(같은 marker면 둘 다 applied라 ambiguous가 된다). 18.4.4 라이브 적용본은 옛 위치(kdl:60 뒤)에
8167
8278
  // 같은 규칙이 있어 그 alternate marker로 applied이다. 그 적용본의 --revert는 patched가 연속으로 없으므로 엔진의
8168
8279
  // 백업 경로(~/.omp/core-patch-backup)를 쓴다.
8169
8280
  file: "../pi-catalog/src/compat/rules.json",
8170
- marker: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8171
- anchor: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8172
- patched: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8281
+ marker: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8282
+ anchor: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}}',
8283
+ patched: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8173
8284
  alternates: [{
8285
+ file: "../pi-catalog/src/compat/rules.json",
8286
+ marker: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8287
+ anchor: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8288
+ patched: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8289
+ }, {
8174
8290
  file: "../pi-catalog/src/compat/rules.json",
8175
8291
  marker: '{"source":"classes/anthropic.kdl:128","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
8176
8292
  anchor: '{"source":"classes/anthropic.kdl:128","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}}',
@@ -8354,6 +8470,14 @@ function parentSubagentServiceTiers(
8354
8470
  marker: 'import { createRatchetPrelude } from "./ratchet/prelude.ts";',
8355
8471
  anchor: 'import { createRatchetPrelude } from "./ratchet/prelude";',
8356
8472
  patched: 'import { createRatchetPrelude } from "./ratchet/prelude.ts";',
8473
+ // 18.4.10: upstream #14027/#14029가 모듈을 `ratchet/prelude-definition.ts`로 개명해 같은 stem 충돌이 없어졌다(RETIRE).
8474
+ // 그 upstream import 줄 자체의 no-op이다. 18.4.6(KYS·라이브)은 위 본 후보가 계속 필요하다.
8475
+ alternates: [{
8476
+ file: "src/sdk.ts",
8477
+ marker: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
8478
+ anchor: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
8479
+ patched: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
8480
+ }],
8357
8481
  },
8358
8482
  // P55. genuine 사용자 steer 가 진행 중 모델 요청을 끝까지 기다리지 않게 한다(사용자 결정: 즉시 반영, 재추론 사용량 감수).
8359
8483
  // 2026-10-01 사용자 관측: Astra(xhigh) 4분짜리 추론 요청 중 넣은 steer 가 그 요청이 끝날 때까지(98.8s·169.6s)
@@ -8676,6 +8800,103 @@ class HarmonyLeakInterruption extends Error {`,
8676
8800
  anchor: " const assistantPartial = partial?.role === \"assistant\" ? partial : undefined;",
8677
8801
  patched: " // CUELO P55: a partial discarded for a steering restart is not this error's content.\n const assistantPartial =\n partial?.role === \"assistant\" && Reflect.get(partial, STEER_DISCARDED_PARTIAL) !== true ? partial : undefined;",
8678
8802
  },
8803
+ // 이슈 #5: async-result 자동 전달의 details.jobs[]에 그 실행의 실제 terminal status를 싣는다. wait·`read proc://`의
8804
+ // snapshotJobs는 이미 status를 싣지만 자동 결과만 빠져, schema 없는 실패(예: 격리 준비 실패의 TaskJobError)를
8805
+ // consumer가 completed로 읽었다. entry.job은 정산된 그 실행 객체이므로 enqueue 시점의 status가 정본이다.
8806
+ {
8807
+ file: "src/session/async-job-delivery.ts",
8808
+ marker: "\t/** Actual terminal status of this run (completed|failed|cancelled); absent when the job row is gone. */",
8809
+ anchor: "\tdurationMs?: number;\n\t/** Source capture metadata belongs to this job, not to the enclosing delivery report. */",
8810
+ patched: "\tdurationMs?: number;\n\t/** Actual terminal status of this run (completed|failed|cancelled); absent when the job row is gone. */\n\tstatus?: AsyncJob[\"status\"];\n\t/** Source capture metadata belongs to this job, not to the enclosing delivery report. */",
8811
+ },
8812
+ {
8813
+ file: "src/session/async-job-delivery.ts",
8814
+ marker: "\t\t\tstatus: entry.job?.status,\n",
8815
+ anchor: "\t\t\tlabel: entry.job?.label,\n",
8816
+ patched: "\t\t\tlabel: entry.job?.label,\n\t\t\tstatus: entry.job?.status,\n",
8817
+ },
8818
+ {
8819
+ file: "src/session/async-job-delivery.ts",
8820
+ marker: "\t\t\t...(job.status ? { status: job.status } : {}),\n",
8821
+ anchor: "\t\t\tdurationMs: job.durationMs,\n\t\t\t...(job.meta ? { meta: job.meta } : {}),\n",
8822
+ patched: "\t\t\tdurationMs: job.durationMs,\n\t\t\t...(job.status ? { status: job.status } : {}),\n\t\t\t...(job.meta ? { meta: job.meta } : {}),\n",
8823
+ },
8824
+ // 이슈 #10: extension 의 getAsyncJobSnapshot 은 인자를 받지 않고(ExtensionContext 타입·runner·sdk adapter) 기본 recent 5개만
8825
+ // 돌려줘, 같은 owner 의 더 최근 job 5개에 밀린 취소 실행의 종료 근거(같은 실행의 cancelled·endTime)를 볼 수 없었다. options 를
8826
+ // 끝까지 전달하고, `jobIds` 를 준 호출에만 그 id 들의 exact row 를 `jobs` 로 더한다. 기존 owner filter·foreground 제외를 그대로
8827
+ // 쓰고 getJob O(k) 조회라 정렬·전체 복사가 없다. jobIds 가 없으면 반환 형태와 기본 recent 5 는 그대로다.
8828
+ {
8829
+ file: "src/session/agent-session-types.ts",
8830
+ marker: "export interface AsyncJobSnapshotOptions {",
8831
+ anchor: "/** Snapshot of running, recent, and pending-delivery asynchronous jobs. */\nexport interface AsyncJobSnapshot {\n\trunning: AsyncJobSnapshotItem[];\n\trecent: AsyncJobSnapshotItem[];\n\tdelivery: AsyncJobDeliveryState;\n}",
8832
+ patched: "/** Options for an {@link AsyncJobSnapshot} read. */\nexport interface AsyncJobSnapshotOptions {\n\t/** Settled rows listed in `recent`, newest first (default 5). */\n\trecentLimit?: number;\n\t/**\n\t * Exact job ids to look up regardless of the `recent` window. Rows this session owns and lists (same owner\n\t * filter; foreground-backed jobs stay hidden) are returned in `jobs`; unknown, evicted or foreign ids are omitted.\n\t */\n\tjobIds?: readonly string[];\n}\n\n/** Snapshot of running, recent, and pending-delivery asynchronous jobs. */\nexport interface AsyncJobSnapshot {\n\trunning: AsyncJobSnapshotItem[];\n\trecent: AsyncJobSnapshotItem[];\n\tdelivery: AsyncJobDeliveryState;\n\t/** Present only when `jobIds` was requested: the exact rows found for those ids, in request order. */\n\tjobs?: AsyncJobSnapshotItem[];\n}",
8833
+ },
8834
+ {
8835
+ file: "src/session/agent-session.ts",
8836
+ marker: "\tAsyncJobSnapshotOptions,\n\tCommandMetadataChangedListener,",
8837
+ anchor: "\tAsyncJobSnapshot,\n\tCommandMetadataChangedListener,",
8838
+ patched: "\tAsyncJobSnapshot,\n\tAsyncJobSnapshotOptions,\n\tCommandMetadataChangedListener,",
8839
+ },
8840
+ {
8841
+ file: "src/session/agent-session.ts",
8842
+ marker: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null {",
8843
+ anchor: "\tgetAsyncJobSnapshot(options?: { recentLimit?: number }): AsyncJobSnapshot | null {",
8844
+ patched: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null {",
8845
+ },
8846
+ {
8847
+ file: "src/session/agent-session.ts",
8848
+ marker: "\t\treturn { running, recent, delivery, jobs };",
8849
+ anchor: "\t\tconst delivery = manager.getDeliveryState(ownerFilter);\n\t\treturn { running, recent, delivery };",
8850
+ patched: "\t\tconst delivery = manager.getDeliveryState(ownerFilter);\n\t\tif (!options?.jobIds) return { running, recent, delivery };\n\t\t// CUELO #10: exact lookup independent of the display-sized recent window, with the same owner and foreground rules.\n\t\tconst jobs = options.jobIds.flatMap(id => {\n\t\t\tconst job = manager.getJob(id);\n\t\t\tif (!job || job.foreground || (ownerFilter && job.ownerId !== ownerFilter.ownerId)) return [];\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: job.id,\n\t\t\t\t\ttype: job.type,\n\t\t\t\t\tstatus: job.status,\n\t\t\t\t\tlabel: job.label,\n\t\t\t\t\tstartTime: job.startTime,\n\t\t\t\t\tendTime: job.endTime,\n\t\t\t\t\tagentId: job.agentId,\n\t\t\t\t},\n\t\t\t];\n\t\t});\n\t\treturn { running, recent, delivery, jobs };",
8851
+ },
8852
+ {
8853
+ file: "src/session/agent-session.ts",
8854
+ marker: "\t\t\tgetAsyncJobSnapshot: options => this.getAsyncJobSnapshot(options),",
8855
+ anchor: "\t\t\tgetAsyncJobSnapshot: () => this.getAsyncJobSnapshot(),",
8856
+ patched: "\t\t\tgetAsyncJobSnapshot: options => this.getAsyncJobSnapshot(options),",
8857
+ },
8858
+ {
8859
+ file: "src/extensibility/extensions/types.ts",
8860
+ marker: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions, SendUserMessageOptions } from \"../../session/agent-session\";",
8861
+ anchor: "import type { AsyncJobSnapshot, SendUserMessageOptions } from \"../../session/agent-session\";",
8862
+ patched: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions, SendUserMessageOptions } from \"../../session/agent-session\";",
8863
+ },
8864
+ {
8865
+ file: "src/extensibility/extensions/types.ts",
8866
+ marker: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null;",
8867
+ anchor: "\t/** Get a read-only snapshot of async jobs owned by this session. */\n\tgetAsyncJobSnapshot(): AsyncJobSnapshot | null;",
8868
+ patched: "\t/** Get a read-only snapshot of async jobs owned by this session; `options.jobIds` adds exact rows for those ids. */\n\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null;",
8869
+ },
8870
+ {
8871
+ file: "src/extensibility/extensions/runner.ts",
8872
+ marker: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions } from \"../../session/agent-session\";",
8873
+ anchor: "import type { AsyncJobSnapshot } from \"../../session/agent-session\";",
8874
+ patched: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions } from \"../../session/agent-session\";",
8875
+ },
8876
+ {
8877
+ file: "src/extensibility/extensions/runner.ts",
8878
+ marker: "\t#getAsyncJobSnapshotFn: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null = () => null;",
8879
+ anchor: "\t#getAsyncJobSnapshotFn: () => AsyncJobSnapshot | null = () => null;",
8880
+ patched: "\t#getAsyncJobSnapshotFn: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null = () => null;",
8881
+ },
8882
+ {
8883
+ file: "src/extensibility/extensions/runner.ts",
8884
+ marker: "\t\tgetAsyncJobSnapshot?: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null,",
8885
+ anchor: "\t\tgetAsyncJobSnapshot?: () => AsyncJobSnapshot | null,",
8886
+ patched: "\t\tgetAsyncJobSnapshot?: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null,",
8887
+ },
8888
+ {
8889
+ file: "src/extensibility/extensions/runner.ts",
8890
+ marker: "\t\t\tgetAsyncJobSnapshot: options => this.#getAsyncJobSnapshotFn(options),",
8891
+ anchor: "\t\t\tgetAsyncJobSnapshot: () => this.#getAsyncJobSnapshotFn(),",
8892
+ patched: "\t\t\tgetAsyncJobSnapshot: options => this.#getAsyncJobSnapshotFn(options),",
8893
+ },
8894
+ {
8895
+ file: "src/sdk.ts",
8896
+ marker: "\t\t\toptions => (hasSession ? session.getAsyncJobSnapshot(options) : null),",
8897
+ anchor: "\t\t\t() => (hasSession ? session.getAsyncJobSnapshot() : null),",
8898
+ patched: "\t\t\toptions => (hasSession ? session.getAsyncJobSnapshot(options) : null),",
8899
+ },
8679
8900
  ];
8680
8901
  // EDITS 문자열의 줄 끝을 LF로 통일한다. 이 파일의 작업 사본이 CRLF여도 core 파일(LF)과
8681
8902
  // 비교·치환이 어긋나지 않는다. core 파일 자체의 줄 끝은 건드리지 않는다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
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.4.6"
33
+ "coreVersion": "18.4.10"
34
34
  },
35
35
  "engines": {
36
36
  "node": ">=22.19.0",
@@ -88,11 +88,11 @@
88
88
  "test:coverage": "bun test --coverage ./app ./components ./hooks ./lib ./public ./bin ./install.test.mjs"
89
89
  },
90
90
  "dependencies": {
91
- "@oh-my-pi/pi-agent-core": "18.4.6",
92
- "@oh-my-pi/pi-ai": "18.4.6",
93
- "@oh-my-pi/pi-coding-agent": "18.4.6",
94
- "@oh-my-pi/pi-tui": "18.4.6",
95
- "@oh-my-pi/pi-utils": "18.4.6",
91
+ "@oh-my-pi/pi-agent-core": "18.4.10",
92
+ "@oh-my-pi/pi-ai": "18.4.10",
93
+ "@oh-my-pi/pi-coding-agent": "18.4.10",
94
+ "@oh-my-pi/pi-tui": "18.4.10",
95
+ "@oh-my-pi/pi-utils": "18.4.10",
96
96
  "@seed-design/css": "2.8.0",
97
97
  "@seed-design/react": "2.4.1",
98
98
  "@seed-design/tailwind4-theme": "2.4.0",
@@ -0,0 +1,85 @@
1
+ # Aivis Common Model License (ACML) 1.0
2
+
3
+ このライセンスは、AI 音声合成モデルの利用条件と制限を定めるものです。
4
+
5
+ 音声合成技術の発展により、誰もが簡単に高品質な合成音声を作れるようになりました。
6
+ この技術は、創作活動はもちろん、AI との対話や新しいサービスの開発など、さまざまな可能性を広げる革新的な手段として注目されています。
7
+
8
+ 現在、音声合成モデルのライセンスは制作者ごとにまちまちで、利用条件も曖昧なことが多く、使いづらい状況が続いています。
9
+ Aivis Project が策定する ACML は、音声合成モデルの自由な利用を促進しながら、制作者と利用者の双方にとって安心して活用できる環境を実現することを目指しています。
10
+
11
+ また、多くの制作者に共通のライセンスとして採用していただくことで、モデルごとの規約に気を遣うことなく、誰もが安心して音声合成モデルを利用できる環境づくりを目指しています。
12
+
13
+ このライセンスは、あなたに以下の権利を許諾します。
14
+
15
+ - ✅ **この音声合成モデルの利用・複製・改変・派生物の作成**
16
+ - 音声合成モデルを実行して音声を生成することはもちろん、モデルの複製や改変、派生モデルの作成も自由に行えます。
17
+ - ✅ **この音声合成モデルやその派生物の配布**
18
+ - このライセンスの条件に従う限り、改変の有無を問わず、自由に再配布することができます。
19
+
20
+ ただし、これらの権利は「できないこと(禁止事項)」に定める制限に従うものとします。
21
+
22
+ ## 用語の定義
23
+
24
+ - **話者:** 話し手 (Speaker) のことをいいます。話者には「実在人物」の声と「キャラクター」の声の両方を含みます。
25
+ - **音声合成モデル:** 話者の声を AI に学習させることで制作された、テキストからその話者に近い合成音声を生成できる、重み (Weight) やパラメータのことを指します。
26
+ - **あなた:** このライセンスによって許可された行為を行う個人・法人のことをいいます。
27
+ - **このライセンス:** このライセンス自身 (Aivis Common Model License: ACML) のことをいいます。
28
+ - **この音声合成モデル:** このライセンスにより利用が許諾される音声合成モデルのことをいいます。
29
+ - **利用:** この音声合成モデルの実行、複製、改変、配布、組み込み、その他あらゆる利用形態を含みます。
30
+ - **派生物:** この音声合成モデルを基に作成された二次的著作物、改変物、または派生物を指します。
31
+
32
+ ## できないこと(禁止事項)
33
+
34
+ - ❌ **音声合成モデルの元となった話者や無関係な他者の「本人」「原作者」「公式関係者」であるとの誤解を招く/騙すような利用**
35
+ - 生成した音声を、ディープフェイクや公式なコンテンツだと誤解されるような形で公開しないでください。
36
+ - 「※非公式です」「本人とは一切関係ありません」と明記するなど、なるべく公式なものだと誤解されないよう注意を払ってください。
37
+ - ❌ **話者のイメージ・尊厳・品位・社会的評価を「傷つける」「価値を下げる」「貶める」ような利用**
38
+ - 第三者が『この声がこんな用途に使われるのは嫌だ』と感じるような使い方をしないでください。
39
+ - 話者がキャラクターのときは、そのキャラクターが登場する作品に対しても同様に適用されます。
40
+ - 具体的には、下記の禁止事項が該当します。
41
+ - ❌ **実在する人物・団体・商品などを「批判」「攻撃」「嫌がらせ」「誹謗中傷」「差別」する活動への利用**
42
+ - 「攻撃」とは、自他を傷つけるあらゆる行為(犯罪、戦争、暴行、自傷・自殺、薬物乱用、ヘイトスピーチ、誹謗中傷、侮辱、揶揄、アンチ活動、詐欺、クラッキング、その他あらゆる身体的・精神的・社会的加害を含むがこれらに限定されない)を、実行または扇動することをいいます。
43
+ - あなたの主張が正当であるかどうかにかかわらず、批判や攻撃を目的とした活動にはお使いいただけません。
44
+ - ❌ **人々を騙す目的で虚偽の情報やコンテンツを公開・流布する活動への利用**
45
+ - フェイクニュースの作成や誤情報を広める目的ではお使いいただけません。
46
+ - ❌ **虚偽または誇大な表現によるマーケティングや倫理的に問題のあるビジネスへの利用**
47
+ - 消費者の誤解を狙った悪質なマーケティング活動・倫理的に問題のある事業活動(虚偽広告、誇大広告、高額情報商材、マルチ商法、ねずみ講を含むがこれらに限定されない)やその宣伝にはお使いいただけません。
48
+ - ❌ **特定の政治的立場・政治団体・政治家・宗教団体・宗教家・排他的思想・社会的勢力・陰謀論への賛同・支援または反対・批判・非難を呼びかける活動(権利運動・署名運動・デモ・プロパガンダを含むがこれらに限定されない)への利用**
49
+ - 「陰謀論」とは、科学的根拠や事実に基づかない主張(ワクチン、通信技術、医療、健康、社会問題などに関する誤った情報を含むがこれらに限定されない)のことをいいます。
50
+ - あなたの主張が正当であるかどうかにかかわらず、特定の政治・宗教・排他的思想・社会的勢力・陰謀論に関する主張を広める活動にはお使いいただけません。
51
+ - ❌ **反社会的・犯罪目的での利用**
52
+ - 話者へのなりすましによるオレオレ詐欺や、反社会的勢力による利用などを含みます。
53
+
54
+ ## できること
55
+
56
+ - ✅ **上記「できないこと(禁止事項)」に該当しない、すべての個人利用・法人利用・非営利利用・営利利用**
57
+ - 禁止事項に該当しない使い方であれば、どのような用途にも自由にお使いいただけます。
58
+ - その際、下記の「なるべく守ってほしいこと」を尊重した利用をお願いします。
59
+ - クレジット表記は任意です。音声合成モデルの制作者や話者のクレジット表記を行うかどうかは、あなたの判断にお任せします。
60
+ - この音声合成モデルを他の人に配布・共有する場合は、必ずこのライセンス文書も一緒に添付してください。
61
+ - ℹ️ **この音声合成モデルを組み込んだアプリ・Web サービスを不特定多数に公開する場合:**
62
+ - 不特定多数のユーザー or AI (LLM) が任意のテキストを入力して音声合成できる状況において、このライセンスをユーザーや LLM に完璧に遵守させることは、技術的・現実的に極めて困難であると考えられます。
63
+ - このため特例として、(技術的に禁止事項に該当する利用を防げる状態かに関わらず)**「アプリ・Web サービスの開発元自身がこのライセンスを遵守し、現実的な範囲でなるべく禁止事項に該当する利用が起きないよう努めていれば」お使いいただけます。**
64
+
65
+ ## なるべく守ってほしいこと
66
+
67
+ - ℹ️ **話者をリスペクト・尊重した利用をしてほしい**
68
+ - 具体的にどのような使い方が「リスペクト」となるかは、あなたの良識にお任せします。
69
+ - 話者がキャラクターのときは、そのキャラクターが登場する作品も十分にリスペクトしてください。
70
+ - キャラクター愛・作品愛のある使い方をお願いします。
71
+ - ℹ️ **刺激の強い/万人向けでない表現を公開するときは、「見たくない人・見るべきでない人の目に入らない」よう十分配慮してほしい**
72
+ - 表現に合わせた適切なゾーニングをお願いします。
73
+ - ゾーニングの例:「年齢制限を掛ける」「SNS のセンシティブ設定をオンにする」「コンテンツの前に注意書きを設置する」
74
+ - ℹ️ **常識の範囲内で、良識ある利用をしてほしい**
75
+ - 上記はあくまで任意であり、遵守されていなくてもライセンス違反にはなりません。
76
+
77
+ ## 免責事項
78
+
79
+ - この音声合成モデルは「現状のまま」提供されており、商品性や特定の目的への適合性、権利の非侵害などについて、明示的または黙示的を問わず、いかなる保証もありません。
80
+ - 音声合成モデルの制作者は、この音声合成モデルの利用や取り扱いまたはその結果に関連して、契約や不法行為など、いかなる形の請求や損害賠償、その他の責任についても、一切の責任を負いません。あなた自身の責任においてお使いください。
81
+ - このライセンスのいずれかの条項が無効または執行不能と判断された場合でも、残りの条項は完全に有効に存続するものとします。
82
+ - このライセンスのいずれかの条項の権利行使を行わなかったとしても、それは当該条項または他の条項の権利放棄とはみなされません。
83
+ - このライセンスはすべて日本語で提供され、日本語のみにより解釈されるものとします。
84
+
85
+ 上記の免責事項は、適用される法令の下で許容される最大限の範囲で適用されるものとします。