cuelo 0.9.6 → 0.9.8

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 (346) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -10
  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 +2 -2
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  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 +1 -1
  28. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  29. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  31. package/.next/server/app/api/agent/[id]/route.js +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/running/route.js +1 -1
  34. package/.next/server/app/api/attachment-settings/route.js +1 -1
  35. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  36. package/.next/server/app/api/attachments/draft/route.js +1 -1
  37. package/.next/server/app/api/attachments/route.js +3 -3
  38. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  39. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  40. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  41. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/providers/route.js +1 -1
  43. package/.next/server/app/api/cwd/browse/route.js +1 -1
  44. package/.next/server/app/api/cwd/validate/route.js +1 -1
  45. package/.next/server/app/api/default-cwd/route.js +1 -1
  46. package/.next/server/app/api/display-settings/route.js +1 -1
  47. package/.next/server/app/api/document-text/route.js +2 -2
  48. package/.next/server/app/api/experiments/route.js +1 -1
  49. package/.next/server/app/api/file-index/route.js +1 -1
  50. package/.next/server/app/api/files/[...path]/route.js +3 -3
  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 -0
  54. package/.next/server/app/api/github/projects/route.js.nft.json +1 -0
  55. package/.next/server/app/api/github/projects/route_client-reference-manifest.js +1 -0
  56. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  57. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  58. package/.next/server/app/api/gpt6/token/route.js +1 -1
  59. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  60. package/.next/server/app/api/home/route.js +1 -1
  61. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  62. package/.next/server/app/api/live/character-voice/route.js +1 -1
  63. package/.next/server/app/api/live/events/route.js +2 -2
  64. package/.next/server/app/api/live/offer/route.js +1 -1
  65. package/.next/server/app/api/live/voices/route.js +1 -1
  66. package/.next/server/app/api/lounge/events/route.js +2 -2
  67. package/.next/server/app/api/lounge/route.js +1 -1
  68. package/.next/server/app/api/mcp/route.js +2 -2
  69. package/.next/server/app/api/model-roles/route.js +1 -1
  70. package/.next/server/app/api/models/route.js +1 -1
  71. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  72. package/.next/server/app/api/models-config/discover/route.js +1 -1
  73. package/.next/server/app/api/models-config/route.js +3 -3
  74. package/.next/server/app/api/models-config/test/route.js +1 -1
  75. package/.next/server/app/api/office-avatars/[id]/route.js +1 -1
  76. package/.next/server/app/api/office-avatars/route.js +1 -1
  77. package/.next/server/app/api/plugins/route.js +1 -1
  78. package/.next/server/app/api/project-trust/route.js +1 -1
  79. package/.next/server/app/api/projects/route.js +1 -1
  80. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  81. package/.next/server/app/api/runs/route.js +1 -1
  82. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  84. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  85. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  86. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  87. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  88. package/.next/server/app/api/sessions/route.js +1 -1
  89. package/.next/server/app/api/sessions/search/route.js +1 -1
  90. package/.next/server/app/api/settings/route.js +1 -1
  91. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  92. package/.next/server/app/api/skills/check/route.js +1 -1
  93. package/.next/server/app/api/skills/install/route.js +2 -2
  94. package/.next/server/app/api/skills/route.js +2 -2
  95. package/.next/server/app/api/skills/search/route.js +1 -1
  96. package/.next/server/app/api/skills/update/route.js +1 -1
  97. package/.next/server/app/api/theme/route.js +1 -1
  98. package/.next/server/app/api/tool-image/route.js +1 -1
  99. package/.next/server/app/api/update-maintenance/route.js +8 -4
  100. package/.next/server/app/api/updates/route.js +1 -1
  101. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  102. package/.next/server/app/api/web-access/route.js +1 -1
  103. package/.next/server/app/api/web6/consults/route.js +1 -1
  104. package/.next/server/app/api/worktrees/route.js +1 -1
  105. package/.next/server/app/favicon.ico/route.js +1 -1
  106. package/.next/server/app/index.html +1 -1
  107. package/.next/server/app/index.rsc +5 -5
  108. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  109. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  110. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  111. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  112. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  113. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  114. package/.next/server/app/office/page.js +2 -2
  115. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/office-preview/page.js +2 -2
  117. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  118. package/.next/server/app/office-preview.html +1 -1
  119. package/.next/server/app/office-preview.rsc +2 -2
  120. package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
  121. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  122. package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
  123. package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
  124. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  125. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  126. package/.next/server/app/office.html +1 -1
  127. package/.next/server/app/office.rsc +5 -5
  128. package/.next/server/app/office.segments/_full.segment.rsc +5 -5
  129. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  130. package/.next/server/app/office.segments/_index.segment.rsc +2 -2
  131. package/.next/server/app/office.segments/_tree.segment.rsc +2 -2
  132. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +4 -4
  133. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  134. package/.next/server/app/page.js +2 -2
  135. package/.next/server/app/page_client-reference-manifest.js +1 -1
  136. package/.next/server/app/recover/page.js +2 -2
  137. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  138. package/.next/server/app/recover.html +1 -1
  139. package/.next/server/app/recover.rsc +2 -2
  140. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  141. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  142. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  143. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  144. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  145. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  146. package/.next/server/app-paths-manifest.json +11 -10
  147. package/.next/server/chunks/1008.js +2 -2
  148. package/.next/server/chunks/2651.js +1 -1
  149. package/.next/server/chunks/3379.js +1 -1
  150. package/.next/server/chunks/5489.js +12 -12
  151. package/.next/server/chunks/6429.js +6 -6
  152. package/.next/server/chunks/7362.js +1 -1
  153. package/.next/server/middleware-build-manifest.js +1 -1
  154. package/.next/server/middleware.js +2 -2
  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/chunks/6110-9f1e951aafcdd72e.js +1 -0
  159. package/.next/static/chunks/9575-a48cda671c8b915d.js +22 -0
  160. package/.next/static/chunks/app/{api/agent/[id]/bash-output/route-6b1496af498bb4fd.js → _global-error/page-318ea6a550b5034e.js} +1 -1
  161. package/.next/static/chunks/app/api/agent/[id]/{events/route-6b1496af498bb4fd.js → account/route-318ea6a550b5034e.js} +1 -1
  162. package/.next/static/chunks/app/{_global-error/page-6b1496af498bb4fd.js → api/agent/[id]/bash-output/route-318ea6a550b5034e.js} +1 -1
  163. package/.next/static/chunks/app/api/agent/[id]/{account/route-6b1496af498bb4fd.js → events/route-318ea6a550b5034e.js} +1 -1
  164. package/.next/static/chunks/app/api/agent/[id]/route-318ea6a550b5034e.js +1 -0
  165. package/.next/static/chunks/app/api/agent/new/route-318ea6a550b5034e.js +1 -0
  166. package/.next/static/chunks/app/api/agent/running/route-318ea6a550b5034e.js +1 -0
  167. package/.next/static/chunks/app/api/attachment-settings/route-318ea6a550b5034e.js +1 -0
  168. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-318ea6a550b5034e.js +1 -0
  169. package/.next/static/chunks/app/api/attachments/draft/route-318ea6a550b5034e.js +1 -0
  170. package/.next/static/chunks/app/api/attachments/route-318ea6a550b5034e.js +1 -0
  171. package/.next/static/chunks/app/api/auth/all-providers/route-318ea6a550b5034e.js +1 -0
  172. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-318ea6a550b5034e.js +1 -0
  173. package/.next/static/chunks/app/api/auth/login/[provider]/route-318ea6a550b5034e.js +1 -0
  174. package/.next/static/chunks/app/api/auth/logout/[provider]/route-318ea6a550b5034e.js +1 -0
  175. package/.next/static/chunks/app/api/auth/providers/route-318ea6a550b5034e.js +1 -0
  176. package/.next/static/chunks/app/api/cwd/browse/route-318ea6a550b5034e.js +1 -0
  177. package/.next/static/chunks/app/api/cwd/validate/route-318ea6a550b5034e.js +1 -0
  178. package/.next/static/chunks/app/api/default-cwd/route-318ea6a550b5034e.js +1 -0
  179. package/.next/static/chunks/app/api/display-settings/route-318ea6a550b5034e.js +1 -0
  180. package/.next/static/chunks/app/api/document-text/route-318ea6a550b5034e.js +1 -0
  181. package/.next/static/chunks/app/api/experiments/route-318ea6a550b5034e.js +1 -0
  182. package/.next/static/chunks/app/api/file-index/route-318ea6a550b5034e.js +1 -0
  183. package/.next/static/chunks/app/api/files/[...path]/route-318ea6a550b5034e.js +1 -0
  184. package/.next/static/chunks/app/api/git/diff/route-318ea6a550b5034e.js +1 -0
  185. package/.next/static/chunks/app/api/git/status/route-318ea6a550b5034e.js +1 -0
  186. package/.next/static/chunks/app/api/github/projects/route-318ea6a550b5034e.js +1 -0
  187. package/.next/static/chunks/app/api/gpt6/handles/route-318ea6a550b5034e.js +1 -0
  188. package/.next/static/chunks/app/api/gpt6/reply/route-318ea6a550b5034e.js +1 -0
  189. package/.next/static/chunks/app/api/gpt6/token/route-318ea6a550b5034e.js +1 -0
  190. package/.next/static/chunks/app/api/gpt6/web6-session/route-318ea6a550b5034e.js +1 -0
  191. package/.next/static/chunks/app/api/home/route-318ea6a550b5034e.js +1 -0
  192. package/.next/static/chunks/app/api/live/call/[callId]/route-318ea6a550b5034e.js +1 -0
  193. package/.next/static/chunks/app/api/live/character-voice/route-318ea6a550b5034e.js +1 -0
  194. package/.next/static/chunks/app/api/live/events/route-318ea6a550b5034e.js +1 -0
  195. package/.next/static/chunks/app/api/live/offer/route-318ea6a550b5034e.js +1 -0
  196. package/.next/static/chunks/app/api/live/voices/route-318ea6a550b5034e.js +1 -0
  197. package/.next/static/chunks/app/api/lounge/events/route-318ea6a550b5034e.js +1 -0
  198. package/.next/static/chunks/app/api/lounge/route-318ea6a550b5034e.js +1 -0
  199. package/.next/static/chunks/app/api/mcp/route-318ea6a550b5034e.js +1 -0
  200. package/.next/static/chunks/app/api/model-roles/route-318ea6a550b5034e.js +1 -0
  201. package/.next/static/chunks/app/api/models/route-318ea6a550b5034e.js +1 -0
  202. package/.next/static/chunks/app/api/models-config/catalog/route-318ea6a550b5034e.js +1 -0
  203. package/.next/static/chunks/app/api/models-config/discover/route-318ea6a550b5034e.js +1 -0
  204. package/.next/static/chunks/app/api/models-config/route-318ea6a550b5034e.js +1 -0
  205. package/.next/static/chunks/app/api/models-config/test/route-318ea6a550b5034e.js +1 -0
  206. package/.next/static/chunks/app/api/office-avatars/[id]/route-318ea6a550b5034e.js +1 -0
  207. package/.next/static/chunks/app/api/office-avatars/route-318ea6a550b5034e.js +1 -0
  208. package/.next/static/chunks/app/api/plugins/route-318ea6a550b5034e.js +1 -0
  209. package/.next/static/chunks/app/api/project-trust/route-318ea6a550b5034e.js +1 -0
  210. package/.next/static/chunks/app/api/projects/route-318ea6a550b5034e.js +1 -0
  211. package/.next/static/chunks/app/api/runs/[runId]/route-318ea6a550b5034e.js +1 -0
  212. package/.next/static/chunks/app/api/runs/route-318ea6a550b5034e.js +1 -0
  213. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-318ea6a550b5034e.js +1 -0
  214. package/.next/static/chunks/app/api/sessions/[id]/context/route-318ea6a550b5034e.js +1 -0
  215. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-318ea6a550b5034e.js +1 -0
  216. package/.next/static/chunks/app/api/sessions/[id]/export/route-318ea6a550b5034e.js +1 -0
  217. package/.next/static/chunks/app/api/sessions/[id]/route-318ea6a550b5034e.js +1 -0
  218. package/.next/static/chunks/app/api/sessions/[id]/state/route-318ea6a550b5034e.js +1 -0
  219. package/.next/static/chunks/app/api/sessions/route-318ea6a550b5034e.js +1 -0
  220. package/.next/static/chunks/app/api/sessions/search/route-318ea6a550b5034e.js +1 -0
  221. package/.next/static/chunks/app/api/settings/route-318ea6a550b5034e.js +1 -0
  222. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-318ea6a550b5034e.js +1 -0
  223. package/.next/static/chunks/app/api/skills/check/route-318ea6a550b5034e.js +1 -0
  224. package/.next/static/chunks/app/api/skills/install/route-318ea6a550b5034e.js +1 -0
  225. package/.next/static/chunks/app/api/skills/route-318ea6a550b5034e.js +1 -0
  226. package/.next/static/chunks/app/api/skills/search/route-318ea6a550b5034e.js +1 -0
  227. package/.next/static/chunks/app/api/skills/update/route-318ea6a550b5034e.js +1 -0
  228. package/.next/static/chunks/app/api/theme/route-318ea6a550b5034e.js +1 -0
  229. package/.next/static/chunks/app/api/tool-image/route-318ea6a550b5034e.js +1 -0
  230. package/.next/static/chunks/app/api/update-maintenance/route-318ea6a550b5034e.js +1 -0
  231. package/.next/static/chunks/app/api/updates/route-318ea6a550b5034e.js +1 -0
  232. package/.next/static/chunks/app/api/web-access/recovery/route-318ea6a550b5034e.js +1 -0
  233. package/.next/static/chunks/app/api/web-access/route-318ea6a550b5034e.js +1 -0
  234. package/.next/static/chunks/app/api/web6/consults/route-318ea6a550b5034e.js +1 -0
  235. package/.next/static/chunks/app/api/worktrees/route-318ea6a550b5034e.js +1 -0
  236. package/.next/static/chunks/app/{layout-15c56b62f49b1c1d.js → layout-489bc5b73326436e.js} +1 -1
  237. package/.next/static/chunks/app/manifest.webmanifest/route-318ea6a550b5034e.js +1 -0
  238. package/.next/static/chunks/app/office/page-8dc604f9b5e6f220.js +1 -0
  239. package/.next/static/chunks/app/page-952b1ef4df5ac896.js +1 -0
  240. package/.next/static/chunks/next/dist/client/components/builtin/app-error-318ea6a550b5034e.js +1 -0
  241. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-318ea6a550b5034e.js +1 -0
  242. package/.next/static/chunks/next/dist/client/components/builtin/not-found-318ea6a550b5034e.js +1 -0
  243. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-318ea6a550b5034e.js +1 -0
  244. package/.next/static/chunks/{webpack-fe8f1f81562a2b61.js → webpack-68986b211ad38cf1.js} +1 -1
  245. package/.next/static/css/4fae42750604bc1a.css +1 -0
  246. package/.next/static/pzZcPiD8nl6i7i_Ne9Ko-/_buildManifest.js +1 -0
  247. package/.next/trace +108 -108
  248. package/.next/trace-build +1 -1
  249. package/.next/types/app/api/github/projects/route.ts +351 -0
  250. package/.next/types/routes.d.ts +2 -1
  251. package/.next/types/validator.ts +9 -0
  252. package/README.md +8 -3
  253. package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
  254. package/Tools/OMP_Global_Config/agent/RULES.md +3 -1
  255. package/Tools/OMP_Global_Config/agent/TITLE_SYSTEM.md +17 -0
  256. package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +11 -4
  257. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +4 -2
  258. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/finalizer.ps1 +68 -31
  259. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +8 -6
  260. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +1119 -129
  261. package/bin/docker-entrypoint.mjs +19 -0
  262. package/install.mjs +11 -7
  263. package/package.json +8 -7
  264. package/.next/static/chunks/6110-004be57c825af4d9.js +0 -1
  265. package/.next/static/chunks/9575-4a84cf066c2f1257.js +0 -22
  266. package/.next/static/chunks/app/api/agent/[id]/route-6b1496af498bb4fd.js +0 -1
  267. package/.next/static/chunks/app/api/agent/new/route-6b1496af498bb4fd.js +0 -1
  268. package/.next/static/chunks/app/api/agent/running/route-6b1496af498bb4fd.js +0 -1
  269. package/.next/static/chunks/app/api/attachment-settings/route-6b1496af498bb4fd.js +0 -1
  270. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-6b1496af498bb4fd.js +0 -1
  271. package/.next/static/chunks/app/api/attachments/draft/route-6b1496af498bb4fd.js +0 -1
  272. package/.next/static/chunks/app/api/attachments/route-6b1496af498bb4fd.js +0 -1
  273. package/.next/static/chunks/app/api/auth/all-providers/route-6b1496af498bb4fd.js +0 -1
  274. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-6b1496af498bb4fd.js +0 -1
  275. package/.next/static/chunks/app/api/auth/login/[provider]/route-6b1496af498bb4fd.js +0 -1
  276. package/.next/static/chunks/app/api/auth/logout/[provider]/route-6b1496af498bb4fd.js +0 -1
  277. package/.next/static/chunks/app/api/auth/providers/route-6b1496af498bb4fd.js +0 -1
  278. package/.next/static/chunks/app/api/cwd/browse/route-6b1496af498bb4fd.js +0 -1
  279. package/.next/static/chunks/app/api/cwd/validate/route-6b1496af498bb4fd.js +0 -1
  280. package/.next/static/chunks/app/api/default-cwd/route-6b1496af498bb4fd.js +0 -1
  281. package/.next/static/chunks/app/api/display-settings/route-6b1496af498bb4fd.js +0 -1
  282. package/.next/static/chunks/app/api/document-text/route-6b1496af498bb4fd.js +0 -1
  283. package/.next/static/chunks/app/api/experiments/route-6b1496af498bb4fd.js +0 -1
  284. package/.next/static/chunks/app/api/file-index/route-6b1496af498bb4fd.js +0 -1
  285. package/.next/static/chunks/app/api/files/[...path]/route-6b1496af498bb4fd.js +0 -1
  286. package/.next/static/chunks/app/api/git/diff/route-6b1496af498bb4fd.js +0 -1
  287. package/.next/static/chunks/app/api/git/status/route-6b1496af498bb4fd.js +0 -1
  288. package/.next/static/chunks/app/api/gpt6/handles/route-6b1496af498bb4fd.js +0 -1
  289. package/.next/static/chunks/app/api/gpt6/reply/route-6b1496af498bb4fd.js +0 -1
  290. package/.next/static/chunks/app/api/gpt6/token/route-6b1496af498bb4fd.js +0 -1
  291. package/.next/static/chunks/app/api/gpt6/web6-session/route-6b1496af498bb4fd.js +0 -1
  292. package/.next/static/chunks/app/api/home/route-6b1496af498bb4fd.js +0 -1
  293. package/.next/static/chunks/app/api/live/call/[callId]/route-6b1496af498bb4fd.js +0 -1
  294. package/.next/static/chunks/app/api/live/character-voice/route-6b1496af498bb4fd.js +0 -1
  295. package/.next/static/chunks/app/api/live/events/route-6b1496af498bb4fd.js +0 -1
  296. package/.next/static/chunks/app/api/live/offer/route-6b1496af498bb4fd.js +0 -1
  297. package/.next/static/chunks/app/api/live/voices/route-6b1496af498bb4fd.js +0 -1
  298. package/.next/static/chunks/app/api/lounge/events/route-6b1496af498bb4fd.js +0 -1
  299. package/.next/static/chunks/app/api/lounge/route-6b1496af498bb4fd.js +0 -1
  300. package/.next/static/chunks/app/api/mcp/route-6b1496af498bb4fd.js +0 -1
  301. package/.next/static/chunks/app/api/model-roles/route-6b1496af498bb4fd.js +0 -1
  302. package/.next/static/chunks/app/api/models/route-6b1496af498bb4fd.js +0 -1
  303. package/.next/static/chunks/app/api/models-config/catalog/route-6b1496af498bb4fd.js +0 -1
  304. package/.next/static/chunks/app/api/models-config/discover/route-6b1496af498bb4fd.js +0 -1
  305. package/.next/static/chunks/app/api/models-config/route-6b1496af498bb4fd.js +0 -1
  306. package/.next/static/chunks/app/api/models-config/test/route-6b1496af498bb4fd.js +0 -1
  307. package/.next/static/chunks/app/api/office-avatars/[id]/route-6b1496af498bb4fd.js +0 -1
  308. package/.next/static/chunks/app/api/office-avatars/route-6b1496af498bb4fd.js +0 -1
  309. package/.next/static/chunks/app/api/plugins/route-6b1496af498bb4fd.js +0 -1
  310. package/.next/static/chunks/app/api/project-trust/route-6b1496af498bb4fd.js +0 -1
  311. package/.next/static/chunks/app/api/projects/route-6b1496af498bb4fd.js +0 -1
  312. package/.next/static/chunks/app/api/runs/[runId]/route-6b1496af498bb4fd.js +0 -1
  313. package/.next/static/chunks/app/api/runs/route-6b1496af498bb4fd.js +0 -1
  314. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-6b1496af498bb4fd.js +0 -1
  315. package/.next/static/chunks/app/api/sessions/[id]/context/route-6b1496af498bb4fd.js +0 -1
  316. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-6b1496af498bb4fd.js +0 -1
  317. package/.next/static/chunks/app/api/sessions/[id]/export/route-6b1496af498bb4fd.js +0 -1
  318. package/.next/static/chunks/app/api/sessions/[id]/route-6b1496af498bb4fd.js +0 -1
  319. package/.next/static/chunks/app/api/sessions/[id]/state/route-6b1496af498bb4fd.js +0 -1
  320. package/.next/static/chunks/app/api/sessions/route-6b1496af498bb4fd.js +0 -1
  321. package/.next/static/chunks/app/api/sessions/search/route-6b1496af498bb4fd.js +0 -1
  322. package/.next/static/chunks/app/api/settings/route-6b1496af498bb4fd.js +0 -1
  323. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-6b1496af498bb4fd.js +0 -1
  324. package/.next/static/chunks/app/api/skills/check/route-6b1496af498bb4fd.js +0 -1
  325. package/.next/static/chunks/app/api/skills/install/route-6b1496af498bb4fd.js +0 -1
  326. package/.next/static/chunks/app/api/skills/route-6b1496af498bb4fd.js +0 -1
  327. package/.next/static/chunks/app/api/skills/search/route-6b1496af498bb4fd.js +0 -1
  328. package/.next/static/chunks/app/api/skills/update/route-6b1496af498bb4fd.js +0 -1
  329. package/.next/static/chunks/app/api/theme/route-6b1496af498bb4fd.js +0 -1
  330. package/.next/static/chunks/app/api/tool-image/route-6b1496af498bb4fd.js +0 -1
  331. package/.next/static/chunks/app/api/update-maintenance/route-6b1496af498bb4fd.js +0 -1
  332. package/.next/static/chunks/app/api/updates/route-6b1496af498bb4fd.js +0 -1
  333. package/.next/static/chunks/app/api/web-access/recovery/route-6b1496af498bb4fd.js +0 -1
  334. package/.next/static/chunks/app/api/web-access/route-6b1496af498bb4fd.js +0 -1
  335. package/.next/static/chunks/app/api/web6/consults/route-6b1496af498bb4fd.js +0 -1
  336. package/.next/static/chunks/app/api/worktrees/route-6b1496af498bb4fd.js +0 -1
  337. package/.next/static/chunks/app/manifest.webmanifest/route-6b1496af498bb4fd.js +0 -1
  338. package/.next/static/chunks/app/office/page-424e244f1c7fcdc6.js +0 -1
  339. package/.next/static/chunks/app/page-b43b2b8679ed66e2.js +0 -1
  340. package/.next/static/chunks/next/dist/client/components/builtin/app-error-6b1496af498bb4fd.js +0 -1
  341. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-6b1496af498bb4fd.js +0 -1
  342. package/.next/static/chunks/next/dist/client/components/builtin/not-found-6b1496af498bb4fd.js +0 -1
  343. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6b1496af498bb4fd.js +0 -1
  344. package/.next/static/css/00f20b26266e86ed.css +0 -1
  345. package/.next/static/kRJ4zgHxJf680foSBrfpf/_buildManifest.js +0 -1
  346. /package/.next/static/{kRJ4zgHxJf680foSBrfpf → pzZcPiD8nl6i7i_Ne9Ko-}/_ssgManifest.js +0 -0
