cuelo 0.9.5 → 0.9.7

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 (356) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +10 -9
  3. package/.next/build-manifest.json +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/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 +2 -2
  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 +6 -6
  108. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  109. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  110. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  111. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  112. package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  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 +3 -3
  120. package/.next/server/app/office-preview.segments/_full.segment.rsc +3 -3
  121. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  122. package/.next/server/app/office-preview.segments/_index.segment.rsc +3 -3
  123. package/.next/server/app/office-preview.segments/_tree.segment.rsc +2 -2
  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 +6 -6
  128. package/.next/server/app/office.segments/_full.segment.rsc +6 -6
  129. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  130. package/.next/server/app/office.segments/_index.segment.rsc +3 -3
  131. package/.next/server/app/office.segments/_tree.segment.rsc +3 -3
  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 +3 -3
  140. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  141. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  142. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  143. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  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 +10 -9
  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 +2 -2
  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-fe25836fd76b4655.js +22 -0
  160. package/.next/static/chunks/app/_global-error/{page-6b1496af498bb4fd.js → page-318ea6a550b5034e.js} +1 -1
  161. package/.next/static/chunks/app/api/agent/[id]/account/{route-6b1496af498bb4fd.js → route-318ea6a550b5034e.js} +1 -1
  162. package/.next/static/chunks/app/api/agent/[id]/bash-output/{route-6b1496af498bb4fd.js → route-318ea6a550b5034e.js} +1 -1
  163. package/.next/static/chunks/app/api/agent/[id]/events/{route-6b1496af498bb4fd.js → 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-890e772919e033dc.js → layout-2bf5721b24426873.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/css/7a264466e19eaafd.css +1 -0
  247. package/.next/static/vrwvD7kuXEjDJZtO0Q3iO/_buildManifest.js +1 -0
  248. package/.next/trace +108 -108
  249. package/.next/trace-build +1 -1
  250. package/.next/types/app/api/github/projects/route.ts +351 -0
  251. package/.next/types/routes.d.ts +2 -1
  252. package/.next/types/validator.ts +9 -0
  253. package/README.md +10 -3
  254. package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
  255. package/Tools/OMP_Global_Config/agent/AGENTS.md +6 -0
  256. package/Tools/OMP_Global_Config/agent/RULES.md +1 -0
  257. package/Tools/OMP_Global_Config/agent/TITLE_SYSTEM.md +17 -0
  258. package/Tools/OMP_Global_Config/agent/agents/maker.md +11 -5
  259. package/Tools/OMP_Global_Config/agent/extensions/gitnexus-autosync.ts +89 -19
  260. package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +205 -4
  261. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +1 -1
  262. package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +7 -1
  263. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +2 -1
  264. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +23 -8
  265. package/Tools/OMP_Global_Config/agent/rules/subagent.md +16 -2
  266. package/Tools/OMP_Global_Config/agent/sop/_writer.md +10 -4
  267. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/finalizer.ps1 +68 -31
  268. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +8 -6
  269. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +1277 -164
  270. package/bin/docker-entrypoint.mjs +19 -0
  271. package/install.mjs +12 -7
  272. package/package.json +8 -7
  273. package/.next/static/b4yL-hhdDIhd8tZ_DFHIS/_buildManifest.js +0 -1
  274. package/.next/static/chunks/6110-004be57c825af4d9.js +0 -1
  275. package/.next/static/chunks/9575-9eb94dc1e8bcd130.js +0 -22
  276. package/.next/static/chunks/app/api/agent/[id]/route-6b1496af498bb4fd.js +0 -1
  277. package/.next/static/chunks/app/api/agent/new/route-6b1496af498bb4fd.js +0 -1
  278. package/.next/static/chunks/app/api/agent/running/route-6b1496af498bb4fd.js +0 -1
  279. package/.next/static/chunks/app/api/attachment-settings/route-6b1496af498bb4fd.js +0 -1
  280. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-6b1496af498bb4fd.js +0 -1
  281. package/.next/static/chunks/app/api/attachments/draft/route-6b1496af498bb4fd.js +0 -1
  282. package/.next/static/chunks/app/api/attachments/route-6b1496af498bb4fd.js +0 -1
  283. package/.next/static/chunks/app/api/auth/all-providers/route-6b1496af498bb4fd.js +0 -1
  284. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-6b1496af498bb4fd.js +0 -1
  285. package/.next/static/chunks/app/api/auth/login/[provider]/route-6b1496af498bb4fd.js +0 -1
  286. package/.next/static/chunks/app/api/auth/logout/[provider]/route-6b1496af498bb4fd.js +0 -1
  287. package/.next/static/chunks/app/api/auth/providers/route-6b1496af498bb4fd.js +0 -1
  288. package/.next/static/chunks/app/api/cwd/browse/route-6b1496af498bb4fd.js +0 -1
  289. package/.next/static/chunks/app/api/cwd/validate/route-6b1496af498bb4fd.js +0 -1
  290. package/.next/static/chunks/app/api/default-cwd/route-6b1496af498bb4fd.js +0 -1
  291. package/.next/static/chunks/app/api/display-settings/route-6b1496af498bb4fd.js +0 -1
  292. package/.next/static/chunks/app/api/document-text/route-6b1496af498bb4fd.js +0 -1
  293. package/.next/static/chunks/app/api/experiments/route-6b1496af498bb4fd.js +0 -1
  294. package/.next/static/chunks/app/api/file-index/route-6b1496af498bb4fd.js +0 -1
  295. package/.next/static/chunks/app/api/files/[...path]/route-6b1496af498bb4fd.js +0 -1
  296. package/.next/static/chunks/app/api/git/diff/route-6b1496af498bb4fd.js +0 -1
  297. package/.next/static/chunks/app/api/git/status/route-6b1496af498bb4fd.js +0 -1
  298. package/.next/static/chunks/app/api/gpt6/handles/route-6b1496af498bb4fd.js +0 -1
  299. package/.next/static/chunks/app/api/gpt6/reply/route-6b1496af498bb4fd.js +0 -1
  300. package/.next/static/chunks/app/api/gpt6/token/route-6b1496af498bb4fd.js +0 -1
  301. package/.next/static/chunks/app/api/gpt6/web6-session/route-6b1496af498bb4fd.js +0 -1
  302. package/.next/static/chunks/app/api/home/route-6b1496af498bb4fd.js +0 -1
  303. package/.next/static/chunks/app/api/live/call/[callId]/route-6b1496af498bb4fd.js +0 -1
  304. package/.next/static/chunks/app/api/live/character-voice/route-6b1496af498bb4fd.js +0 -1
  305. package/.next/static/chunks/app/api/live/events/route-6b1496af498bb4fd.js +0 -1
  306. package/.next/static/chunks/app/api/live/offer/route-6b1496af498bb4fd.js +0 -1
  307. package/.next/static/chunks/app/api/live/voices/route-6b1496af498bb4fd.js +0 -1
  308. package/.next/static/chunks/app/api/lounge/events/route-6b1496af498bb4fd.js +0 -1
  309. package/.next/static/chunks/app/api/lounge/route-6b1496af498bb4fd.js +0 -1
  310. package/.next/static/chunks/app/api/mcp/route-6b1496af498bb4fd.js +0 -1
  311. package/.next/static/chunks/app/api/model-roles/route-6b1496af498bb4fd.js +0 -1
  312. package/.next/static/chunks/app/api/models/route-6b1496af498bb4fd.js +0 -1
  313. package/.next/static/chunks/app/api/models-config/catalog/route-6b1496af498bb4fd.js +0 -1
  314. package/.next/static/chunks/app/api/models-config/discover/route-6b1496af498bb4fd.js +0 -1
  315. package/.next/static/chunks/app/api/models-config/route-6b1496af498bb4fd.js +0 -1
  316. package/.next/static/chunks/app/api/models-config/test/route-6b1496af498bb4fd.js +0 -1
  317. package/.next/static/chunks/app/api/office-avatars/[id]/route-6b1496af498bb4fd.js +0 -1
  318. package/.next/static/chunks/app/api/office-avatars/route-6b1496af498bb4fd.js +0 -1
  319. package/.next/static/chunks/app/api/plugins/route-6b1496af498bb4fd.js +0 -1
  320. package/.next/static/chunks/app/api/project-trust/route-6b1496af498bb4fd.js +0 -1
  321. package/.next/static/chunks/app/api/projects/route-6b1496af498bb4fd.js +0 -1
  322. package/.next/static/chunks/app/api/runs/[runId]/route-6b1496af498bb4fd.js +0 -1
  323. package/.next/static/chunks/app/api/runs/route-6b1496af498bb4fd.js +0 -1
  324. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-6b1496af498bb4fd.js +0 -1
  325. package/.next/static/chunks/app/api/sessions/[id]/context/route-6b1496af498bb4fd.js +0 -1
  326. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-6b1496af498bb4fd.js +0 -1
  327. package/.next/static/chunks/app/api/sessions/[id]/export/route-6b1496af498bb4fd.js +0 -1
  328. package/.next/static/chunks/app/api/sessions/[id]/route-6b1496af498bb4fd.js +0 -1
  329. package/.next/static/chunks/app/api/sessions/[id]/state/route-6b1496af498bb4fd.js +0 -1
  330. package/.next/static/chunks/app/api/sessions/route-6b1496af498bb4fd.js +0 -1
  331. package/.next/static/chunks/app/api/sessions/search/route-6b1496af498bb4fd.js +0 -1
  332. package/.next/static/chunks/app/api/settings/route-6b1496af498bb4fd.js +0 -1
  333. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-6b1496af498bb4fd.js +0 -1
  334. package/.next/static/chunks/app/api/skills/check/route-6b1496af498bb4fd.js +0 -1
  335. package/.next/static/chunks/app/api/skills/install/route-6b1496af498bb4fd.js +0 -1
  336. package/.next/static/chunks/app/api/skills/route-6b1496af498bb4fd.js +0 -1
  337. package/.next/static/chunks/app/api/skills/search/route-6b1496af498bb4fd.js +0 -1
  338. package/.next/static/chunks/app/api/skills/update/route-6b1496af498bb4fd.js +0 -1
  339. package/.next/static/chunks/app/api/theme/route-6b1496af498bb4fd.js +0 -1
  340. package/.next/static/chunks/app/api/tool-image/route-6b1496af498bb4fd.js +0 -1
  341. package/.next/static/chunks/app/api/update-maintenance/route-6b1496af498bb4fd.js +0 -1
  342. package/.next/static/chunks/app/api/updates/route-6b1496af498bb4fd.js +0 -1
  343. package/.next/static/chunks/app/api/web-access/recovery/route-6b1496af498bb4fd.js +0 -1
  344. package/.next/static/chunks/app/api/web-access/route-6b1496af498bb4fd.js +0 -1
  345. package/.next/static/chunks/app/api/web6/consults/route-6b1496af498bb4fd.js +0 -1
  346. package/.next/static/chunks/app/api/worktrees/route-6b1496af498bb4fd.js +0 -1
  347. package/.next/static/chunks/app/manifest.webmanifest/route-6b1496af498bb4fd.js +0 -1
  348. package/.next/static/chunks/app/office/page-424e244f1c7fcdc6.js +0 -1
  349. package/.next/static/chunks/app/page-b43b2b8679ed66e2.js +0 -1
  350. package/.next/static/chunks/next/dist/client/components/builtin/app-error-6b1496af498bb4fd.js +0 -1
  351. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-6b1496af498bb4fd.js +0 -1
  352. package/.next/static/chunks/next/dist/client/components/builtin/not-found-6b1496af498bb4fd.js +0 -1
  353. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6b1496af498bb4fd.js +0 -1
  354. package/.next/static/css/1ffe2d5d654f7eea.css +0 -1
  355. package/.next/static/css/81a05eb6255ef12e.css +0 -1
  356. /package/.next/static/{b4yL-hhdDIhd8tZ_DFHIS → vrwvD7kuXEjDJZtO0Q3iO}/_ssgManifest.js +0 -0
@@ -104,10 +104,12 @@
104
104
  an injected message; you have no `wait`, so the checkpoint never blocks the session. Never send a
105
105
  diff body, raw output, file contents, or a second message per edit step. Only trigger code is held
106
106
  for that reply: keep doing read-only investigation and the non-trigger work in the same slice.
107
- When independent work runs out before the reply arrives, say in prose that you are holding for the
108
- checkpoint reply and end the turn; Main's message wakes you in a new turn. No reply is never
109
- approval - there is no implicit or time-based approval, and trigger edits proceed only on Main's
110
- explicit reply. Main retains the
107
+ When independent work runs out before the reply arrives, use `yield` to report the pending
108
+ checkpoint, completed evidence, and unstarted work as blocked/partial, never as accepted or done.
109
+ Prose alone ends a model turn but leaves the task executor asking for `yield`. A shared-workspace
110
+ Maker resumes on Main's first reply; an isolated worktree is not resumable after terminal yield,
111
+ so preserve the handoff for Main instead of promising a wake. No reply is never approval: trigger
112
+ edits require Main's explicit reply. Main retains the
111
113
  approved location and invariants for the final drift check, so a revision that edited trigger
112
114
  code without an approved checkpoint cannot be closed. This checkpoint is the first contact point
113
115
  of review, not a separate gate: the final judgement covers only deltas not yet reviewed and the
@@ -146,6 +148,10 @@
146
148
  build error. Never put a broken intermediate state on the user's screen. Use the user's browser
147
149
  only when their live session is genuinely required, or when Main tells you to hand a FINISHED
148
150
  surface over for judgement — do not open it on your own initiative.
151
+ Do not launch Chrome/Edge executables directly from bash or eval (including `Bun.spawn`) for
152
+ verification. Use the managed browser helpers or the project's supported verification commands.
153
+ Such commands must use an absolute, isolated profile path: even headless startup can show a
154
+ native desktop error dialog when its profile path is invalid.
149
155
  - Run surface checks in the environment Main provides; create a common isolation environment or
150
156
  run a full build yourself only when the brief explicitly delegates that run. When you do launch a
151
157
  server (delegated, or no environment exists
@@ -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
  },