cuelo 0.10.37 โ†’ 0.10.39

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 (382) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -13
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -51
  5. package/.next/react-loadable-manifest.json +3 -14
  6. package/.next/required-server-files.js +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +0 -26
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +3 -3
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  26. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  31. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  32. package/.next/server/app/api/agent/[id]/route.js +1 -1
  33. package/.next/server/app/api/agent/new/route.js +1 -1
  34. package/.next/server/app/api/agent/running/route.js +1 -1
  35. package/.next/server/app/api/attachment-settings/route.js +1 -1
  36. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  37. package/.next/server/app/api/attachments/draft/route.js +1 -1
  38. package/.next/server/app/api/attachments/route.js +3 -3
  39. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  40. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  41. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  43. package/.next/server/app/api/auth/providers/route.js +1 -1
  44. package/.next/server/app/api/cwd/browse/route.js +1 -1
  45. package/.next/server/app/api/cwd/validate/route.js +1 -1
  46. package/.next/server/app/api/default-cwd/route.js +1 -1
  47. package/.next/server/app/api/display-settings/route.js +1 -1
  48. package/.next/server/app/api/document-text/route.js +1 -1
  49. package/.next/server/app/api/experiments/route.js +1 -1
  50. package/.next/server/app/api/file-index/route.js +1 -1
  51. package/.next/server/app/api/files/[...path]/route.js +1 -1
  52. package/.next/server/app/api/git/diff/route.js +1 -1
  53. package/.next/server/app/api/git/status/route.js +1 -1
  54. package/.next/server/app/api/github/projects/route.js +1 -1
  55. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  56. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  57. package/.next/server/app/api/gpt6/token/route.js +1 -1
  58. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  59. package/.next/server/app/api/home/route.js +1 -1
  60. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  61. package/.next/server/app/api/live/events/route.js +2 -2
  62. package/.next/server/app/api/live/interpret/route.js +2 -2
  63. package/.next/server/app/api/live/offer/route.js +1 -1
  64. package/.next/server/app/api/live/voices/route.js +1 -1
  65. package/.next/server/app/api/mcp/route.js +1 -1
  66. package/.next/server/app/api/model-roles/route.js +1 -1
  67. package/.next/server/app/api/models/route.js +1 -1
  68. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  69. package/.next/server/app/api/models-config/discover/route.js +1 -1
  70. package/.next/server/app/api/models-config/route.js +3 -3
  71. package/.next/server/app/api/models-config/test/route.js +1 -1
  72. package/.next/server/app/api/plugins/route.js +1 -1
  73. package/.next/server/app/api/project-docs/route.js +1 -1
  74. package/.next/server/app/api/project-trust/route.js +1 -1
  75. package/.next/server/app/api/projects/route.js +1 -1
  76. package/.next/server/app/api/runs/[runId]/prelude/route.js +1 -1
  77. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  78. package/.next/server/app/api/runs/[runId]/turns/route.js +1 -1
  79. package/.next/server/app/api/runs/route.js +1 -1
  80. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  81. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  82. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  84. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  85. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  86. package/.next/server/app/api/sessions/route.js +1 -1
  87. package/.next/server/app/api/sessions/search/route.js +1 -1
  88. package/.next/server/app/api/settings/route.js +1 -1
  89. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  90. package/.next/server/app/api/skills/check/route.js +1 -1
  91. package/.next/server/app/api/skills/install/route.js +2 -2
  92. package/.next/server/app/api/skills/route.js +1 -1
  93. package/.next/server/app/api/skills/search/route.js +1 -1
  94. package/.next/server/app/api/skills/update/route.js +1 -1
  95. package/.next/server/app/api/subagents/eta/route.js +1 -1
  96. package/.next/server/app/api/theme/route.js +1 -1
  97. package/.next/server/app/api/tool-image/route.js +1 -1
  98. package/.next/server/app/api/update-maintenance/route.js +3 -3
  99. package/.next/server/app/api/updates/route.js +1 -1
  100. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  101. package/.next/server/app/api/web-access/route.js +1 -1
  102. package/.next/server/app/api/web6/consults/route.js +1 -1
  103. package/.next/server/app/api/worktrees/route.js +1 -1
  104. package/.next/server/app/favicon.ico/route.js +1 -1
  105. package/.next/server/app/index.html +1 -1
  106. package/.next/server/app/index.rsc +5 -6
  107. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -4
  108. package/.next/server/app/index.segments/_full.segment.rsc +5 -6
  109. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  110. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  111. package/.next/server/app/index.segments/_tree.segment.rsc +2 -3
  112. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  113. package/.next/server/app/page.js +32 -2
  114. package/.next/server/app/page.js.nft.json +1 -1
  115. package/.next/server/app/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/recover/page.js +2 -2
  117. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  118. package/.next/server/app/recover.html +1 -1
  119. package/.next/server/app/recover.rsc +3 -3
  120. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  121. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  122. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  123. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  124. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  125. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  126. package/.next/server/app-paths-manifest.json +9 -13
  127. package/.next/server/functions-config-manifest.json +0 -4
  128. package/.next/server/middleware-build-manifest.js +1 -1
  129. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  130. package/.next/server/middleware.js +4 -4
  131. package/.next/server/pages/404.html +1 -1
  132. package/.next/server/pages/500.html +1 -1
  133. package/.next/server/server-reference-manifest.json +1 -1
  134. package/.next/static/Hnj-vLLVhpk85eE5EC5YJ/_buildManifest.js +1 -0
  135. package/.next/static/chunks/2619.9aac8983f30c7c8a.js +1 -0
  136. package/.next/static/chunks/{3308.8b94b38809d1b8b6.js โ†’ 3308.34ea31e24088c85f.js} +1 -1
  137. package/.next/static/chunks/52733464.3870f99cc446f9ff.js +1 -0
  138. package/.next/static/chunks/app/_global-error/page-0975ca1ea02edd84.js +1 -0
  139. package/.next/static/chunks/app/api/agent/[id]/account/route-0975ca1ea02edd84.js +1 -0
  140. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-0975ca1ea02edd84.js +1 -0
  141. package/.next/static/chunks/app/api/agent/[id]/events/route-0975ca1ea02edd84.js +1 -0
  142. package/.next/static/chunks/app/api/agent/[id]/route-0975ca1ea02edd84.js +1 -0
  143. package/.next/static/chunks/app/api/agent/new/route-0975ca1ea02edd84.js +1 -0
  144. package/.next/static/chunks/app/api/agent/running/route-0975ca1ea02edd84.js +1 -0
  145. package/.next/static/chunks/app/api/attachment-settings/route-0975ca1ea02edd84.js +1 -0
  146. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-0975ca1ea02edd84.js +1 -0
  147. package/.next/static/chunks/app/api/attachments/draft/route-0975ca1ea02edd84.js +1 -0
  148. package/.next/static/chunks/app/api/attachments/route-0975ca1ea02edd84.js +1 -0
  149. package/.next/static/chunks/app/api/auth/all-providers/route-0975ca1ea02edd84.js +1 -0
  150. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-0975ca1ea02edd84.js +1 -0
  151. package/.next/static/chunks/app/api/auth/login/[provider]/route-0975ca1ea02edd84.js +1 -0
  152. package/.next/static/chunks/app/api/auth/logout/[provider]/route-0975ca1ea02edd84.js +1 -0
  153. package/.next/static/chunks/app/api/auth/providers/route-0975ca1ea02edd84.js +1 -0
  154. package/.next/static/chunks/app/api/cwd/browse/route-0975ca1ea02edd84.js +1 -0
  155. package/.next/static/chunks/app/api/cwd/validate/route-0975ca1ea02edd84.js +1 -0
  156. package/.next/static/chunks/app/api/default-cwd/route-0975ca1ea02edd84.js +1 -0
  157. package/.next/static/chunks/app/api/display-settings/route-0975ca1ea02edd84.js +1 -0
  158. package/.next/static/chunks/app/api/document-text/route-0975ca1ea02edd84.js +1 -0
  159. package/.next/static/chunks/app/api/experiments/route-0975ca1ea02edd84.js +1 -0
  160. package/.next/static/chunks/app/api/file-index/route-0975ca1ea02edd84.js +1 -0
  161. package/.next/static/chunks/app/api/files/[...path]/route-0975ca1ea02edd84.js +1 -0
  162. package/.next/static/chunks/app/api/git/diff/route-0975ca1ea02edd84.js +1 -0
  163. package/.next/static/chunks/app/api/git/status/route-0975ca1ea02edd84.js +1 -0
  164. package/.next/static/chunks/app/api/github/projects/route-0975ca1ea02edd84.js +1 -0
  165. package/.next/static/chunks/app/api/gpt6/handles/route-0975ca1ea02edd84.js +1 -0
  166. package/.next/static/chunks/app/api/gpt6/reply/route-0975ca1ea02edd84.js +1 -0
  167. package/.next/static/chunks/app/api/gpt6/token/route-0975ca1ea02edd84.js +1 -0
  168. package/.next/static/chunks/app/api/gpt6/web6-session/route-0975ca1ea02edd84.js +1 -0
  169. package/.next/static/chunks/app/api/home/route-0975ca1ea02edd84.js +1 -0
  170. package/.next/static/chunks/app/api/live/call/[callId]/route-0975ca1ea02edd84.js +1 -0
  171. package/.next/static/chunks/app/api/live/events/route-0975ca1ea02edd84.js +1 -0
  172. package/.next/static/chunks/app/api/live/interpret/route-0975ca1ea02edd84.js +1 -0
  173. package/.next/static/chunks/app/api/live/offer/route-0975ca1ea02edd84.js +1 -0
  174. package/.next/static/chunks/app/api/live/voices/route-0975ca1ea02edd84.js +1 -0
  175. package/.next/static/chunks/app/api/mcp/route-0975ca1ea02edd84.js +1 -0
  176. package/.next/static/chunks/app/api/model-roles/route-0975ca1ea02edd84.js +1 -0
  177. package/.next/static/chunks/app/api/models/route-0975ca1ea02edd84.js +1 -0
  178. package/.next/static/chunks/app/api/models-config/catalog/route-0975ca1ea02edd84.js +1 -0
  179. package/.next/static/chunks/app/api/models-config/discover/route-0975ca1ea02edd84.js +1 -0
  180. package/.next/static/chunks/app/api/models-config/route-0975ca1ea02edd84.js +1 -0
  181. package/.next/static/chunks/app/api/models-config/test/route-0975ca1ea02edd84.js +1 -0
  182. package/.next/static/chunks/app/api/plugins/route-0975ca1ea02edd84.js +1 -0
  183. package/.next/static/chunks/app/api/project-docs/route-0975ca1ea02edd84.js +1 -0
  184. package/.next/static/chunks/app/api/project-trust/route-0975ca1ea02edd84.js +1 -0
  185. package/.next/static/chunks/app/api/projects/route-0975ca1ea02edd84.js +1 -0
  186. package/.next/static/chunks/app/api/runs/[runId]/prelude/route-0975ca1ea02edd84.js +1 -0
  187. package/.next/static/chunks/app/api/runs/[runId]/route-0975ca1ea02edd84.js +1 -0
  188. package/.next/static/chunks/app/api/runs/[runId]/turns/route-0975ca1ea02edd84.js +1 -0
  189. package/.next/static/chunks/app/api/runs/route-0975ca1ea02edd84.js +1 -0
  190. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-0975ca1ea02edd84.js +1 -0
  191. package/.next/static/chunks/app/api/sessions/[id]/context/route-0975ca1ea02edd84.js +1 -0
  192. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-0975ca1ea02edd84.js +1 -0
  193. package/.next/static/chunks/app/api/sessions/[id]/export/route-0975ca1ea02edd84.js +1 -0
  194. package/.next/static/chunks/app/api/sessions/[id]/route-0975ca1ea02edd84.js +1 -0
  195. package/.next/static/chunks/app/api/sessions/[id]/state/route-0975ca1ea02edd84.js +1 -0
  196. package/.next/static/chunks/app/api/sessions/route-0975ca1ea02edd84.js +1 -0
  197. package/.next/static/chunks/app/api/sessions/search/route-0975ca1ea02edd84.js +1 -0
  198. package/.next/static/chunks/app/api/settings/route-0975ca1ea02edd84.js +1 -0
  199. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-0975ca1ea02edd84.js +1 -0
  200. package/.next/static/chunks/app/api/skills/check/route-0975ca1ea02edd84.js +1 -0
  201. package/.next/static/chunks/app/api/skills/install/route-0975ca1ea02edd84.js +1 -0
  202. package/.next/static/chunks/app/api/skills/route-0975ca1ea02edd84.js +1 -0
  203. package/.next/static/chunks/app/api/skills/search/route-0975ca1ea02edd84.js +1 -0
  204. package/.next/static/chunks/app/api/skills/update/route-0975ca1ea02edd84.js +1 -0
  205. package/.next/static/chunks/app/api/subagents/eta/route-0975ca1ea02edd84.js +1 -0
  206. package/.next/static/chunks/app/api/theme/route-0975ca1ea02edd84.js +1 -0
  207. package/.next/static/chunks/app/api/tool-image/route-0975ca1ea02edd84.js +1 -0
  208. package/.next/static/chunks/app/api/update-maintenance/route-0975ca1ea02edd84.js +1 -0
  209. package/.next/static/chunks/app/api/updates/route-0975ca1ea02edd84.js +1 -0
  210. package/.next/static/chunks/app/api/web-access/recovery/route-0975ca1ea02edd84.js +1 -0
  211. package/.next/static/chunks/app/api/web-access/route-0975ca1ea02edd84.js +1 -0
  212. package/.next/static/chunks/app/api/web6/consults/route-0975ca1ea02edd84.js +1 -0
  213. package/.next/static/chunks/app/api/worktrees/route-0975ca1ea02edd84.js +1 -0
  214. package/.next/static/chunks/app/{layout-22c6797cb59f5311.js โ†’ layout-b55ad6b60182cd98.js} +1 -1
  215. package/.next/static/chunks/app/manifest.webmanifest/route-0975ca1ea02edd84.js +1 -0
  216. package/.next/static/chunks/app/page-b358723ff38b0fd2.js +26 -0
  217. package/.next/static/chunks/{framework-e405bc515d75023a.js โ†’ framework-32a7466d5cae4a81.js} +1 -1
  218. package/.next/static/chunks/{main-26b32c580fb6231f.js โ†’ main-1ddb405481ce21f6.js} +3 -3
  219. package/.next/static/chunks/next/dist/client/components/builtin/app-error-0975ca1ea02edd84.js +1 -0
  220. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-0975ca1ea02edd84.js +1 -0
  221. package/.next/static/chunks/next/dist/client/components/builtin/not-found-0975ca1ea02edd84.js +1 -0
  222. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-0975ca1ea02edd84.js +1 -0
  223. package/.next/static/chunks/webpack-5e1ebce946df08c7.js +1 -0
  224. package/.next/static/css/{bd5a7fe85955c5e5.css โ†’ f9ae9aa15286f229.css} +1 -1
  225. package/.next/trace +107 -108
  226. package/.next/trace-build +1 -1
  227. package/.next/types/routes.d.ts +2 -6
  228. package/.next/types/validator.ts +0 -36
  229. package/README.md +1 -5
  230. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  231. package/Tools/OMP_Global_Config/agent/AGENTS.md +1 -1
  232. package/Tools/OMP_Global_Config/agent/extensions/cross-review.ts +4 -2
  233. package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +34 -22
  234. package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +261 -42
  235. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +5 -3
  236. package/Tools/OMP_Global_Config/agent/extensions/lib/routing-ledger.ts +31 -1
  237. package/Tools/OMP_Global_Config/agent/extensions/report-chart-guard.ts +102 -0
  238. package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +2 -2
  239. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +36 -3
  240. package/Tools/OMP_Global_Config/agent/rules/subagent.md +38 -3
  241. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +135 -2
  242. package/package.json +1 -5
  243. package/.next/server/app/api/office-avatars/[id]/route.js +0 -1
  244. package/.next/server/app/api/office-avatars/[id]/route.js.nft.json +0 -1
  245. package/.next/server/app/api/office-avatars/[id]/route_client-reference-manifest.js +0 -1
  246. package/.next/server/app/api/office-avatars/route.js +0 -1
  247. package/.next/server/app/api/office-avatars/route.js.nft.json +0 -1
  248. package/.next/server/app/api/office-avatars/route_client-reference-manifest.js +0 -1
  249. package/.next/server/app/office/page.js +0 -2
  250. package/.next/server/app/office/page.js.nft.json +0 -1
  251. package/.next/server/app/office/page_client-reference-manifest.js +0 -1
  252. package/.next/server/app/office-preview/page.js +0 -2
  253. package/.next/server/app/office-preview/page.js.nft.json +0 -1
  254. package/.next/server/app/office-preview/page_client-reference-manifest.js +0 -1
  255. package/.next/server/app/office-preview.html +0 -1
  256. package/.next/server/app/office-preview.meta +0 -16
  257. package/.next/server/app/office-preview.rsc +0 -21
  258. package/.next/server/app/office-preview.segments/_full.segment.rsc +0 -21
  259. package/.next/server/app/office-preview.segments/_head.segment.rsc +0 -6
  260. package/.next/server/app/office-preview.segments/_index.segment.rsc +0 -8
  261. package/.next/server/app/office-preview.segments/_tree.segment.rsc +0 -5
  262. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +0 -7
  263. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +0 -5
  264. package/.next/server/app/office.html +0 -1
  265. package/.next/server/app/office.meta +0 -15
  266. package/.next/server/app/office.rsc +0 -24
  267. package/.next/server/app/office.segments/_full.segment.rsc +0 -24
  268. package/.next/server/app/office.segments/_head.segment.rsc +0 -6
  269. package/.next/server/app/office.segments/_index.segment.rsc +0 -8
  270. package/.next/server/app/office.segments/_tree.segment.rsc +0 -7
  271. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +0 -10
  272. package/.next/server/app/office.segments/office.segment.rsc +0 -5
  273. package/.next/server/chunks/5489.js +0 -25
  274. package/.next/server/chunks/6137.js +0 -7
  275. package/.next/server/chunks/6432.js +0 -353
  276. package/.next/server/chunks/7362.js +0 -1
  277. package/.next/static/chunks/52733464.85a1551044fef357.js +0 -1
  278. package/.next/static/chunks/6110-0762189a59a0ff14.js +0 -1
  279. package/.next/static/chunks/726.66a45469e1fb0093.js +0 -1
  280. package/.next/static/chunks/9304.1f940d490ea5c972.js +0 -1
  281. package/.next/static/chunks/9575-ec11fee3e3e9227a.js +0 -26
  282. package/.next/static/chunks/9703.36cc00cc10e10f45.js +0 -1
  283. package/.next/static/chunks/app/_global-error/page-ee0da967a5fed113.js +0 -1
  284. package/.next/static/chunks/app/api/agent/[id]/account/route-ee0da967a5fed113.js +0 -1
  285. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-ee0da967a5fed113.js +0 -1
  286. package/.next/static/chunks/app/api/agent/[id]/events/route-ee0da967a5fed113.js +0 -1
  287. package/.next/static/chunks/app/api/agent/[id]/route-ee0da967a5fed113.js +0 -1
  288. package/.next/static/chunks/app/api/agent/new/route-ee0da967a5fed113.js +0 -1
  289. package/.next/static/chunks/app/api/agent/running/route-ee0da967a5fed113.js +0 -1
  290. package/.next/static/chunks/app/api/attachment-settings/route-ee0da967a5fed113.js +0 -1
  291. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-ee0da967a5fed113.js +0 -1
  292. package/.next/static/chunks/app/api/attachments/draft/route-ee0da967a5fed113.js +0 -1
  293. package/.next/static/chunks/app/api/attachments/route-ee0da967a5fed113.js +0 -1
  294. package/.next/static/chunks/app/api/auth/all-providers/route-ee0da967a5fed113.js +0 -1
  295. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-ee0da967a5fed113.js +0 -1
  296. package/.next/static/chunks/app/api/auth/login/[provider]/route-ee0da967a5fed113.js +0 -1
  297. package/.next/static/chunks/app/api/auth/logout/[provider]/route-ee0da967a5fed113.js +0 -1
  298. package/.next/static/chunks/app/api/auth/providers/route-ee0da967a5fed113.js +0 -1
  299. package/.next/static/chunks/app/api/cwd/browse/route-ee0da967a5fed113.js +0 -1
  300. package/.next/static/chunks/app/api/cwd/validate/route-ee0da967a5fed113.js +0 -1
  301. package/.next/static/chunks/app/api/default-cwd/route-ee0da967a5fed113.js +0 -1
  302. package/.next/static/chunks/app/api/display-settings/route-ee0da967a5fed113.js +0 -1
  303. package/.next/static/chunks/app/api/document-text/route-ee0da967a5fed113.js +0 -1
  304. package/.next/static/chunks/app/api/experiments/route-ee0da967a5fed113.js +0 -1
  305. package/.next/static/chunks/app/api/file-index/route-ee0da967a5fed113.js +0 -1
  306. package/.next/static/chunks/app/api/files/[...path]/route-ee0da967a5fed113.js +0 -1
  307. package/.next/static/chunks/app/api/git/diff/route-ee0da967a5fed113.js +0 -1
  308. package/.next/static/chunks/app/api/git/status/route-ee0da967a5fed113.js +0 -1
  309. package/.next/static/chunks/app/api/github/projects/route-ee0da967a5fed113.js +0 -1
  310. package/.next/static/chunks/app/api/gpt6/handles/route-ee0da967a5fed113.js +0 -1
  311. package/.next/static/chunks/app/api/gpt6/reply/route-ee0da967a5fed113.js +0 -1
  312. package/.next/static/chunks/app/api/gpt6/token/route-ee0da967a5fed113.js +0 -1
  313. package/.next/static/chunks/app/api/gpt6/web6-session/route-ee0da967a5fed113.js +0 -1
  314. package/.next/static/chunks/app/api/home/route-ee0da967a5fed113.js +0 -1
  315. package/.next/static/chunks/app/api/live/call/[callId]/route-ee0da967a5fed113.js +0 -1
  316. package/.next/static/chunks/app/api/live/events/route-ee0da967a5fed113.js +0 -1
  317. package/.next/static/chunks/app/api/live/interpret/route-ee0da967a5fed113.js +0 -1
  318. package/.next/static/chunks/app/api/live/offer/route-ee0da967a5fed113.js +0 -1
  319. package/.next/static/chunks/app/api/live/voices/route-ee0da967a5fed113.js +0 -1
  320. package/.next/static/chunks/app/api/mcp/route-ee0da967a5fed113.js +0 -1
  321. package/.next/static/chunks/app/api/model-roles/route-ee0da967a5fed113.js +0 -1
  322. package/.next/static/chunks/app/api/models/route-ee0da967a5fed113.js +0 -1
  323. package/.next/static/chunks/app/api/models-config/catalog/route-ee0da967a5fed113.js +0 -1
  324. package/.next/static/chunks/app/api/models-config/discover/route-ee0da967a5fed113.js +0 -1
  325. package/.next/static/chunks/app/api/models-config/route-ee0da967a5fed113.js +0 -1
  326. package/.next/static/chunks/app/api/models-config/test/route-ee0da967a5fed113.js +0 -1
  327. package/.next/static/chunks/app/api/office-avatars/[id]/route-ee0da967a5fed113.js +0 -1
  328. package/.next/static/chunks/app/api/office-avatars/route-ee0da967a5fed113.js +0 -1
  329. package/.next/static/chunks/app/api/plugins/route-ee0da967a5fed113.js +0 -1
  330. package/.next/static/chunks/app/api/project-docs/route-ee0da967a5fed113.js +0 -1
  331. package/.next/static/chunks/app/api/project-trust/route-ee0da967a5fed113.js +0 -1
  332. package/.next/static/chunks/app/api/projects/route-ee0da967a5fed113.js +0 -1
  333. package/.next/static/chunks/app/api/runs/[runId]/prelude/route-ee0da967a5fed113.js +0 -1
  334. package/.next/static/chunks/app/api/runs/[runId]/route-ee0da967a5fed113.js +0 -1
  335. package/.next/static/chunks/app/api/runs/[runId]/turns/route-ee0da967a5fed113.js +0 -1
  336. package/.next/static/chunks/app/api/runs/route-ee0da967a5fed113.js +0 -1
  337. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-ee0da967a5fed113.js +0 -1
  338. package/.next/static/chunks/app/api/sessions/[id]/context/route-ee0da967a5fed113.js +0 -1
  339. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-ee0da967a5fed113.js +0 -1
  340. package/.next/static/chunks/app/api/sessions/[id]/export/route-ee0da967a5fed113.js +0 -1
  341. package/.next/static/chunks/app/api/sessions/[id]/route-ee0da967a5fed113.js +0 -1
  342. package/.next/static/chunks/app/api/sessions/[id]/state/route-ee0da967a5fed113.js +0 -1
  343. package/.next/static/chunks/app/api/sessions/route-ee0da967a5fed113.js +0 -1
  344. package/.next/static/chunks/app/api/sessions/search/route-ee0da967a5fed113.js +0 -1
  345. package/.next/static/chunks/app/api/settings/route-ee0da967a5fed113.js +0 -1
  346. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-ee0da967a5fed113.js +0 -1
  347. package/.next/static/chunks/app/api/skills/check/route-ee0da967a5fed113.js +0 -1
  348. package/.next/static/chunks/app/api/skills/install/route-ee0da967a5fed113.js +0 -1
  349. package/.next/static/chunks/app/api/skills/route-ee0da967a5fed113.js +0 -1
  350. package/.next/static/chunks/app/api/skills/search/route-ee0da967a5fed113.js +0 -1
  351. package/.next/static/chunks/app/api/skills/update/route-ee0da967a5fed113.js +0 -1
  352. package/.next/static/chunks/app/api/subagents/eta/route-ee0da967a5fed113.js +0 -1
  353. package/.next/static/chunks/app/api/theme/route-ee0da967a5fed113.js +0 -1
  354. package/.next/static/chunks/app/api/tool-image/route-ee0da967a5fed113.js +0 -1
  355. package/.next/static/chunks/app/api/update-maintenance/route-ee0da967a5fed113.js +0 -1
  356. package/.next/static/chunks/app/api/updates/route-ee0da967a5fed113.js +0 -1
  357. package/.next/static/chunks/app/api/web-access/recovery/route-ee0da967a5fed113.js +0 -1
  358. package/.next/static/chunks/app/api/web-access/route-ee0da967a5fed113.js +0 -1
  359. package/.next/static/chunks/app/api/web6/consults/route-ee0da967a5fed113.js +0 -1
  360. package/.next/static/chunks/app/api/worktrees/route-ee0da967a5fed113.js +0 -1
  361. package/.next/static/chunks/app/manifest.webmanifest/route-ee0da967a5fed113.js +0 -1
  362. package/.next/static/chunks/app/office/page-a237492b750463b7.js +0 -1
  363. package/.next/static/chunks/app/office-preview/page-d11ce602c2d80ddd.js +0 -1
  364. package/.next/static/chunks/app/page-756dbb8ce3c1cb9e.js +0 -1
  365. package/.next/static/chunks/b536a0f1.f7e390612229faa9.js +0 -342
  366. package/.next/static/chunks/bd904a5c.b74776e0b23d0607.js +0 -1
  367. package/.next/static/chunks/c9cb82ce.18c8cafa64d76bc3.js +0 -1
  368. package/.next/static/chunks/f5ef5e1c.14b6095722ff4f0b.js +0 -12
  369. package/.next/static/chunks/next/dist/client/components/builtin/app-error-ee0da967a5fed113.js +0 -1
  370. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-ee0da967a5fed113.js +0 -1
  371. package/.next/static/chunks/next/dist/client/components/builtin/not-found-ee0da967a5fed113.js +0 -1
  372. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ee0da967a5fed113.js +0 -1
  373. package/.next/static/chunks/webpack-2bdefe555a609a48.js +0 -1
  374. package/.next/static/css/8cdfcac889e08fd3.css +0 -1
  375. package/.next/static/pfQaxPnAiAJ4YIe8Fr0ft/_buildManifest.js +0 -1
  376. package/.next/types/app/api/office-avatars/[id]/route.ts +0 -351
  377. package/.next/types/app/api/office-avatars/route.ts +0 -351
  378. package/.next/types/app/office/page.ts +0 -87
  379. package/.next/types/app/office-preview/page.ts +0 -87
  380. package/public/office3d/ASSETS.md +0 -55
  381. package/public/office3d/office-kit.glb +0 -0
  382. /package/.next/static/{pfQaxPnAiAJ4YIe8Fr0ft โ†’ Hnj-vLLVhpk85eE5EC5YJ}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":101763102,"timestamp":625765,"id":14,"parentId":1,"tags":{},"startTime":1792376923479,"traceId":"fb632eb013322d83"},{"name":"run-typescript","duration":17309731,"timestamp":102786720,"id":11120,"parentId":1,"tags":{},"startTime":1792377025640,"traceId":"fb632eb013322d83"},{"name":"static-check","duration":3967876,"timestamp":120179487,"id":11123,"parentId":1,"tags":{},"startTime":1792377043032,"traceId":"fb632eb013322d83"},{"name":"static-generation","duration":10386293,"timestamp":124238290,"id":11299,"parentId":1,"tags":{},"startTime":1792377047091,"traceId":"fb632eb013322d83"},{"name":"collect-build-traces","duration":17997788,"timestamp":124210992,"id":11296,"parentId":1,"tags":{},"startTime":1792377047064,"traceId":"fb632eb013322d83"},{"name":"telemetry-flush","duration":72,"timestamp":142213167,"id":11308,"parentId":1,"tags":{},"startTime":1792377065066,"traceId":"fb632eb013322d83"},{"name":"next-build","duration":141688977,"timestamp":524284,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1792376923378,"traceId":"fb632eb013322d83"}]