@@ -10,6 +10,10 @@ try {
10
10
  $OutputEncoding = [Console]::OutputEncoding
11
11
  } catch {}
12
12
  $env:GIT_TERMINAL_PROMPT = '0'
13
+ # PowerShell 5.1 on Windows and PowerShell 7 on Linux share this transaction.
14
+ $isWindowsPlatform = [IO.Path]::DirectorySeparatorChar -eq '\'
15
+ $pathComparison = if ($isWindowsPlatform) { [StringComparison]::OrdinalIgnoreCase } else { [StringComparison]::Ordinal }
16
+ $pathComparer = if ($isWindowsPlatform) { [StringComparer]::OrdinalIgnoreCase } else { [StringComparer]::Ordinal }
13
17
 
14
18
  $stage = 'request'
15
19
  $createdCommit = $null
@@ -58,12 +62,12 @@ function Get-Sha256Hex([string]$Text) {
58
62
  function Normalize-FullPath([string]$Path) {
59
63
  $fullPath = [IO.Path]::GetFullPath($Path)
60
64
  $pathRoot = [IO.Path]::GetPathRoot($fullPath)
61
- if ($fullPath.Equals($pathRoot, [StringComparison]::OrdinalIgnoreCase)) { return $pathRoot }
65
+ if ($fullPath.Equals($pathRoot, $pathComparison)) { return $pathRoot }
62
66
  return $fullPath.TrimEnd([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar)
63
67
  }
64
68
 
65
69
  function Test-PathWithin([string]$Path, [string]$Root) {
66
- if ($Path.Equals($Root, [StringComparison]::OrdinalIgnoreCase)) { return $true }
70
+ if ($Path.Equals($Root, $pathComparison)) { return $true }
67
71
  $prefix = $Root
68
72
  if (
69
73
  -not $prefix.EndsWith([IO.Path]::DirectorySeparatorChar) -and
@@ -71,7 +75,7 @@ function Test-PathWithin([string]$Path, [string]$Root) {
71
75
  ) {
72
76
  $prefix += [IO.Path]::DirectorySeparatorChar
73
77
  }
74
- return $Path.StartsWith($prefix, [StringComparison]::OrdinalIgnoreCase)
78
+ return $Path.StartsWith($prefix, $pathComparison)
75
79
  }
76
80
 
77
81
  function Get-NearestExistingDirectory([string]$Path) {
@@ -97,7 +101,7 @@ function Get-RepositoryRootInPathNamespace([string]$WorkingDirectory) {
97
101
  }
98
102
 
99
103
  function Convert-ToRepoPath([string]$FullPath, [string]$Root) {
100
- if ($FullPath.Equals($Root, [StringComparison]::OrdinalIgnoreCase)) { return '' }
104
+ if ($FullPath.Equals($Root, $pathComparison)) { return '' }
101
105
  return $FullPath.Substring($Root.Length).TrimStart('\', '/').Replace('\', '/')
102
106
  }
103
107
 
@@ -108,8 +112,8 @@ function Get-GitPaths([string]$WorkingDirectory, [string[]]$GitArgs) {
108
112
  }
109
113
 
110
114
  function Assert-ExactPathSet([string[]]$Actual, [string[]]$Expected, [string]$Label) {
111
- $actualSet = [Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
112
- $expectedSet = [Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
115
+ $actualSet = [Collections.Generic.HashSet[string]]::new($pathComparer)
116
+ $expectedSet = [Collections.Generic.HashSet[string]]::new($pathComparer)
113
117
  foreach ($path in $Actual) { [void]$actualSet.Add($path) }
114
118
  foreach ($path in $Expected) { [void]$expectedSet.Add($path) }
115
119
  if (-not $actualSet.SetEquals($expectedSet)) {
@@ -129,7 +133,7 @@ try {
129
133
 
130
134
  $stage = 'repository'
131
135
  $resolvedFiles = @()
132
- $seenFullPaths = [Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
136
+ $seenFullPaths = [Collections.Generic.HashSet[string]]::new($pathComparer)
133
137
  foreach ($inputFile in $inputFiles) {
134
138
  if ($inputFile.IndexOfAny(@([char]0, [char]10, [char]13)) -ge 0) { throw 'File paths cannot contain NUL or newlines.' }
135
139
  if ([IO.Path]::IsPathRooted($inputFile)) { throw "Absolute file path is not allowed: $inputFile" }
@@ -164,8 +168,8 @@ try {
164
168
  $selectedRepoRoot = $targetRepoRoot
165
169
  $selectedCommonDir = $targetCommonDir
166
170
  } elseif (
167
- -not $selectedRepoRoot.Equals($targetRepoRoot, [StringComparison]::OrdinalIgnoreCase) -or
168
- -not $selectedCommonDir.Equals($targetCommonDir, [StringComparison]::OrdinalIgnoreCase)
171
+ -not $selectedRepoRoot.Equals($targetRepoRoot, $pathComparison) -or
172
+ -not $selectedCommonDir.Equals($targetCommonDir, $pathComparison)
169
173
  ) {
170
174
  throw "Files belong to different repositories: $($file.Input)"
171
175
  }
@@ -174,11 +178,11 @@ try {
174
178
  $repoRoot = $selectedRepoRoot
175
179
  $commonDir = $selectedCommonDir
176
180
  if ($cwdRepoRoot) {
177
- $targetsBelongToCwdRepository = $commonDir.Equals($cwdCommonDir, [StringComparison]::OrdinalIgnoreCase)
181
+ $targetsBelongToCwdRepository = $commonDir.Equals($cwdCommonDir, $pathComparison)
178
182
  if ($targetsBelongToCwdRepository) {
179
183
  foreach ($file in $resolvedFiles) {
180
184
  $parentPath = [IO.Path]::GetDirectoryName($file.FullPath)
181
- $isDirectRepoRootChild = $parentPath -and $parentPath.Equals($cwdRepoRoot, [StringComparison]::OrdinalIgnoreCase)
185
+ $isDirectRepoRootChild = $parentPath -and $parentPath.Equals($cwdRepoRoot, $pathComparison)
182
186
  if (-not (Test-PathWithin -Path $file.FullPath -Root $cwd) -and -not $isDirectRepoRootChild) {
183
187
  throw "File path escapes the session cwd: $($file.Input)"
184
188
  }
@@ -195,10 +199,10 @@ try {
195
199
  }
196
200
  }
197
201
 
198
- $seen = [Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
202
+ $seen = [Collections.Generic.HashSet[string]]::new($pathComparer)
199
203
  foreach ($file in $resolvedFiles) {
200
204
  $repoPath = Convert-ToRepoPath -FullPath $file.FullPath -Root $repoRoot
201
- if (-not $repoPath -or $repoPath -eq '.git' -or $repoPath.StartsWith('.git/', [StringComparison]::OrdinalIgnoreCase)) {
205
+ if (-not $repoPath -or $repoPath -eq '.git' -or $repoPath.StartsWith('.git/', $pathComparison)) {
202
206
  throw "Repository metadata or broad paths are not allowed: $($file.Input)"
203
207
  }
204
208
  if (-not $seen.Add($repoPath)) { throw "Duplicate file path: $($file.Input)" }
@@ -235,8 +239,9 @@ try {
235
239
  $trackingConfigured = [bool]$configuredRemote -and [bool]$configuredUpstreamRef
236
240
 
237
241
  $stage = 'lock'
238
- $lockKey = Get-Sha256Hex ($commonDir.ToLowerInvariant() + [char]0 + $remote + [char]0 + $upstreamRef)
239
- $mutexName = "Global\OMP-GitFinalize-$lockKey"
242
+ $lockDirectory = if ($isWindowsPlatform) { $commonDir.ToLowerInvariant() } else { $commonDir }
243
+ $lockKey = Get-Sha256Hex ($lockDirectory + [char]0 + $remote + [char]0 + $upstreamRef)
244
+ $mutexName = if ($isWindowsPlatform) { "Global\OMP-GitFinalize-$lockKey" } else { "OMP-GitFinalize-$lockKey" }
240
245
  $mutex = [Threading.Mutex]::new($false, $mutexName)
241
246
  try {
242
247
  $ownsMutex = $mutex.WaitOne([TimeSpan]::FromSeconds(120))
@@ -248,7 +253,7 @@ try {
248
253
  $stage = 'locked-preflight'
249
254
  $lockedCommonDir = Normalize-FullPath (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', '--path-format=absolute', '--git-common-dir')).Output
250
255
  $lockedBranch = (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', '--abbrev-ref', 'HEAD')).Output
251
- if (-not $lockedCommonDir.Equals($commonDir, [StringComparison]::OrdinalIgnoreCase) -or $lockedBranch -ne $branch) {
256
+ if (-not $lockedCommonDir.Equals($commonDir, $pathComparison) -or $lockedBranch -cne $branch) {
252
257
  throw 'Repository or branch changed while acquiring the finalizer lock.'
253
258
  }
254
259
 
@@ -276,22 +281,53 @@ try {
276
281
  $stagedByFinalizer = $true
277
282
  [void](Invoke-Git -WorkingDirectory $repoRoot -GitArgs (@('--literal-pathspecs', 'add', '-A', '--') + $repoPaths))
278
283
  $cachedPaths = Get-GitPaths -WorkingDirectory $repoRoot -GitArgs @('-c', 'core.quotepath=false', 'diff', '--cached', '--no-renames', '--name-only')
279
- Assert-ExactPathSet -Actual $cachedPaths -Expected $repoPaths -Label 'Staged path set'
280
-
281
- $stage = 'commit'
282
- $messageFile = [IO.Path]::GetTempFileName()
283
- [IO.File]::WriteAllText($messageFile, $message + [Environment]::NewLine, [Text.UTF8Encoding]::new($false))
284
- [void](Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('commit', '--file', $messageFile))
285
- $createdCommit = (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', 'HEAD')).Output
286
- $stagedByFinalizer = $false
287
-
288
- $stage = 'commit-verify'
289
- $parentSha = (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', "$createdCommit^" )).Output
290
- if ($parentSha -ne $headSha) {
291
- throw "Created commit parent does not match the captured HEAD. parent=$parentSha head=$headSha"
284
+ # 이전 실행이 커밋은 만들고 push에서 실패했으면 요청 파일이 이미 깨끗하다. 그 파일이 아직 원격에 없는
285
+ # 커밋(upstream..HEAD, 원격 브랜치가 없으면 원격 추적 ref 어디에도 없는 HEAD 커밋)에 들어 있을 때만
286
+ # 그 커밋을 인정하고 새 커밋 없이 다시 보낸다.
287
+ $cachedPaths = @($cachedPaths)
288
+ $cachedSet = [Collections.Generic.HashSet[string]]::new($pathComparer)
289
+ foreach ($path in $cachedPaths) { [void]$cachedSet.Add($path) }
290
+ $alreadyCommitted = @($repoPaths | Where-Object { -not $cachedSet.Contains($_) })
291
+ $resumedPush = $false
292
+ if ($alreadyCommitted.Count -gt 0) {
293
+ if ($upstreamSha -eq $headSha) {
294
+ Assert-ExactPathSet -Actual $cachedPaths -Expected $repoPaths -Label 'Staged path set'
295
+ }
296
+ $pendingRange = if ($upstreamSha) { "${upstreamSha}..${headSha}" } else { "${headSha} not in refs/remotes/$remote" }
297
+ $pendingPaths = if ($upstreamSha) {
298
+ Get-GitPaths -WorkingDirectory $repoRoot -GitArgs @('-c', 'core.quotepath=false', 'diff', '--no-renames', '--name-only', $upstreamSha, $headSha)
299
+ } else {
300
+ Get-GitPaths -WorkingDirectory $repoRoot -GitArgs @('-c', 'core.quotepath=false', 'log', '--no-renames', '--format=', '--name-only', $headSha, '--not', "--remotes=$remote")
301
+ }
302
+ $pendingSet = [Collections.Generic.HashSet[string]]::new($pathComparer)
303
+ foreach ($path in $pendingPaths) { [void]$pendingSet.Add($path) }
304
+ $unpending = @($alreadyCommitted | Where-Object { -not $pendingSet.Contains($_) })
305
+ if ($unpending.Count -gt 0) {
306
+ throw "Staged path set mismatch. Unchanged paths are not in unpushed commits ${pendingRange}: $($unpending -join ', ')"
307
+ }
308
+ $resumedPush = $true
309
+ }
310
+
311
+ if ($cachedPaths.Count -gt 0) {
312
+ Assert-ExactPathSet -Actual $cachedPaths -Expected @($repoPaths | Where-Object { $cachedSet.Contains($_) }) -Label 'Staged path set'
313
+ $stage = 'commit'
314
+ $messageFile = [IO.Path]::GetTempFileName()
315
+ [IO.File]::WriteAllText($messageFile, $message + [Environment]::NewLine, [Text.UTF8Encoding]::new($false))
316
+ [void](Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('commit', '--file', $messageFile))
317
+ $createdCommit = (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', 'HEAD')).Output
318
+ $stagedByFinalizer = $false
319
+
320
+ $stage = 'commit-verify'
321
+ $parentSha = (Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('rev-parse', "$createdCommit^" )).Output
322
+ if ($parentSha -ne $headSha) {
323
+ throw "Created commit parent does not match the captured HEAD. parent=$parentSha head=$headSha"
324
+ }
325
+ $committedPaths = Get-GitPaths -WorkingDirectory $repoRoot -GitArgs @('-c', 'core.quotepath=false', 'diff-tree', '--no-commit-id', '--no-renames', '--name-only', '-r', $createdCommit)
326
+ Assert-ExactPathSet -Actual $committedPaths -Expected $cachedPaths -Label 'Committed path set'
327
+ } else {
328
+ $stagedByFinalizer = $false
329
+ $createdCommit = $headSha
292
330
  }
293
- $committedPaths = Get-GitPaths -WorkingDirectory $repoRoot -GitArgs @('-c', 'core.quotepath=false', 'diff-tree', '--no-commit-id', '--no-renames', '--name-only', '-r', $createdCommit)
294
- Assert-ExactPathSet -Actual $committedPaths -Expected $repoPaths -Label 'Committed path set'
295
331
 
296
332
  $stage = 'push'
297
333
  [void](Invoke-Git -WorkingDirectory $repoRoot -GitArgs @('push', $remote, "${createdCommit}:${upstreamRef}"))
@@ -316,6 +352,7 @@ try {
316
352
  commitSha = $createdCommit
317
353
  remote = $remote
318
354
  upstreamRef = $upstreamRef
355
+ resumedPush = $resumedPush
319
356
  }
320
357
  } catch {
321
358
  $exitCode = 1
@@ -12,6 +12,7 @@ interface FinalizerResult {
12
12
  commitSha?: string;
13
13
  remote?: string;
14
14
  upstreamRef?: string;
15
+ resumedPush?: boolean;
15
16
  }
16
17
 
17
18
  const scriptPath = fileURLToPath(new URL("./finalizer.ps1", import.meta.url));
@@ -30,6 +31,7 @@ node files/source-build-helper.js verify-source ../.. files/source-integrity.jso
30
31
  Then include Tools/CUELO_Setup/files/source-integrity.json in the same commit.`;
31
32
  const memorySyncScript = "Tools/OMP_Global_Config/memory-sync/sync.ts";
32
33
  const memoryTransport = "Tools/OMP_Global_Config/memory-sync/memories.jsonl";
34
+ const pathKey = (value: string) => process.platform === "win32" ? value.toLowerCase() : value;
33
35
 
34
36
  type Exec = (command: string, args: string[], options: { cwd: string }) => Promise<{ code: number; stdout: string; stderr?: string }>;
35
37
 
@@ -54,7 +56,7 @@ async function exportMemories(cwd: string, files: string[], exec: Exec): Promise
54
56
  if (!files.every(inRoot)) return {};
55
57
  const transport = relative(cwd, join(root, ...memoryTransport.split("/"))).split(sep).join("/");
56
58
  if (transport.startsWith("../")) return { note: "기억 export 생략: 현재 cwd 밖의 파일이라 이 커밋에 넣을 수 없다." };
57
- if (files.some((file) => file.replace(/\\/g, "/").toLowerCase() === transport.toLowerCase())) return {};
59
+ if (files.some((file) => pathKey(file.replace(/\\/g, "/")) === pathKey(transport))) return {};
58
60
  const exported = await exec("bun", [join(root, ...memorySyncScript.split("/")), "export", root], { cwd: root });
59
61
  if (exported.code !== 0) {
60
62
  const reason = (exported.stderr || exported.stdout).trim().split(/\r?\n/).at(-1) || `exit ${exported.code}`;
@@ -99,7 +101,7 @@ async function checkSourceManifest(
99
101
  if (!path || path === ".." || path.startsWith("../")) return;
100
102
  targets.push({ root, path });
101
103
  }
102
- if (!targets.length || targets.some(({ root }) => root.toLowerCase() !== targets[0].root.toLowerCase())) return;
104
+ if (!targets.length || targets.some(({ root }) => pathKey(root) !== pathKey(targets[0].root))) return;
103
105
 
104
106
  const root = targets[0].root;
105
107
  try {
@@ -108,7 +110,7 @@ async function checkSourceManifest(
108
110
  if ((error as NodeJS.ErrnoException).code === "ENOENT") return;
109
111
  throw error;
110
112
  }
111
- if (targets.some(({ path }) => path.toLowerCase() === manifestPath.toLowerCase())) return;
113
+ if (targets.some(({ path }) => pathKey(path) === pathKey(manifestPath))) return;
112
114
 
113
115
  let packagedTools: string[] = [];
114
116
  try {
@@ -165,7 +167,7 @@ const factory: CustomToolFactory = (pi) => ({
165
167
  label: "Git Finalize",
166
168
  loadMode: "essential",
167
169
  description:
168
- "Atomically finalize relative exact files in one repository. Resolve every target from its nearest existing parent. Treat matching git common-dir values as the same repository: restrict those targets to paths inside cwd or an exact direct child file of the cwd repository root, while allowing one distinct repository; reject mixed repositories before staging. Serialize by repository/upstream, verify exact paths and ancestry, commit, then push the created SHA. Main only.",
170
+ "Atomically finalize relative exact files in one repository. Resolve every target from its nearest existing parent. Treat matching git common-dir values as the same repository: restrict those targets to paths inside cwd or an exact direct child file of the cwd repository root, while allowing one distinct repository; reject mixed repositories before staging. Serialize by repository/upstream, verify exact paths and ancestry, commit, then push the created SHA. If an earlier run committed but its push failed, call again with the same files: unchanged files found in unpushed upstream..HEAD commits are accepted and HEAD is pushed without a new commit. Main only.",
169
171
  parameters: pi.zod.object({
170
172
  files: pi.zod.array(pi.zod.string()),
171
173
  message: pi.zod.string(),
@@ -176,7 +178,6 @@ const factory: CustomToolFactory = (pi) => ({
176
178
  const message = params.message.trim();
177
179
  if (requested.length === 0) throw new Error("git_finalize requires at least one exact file path.");
178
180
  if (!message) throw new Error("git_finalize requires a non-empty commit message.");
179
- if (process.platform !== "win32") throw new Error("git_finalize currently requires Windows PowerShell.");
180
181
 
181
182
  const exec: Exec = (command, args, options) => pi.exec(command, args, { ...options, signal });
182
183
  await checkSourceManifest(pi.cwd, requested, exec);
@@ -193,7 +194,7 @@ const factory: CustomToolFactory = (pi) => ({
193
194
  try {
194
195
  await writeFile(requestPath, JSON.stringify({ cwd: pi.cwd, files, message }), "utf8");
195
196
  const result = await pi.exec(
196
- "powershell.exe",
197
+ process.platform === "win32" ? "powershell.exe" : "pwsh",
197
198
  ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", scriptPath, "-Request", requestPath],
198
199
  { cwd: pi.cwd, signal, timeout: 180_000 },
199
200
  );
@@ -207,6 +208,7 @@ const factory: CustomToolFactory = (pi) => ({
207
208
  {
208
209
  type: "text",
209
210
  text: `Committed and pushed ${parsed.commitSha} to ${parsed.remote} ${parsed.upstreamRef}.`
211
+ + (parsed.resumedPush ? " 이미 커밋돼 있던 미전송 커밋을 함께 다시 보냈다." : "")
210
212
  + (memory.file ? ` 기억 transport(${memory.file})를 함께 커밋했다.` : "")
211
213
  + (memory.note ? ` ${memory.note}` : ""),
212
214
  },