1
+ [{"name":"run-webpack","duration":112526253,"timestamp":741304,"id":14,"parentId":1,"tags":{},"startTime":1792418315748,"traceId":"149c6ec28f45fea2"},{"name":"run-typescript","duration":19849705,"timestamp":113633289,"id":10954,"parentId":1,"tags":{},"startTime":1792418428640,"traceId":"149c6ec28f45fea2"},{"name":"static-check","duration":4307052,"timestamp":133592769,"id":10957,"parentId":1,"tags":{},"startTime":1792418448600,"traceId":"149c6ec28f45fea2"},{"name":"static-generation","duration":14069821,"timestamp":138019663,"id":11125,"parentId":1,"tags":{},"startTime":1792418453027,"traceId":"149c6ec28f45fea2"},{"name":"collect-build-traces","duration":23733590,"timestamp":137978930,"id":11122,"parentId":1,"tags":{},"startTime":1792418452986,"traceId":"149c6ec28f45fea2"},{"name":"telemetry-flush","duration":82,"timestamp":161717301,"id":11134,"parentId":1,"tags":{},"startTime":1792418476725,"traceId":"149c6ec28f45fea2"},{"name":"next-build","duration":161087546,"timestamp":629859,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1792418315637,"traceId":"149c6ec28f45fea2"}]
@@ -1,8 +1,8 @@
1
1
  // This file is generated automatically by Next.js
2
2
  // Do not edit this file manually
3
3
 
4
- type AppRoutes = "/" | "/office" | "/office-preview" | "/recover"
5
- type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/events" | "/api/live/interpret" | "/api/live/offer" | "/api/live/voices" | "/api/mcp" | "/api/model-roles" | "/api/models" | "/api/models-config" | "/api/models-config/catalog" | "/api/models-config/discover" | "/api/models-config/test" | "/api/office-avatars" | "/api/office-avatars/[id]" | "/api/plugins" | "/api/project-docs" | "/api/project-trust" | "/api/projects" | "/api/runs" | "/api/runs/[runId]" | "/api/runs/[runId]/prelude" | "/api/runs/[runId]/turns" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/auto-name" | "/api/sessions/[id]/context" | "/api/sessions/[id]/entries/[entryId]/thinking" | "/api/sessions/[id]/export" | "/api/sessions/[id]/state" | "/api/sessions/search" | "/api/settings" | "/api/sidecars/[service]/[...path]" | "/api/skills" | "/api/skills/check" | "/api/skills/install" | "/api/skills/search" | "/api/skills/update" | "/api/subagents/eta" | "/api/theme" | "/api/tool-image" | "/api/update-maintenance" | "/api/updates" | "/api/web-access" | "/api/web-access/recovery" | "/api/web6/consults" | "/api/worktrees"
4
+ type AppRoutes = "/" | "/recover"
5
+ type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/events" | "/api/live/interpret" | "/api/live/offer" | "/api/live/voices" | "/api/mcp" | "/api/model-roles" | "/api/models" | "/api/models-config" | "/api/models-config/catalog" | "/api/models-config/discover" | "/api/models-config/test" | "/api/plugins" | "/api/project-docs" | "/api/project-trust" | "/api/projects" | "/api/runs" | "/api/runs/[runId]" | "/api/runs/[runId]/prelude" | "/api/runs/[runId]/turns" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/auto-name" | "/api/sessions/[id]/context" | "/api/sessions/[id]/entries/[entryId]/thinking" | "/api/sessions/[id]/export" | "/api/sessions/[id]/state" | "/api/sessions/search" | "/api/settings" | "/api/sidecars/[service]/[...path]" | "/api/skills" | "/api/skills/check" | "/api/skills/install" | "/api/skills/search" | "/api/skills/update" | "/api/subagents/eta" | "/api/theme" | "/api/tool-image" | "/api/update-maintenance" | "/api/updates" | "/api/web-access" | "/api/web-access/recovery" | "/api/web6/consults" | "/api/worktrees"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -55,8 +55,6 @@ interface ParamMap {
55
55
  "/api/models-config/catalog": {}
56
56
  "/api/models-config/discover": {}
57
57
  "/api/models-config/test": {}
58
- "/api/office-avatars": {}
59
- "/api/office-avatars/[id]": { "id": string; }
60
58
  "/api/plugins": {}
61
59
  "/api/project-docs": {}
62
60
  "/api/project-trust": {}
@@ -89,8 +87,6 @@ interface ParamMap {
89
87
  "/api/web-access/recovery": {}
90
88
  "/api/web6/consults": {}
91
89
  "/api/worktrees": {}
92
- "/office": {}
93
- "/office-preview": {}
94
90
  "/recover": {}
95
91
  }
96
92
 
@@ -47,24 +47,6 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
47
47
  }
48
48
 
49
49
 
50
- // Validate ../../app/office-preview/page.tsx
51
- {
52
- type __IsExpected<Specific extends AppPageConfig<"/office-preview">> = Specific
53
- const handler = {} as typeof import("../../app/office-preview/page.js")
54
- type __Check = __IsExpected<typeof handler>
55
- // @ts-ignore
56
- type __Unused = __Check
57
- }
58
-
59
- // Validate ../../app/office/page.tsx
60
- {
61
- type __IsExpected<Specific extends AppPageConfig<"/office">> = Specific
62
- const handler = {} as typeof import("../../app/office/page.js")
63
- type __Check = __IsExpected<typeof handler>
64
- // @ts-ignore
65
- type __Unused = __Check
66
- }
67
-
68
50
  // Validate ../../app/page.tsx
69
51
  {
70
52
  type __IsExpected<Specific extends AppPageConfig<"/">> = Specific
@@ -470,24 +452,6 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
470
452
  type __Unused = __Check
471
453
  }
472
454
 
473
- // Validate ../../app/api/office-avatars/[id]/route.ts
474
- {
475
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/office-avatars/[id]">> = Specific
476
- const handler = {} as typeof import("../../app/api/office-avatars/[id]/route.js")
477
- type __Check = __IsExpected<typeof handler>
478
- // @ts-ignore
479
- type __Unused = __Check
480
- }
481
-
482
- // Validate ../../app/api/office-avatars/route.ts
483
- {
484
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/office-avatars">> = Specific
485
- const handler = {} as typeof import("../../app/api/office-avatars/route.js")
486
- type __Check = __IsExpected<typeof handler>
487
- // @ts-ignore
488
- type __Unused = __Check
489
- }
490
-
491
455
  // Validate ../../app/api/plugins/route.ts
492
456
  {
493
457
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/plugins">> = Specific
package/README.md CHANGED
@@ -100,9 +100,6 @@ Anthropic ๊ตฌ๋… ๊ณ„์ •์ด ๋ชจ๋‘ ์ฃผ๊ฐ„ ํ•œ๋„์— ๋‹ฟ์œผ๋ฉด, ๋ฏธ๋ฆฌ ๋‘” ์˜ˆ๋น„
100
100
  - ๋Œ€ํ™”๊ฐ€ ์••์ถ•๋ผ๋„ ์„œ๋ธŒ์—์ด์ „ํŠธ ์นด๋“œยท์ง„ํ–‰์ค„๊ณผ ํ•  ์ผ ๋ชฉ๋ก์€ ํ˜„์žฌ ๋ถ„๊ธฐ์˜ ๊ธฐ๋ก์„ ์ด์–ด์„œ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์••์ถ•์œผ๋กœ ์›๋ž˜ ๋‹ต๋ณ€์ด ๊ฐ€๋ ค์ง„ ์นด๋“œ๋Š” ์••์ถ• ์ง€์ ์—์„œ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ๋ณต์›๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์‹คํ–‰ ์ƒํƒœ์™€ ๊ฒ€์ˆ˜ ํŒ์ •์€ ์ƒˆ ๊ด€์ธก์— ๋งž์ถฐ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.
101
101
  - ๋๋‚œ ํ„ด์˜ ๋งˆ์ง€๋ง‰ ๋‹ต๋ณ€ ์•„๋ž˜์— ๋ณ€๊ฒฝ ํŒŒ์ผยท๊ฒ€์‚ฌยท์‹คํŒจยท๋ฏธํ™•์ธ ๊ฐœ์ˆ˜๋ฅผ ํ•œ ์ค„๋กœ ์š”์•ฝํ•˜๊ณ , ํŽผ์น˜๋ฉด ํŒŒ์ผ๊ณผ ๊ฒ€์‚ฌ ๋ช…๋ นยท๊ฒฐ๊ณผ๋ฅผ ๋ด…๋‹ˆ๋‹ค.
102
102
  - ์‹คํ–‰ ์ค‘์— ๋ณด๋‚ธ ์ž…๋ ฅ์€ ใ€Œ์ง€๊ธˆ ์ง€์‹œใ€์™€ ใ€Œ์™„๋ฃŒ ํ›„ ์š”์ฒญใ€์œผ๋กœ ๋‚˜๋‰˜์–ด, ์ ‘์ˆ˜ยท์ „๋‹ฌ ๋Œ€๊ธฐยท๋Œ€ํ™”์— ๋“ค์–ด๊ฐ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋กœ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์ „๋‹ฌ์„ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ทธ๋ ‡๋‹ค๊ณ  ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฐ์ƒท๋งŒ ๋ณด๋‚ธ ์ž…๋ ฅ๋„ ใ€Œ์ด๋ฏธ์ง€ N๊ฐœใ€๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชฉ๋ก์—๋Š” ์ตœ๊ทผ 4๊ฐœ๋งŒ ๋ณด์ด๊ณ , ใ€Œ์ด์ „ N๊ฐœ ๋” ๋ณด๊ธฐใ€๋กœ ๋‚˜๋จธ์ง€๋ฅผ ํŽผ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๋Œ€๊ธฐ ์ค‘์ธ ์ž…๋ ฅ์€ ๋ชฉ๋ก์—์„œ ์ˆจ๊ฒจ์ ธ๋„ ์œ ์ง€๋˜๋ฉฐ, ํŽผ์นœ ๋ชฉ๋ก์—์„œ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
103
- - ์˜คํ”ผ์Šค ํ™”๋ฉด: ๋Œ€ํ™” ํ™”๋ฉด์˜ ใ€Œ์˜คํ”ผ์Šคใ€๋ฅผ ๋ˆ„๋ฅด๋ฉด 3D ์‚ฌ๋ฌด์‹ค ์ „์šฉ ํ™”๋ฉด(`/office`)์ด ์ƒˆ ํƒญ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์›๋ž˜ ํƒญ์˜ ์ฃผ์†Œยท์„ ํƒํ•œ ์„ธ์…˜ยท์ž‘์„ฑ ์ค‘์ธ ์ดˆ์•ˆยท์ง„ํ–‰ ์ค‘์ธ ์‘๋‹ต์€ ๊ทธ๋Œ€๋กœ ๋‚จ๊ณ , ์˜คํ”ผ์Šค ํƒญ๋„ ๊ฐ™์€ ์„ธ์…˜ ์ฃผ์†Œ(`?session=`)๋ฅผ ์“ฐ๋ฏ€๋กœ ์ง์ ‘ ์—ด๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ๊ฐ™์€ ์„ธ์…˜์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ๋ฌด์‹ค์ด ํ™”๋ฉด ํญ์„ ๋‹ค ์“ฐ๊ณ , Main๊ณผ ์ฐธ์—ฌํ•œ Maker๊ฐ€ ๊ฐ์ž ์บ๋ฆญํ„ฐ๋กœ ์ž๋ฆฌ์— ์•‰์•„ ์‹ค์ œ ์‹คํ–‰ ์ƒํƒœ๋Œ€๋กœ ์ผํ•˜๊ฑฐ๋‚˜ ์ฑ…์ƒ ๊ณ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ, ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์‰ฌ๋Š” ์ž๋ฆฌ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์‹คํ–‰ ์™„๋ฃŒ๋Š” Main์˜ ์ˆ˜์šฉ์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ธ์…˜์— ์ฐธ์—ฌํ•˜์ง€ ์•Š์€ ์บ๋ฆญํ„ฐ๋Š” ํœด๊ฒŒ ๊ตฌ์—ญ์—์„œ ์‰ฌ๋ฉฐ, ๊ฐ€๋ฆฌํ‚ค๋ฉด ใ€Œ์ฐธ์—ฌ ์•ˆ ํ•จใ€์ด ๋ณด์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ์œ„ ๋ฒ„ํŠผ์œผ๋กœ ํ™•๋Œ€ยท์ถ•์†Œยท์ „์ฒด ๋ณด๊ธฐ๋ฅผ ํ•˜๊ณ , ํ™•๋Œ€ํ•œ ๋’ค์—๋Š” ์žฅ๋ฉด์„ ๋Œ๊ฑฐ๋‚˜ ํ™”์‚ดํ‘œ ๋ฒ„ํŠผ์œผ๋กœ ๋‘˜๋Ÿฌ๋ด…๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž ์บ๋ฆญํ„ฐ๋‚˜ ๋จธ๋ฆฌ ์œ„ ๋งํ’์„ , ์•„๋ž˜ ์ฐธ์—ฌ์ž ์ค„์„ ๋ˆ„๋ฅด๋ฉด ์‚ฌ๋ฌด์‹ค ๋Œ€์‹  ๊ทธ ๋Œ€์ƒ์˜ ๋Œ€ํ™”๋‚˜ ์ž‘์—… ๊ธฐ๋กยทํŒŒ์ผ์ด ํ™”๋ฉด์„ ๋‹ค ์“ฐ๊ณ , ์ฐธ์—ฌ์ž ์ค„์˜ ใ€Œ์‚ฌ๋ฌด์‹คใ€๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์ฐฝ์ด ๋‚ฎ์œผ๋ฉด ์ค„์—ฌ ๋งž์ถ”์ง€ ์•Š๊ณ  ์„ธ๋กœ๋กœ ์Šคํฌ๋กคํ•ฉ๋‹ˆ๋‹ค. Maker ๊ธฐ๋ก์€ ์กฐํšŒ ์ „์šฉ์ด๊ณ  ์ž…๋ ฅ์€ ๋Š˜ Main์—๊ฒŒ ๊ฐ‘๋‹ˆ๋‹ค. ๊ณ ๋ฅด๊ธฐ๋งŒ ํ•ด์„œ๋Š” ๋ชจ๋ธยท๊ณ„์ •์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค๋ฅธ ๋Œ€์ƒ์œผ๋กœ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜คํ”ผ์Šค ํƒญ์˜ ใ€Œ๋Œ€ํ™” ํ™”๋ฉดใ€์€ ๊ฐ™์€ ์„ธ์…˜์˜ ๋Œ€ํ™” ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋‘ ํƒญ์ด ๊ฐ™์€ ์„ธ์…˜์„ ์—ด์–ด ๋‘๋ฉด ์™„๋ฃŒ ์•Œ๋ฆผยท์†Œ๋ฆฌ๊ฐ€ ํƒญ๋งˆ๋‹ค ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WebGL์„ ์“ธ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์žฅ๋ฉด์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์ž๋ฆฌ ์นด๋“œ๋กœ ๋ณด์—ฌ ์ฃผ๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋กœ ๊ทธ๋ฆฌ๊ณ , ๋ฐฉ์˜ ๊ฐ€๊ตฌ๋Š” KayKitยทKenney์˜ CC0 ๋ชจ๋ธ์„ ์˜คํ”ผ์Šค๋ฅผ ์—ด ๋•Œ๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ตฌ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์ฝ”๋“œ๋กœ ๊ทธ๋ฆฐ ๋ฐฉ์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค([`public/office3d/ASSETS.md`](./public/office3d/ASSETS.md)).
104
- - ๊ฐœ์ธ ์บ๋ฆญํ„ฐ ๋ชจ๋ธ(์„ ํƒ): agent ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ(๊ธฐ๋ณธ `~/.omp/agent`) ์•„๋ž˜ `office-avatars/`์— `rin.vrm`ยท`mio.vrm`ยท`nova.vrm`ยท`yuki.vrm`ยท`isana.vrm`ยท`shion.vrm`ยท`hikari.vrm`์„ ๋‘๋ฉด ๊ทธ ์บ๋ฆญํ„ฐ๋ฅผ VRM ๋ชจ๋ธ๋กœ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์€ ์ด ์ผ๊ณฑ ๊ฐœ๋งŒ ์“ฐ๋ฉฐ, ์„œ๋ฒ„๋Š” ์ด ๊ณ ์ • ์ด๋ฆ„์˜ ํŒŒ์ผ๋งŒ ๊ธฐ์กด ์ ‘์† ๋ณดํ˜ธ(ํ˜ธ์ŠคํŠธ ํ™•์ธยท๋น„๋ฐ€๋ฒˆํ˜ธ ์ž ๊ธˆ)๋ฅผ ๊ฑฐ์นœ `/api/office-avatars/<์ด๋ฆ„>`์œผ๋กœ ๋‚ด์ฃผ๊ณ  ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋Š” ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์ €์žฅ์†Œยทnpm ํŒจํ‚ค์ง€ยท`public/`์— ๋“ค์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—†๋Š” ์บ๋ฆญํ„ฐ์™€ ์บ๋ฆญํ„ฐ๋ฅผ ํŠน์ •ํ•˜์ง€ ๋ชปํ•œ ์ฐธ์—ฌ์ž๋Š” ์ฝ”๋“œ๋กœ ๊ทธ๋ฆฐ ์บ๋ฆญํ„ฐ ๊ทธ๋Œ€๋กœ์ด๊ณ , ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ ๋ฐ›๊ฑฐ๋‚˜ ์ฝ์ง€ ๋ชปํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ์ž๋ฆฌ ์นด๋“œ์™€ ใ€Œ๋‹ค์‹œ ์‹œ๋„ใ€๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋„ฃ๊ฑฐ๋‚˜ ๋ฐ”๊พผ ๋’ค์—๋Š” ์˜คํ”ผ์Šค๋ฅผ ๋‹ค์‹œ ์—ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.
105
- - ํ•œ ์บ๋ฆญํ„ฐ๋Š” ์ž‘์—…์ด ๋ช‡ ๊ฐœ๋“  ์‚ฌ๋ฌด์‹ค์— ํ•œ ๋ช…๋งŒ ์„ญ๋‹ˆ๋‹ค. Main๊ณผ ๊ฐ™์€ ์บ๋ฆญํ„ฐ์˜ Maker, ๊ฐ™์€ ๊ณ„์ •์˜ Maker ์—ฌ๋Ÿฟ์€ ํ•œ ๋ชธ์— ๋ชจ์ด๊ณ , ๋จธ๋ฆฌ ์œ„ ๋งํ’์„ ์— ์ž‘์—…๋งˆ๋‹ค ํ•œ ์ค„(์ด๋ฆ„ยท์ƒํƒœ)์ด ๋ณด์—ฌ ์‹คํŒจยท๋Œ€๊ธฐ ์ž‘์—…๋„ ๊ฐ€๋ ค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์บ๋ฆญํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ž‘์—…์ด ํ•˜๋‚˜์ผ ๋•Œ๋Š” ๋ฐ”๋กœ ์—ด๋ฆฌ๊ณ , ์—ฌ๋Ÿฟ์ผ ๋•Œ๋Š” ๋งํ’์„ ์˜ ์ฒซ ์ค„๋กœ ์ดˆ์ ์ด ๊ฐ€์„œ ์ค„๋งˆ๋‹ค ๊ณจ๋ผ ์—ฝ๋‹ˆ๋‹ค. ๋ชธ์˜ ์ž๋ฆฌ์™€ ๋™์ž‘์€ ์ผํ•˜๋Š” ์ž‘์—… โ†’ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—… โ†’ ์‚ฌ๋žŒ์„ ๋ถ€๋ฅด๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ์ž‘์—… โ†’ ์‰ฌ๊ฑฐ๋‚˜ ๋๋‚œ ์ž‘์—… ์ˆœ์œผ๋กœ ๊ณ ๋ฅธ ๋Œ€ํ‘œ ์ž‘์—…์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํ•˜๋‹จ ์ฐธ์—ฌ์ž ์ค„๊ณผ ์ž๋ฆฌ ์นด๋“œ๋Š” ๊ณ„์† ์ž‘์—…๋งˆ๋‹ค ๋”ฐ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. Maker์˜ ์บ๋ฆญํ„ฐ๋Š” ์˜คํ”ผ์Šค๋ฅผ ์—ด๋ฉด ๊ฐ Maker ๊ธฐ๋ก์˜ ๋งˆ์ง€๋ง‰ ๋‹ต์— ๋‚จ์€ ๊ณ„์ •์œผ๋กœ ๋ฐ”๋กœ ์ •ํ•ด์ง€๊ณ , ๊ณ„์ • ๊ทผ๊ฑฐ๊ฐ€ ์—†๋Š” ์ฐธ์—ฌ์ž๋Š” ๋‹ค๋ฅธ ์บ๋ฆญํ„ฐ์— ํ•ฉ์น˜์ง€ ์•Š๊ณ  ํšŒ์ƒ‰ ใ€Œ์ด๋ฆ„ ์—†๋Š” ์ฐธ์—ฌ์žใ€๋กœ ๋”ฐ๋กœ ์„ญ๋‹ˆ๋‹ค.
106
103
  - ์ž์‹ ์—์ด์ „ํŠธ์˜ ๋ฐœํ™”๊ฐ€ ํ•ด๋‹น ํ„ด ์•„๋ž˜ ๋Œ€ํ™” ํ๋ฆ„์— ๋ผ์–ด๋“ค์–ด ๋ˆ„๊ฐ€ ๋ฌด์Šจ ๋ง์„ ํ–ˆ๋Š”์ง€ ์ด์–ด์„œ ์ฝํž™๋‹ˆ๋‹ค.
107
104
  - ๊ณต๊ฐœ ํ•˜๋„ค์Šค๋Š” ์‹œ์ž‘์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์žฌ์ž‘์—… ์ค‘์ธ ์—์ด์ „ํŠธ์—๊ฒŒ ๊ฐ™์€ ํŒŒ์ผ์„ ์ค‘๋ณต ๋ฐฐ์ •ํ•˜์ง€ ์•Š๋„๋ก ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ž‘์—… ์œ ํ˜•์€ ๋ฐœ์ฃผ ์ค€๋น„ ๋‹จ๊ณ„์—์„œ ์•Œ๋ ค์ฃผ๋ฉฐ, ์—์ด์ „ํŠธ ์—ญํ• ์„ ์ƒ๋žตํ•˜๋ฉด ๋ฉ”์ด์ปค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ ๊ฒฐ๊ณผ์™€ Main์ด ๊ฒ€์ˆ˜ํ•œ ๊ฒฐ๊ณผ์˜ ์ถœ์ฒ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ์žฌ์ž‘์—… ์ด๋ ฅ๊ณผ ์ตœ์ข… ์ˆ˜์šฉ์„ ๋”ฐ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์ ์šฉ ๊ฒฝ๊ณ„๋Š” [ํ•˜๋„ค์Šค ์•ˆ๋‚ด](./docs/harness.md#๋ฐœ์ฃผ์™€-๊ฒ€์ˆ˜-๊ณ„์•ฝ)๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
108
105
  - ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•œ๊บผ๋ฒˆ์— ๋งก๊ธธ ๋•Œ ๊ณตํ†ต ์ค€๋น„ ํ™•์ธ์˜ ๋ฐ˜๋ณต์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ์ž‘์—…๋ณ„ ๋‹ด๋‹น ๊ฒฝ๋กœ์™€ ์ถฉ๋Œ ํ™•์ธ์€ ์œ ์ง€ํ•˜๋ฉฐ, ๋‹ค์Œ ๋ฐœ์ฃผ์—์„œ๋Š” ๋ฐ”๋€ ์กฐ๊ฑด์„ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
@@ -145,6 +142,7 @@ Anthropic ๊ตฌ๋… ๊ณ„์ •์ด ๋ชจ๋‘ ์ฃผ๊ฐ„ ํ•œ๋„์— ๋‹ฟ์œผ๋ฉด, ๋ฏธ๋ฆฌ ๋‘” ์˜ˆ๋น„
145
142
  - Main์ด OpenAI ๋ชจ๋ธ์—์„œ Fast๋ฅผ ์ผœ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” OpenAI ๊ณ„์—ด SubAgent๋„ Fast๋กœ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. AnthropicยทGoogle SubAgent์—๋Š” Fast๋ฅผ ์ž๋™์œผ๋กœ ๋„˜๊ธฐ์ง€ ์•Š๊ณ , Fast๊ฐ€ ๊บผ์ ธ ์žˆ์œผ๋ฉด SubAgent๋„ ํ‘œ์ค€ ์ฒ˜๋ฆฌ๋กœ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
146
143
  - ๋„ค์ดํ‹ฐ๋ธŒ ์ฐฝ์„ ๋‹ค๋ฃจ๋Š” `computer.run`์—์„œ ๋ฒ„ํŠผ์„ ํ•œ ๋ฒˆ ๋ˆ„๋ฅธ ๋’ค, ์›ํ•˜๋Š” ํ–‰ยท๋ฌธ๊ตฌยท๊ฐ’์ด ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ๋กœ์ปฌ ์ฝ๊ธฐ๋กœ๋งŒ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ๊ฒฐ๊ณผ๋งŒ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋‹ค์‹œ ๋ˆ„๋ฅด์ง€ ์•Š์œผ๋ฉฐ, ์ œํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผยท์ทจ์†Œยท์ฝ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ์„œ๋กœ ๊ตฌ๋ถ„ํ•ด ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์žฅยท์ „์†ก์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ๋‚จ๋Š” ํด๋ฆญ์˜ ์Šน์ธ ์ ˆ์ฐจ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค([์‚ฌ์šฉ๋ฒ•](./docs/harness.md#typed-judgment-routing-jev)).
147
144
  - provider ๋กœ๊ทธ์ธยทAPI ํ‚ค, `models.yml`, ํ”Œ๋Ÿฌ๊ทธ์ธ, ์Šคํ‚ฌ์„ ์›น์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋น„ํ™œ์„ฑํ™” ์„ค์ •์„ ์ €์žฅํ•ด๋„ ์ด๋ฏธ ๋ถˆ๋Ÿฌ์˜จ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ CUELO ๋Ÿฐํƒ€์ž„์„ ์žฌ์‹œ์ž‘ํ•ด์•ผ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ใ€Œ์„ธ์…˜ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐใ€๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•ด์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
145
+ - ์Šคํ‚ฌ ๊ฒ€์ƒ‰์€ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค ์˜ค๋ฅ˜์™€ ์ •์ƒ์ ์ธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ์„ ๊ตฌ๋ถ„ํ•ด ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ๋ณด์กฐ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์—์„œ๋„ ์„ค์น˜ ์ˆ˜๊ฐ€ 0ํšŒยท1ํšŒ์ธ ์Šคํ‚ฌ์„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
148
146
  - ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ํƒ์ƒ‰๊ณผ ์†Œ์Šคยท๋ฌธ์„œยท์ด๋ฏธ์ง€ยท์˜ค๋””์˜คยทPDF ๋ฏธ๋ฆฌ๋ณด๊ธฐ, Git worktree ์ „ํ™˜. ํŒŒ์ผยท์„œ๋ธŒ์—์ด์ „ํŠธยท์ž‘์—… ๋กœ๊ทธ ํŒจ๋„์€ ๊ฐ™์€ ํ•œ ์ค„ ๋จธ๋ฆฌ์ค„์„ ์“ฐ๊ณ , ์˜ค๋ฅธ์ชฝ์— ๊ณ ์ •ํ•œ ๋ณด์กฐ ํŒจ๋„์€ ๋„“๊ฒŒ ๋ดค๋‹ค๊ฐ€ Escape๋กœ ์›๋ž˜ ํฌ๊ธฐ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์ด๋•Œ ํŒŒ์ผ ๋ณด๊ธฐ ๋ฐฉ์‹๊ณผ ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
149
147
  - ํŒŒ์ผ ํŒจ๋„์— ์—ด๋ฆฐ ํŒŒ์ผ์ด ์—†์œผ๋ฉด, ์„ ํƒํ•œ ํ”„๋กœ์ ํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ(`HANDOFF.md`)ยท๋ฌธ์„œ ์ง€๋„(`doc/README.md`)ยท์ตœ๊ทผ ์ž‘์—… ๊ธฐ๋ก(`doc/history`) ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์žˆ๋Š” ๋ฌธ์„œ๋งŒ ์—ด ์ˆ˜ ์žˆ๊ณ , ์—†์Œยท์ฝ๊ธฐ ๊ถŒํ•œ ๋ฐ–ยทํ”„๋กœ์ ํŠธ ๋ฏธ์„ ํƒ์„ ๊ตฌ๋ถ„ํ•ด ํ‘œ์‹œํ•˜๋ฉฐ ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
150
148
  - ํ”„๋กœ์ ํŠธ ์‹ ๋ขฐ: ์„ค์ •์—์„œ ํ”„๋กœ์ ํŠธ๋ณ„ ์Šน์ธ์„ ๊ด€๋ฆฌยทํ•ด์ œํ•˜๊ณ , ์‹คํ–‰ ์ค‘์—๋Š” ์ž‘์—…์„ ๋Š์ง€ ์•Š๊ณ  ์‹ ๋ขฐ ์Šน์ธ์„ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•˜์ง€ ์•Š์€ ์ €์žฅ์†Œ์˜ ํ™•์žฅยทํ›…ยท๋„๊ตฌยทMCP๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค([docs/project-trust.md](./docs/project-trust.md)).
@@ -256,8 +254,6 @@ bun run test:coverage # ์•ฑยท์„ค์น˜๊ธฐ ํ…Œ์ŠคํŠธ + ์ปค๋ฒ„๋ฆฌ์ง€ ํ‘œ
256
254
 
257
255
  ์˜์กด์„ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•œ ๋’ค์—๋Š” `bun run prepare:source`๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”. ์ด๋ฏธ ์„ค์น˜๋œ ์ž‘์—… ์‚ฌ๋ณธ์—์„œ๋„ `bun install`์€ ํŒจ์น˜๋œ SDK ํŒจํ‚ค์ง€๋ฅผ ์›๋ณธ์œผ๋กœ ๋‹ค์‹œ ๊น”๊ธฐ ๋•Œ๋ฌธ์—, ์ค€๋น„ ๋‹จ๊ณ„๋ฅผ ๋นผ๋ฉด ํ˜ธํ™˜ ํŒจ์น˜๊ฐ€ ๋น ์ง„ ์ฑ„๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ์ค€๋น„ ๋‹จ๊ณ„๋Š” ์ž‘์—… ์‚ฌ๋ณธ์˜ SDK๋งŒ ๋‹ค๋ฃจ๋ฉฐ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์ด๋‚˜ ์‹คํ–‰ ์ค‘์ธ ์„ค์น˜๋ณธ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
258
256
 
259
- 3D ์˜คํ”ผ์Šค ์žฅ๋ฉด๋งŒ ๊ณ ์น  ๋•Œ๋Š” `bun run dev:verify`๋กœ ๋„์šด ๋’ค `http://127.0.0.1:30163/office-preview`๋ฅผ ์—ฌ์„ธ์š”. ์‹ค์ œ ์žฅ๋ฉด ์ฝ”๋“œ์— ๊ณ ์ •๋œ ์ƒํƒœ(๋Œ€๊ธฐยท์ž‘์—…ยท์ฃผ์˜ยท์—ฌ๋Ÿฌ ์ฐธ์—ฌ์ž ๋“ฑ)์™€ ํ™”๋ฉด ํญ์„ ๊ณจ๋ผ ๋„ฃ๋Š” ๊ฐœ๋ฐœ ์ „์šฉ ํ™”๋ฉด์ด๋ฉฐ, ์„ธ์…˜์ด๋‚˜ ๊ณ„์ •์„ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. production ๋นŒ๋“œ์—์„œ๋Š” ์ด ๊ฒฝ๋กœ๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ƒํƒœ ์—ฐ๊ฒฐ๊ณผ ๋Œ€ํ™” ํ™”๋ฉดยท์˜คํ”ผ์Šค ํƒญ ์‚ฌ์ด์˜ ์„ธ์…˜ยท์ดˆ์•ˆ ๋ณด์กด์€ ์ „์ฒด ์•ฑ(`/`์™€ `/office`)์—์„œ ํ™•์ธํ•˜์„ธ์š”.
260
-
261
257
  ์ฐธ๊ณ  ๋ฌธ์„œ: [OMP ํ•˜๋„ค์Šค](./docs/harness.md) ยท [์ธ์ฆ](./docs/authentication.md) ยท [ํ”„๋กœ์ ํŠธ ์‹ ๋ขฐ](./docs/project-trust.md) ยท [worktree](./docs/worktrees.md) ยท [๋‹ค๊ตญ์–ด](./docs/i18n.md) ยท [Docker](./docs/docker.md) ยท [WindowsยทWSL ๋„๊ตฌ ์†๋„ ๋น„๊ต](./docs/wsl-tool-speed.md) ยท [Maker ์ฝ”๋“œ ํ’ˆ์งˆ ํ‰๊ฐ€](./docs/maker-quality.md)
262
258
 
263
259
  ## ๊ณ„๋ณด์™€ ๋ผ์ด์„ ์Šค
@@ -9,7 +9,7 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
9
9
  const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
10
10
  const EXPECTED = {
11
11
  name: 'cuelo',
12
- version: '0.10.37',
12
+ version: '0.10.39',
13
13
  distribution: 'cuelo',
14
14
  coreVersion: '18.12.2',
15
15
  };
@@ -122,7 +122,7 @@ tool-capable ํ˜ธ์ถœ์€ ์ผ๋ฐ˜ task child ํ•˜๋‚˜์™€ ์ •์ƒ linkage๋ฅผ ์‚ฌ์šฉํ•œ
122
122
 
123
123
  Childยท๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์“ฐ๋Š” ํ„ด์— ์—ญํ• ยท๊ฐœ์ˆ˜ยท์ด์œ ๋ฅผ ์•Œ๋ฆฌ๊ณ , ์™„๋ฃŒ ๋ณด๊ณ ์— ์‹ค์ œ ์‚ฌ์šฉ ์—ญํ• ยท์‚ฐ์ถœ๋ฌผ ๊ธฐ์—ฌยท๊ฒ€์ฆ ์ฆ๊ฑฐยท๋‚จ์€ ์œ„ํ—˜์„ ์ ๋Š”๋‹ค. `eval`์˜ `agent()`ยท`workpool()`ยท`completion(model=โ€ฆ)` ๋“ฑ๋„ ๊ณ ์ง€ํ•œ๋‹ค. ํšจ์œจ ๋ถ„์„๊ณผ ๊ฒ€์ฆ๋œ ์‹คํ–‰ ๊ตํ›ˆ์€ `rule://verdict`๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ์‚ฌ์šฉ์ž ๋˜๋Š” parser๊ฐ€ ์š”๊ตฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ ์ • `FINAL`ยท`OWNER` ํ˜•์‹์„ ๋ง์”Œ์šฐ์ง€ ์•Š๋Š”๋‹ค.
124
124
 
125
- ๊ธฐ๋ก๋œ ์ˆ˜์น˜์˜ ๋น„๊ตยท์ถ”์ดยท๋ถ„ํ•ด๊ฐ€ ๋ณด๊ณ ์— ๋“ค์–ด๊ฐ€๋ฉด Mermaid ์ฐจํŠธ(`xychart-beta` ๋ง‰๋Œ€, `gantt` ์‹œ๊ฐ„์„  ๋“ฑ) ํ•˜๋‚˜๋ฅผ ํ‘œ๋‚˜ ๋ฌธ์žฅ ์˜†์— ๋„ฃ๋Š”๋‹ค. ์ „ํ›„ ์ธก์ •, ์‹คํ–‰ ์‹œ๊ฐ„, ๋‹จ๊ณ„๋ณ„ ์†Œ์š”, ํ†ต๊ณผยท์‹คํŒจ ์ˆ˜ ๊ฐ™์€ ๊ฐ’์ด ์…‹ ์ด์ƒ์ด์–ด์„œ ์ฐจํŠธ๊ฐ€ ํ‘œ๋ณด๋‹ค ๋นจ๋ฆฌ ์ฝํž ๋•Œ๊ฐ€ ๊ทธ ๊ฒฝ์šฐ๋‹ค(์‚ฌ์šฉ์ž ๊ฒฐ์ •, 2026-10-19). ๊ฐ’์€ ๋„๊ตฌ ์ถœ๋ ฅยท์‹คํ–‰ ๊ธฐ๋กยท์ธก์ • ์‚ฐ์ถœ๋ฌผ์—์„œ ์˜จ ๊ฒƒ๋งŒ ์“ฐ๊ณ  ์ถœ์ฒ˜๋ฅผ ์ ๋Š”๋‹ค. ์‚ฐ๋ฌธ์—์„œ ์ถ”์ •ํ•˜๊ฑฐ๋‚˜ ์ง€์–ด๋‚ธ ์ˆ˜์น˜๋กœ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ฐจํŠธ๋Š” `RULES.md`์˜ ์ธก์ • ํšŸ์ˆ˜ยทํŽธ์ฐจ ๋ณด๊ณ ๋ฅผ ๋Œ€์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ `visual-report` ์Šคํ‚ฌ์„ ๋”ฐ๋ฅธ๋‹ค.
125
+ ๊ธฐ๋ก๋œ ์ˆ˜์น˜์˜ ๋น„๊ตยท์ถ”์ดยท๋ถ„ํ•ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋ฉด Mermaid ์ฐจํŠธ(`xychart-beta` ๋ง‰๋Œ€, `gantt` ์‹œ๊ฐ„์„  ๋“ฑ) ํ•˜๋‚˜๋ฅผ ํ‘œ๋‚˜ ๋ฌธ์žฅ ์˜†์— ๋„ฃ๋Š”๋‹ค. ์ „ํ›„ ์ธก์ •, ์‹คํ–‰ ์‹œ๊ฐ„, ๋‹จ๊ณ„๋ณ„ ์†Œ์š”, ํ†ต๊ณผยท์‹คํŒจ ์ˆ˜ ๊ฐ™์€ ๊ฐ’์ด ์…‹ ์ด์ƒ์ด๋ฉด ๊ทธ ๊ฒฝ์šฐ๋‹ค(์‚ฌ์šฉ์ž ๊ฒฐ์ •, 2026-10-19). ์ตœ์ข… ๋ณด๊ณ ๋งŒ์ด ์•„๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ค‘ ์ค‘๊ฐ„ ๋ณด๊ณ , ํ•œ ๋ฌธ์žฅ ์•ˆ์— ๋‚˜์—ดํ•œ ์ˆ˜์น˜, `ask` ์งˆ๋ฌธ ์•ž ๊ทผ๊ฑฐ ๋ฌธ์žฅ๋„ ํฌํ•จํ•˜๋ฉฐ, ์ˆ˜์น˜๋ฅผ ๊ทผ๊ฑฐ๋กœ ๊ฒฐ์ •์„ ๋ฌผ์„ ๋•Œ๋Š” ์ฐจํŠธ๋ฅผ ๋จผ์ € ๋ณด์ด๊ณ  ๋ฌป๋Š”๋‹ค(2026-10-19 ๋ˆ„๋ฝ ๋’ค ๋ณด๊ฐ•). ๊ฐ’์€ ๋„๊ตฌ ์ถœ๋ ฅยท์‹คํ–‰ ๊ธฐ๋กยท์ธก์ • ์‚ฐ์ถœ๋ฌผ์—์„œ ์˜จ ๊ฒƒ๋งŒ ์“ฐ๊ณ  ์ถœ์ฒ˜๋ฅผ ์ ๋Š”๋‹ค. ์‚ฐ๋ฌธ์—์„œ ์ถ”์ •ํ•˜๊ฑฐ๋‚˜ ์ง€์–ด๋‚ธ ์ˆ˜์น˜๋กœ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ฐจํŠธ๋Š” `RULES.md`์˜ ์ธก์ • ํšŸ์ˆ˜ยทํŽธ์ฐจ ๋ณด๊ณ ๋ฅผ ๋Œ€์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ `visual-report` ์Šคํ‚ฌ์„ ๋”ฐ๋ฅธ๋‹ค. ๊ฐ™์€ ์ข…๋ฅ˜ ์ˆ˜์น˜ ์…‹ ์ด์ƒ์ด ์ฐจํŠธ ์—†์ด ๋‚˜๊ฐ€๋ฉด `report-chart-guard`๊ฐ€ ์•Œ๋ฆฐ๋‹ค. ๋‹ต์ด ๋๋‚ฌ์œผ๋ฉด ๋ฐ”๋กœ ์ด์–ด ๋ถ™์ด๊ฒŒ ํ•˜๊ณ , ๊ฐ™์€ ์‘๋‹ต์˜ `ask`๋Š” ํ•œ ๋ฒˆ ๋ง‰๋Š”๋‹ค.
126
126
 
127
127
  ## ์–ธ์ œ ๋ฌด์—‡์„ ์—ฌ๋Š”๊ฐ€
128
128
 
@@ -84,6 +84,7 @@ export interface CrossReviewParams {
84
84
  highRisk?: boolean;
85
85
  previousReviewId?: string;
86
86
  references?: string[];
87
+ probeResults?: { findingId: string; command: string; exitCode: number; output: string }[];
87
88
  reviewId?: string;
88
89
  resolutions?: { id: string; status: string; evidence: string }[];
89
90
  }
@@ -94,7 +95,7 @@ export async function executeCrossReview(params: CrossReviewParams, ctx: Extensi
94
95
  if (params.action === "review") {
95
96
  const input: ReviewInput = {
96
97
  files: params.files ?? [], acceptance: params.acceptance ?? "", authors: params.authors ?? [],
97
- highRisk: params.highRisk, previousReviewId: params.previousReviewId, references: params.references,
98
+ highRisk: params.highRisk, previousReviewId: params.previousReviewId, references: params.references, probeResults: params.probeResults,
98
99
  };
99
100
  return runReview(input, deps, signal);
100
101
  }
@@ -110,7 +111,7 @@ export default function crossReview(pi: ExtensionAPI): void {
110
111
  const z = pi.zod;
111
112
  pi.registerTool({
112
113
  name: "cross_review", label: "Cross Review", loadMode: "essential", approval: "read",
113
- description: "Main ์ „์šฉ ๊ณ„์—ด ๊ต์ฐจ๊ฒ€์ฆ. action=review: files(cwd ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ)์˜ ๋ณ€๊ฒฝ์„ ๋ฐ˜๋Œ€ ๊ณ„์—ด reviewer(Anthropic ์ €์žโ†’Astra, OpenAIยท๊ทธ ๋ฐ–์˜ ์ €์žโ†’Opus)๊ฐ€ acceptance ๊ธฐ์ค€์œผ๋กœ ์ ๋Œ€์ ์œผ๋กœ ์ฝ๊ณ  {reviewId, reviewer ๋ชจ๋ธ, round, triggers, findings[]}๋ฅผ ๋Œ๋ ค์ค€๋‹ค. authors๋Š” ์ฝ”๋“œ๋ฅผ ์“ด ๋ชจ๋ธ selector ๋˜๋Š” \"main\"์ด๋ฉฐ ๋‘ ๊ณ„์—ด์ด๋ฉด ๋‘˜ ๋‹ค ๋Œ๋ฆฐ๋‹ค. previousReviewId๋ฅผ ์ฃผ๋ฉด 2ํšŒ์ฐจ(1ํšŒ์ฐจ ์ดํ›„ delta๋งŒ)์ด๊ณ  3ํšŒ์ฐจ๋Š” ๊ฑฐ์ ˆํ•œ๋‹ค. references(์„ ํƒ, ์ตœ๋Œ€ 10๊ฐœ)๋Š” ์‹ฌ์‚ฌ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋งฅ๋ฝ์šฉ ๊ธฐ์กดยท์‹ ๊ทœ ํŒŒ์ผ(์˜ˆ: ์ž‘์—… ๊ธฐ๋ก, ๊ณ„์•ฝ ํŒŒ์ผ)์˜ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ ๋’ค์— ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์‹ฃ๋Š”๋‹ค. ๋ช…์‹œํ•œ ๊ฒฝ๋กœ๋งŒ์ด๋ฉฐ ํ†ต๊ณผ ์ง€๋ฌธ์„ ๋ฎ์ง€ ์•Š๊ณ  references๋งŒ์œผ๋กœ๋Š” ์‹ฌ์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋น„๋ฐ€ ๊ฒฝ๋กœยทgitignoreยท์‹ฌ๋ณผ๋ฆญ ๋งํฌยท๋ฐ”์ด๋„ˆ๋ฆฌยทํŒŒ์ผ๋‹น 64KB/ํ•ฉ๊ณ„ 100KB ์ดˆ๊ณผ, ์ฝ๋Š” ๋™์•ˆ ์—ด๋ฆฐ ํŒŒ์ผ์˜ ์‹ค์ œ ๊ฒฝ๋กœ๊ฐ€ ๊ณ ์ •ํ•œ ์ €์žฅ์†Œ ๋ฃจํŠธ ์•„๋ž˜ ์š”์ฒญ ๊ฒฝ๋กœ์™€ ๋‹ฌ๋ผ์ง„ ๊ฒฝ์šฐ๋Š” ๋น ์ง€๊ณ  skippedReferences์— ์ด์œ ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด ๊ฒฝ๋กœ ํ™•์ธ์€ Linux(WSL ํฌํ•จ)์˜ /proc/self/fd์— ์˜์กดํ•˜๋ฏ€๋กœ native Windows/macOS์—์„œ๋Š” references๋ฅผ ์ฝ์ง€ ์•Š๊ณ  skippedReferences์— unsupported ์ด์œ ๋ฅผ ๋‚จ๊ธด๋‹ค(๋ณ€๊ฒฝ ํŒŒ์ผ ์‹ฌ์‚ฌ๋Š” ๊ทธ๋Œ€๋กœ). ํŒŒ์ผ ๋‚ด์šฉ์€ OpenAI ๋˜๋Š” Anthropic์œผ๋กœ ์ „์†ก๋˜๋ฉฐ ๋น„๋ฐ€ ์ด๋ฆ„ยท๋‚ด์šฉยท๋ฐ”์ด๋„ˆ๋ฆฌยทํฐ ์ž…๋ ฅ์€ ๊ฑฐ์ ˆ/์ œ์™ธํ•œ๋‹ค. action=resolve: reviewId ์ฒด์ธ์˜ ๋ชจ๋“  finding์— {id, status fixed|refuted|limit, evidence}๊ฐ€ ์žˆ์–ด์•ผ pass:true์ด๊ณ  ๊ทธ ์‹œ์  ํŒŒ์ผ ๋‚ด์šฉ(git blob)์ด ํ†ต๊ณผ ์ง€๋ฌธ์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค. git_finalize๋Š” triggerยทํ‘œ๋ณธ์— ๊ฑธ๋ฆฐ ์ฝ”๋“œ ํŒŒ์ผ์— ์ด ํ†ต๊ณผ ๊ธฐ๋ก์„ ์š”๊ตฌํ•œ๋‹ค. reviewer์˜ PASS ํ‘œํ˜„์€ ๊ทผ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.",
114
+ description: "Main ์ „์šฉ ๊ณ„์—ด ๊ต์ฐจ๊ฒ€์ฆ. action=review: files(cwd ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ)์˜ ๋ณ€๊ฒฝ์„ ๋ฐ˜๋Œ€ ๊ณ„์—ด reviewer(Anthropic ์ €์žโ†’Astra, OpenAIยท๊ทธ ๋ฐ–์˜ ์ €์žโ†’Opus)๊ฐ€ acceptance ๊ธฐ์ค€์œผ๋กœ ์ ๋Œ€์ ์œผ๋กœ ์ฝ๊ณ  {reviewId, reviewer ๋ชจ๋ธ, round, triggers, findings[]}๋ฅผ ๋Œ๋ ค์ค€๋‹ค. authors๋Š” ์ฝ”๋“œ๋ฅผ ์“ด ๋ชจ๋ธ selector ๋˜๋Š” \"main\"์ด๋ฉฐ ๋‘ ๊ณ„์—ด์ด๋ฉด ๋‘˜ ๋‹ค ๋Œ๋ฆฐ๋‹ค. previousReviewId๋ฅผ ์ฃผ๋ฉด ๋‹ค์Œ ๋ผ์šด๋“œ์ด๊ณ  ์ฒด์ธ์€ ์ตœ๋Œ€ 3ํšŒ(probe ๋ผ์šด๋“œ 1ํšŒ + probe๊ฐ€ ์•„๋‹Œ ๋ผ์šด๋“œ 2ํšŒ)๋‹ค: probe๊ฐ€ ์•„๋‹Œ ๋ผ์šด๋“œ๋Š” ์ง์ „ ๋ผ์šด๋“œ๊ฐ€ ๋ณธ ๋‚ด์šฉ ์ดํ›„์˜ delta๋งŒ ๋ณด๋ฉฐ ๋ฐ”๋€ ๊ฒƒ์ด ์—†์œผ๋ฉด ๊ฑฐ์ ˆํ•œ๋‹ค. reviewer๋Š” ์ฝ”๋“œ๋งŒ์œผ๋กœ ๊ฐ€๋ฆด ์ˆ˜ ์—†๋Š” ์˜์‹ฌ์— finding.probe{steps, expectIfReal, expectIfNot?}(์žฌํ˜„ ์‹คํ—˜)๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค. Main์ด๋‚˜ ๊ธฐ์กด Maker๊ฐ€ ๊ทธ ์‹คํ—˜์„ ๋Œ๋ฆฐ ๋’ค previousReviewId์™€ probeResults[{findingId, command, exitCode, output}]๋ฅผ ์ฃผ๋ฉด probe ๋ผ์šด๋“œ๊ฐ€ ๋˜์–ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์—†์–ด๋„ ์‹คํ—˜ ๊ฒฐ๊ณผ๋กœ ํ•œ ๋ฒˆ ๋” ํŒ๋‹จ๋ฐ›๊ณ , reviewer๊ฐ€ finding๋งˆ๋‹ค verdicts{confirmed|withdrawn|unresolved}๋ฅผ ๋‚ธ๋‹ค(ํŒ๋‹จ์ด ๋น ์ง€๋ฉด unresolved). ์ฒด์ธ์— ์—†๋Š” findingIdยท์ค‘๋ณต ๊ฒฐ๊ณผยท๋‘ ๋ฒˆ์งธ probe ๋ผ์šด๋“œยท๊ฐœ์ธํ‚ค ๋ธ”๋ก์ด ๋“  ๊ฒฐ๊ณผ๋Š” ๊ฑฐ์ ˆํ•˜๋ฉฐ, output์€ ๋ฐœ์ทŒ๋กœ ๊ฒฐ๊ณผ๋‹น 8KB(๋„˜์œผ๋ฉด ์•ž๋’ค๋งŒ ๋‚จ๊น€)ยทํ•ฉ๊ณ„ 40KB(๋„˜์œผ๋ฉด ๊ฑฐ์ ˆ)์ด๊ณ  ๋น„๋ฐ€ ๊ฐ’์€ ๊ฐ€๋ ค ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๋กœ ์ „๋‹ฌํ•œ๋‹ค. verdict๋Š” ์ž๋ฌธ์ผ ๋ฟ finding์„ ์ž๋™์œผ๋กœ ๋‹ซ๊ฑฐ๋‚˜ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. references(์„ ํƒ, ์ตœ๋Œ€ 10๊ฐœ)๋Š” ์‹ฌ์‚ฌ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋งฅ๋ฝ์šฉ ๊ธฐ์กดยท์‹ ๊ทœ ํŒŒ์ผ(์˜ˆ: ์ž‘์—… ๊ธฐ๋ก, ๊ณ„์•ฝ ํŒŒ์ผ)์˜ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ ๋’ค์— ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์‹ฃ๋Š”๋‹ค. ๋ช…์‹œํ•œ ๊ฒฝ๋กœ๋งŒ์ด๋ฉฐ ํ†ต๊ณผ ์ง€๋ฌธ์„ ๋ฎ์ง€ ์•Š๊ณ  references๋งŒ์œผ๋กœ๋Š” ์‹ฌ์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋น„๋ฐ€ ๊ฒฝ๋กœยทgitignoreยท์‹ฌ๋ณผ๋ฆญ ๋งํฌยท๋ฐ”์ด๋„ˆ๋ฆฌยทํŒŒ์ผ๋‹น 64KB/ํ•ฉ๊ณ„ 100KB ์ดˆ๊ณผ, ์ฝ๋Š” ๋™์•ˆ ์—ด๋ฆฐ ํŒŒ์ผ์˜ ์‹ค์ œ ๊ฒฝ๋กœ๊ฐ€ ๊ณ ์ •ํ•œ ์ €์žฅ์†Œ ๋ฃจํŠธ ์•„๋ž˜ ์š”์ฒญ ๊ฒฝ๋กœ์™€ ๋‹ฌ๋ผ์ง„ ๊ฒฝ์šฐ๋Š” ๋น ์ง€๊ณ  skippedReferences์— ์ด์œ ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด ๊ฒฝ๋กœ ํ™•์ธ์€ Linux(WSL ํฌํ•จ)์˜ /proc/self/fd์— ์˜์กดํ•˜๋ฏ€๋กœ native Windows/macOS์—์„œ๋Š” references๋ฅผ ์ฝ์ง€ ์•Š๊ณ  skippedReferences์— unsupported ์ด์œ ๋ฅผ ๋‚จ๊ธด๋‹ค(๋ณ€๊ฒฝ ํŒŒ์ผ ์‹ฌ์‚ฌ๋Š” ๊ทธ๋Œ€๋กœ). ํŒŒ์ผ ๋‚ด์šฉ์€ OpenAI ๋˜๋Š” Anthropic์œผ๋กœ ์ „์†ก๋˜๋ฉฐ ๋น„๋ฐ€ ์ด๋ฆ„ยท๋‚ด์šฉยท๋ฐ”์ด๋„ˆ๋ฆฌยทํฐ ์ž…๋ ฅ์€ ๊ฑฐ์ ˆ/์ œ์™ธํ•œ๋‹ค. action=resolve: reviewId ์ฒด์ธ์˜ ๋ชจ๋“  finding์— {id, status fixed|refuted|limit, evidence}๊ฐ€ ์žˆ์–ด์•ผ pass:true์ด๊ณ  ๊ทธ ์‹œ์  ํŒŒ์ผ ๋‚ด์šฉ(git blob)์ด ํ†ต๊ณผ ์ง€๋ฌธ์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค(withdrawn ํŒ๋‹จ๋„ ์ž๋™์œผ๋กœ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค). git_finalize๋Š” triggerยทํ‘œ๋ณธ์— ๊ฑธ๋ฆฐ ์ฝ”๋“œ ํŒŒ์ผ์— ์ด ํ†ต๊ณผ ๊ธฐ๋ก์„ ์š”๊ตฌํ•œ๋‹ค. reviewer์˜ PASS ํ‘œํ˜„์€ ๊ทผ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.",
114
115
  parameters: z.object({
115
116
  action: z.string(),
116
117
  files: z.array(z.string()).optional(),
@@ -119,6 +120,7 @@ export default function crossReview(pi: ExtensionAPI): void {
119
120
  highRisk: z.boolean().optional(),
120
121
  previousReviewId: z.string().optional(),
121
122
  references: z.array(z.string()).optional(),
123
+ probeResults: z.array(z.object({ findingId: z.string(), command: z.string(), exitCode: z.number(), output: z.string() })).optional(),
122
124
  reviewId: z.string().optional(),
123
125
  resolutions: z.array(z.object({ id: z.string(), status: z.string(), evidence: z.string() })).optional(),
124
126
  }) as never,
@@ -5,7 +5,9 @@ import { onSessionLifecycle } from "./lib/session-identity";
5
5
  /**
6
6
  * ์‘๋‹ต ์–ธ์–ด ๊ฐ€๋“œ. Main์ด ์˜์–ด ๋ธŒ๋ฆฌํ”„๋ฅผ ์“ฐ๋‹ค ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์ง„ํ–‰ ๋ฌธ์žฅ๊นŒ์ง€ ์˜์–ด๋กœ ์ƒˆ๋Š” ์ผ(2026-10-02)์„ ๋ง‰๋Š”๋‹ค.
7
7
  * 1) ๊ฐ์ง€: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์‚ฐ๋ฌธ์—์„œ ์›๋ฌธ ๋ณด์กด ๋Œ€์ƒ(์ฝ”๋“œยทURLยท๊ฒฝ๋กœยท์‹๋ณ„์ž)์„ ๋บ€ ๊ธ€์ž ์ค‘ ํ•œ๊ธ€ ๋น„์œจ์ด ๋‚ฎ์œผ๋ฉด ๋“œ๋ฆฌํ”„ํŠธ.
8
- * 2) ๊ต์ •: ์ฒซ ๋“œ๋ฆฌํ”„ํŠธ ๋’ค ๋‹ค์Œ ์š”์ฒญ์— ํ•œ๊ตญ์–ด ๋ณต๊ท€ ์•Œ๋ฆผ์„ ํ•œ ๋ฒˆ ๋„ฃ๋Š”๋‹ค(๋ชจ๋ธ ํ˜ธ์ถœ ์—†์Œ).
8
+ * 2) ๊ต์ •: ๋“œ๋ฆฌํ”„ํŠธํ•œ ์‘๋‹ต๋งˆ๋‹ค ๋‹ค์Œ ์š”์ฒญ์— ํ•œ๊ตญ์–ด ๋ณต๊ท€ ์•Œ๋ฆผ์„ ๋„ฃ๋Š”๋‹ค(๋ชจ๋ธ ํ˜ธ์ถœ ์—†์Œ). ๋ชจ๋ธ ๋ฌธ๋งฅ์—๋Š” ๋งˆ์ง€๋ง‰ ์•Œ๋ฆผ๋งŒ ๋‚จ๊ธด๋‹ค.
9
+ * 2026-10-19 ์‚ฌ๋ฌด์‹ค ์„ธ์…˜์—์„œ ์•Œ๋ฆผ ๋’ค ํ•œ ์‘๋‹ต๋งŒ ํ•œ๊ตญ์–ด๋กœ ๋Œ์•„์˜ค๊ณ  ๋‹ค์‹œ ์˜์–ด๋กœ ๋น ์กŒ๋Š”๋ฐ, ์•Œ๋ฆผ์ด ์˜์–ด ๊ตฌ๊ฐ„๋‹น ํ•œ ๋ฒˆ์ด๋ผ
10
+ * ๋งˆ์ง€๋ง‰ ์•Œ๋ฆผ ๋’ค ์˜์–ด ์‘๋‹ต 40์—ฌ ๊ฐœ(์ตœ์ข… ๋ณด๊ณ  ํฌํ•จ)๊ฐ€ ์•Œ๋ฆผ ์—†์ด ๋‚˜๊ฐ”๋‹ค.
9
11
  * 3) ๋ฒˆ์—ญ: ๋“œ๋ฆฌํ”„ํŠธํ•œ ๋ฉ”์‹œ์ง€๋Š” ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ @tiny(HIKARI)๋กœ ๋ฒˆ์—ญํ•ด ์›๋ฌธ ์•„๋ž˜์— ํ‘œ์‹œํ•œ๋‹ค(๋ชจ๋ธ ๋ฌธ๋งฅ ์ œ์™ธ).
10
12
  * ์ด๋ฏธ ๋‚˜๊ฐ„ ์˜์–ด ๋ฌธ์žฅ์„ ๊ทธ๋Œ€๋กœ ๋‘์ง€ ์•Š๋Š”๋‹ค(2026-10-09 ์‚ฌ์šฉ์ž ์š”์ฒญ: ๋‹ค์Œ ๋‹ต๋งŒ ํ•œ๊ตญ์–ด๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค).
11
13
  */
@@ -29,7 +31,7 @@ const SEEN_LIMIT = 50;
29
31
  const SECRET_PATTERN = /(?:^|[\s"'`:])(?:password|passwd|api[_ -]?key|bearer|secret|token|credential|client[_ -]?secret)\b|(?:๋น„๋ฐ€๋ฒˆํ˜ธ|์ž๊ฒฉ์ฆ๋ช…|์ธ์ฆํ‚ค|ํ† ํฐ)|(?:sk-[A-Za-z0-9_-]{12,})|-----BEGIN [A-Z ]*PRIVATE KEY-----|\b(?:gh[opusr]_|github_pat_)[A-Za-z0-9_-]{12,}/i;
30
32
  const ENGLISH_REQUEST = /(?:in\s+english|answer\s+in\s+english|reply\s+in\s+english|์˜์–ด๋กœ|์˜๋ฌธ์œผ๋กœ|์˜์–ด\s*(?:๋‹ต|์‘๋‹ต|๋ฒˆ์—ญ))/i;
31
33
 
32
- type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string };
34
+ type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string; timestamp?: number };
33
35
  export type DriftKind = "drift" | "korean" | "neutral";
34
36
 
35
37
  function textOf(content: unknown): string {
@@ -100,21 +102,27 @@ export async function translateWithTiny(text: string, ctx: ExtensionContext, sig
100
102
 
101
103
  export function createKoreanReplyGuard(translate: TranslateReply = translateWithTiny) {
102
104
  return function koreanReplyGuard(pi: ExtensionAPI): void {
103
- let reminded = false;
104
105
  let skipEnglish = false;
106
+ // ๋ฒˆ์—ญ ํ˜ธ์ถœ ์–ต์ œ(ํ…์ŠคํŠธ ๊ธฐ์ค€, ์„ธ์…˜ ๋™์•ˆ)์™€ ์•Œ๋ฆผ ์ค‘๋ณต ์–ต์ œ(๊ฐ™์€ ๋ฉ”์‹œ์ง€์˜ ์žฌ์ „๋‹ฌ)๋Š” ๋‹ค๋ฅด๋‹ค. 2026-10-19 ์ด์Šˆ #39:
107
+ // ํ•œ ์ง‘ํ•ฉ์œผ๋กœ ๋‘˜ ๋‹ค ๋ง‰์•„ ํ•œ๊ตญ์–ด ๋ณต๊ท€ยท์ƒˆ ์‚ฌ์šฉ์ž ์š”์ฒญ ๋’ค ๊ฐ™์€ ๋ฌธ๊ตฌ์˜ ๋ณ„๋„ ์˜์–ด ์‘๋‹ต์— ์•Œ๋ฆผ์ด ๋น ์กŒ๋‹ค.
105
108
  const translated = new Set<string>();
106
109
  const pending = new Set<AbortController>();
110
+ // ์ง์ „ message_end๊ฐ€ ์ด ๋“œ๋ฆฌํ”„ํŠธ ์‘๋‹ต์ด์—ˆ๋Š”์ง€. ์‚ฌ์ด์— ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์˜ค๋ฉด ๋น„์šฐ๋ฏ€๋กœ, ๋‚จ์•„ ์žˆ์„ ๋•Œ ๊ฐ™์€
111
+ // hashยทtimestamp๊ฐ€ ๋‹ค์‹œ ์˜ค๋ฉด ๊ฐ™์€ ๋ฉ”์‹œ์ง€์˜ ์žฌ์ „๋‹ฌ์ด๋‹ค. timestamp ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‘๋‹ต์„ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
112
+ let lastDrift: { key: string; timestamp: number | undefined } | undefined;
107
113
 
108
114
  const reset = () => {
109
115
  for (const controller of pending) controller.abort();
110
116
  pending.clear();
111
- reminded = false;
112
117
  skipEnglish = false;
113
118
  translated.clear();
119
+ lastDrift = undefined;
114
120
  };
115
- const show = (ctx: ExtensionContext, content: string) => {
121
+ // details๋Š” ํ™”๋ฉด์ด ๋ฒˆ์—ญ์„ ์›๋ฌธ ๋งํ’์„ ์— ๋ถ™์ด๋Š” ์—ฐ๊ฒฐ์ด๋‹ค. ๋ฒˆ์—ญ์€ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ์–ด ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์–ด ์œ„์น˜๋กœ ์ง์ง“์ง€ ์•Š๋Š”๋‹ค.
122
+ // sourceHash๋Š” ์›๋ฌธ ํ…์ŠคํŠธ ๋ธ”๋ก์„ "\n"์œผ๋กœ ์ด์€ ๊ฐ’์˜ hash()์ด๋ฉฐ CUELO lib/reply-translation.ts๊ฐ€ ๊ฐ™์€ ์‹์œผ๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ๋‹ค.
123
+ const show = (ctx: ExtensionContext, content: string, source: { sourceTimestamp: number | undefined; sourceHash: string }) => {
116
124
  pi.sendMessage(
117
- { customType: TRANSLATION_TYPE, content, display: true, attribution: "agent" },
125
+ { customType: TRANSLATION_TYPE, content, display: true, attribution: "agent", details: source },
118
126
  ctx.isIdle() ? undefined : { deliverAs: "aside" },
119
127
  );
120
128
  };
@@ -124,36 +132,40 @@ export function createKoreanReplyGuard(translate: TranslateReply = translateWith
124
132
  pi.on("message_start", (event) => {
125
133
  const message = event.message as Message;
126
134
  if (message.role !== "user" || message.synthetic === true || message.attribution === "agent") return;
135
+ lastDrift = undefined;
127
136
  const text = textOf(message.content);
128
137
  if (text.trim()) skipEnglish = userWroteEnglish(text);
129
138
  });
130
- // ๋ฒˆ์—ญ์€ ์‚ฌ๋žŒ์ด ์ฝ๋Š” ํ‘œ์‹œ์šฉ์ด๋‹ค. ์ดํ›„ ์š”์ฒญ์˜ ๋ชจ๋ธ ๋ฌธ๋งฅ์—์„œ๋Š” ๋บ€๋‹ค(autolearn-saved์™€ ๊ฐ™์€ ์ทจ๊ธ‰).
139
+ // ๋ฒˆ์—ญ์€ ์‚ฌ๋žŒ์ด ์ฝ๋Š” ํ‘œ์‹œ์šฉ์ด๋ผ ๋ชจ๋ธ ๋ฌธ๋งฅ์—์„œ ๋บ€๋‹ค(autolearn-saved์™€ ๊ฐ™์€ ์ทจ๊ธ‰). ์•Œ๋ฆผ์€ ์‘๋‹ต๋งˆ๋‹ค ์Œ“์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ๊ฒƒ๋งŒ ๋‚จ๊ธด๋‹ค.
131
140
  pi.on("context", (event) => {
132
141
  const messages = event.messages as { role?: string; customType?: string }[];
133
- const kept = messages.filter((m) => !(m.role === "custom" && m.customType === TRANSLATION_TYPE));
142
+ const isCustom = (m: { role?: string; customType?: string }, type: string) => m.role === "custom" && m.customType === type;
143
+ const lastReminder = messages.findLastIndex((m) => isCustom(m, REMINDER_TYPE));
144
+ const kept = messages.filter((m, i) => !isCustom(m, TRANSLATION_TYPE) && (i === lastReminder || !isCustom(m, REMINDER_TYPE)));
134
145
  return kept.length === messages.length ? undefined : { messages: kept as typeof event.messages };
135
146
  });
136
147
  pi.on("message_end", (event, ctx) => {
137
148
  const message = event.message as Message;
149
+ const previous = lastDrift;
150
+ lastDrift = undefined;
138
151
  if (message.role !== "assistant" || ctx.agent.kind !== "main" || skipEnglish) return;
139
152
  const text = textOf(message.content);
140
- const kind = classify(text);
141
- if (kind === "korean") { reminded = false; return; }
142
- if (kind !== "drift") return;
143
- if (!reminded) {
144
- reminded = true;
145
- const hasToolCall = Array.isArray(message.content) && message.content.some((b) => b?.type === "toolCall");
146
- pi.sendMessage(
147
- { customType: REMINDER_TYPE, content: REMINDER_TEXT, display: false, attribution: "agent" },
148
- { deliverAs: hasToolCall ? "aside" : "nextTurn" },
149
- );
150
- }
153
+ if (classify(text) !== "drift") return;
151
154
  const key = hash(text);
155
+ const timestamp = typeof message.timestamp === "number" ? message.timestamp : undefined;
156
+ lastDrift = { key, timestamp };
157
+ if (previous?.key === key && previous.timestamp === timestamp) return;
158
+ const hasToolCall = Array.isArray(message.content) && message.content.some((b) => b?.type === "toolCall");
159
+ pi.sendMessage(
160
+ { customType: REMINDER_TYPE, content: REMINDER_TEXT, display: false, attribution: "agent" },
161
+ { deliverAs: hasToolCall ? "aside" : "nextTurn" },
162
+ );
152
163
  if (translated.has(key)) return;
153
164
  translated.add(key);
154
165
  if (translated.size > SEEN_LIMIT) translated.delete(translated.values().next().value as string);
166
+ const source = { sourceTimestamp: typeof message.timestamp === "number" ? message.timestamp : undefined, sourceHash: key };
155
167
  if (SECRET_PATTERN.test(text)) {
156
- show(ctx, "[๋ฒˆ์—ญ ์ƒ๋žต] ๋ฏผ๊ฐ ์ •๋ณด์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋‚ด์šฉ์ด ์žˆ์–ด ์™ธ๋ถ€ ๋ชจ๋ธ๋กœ ๋ณด๋‚ด์ง€ ์•Š์•˜๋‹ค. ์›๋ฌธ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.");
168
+ show(ctx, "[๋ฒˆ์—ญ ์ƒ๋žต] ๋ฏผ๊ฐ ์ •๋ณด์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋‚ด์šฉ์ด ์žˆ์–ด ์™ธ๋ถ€ ๋ชจ๋ธ๋กœ ๋ณด๋‚ด์ง€ ์•Š์•˜๋‹ค. ์›๋ฌธ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.", source);
157
169
  return;
158
170
  }
159
171
  const controller = new AbortController();
@@ -163,9 +175,9 @@ export function createKoreanReplyGuard(translate: TranslateReply = translateWith
163
175
  void (async () => {
164
176
  try {
165
177
  const result = await translate(text.trim(), ctx, controller.signal);
166
- if (pending.has(controller)) show(ctx, `[ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ]\n${result}`);
178
+ if (pending.has(controller)) show(ctx, `[ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ]\n${result}`, source);
167
179
  } catch {
168
- if (pending.has(controller)) show(ctx, "[๋ฒˆ์—ญ ์‹คํŒจ] ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ์„ ์–ป์ง€ ๋ชปํ–ˆ๋‹ค. ์›๋ฌธ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.");
180
+ if (pending.has(controller)) show(ctx, "[๋ฒˆ์—ญ ์‹คํŒจ] ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ์„ ์–ป์ง€ ๋ชปํ–ˆ๋‹ค. ์›๋ฌธ๋งŒ ํ‘œ์‹œ๋œ๋‹ค.", source);
169
181
  } finally {
170
182
  clearTimeout(timer);
171
183
  pending.delete(controller);