cuelo 0.10.52 → 0.10.53

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 (484) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +35 -35
  3. package/.next/build-manifest.json +4 -4
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +549 -561
  7. package/.next/required-server-files.js +25 -25
  8. package/.next/required-server-files.json +25 -25
  9. package/.next/server/app/_global-error/page.js +3 -3
  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 +2 -2
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  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 +1 -1
  29. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/account/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  32. package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  34. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/agent/[id]/route.js +1 -1
  36. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/agent/new/route.js +1 -1
  38. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/agent/running/route.js +1 -1
  40. package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/attachment-settings/route.js +1 -1
  42. package/.next/server/app/api/attachment-settings/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  44. package/.next/server/app/api/attachments/[id]/transcription/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/attachments/draft/route.js +1 -1
  46. package/.next/server/app/api/attachments/draft/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/attachments/route.js +2 -2
  48. package/.next/server/app/api/attachments/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  50. package/.next/server/app/api/auth/all-providers/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  52. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  54. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  56. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/auth/providers/route.js +1 -1
  58. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/character-mode/route.js +1 -2
  60. package/.next/server/app/api/character-mode/route.js.nft.json +1 -1
  61. package/.next/server/app/api/character-mode/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/cwd/browse/route.js +1 -1
  63. package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/cwd/validate/route.js +1 -1
  65. package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/default-cwd/route.js +1 -1
  67. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/display-settings/route.js +1 -1
  69. package/.next/server/app/api/display-settings/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/document-text/route.js +2 -2
  71. package/.next/server/app/api/document-text/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/experiments/route.js +1 -1
  73. package/.next/server/app/api/experiments/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/file-index/route.js +1 -1
  75. package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/files/[...path]/route.js +1 -1
  77. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/git/diff/route.js +1 -1
  79. package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/git/status/route.js +2 -2
  81. package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/github/projects/route.js +1 -1
  83. package/.next/server/app/api/github/projects/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  85. package/.next/server/app/api/gpt6/handles/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  87. package/.next/server/app/api/gpt6/reply/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/gpt6/token/route.js +1 -1
  89. package/.next/server/app/api/gpt6/token/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  91. package/.next/server/app/api/gpt6/web6-session/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/home/route.js +1 -1
  93. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/live/call/[callId]/route.js +2 -2
  95. package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/live/call/[callId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/live/events/route.js +2 -2
  98. package/.next/server/app/api/live/events/route.js.nft.json +1 -1
  99. package/.next/server/app/api/live/events/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/live/interpret/route.js +2 -2
  101. package/.next/server/app/api/live/interpret/route.js.nft.json +1 -1
  102. package/.next/server/app/api/live/interpret/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/live/offer/route.js +1 -1
  104. package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
  105. package/.next/server/app/api/live/offer/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/live/voices/route.js +1 -1
  107. package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
  108. package/.next/server/app/api/live/voices/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/mcp/route.js +2 -2
  110. package/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/model-roles/route.js +1 -1
  112. package/.next/server/app/api/model-roles/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/models/route.js +1 -1
  114. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  116. package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/models-config/discover/route.js +1 -1
  118. package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/models-config/route.js +3 -3
  120. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/models-config/test/route.js +1 -1
  122. package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/office-characters/[...path]/route.js +1 -2
  124. package/.next/server/app/api/office-characters/[...path]/route.js.nft.json +1 -1
  125. package/.next/server/app/api/office-characters/[...path]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/plugins/route.js +1 -1
  127. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/project-docs/route.js +1 -1
  129. package/.next/server/app/api/project-docs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/project-trust/route.js +1 -1
  131. package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/projects/route.js +2 -2
  133. package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/runs/[runId]/prelude/route.js +1 -1
  135. package/.next/server/app/api/runs/[runId]/prelude/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  137. package/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/runs/[runId]/turns/route.js +1 -1
  139. package/.next/server/app/api/runs/[runId]/turns/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/runs/route.js +1 -1
  141. package/.next/server/app/api/runs/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  143. package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  145. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  147. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  149. package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  151. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  153. package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/sessions/route.js +1 -1
  155. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/sessions/search/route.js +1 -1
  157. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/settings/route.js +1 -1
  159. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  161. package/.next/server/app/api/sidecars/[service]/[...path]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/skills/check/route.js +1 -1
  163. package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/skills/install/route.js +2 -2
  165. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/skills/route.js +1 -1
  167. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/skills/search/route.js +1 -1
  169. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/skills/update/route.js +1 -1
  171. package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/subagents/eta/route.js +1 -1
  173. package/.next/server/app/api/subagents/eta/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/theme/route.js +1 -1
  175. package/.next/server/app/api/theme/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/tool-image/route.js +1 -1
  177. package/.next/server/app/api/tool-image/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/update-maintenance/route.js +2 -2
  179. package/.next/server/app/api/update-maintenance/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/updates/route.js +1 -1
  181. package/.next/server/app/api/updates/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  183. package/.next/server/app/api/web-access/recovery/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/web-access/route.js +1 -1
  185. package/.next/server/app/api/web-access/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/web6/consults/route.js +1 -1
  187. package/.next/server/app/api/web6/consults/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/route.js +1 -1
  189. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/favicon.ico/route.js +1 -1
  191. package/.next/server/app/index.html +1 -1
  192. package/.next/server/app/index.rsc +4 -4
  193. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  194. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  195. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  196. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  197. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  198. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  199. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/page.js +5 -5
  201. package/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/recover/page.js +2 -2
  203. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  204. package/.next/server/app/recover.html +1 -1
  205. package/.next/server/app/recover.rsc +3 -3
  206. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  207. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  208. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  209. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  210. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +2 -2
  211. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  212. package/.next/server/app-paths-manifest.json +35 -35
  213. package/.next/server/chunks/1008.js +2 -2
  214. package/.next/server/chunks/1966.js +2 -0
  215. package/.next/server/chunks/319.js +3 -3
  216. package/.next/server/chunks/6429.js +2 -2
  217. package/.next/server/chunks/6775.js +7 -0
  218. package/.next/server/middleware-build-manifest.js +1 -1
  219. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  220. package/.next/server/middleware.js +9 -9
  221. package/.next/server/pages/404.html +1 -1
  222. package/.next/server/pages/500.html +1 -1
  223. package/.next/server/server-reference-manifest.json +1 -1
  224. package/.next/static/chunks/app/_not-found/page-041b64675adcdf82.js +1 -0
  225. package/.next/static/chunks/app/layout-3b1f8b74c7fc5e77.js +1 -0
  226. package/.next/static/chunks/app/{page-3640086c732eb87d.js → page-efae4fdcf84b7a14.js} +4 -4
  227. package/.next/static/chunks/app/recover/{page-c0c40b3c215078a4.js → page-2bcd6a351f3eda3d.js} +1 -1
  228. package/.next/static/chunks/{main-app-fbc4aa3c15d48613.js → main-app-ca46ab75db2b4e4b.js} +1 -1
  229. package/.next/static/chunks/main-dd4c9daba44bef88.js +5 -0
  230. package/.next/static/chunks/next/dist/client/components/builtin/global-error-dac2a58a3b9eb28e.js +1 -0
  231. package/.next/static/chunks/webpack-546c8221d1906945.js +1 -0
  232. package/.next/trace +107 -107
  233. package/.next/trace-build +1 -1
  234. package/.next/types/app/api/agent/[id]/account/route.ts +1 -1
  235. package/.next/types/app/api/agent/[id]/bash-output/route.ts +1 -1
  236. package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
  237. package/.next/types/app/api/agent/[id]/route.ts +1 -1
  238. package/.next/types/app/api/agent/new/route.ts +1 -1
  239. package/.next/types/app/api/agent/running/route.ts +1 -1
  240. package/.next/types/app/api/attachment-settings/route.ts +1 -1
  241. package/.next/types/app/api/attachments/[id]/transcription/route.ts +1 -1
  242. package/.next/types/app/api/attachments/draft/route.ts +1 -1
  243. package/.next/types/app/api/attachments/route.ts +1 -1
  244. package/.next/types/app/api/auth/all-providers/route.ts +1 -1
  245. package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
  246. package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
  247. package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
  248. package/.next/types/app/api/auth/providers/route.ts +1 -1
  249. package/.next/types/app/api/character-mode/route.ts +1 -1
  250. package/.next/types/app/api/cwd/browse/route.ts +1 -1
  251. package/.next/types/app/api/cwd/validate/route.ts +1 -1
  252. package/.next/types/app/api/default-cwd/route.ts +1 -1
  253. package/.next/types/app/api/display-settings/route.ts +1 -1
  254. package/.next/types/app/api/document-text/route.ts +1 -1
  255. package/.next/types/app/api/experiments/route.ts +1 -1
  256. package/.next/types/app/api/file-index/route.ts +1 -1
  257. package/.next/types/app/api/files/[...path]/route.ts +1 -1
  258. package/.next/types/app/api/git/diff/route.ts +1 -1
  259. package/.next/types/app/api/git/status/route.ts +1 -1
  260. package/.next/types/app/api/github/projects/route.ts +1 -1
  261. package/.next/types/app/api/gpt6/handles/route.ts +1 -1
  262. package/.next/types/app/api/gpt6/reply/route.ts +1 -1
  263. package/.next/types/app/api/gpt6/token/route.ts +1 -1
  264. package/.next/types/app/api/gpt6/web6-session/route.ts +1 -1
  265. package/.next/types/app/api/home/route.ts +1 -1
  266. package/.next/types/app/api/live/call/[callId]/route.ts +1 -1
  267. package/.next/types/app/api/live/events/route.ts +1 -1
  268. package/.next/types/app/api/live/interpret/route.ts +1 -1
  269. package/.next/types/app/api/live/offer/route.ts +1 -1
  270. package/.next/types/app/api/live/voices/route.ts +1 -1
  271. package/.next/types/app/api/mcp/route.ts +1 -1
  272. package/.next/types/app/api/model-roles/route.ts +1 -1
  273. package/.next/types/app/api/models/route.ts +1 -1
  274. package/.next/types/app/api/models-config/catalog/route.ts +1 -1
  275. package/.next/types/app/api/models-config/discover/route.ts +1 -1
  276. package/.next/types/app/api/models-config/route.ts +1 -1
  277. package/.next/types/app/api/models-config/test/route.ts +1 -1
  278. package/.next/types/app/api/office-characters/[...path]/route.ts +1 -1
  279. package/.next/types/app/api/plugins/route.ts +1 -1
  280. package/.next/types/app/api/project-docs/route.ts +1 -1
  281. package/.next/types/app/api/project-trust/route.ts +1 -1
  282. package/.next/types/app/api/projects/route.ts +1 -1
  283. package/.next/types/app/api/runs/[runId]/prelude/route.ts +1 -1
  284. package/.next/types/app/api/runs/[runId]/route.ts +1 -1
  285. package/.next/types/app/api/runs/[runId]/turns/route.ts +1 -1
  286. package/.next/types/app/api/runs/route.ts +1 -1
  287. package/.next/types/app/api/sessions/[id]/auto-name/route.ts +1 -1
  288. package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
  289. package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +1 -1
  290. package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
  291. package/.next/types/app/api/sessions/[id]/route.ts +1 -1
  292. package/.next/types/app/api/sessions/[id]/state/route.ts +1 -1
  293. package/.next/types/app/api/sessions/route.ts +1 -1
  294. package/.next/types/app/api/sessions/search/route.ts +1 -1
  295. package/.next/types/app/api/settings/route.ts +1 -1
  296. package/.next/types/app/api/sidecars/[service]/[...path]/route.ts +1 -1
  297. package/.next/types/app/api/skills/check/route.ts +1 -1
  298. package/.next/types/app/api/skills/install/route.ts +1 -1
  299. package/.next/types/app/api/skills/route.ts +1 -1
  300. package/.next/types/app/api/skills/search/route.ts +1 -1
  301. package/.next/types/app/api/skills/update/route.ts +1 -1
  302. package/.next/types/app/api/subagents/eta/route.ts +1 -1
  303. package/.next/types/app/api/theme/route.ts +1 -1
  304. package/.next/types/app/api/tool-image/route.ts +1 -1
  305. package/.next/types/app/api/update-maintenance/route.ts +1 -1
  306. package/.next/types/app/api/updates/route.ts +1 -1
  307. package/.next/types/app/api/web-access/recovery/route.ts +1 -1
  308. package/.next/types/app/api/web-access/route.ts +1 -1
  309. package/.next/types/app/api/web6/consults/route.ts +1 -1
  310. package/.next/types/app/api/worktrees/route.ts +1 -1
  311. package/.next/types/app/layout.ts +1 -1
  312. package/.next/types/app/page.ts +1 -1
  313. package/.next/types/app/recover/page.ts +1 -1
  314. package/LICENSE +22 -22
  315. package/README.md +273 -271
  316. package/Tools/CUELO_Setup/files/btw-server.js +346 -346
  317. package/Tools/CUELO_Setup/files/native-runtime-patch.js +238 -238
  318. package/Tools/CUELO_Setup/files/subagent-server.js +587 -587
  319. package/Tools/CUELO_Setup/files/usage-server.js +1057 -1057
  320. package/Tools/OMP_Global_Config/agent/AGENTS.md +144 -144
  321. package/Tools/OMP_Global_Config/agent/RULES.md +140 -140
  322. package/Tools/OMP_Global_Config/agent/TITLE_SYSTEM.md +17 -17
  323. package/Tools/OMP_Global_Config/agent/WATCHDOG.md +55 -55
  324. package/Tools/OMP_Global_Config/agent/agents/maker.md +413 -413
  325. package/Tools/OMP_Global_Config/agent/extensions/character-voice.ts +1035 -1035
  326. package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +1110 -1110
  327. package/Tools/OMP_Global_Config/agent/extensions/command-guard/interop-hint.ts +133 -133
  328. package/Tools/OMP_Global_Config/agent/extensions/command-guard/matcher.ts +2258 -2258
  329. package/Tools/OMP_Global_Config/agent/extensions/command-guard/powershell-syntax.ts +210 -210
  330. package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +1137 -1121
  331. package/Tools/OMP_Global_Config/agent/extensions/cross-review.ts +132 -132
  332. package/Tools/OMP_Global_Config/agent/extensions/docmap-route.ts +133 -133
  333. package/Tools/OMP_Global_Config/agent/extensions/draft/markdown.ts +226 -226
  334. package/Tools/OMP_Global_Config/agent/extensions/draft/ooxml.ts +222 -222
  335. package/Tools/OMP_Global_Config/agent/extensions/draft/pdf.ts +63 -63
  336. package/Tools/OMP_Global_Config/agent/extensions/draft/zip.ts +73 -73
  337. package/Tools/OMP_Global_Config/agent/extensions/draft.ts +204 -204
  338. package/Tools/OMP_Global_Config/agent/extensions/edit-lessons.ts +159 -159
  339. package/Tools/OMP_Global_Config/agent/extensions/external-advice-check.ts +36 -36
  340. package/Tools/OMP_Global_Config/agent/extensions/gitnexus-autosync.ts +406 -406
  341. package/Tools/OMP_Global_Config/agent/extensions/image-question-router.ts +55 -55
  342. package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +2700 -2700
  343. package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +190 -190
  344. package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +1208 -1208
  345. package/Tools/OMP_Global_Config/agent/extensions/lib/docmap-search.ts +612 -612
  346. package/Tools/OMP_Global_Config/agent/extensions/lib/job-observation.ts +182 -182
  347. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +1332 -1332
  348. package/Tools/OMP_Global_Config/agent/extensions/lib/mcp-selection.ts +361 -361
  349. package/Tools/OMP_Global_Config/agent/extensions/lib/memory-excerpt.ts +5 -5
  350. package/Tools/OMP_Global_Config/agent/extensions/lib/native-judge.ts +113 -113
  351. package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +211 -211
  352. package/Tools/OMP_Global_Config/agent/extensions/lib/routing-ledger.ts +538 -538
  353. package/Tools/OMP_Global_Config/agent/extensions/lib/session-identity.ts +34 -34
  354. package/Tools/OMP_Global_Config/agent/extensions/lib/task-progress.ts +492 -492
  355. package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +301 -301
  356. package/Tools/OMP_Global_Config/agent/extensions/prompt-compact.ts +67 -67
  357. package/Tools/OMP_Global_Config/agent/extensions/report-chart-guard.ts +102 -102
  358. package/Tools/OMP_Global_Config/agent/extensions/skim.ts +332 -332
  359. package/Tools/OMP_Global_Config/agent/extensions/steering-reply-gate.ts +207 -207
  360. package/Tools/OMP_Global_Config/agent/extensions/todo-nudge.ts +80 -80
  361. package/Tools/OMP_Global_Config/agent/extensions/turn-end-guard.ts +421 -421
  362. package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +147 -147
  363. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +49 -49
  364. package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +39 -39
  365. package/Tools/OMP_Global_Config/agent/rules/frontend.md +74 -74
  366. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1224 -1224
  367. package/Tools/OMP_Global_Config/agent/rules/legacy-encoding.md +21 -21
  368. package/Tools/OMP_Global_Config/agent/rules/meta-harness.md +45 -45
  369. package/Tools/OMP_Global_Config/agent/rules/omp-harness.md +151 -151
  370. package/Tools/OMP_Global_Config/agent/rules/subagent.md +750 -750
  371. package/Tools/OMP_Global_Config/agent/rules/task-guard.md +62 -62
  372. package/Tools/OMP_Global_Config/agent/rules/verdict.md +210 -210
  373. package/Tools/OMP_Global_Config/agent/rules/web6-consult.md +83 -83
  374. package/Tools/OMP_Global_Config/agent/sop/_common.md +136 -136
  375. package/Tools/OMP_Global_Config/agent/sop/_writer.md +259 -259
  376. package/Tools/OMP_Global_Config/agent/sop/maker.md +9 -9
  377. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/finalizer.ps1 +409 -409
  378. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +303 -303
  379. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/sync-checkout.ts +184 -184
  380. package/Tools/OMP_Global_Config/agent/tools/git-finalizer/wsl-git.ts +96 -96
  381. package/Tools/OMP_Global_Config/agent/tools/windows-build/index.ts +387 -387
  382. package/Tools/OMP_Global_Config/agent/tools/windows-control/control.ps1 +200 -200
  383. package/Tools/OMP_Global_Config/agent/tools/windows-control/index.ts +255 -255
  384. package/Tools/OMP_Global_Config/notices/orchestrate.md +26 -26
  385. package/Tools/OMP_Global_Config/notices/ultrathink.md +9 -9
  386. package/Tools/OMP_Global_Config/notices/workflow.md +16 -16
  387. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +18339 -18304
  388. package/Tools/OMP_Global_Config/patches/apply-notices.mjs +135 -135
  389. package/bin/cuelo-options.js +38 -38
  390. package/bin/cuelo.js +273 -273
  391. package/bin/docker-entrypoint.mjs +19 -19
  392. package/bin/password-prompt.js +100 -100
  393. package/bin/prepare-runtime.js +112 -112
  394. package/bin/runtime.js +134 -134
  395. package/bin/web-auth-store.d.ts +104 -104
  396. package/bin/web-auth-store.js +593 -593
  397. package/install.mjs +427 -427
  398. package/next.config.ts +104 -104
  399. package/package.json +141 -141
  400. package/public/audio/completion/voices.json +1393 -1393
  401. package/public/fonts/cuelo-display/NOTICE.txt +15 -15
  402. package/public/fonts/fonts.css +288 -288
  403. package/public/fonts/jetbrains-mono/OFL.txt +93 -93
  404. package/public/fonts/wanted-sans/OFL.txt +93 -93
  405. package/public/icons/catppuccin/LICENSE +22 -22
  406. package/public/icons/catppuccin/README.md +8 -8
  407. package/public/icons/catppuccin/latte/_file.svg +3 -3
  408. package/public/icons/catppuccin/latte/_folder.svg +3 -3
  409. package/public/icons/catppuccin/latte/_folder_open.svg +3 -3
  410. package/public/icons/catppuccin/latte/bash.svg +7 -7
  411. package/public/icons/catppuccin/latte/bun-lock.svg +8 -8
  412. package/public/icons/catppuccin/latte/config.svg +3 -3
  413. package/public/icons/catppuccin/latte/css.svg +6 -6
  414. package/public/icons/catppuccin/latte/database.svg +3 -3
  415. package/public/icons/catppuccin/latte/docker.svg +3 -3
  416. package/public/icons/catppuccin/latte/env.svg +3 -3
  417. package/public/icons/catppuccin/latte/eslint.svg +6 -6
  418. package/public/icons/catppuccin/latte/git.svg +6 -6
  419. package/public/icons/catppuccin/latte/go.svg +3 -3
  420. package/public/icons/catppuccin/latte/graphql.svg +3 -3
  421. package/public/icons/catppuccin/latte/html.svg +6 -6
  422. package/public/icons/catppuccin/latte/javascript-react.svg +8 -8
  423. package/public/icons/catppuccin/latte/javascript.svg +6 -6
  424. package/public/icons/catppuccin/latte/json.svg +3 -3
  425. package/public/icons/catppuccin/latte/lock.svg +3 -3
  426. package/public/icons/catppuccin/latte/markdown.svg +3 -3
  427. package/public/icons/catppuccin/latte/ms-word.svg +6 -6
  428. package/public/icons/catppuccin/latte/next.svg +6 -6
  429. package/public/icons/catppuccin/latte/npm-lock.svg +7 -7
  430. package/public/icons/catppuccin/latte/pdf.svg +3 -3
  431. package/public/icons/catppuccin/latte/python.svg +8 -8
  432. package/public/icons/catppuccin/latte/rust.svg +6 -6
  433. package/public/icons/catppuccin/latte/sass.svg +3 -3
  434. package/public/icons/catppuccin/latte/terraform.svg +3 -3
  435. package/public/icons/catppuccin/latte/toml.svg +3 -3
  436. package/public/icons/catppuccin/latte/typescript-react.svg +8 -8
  437. package/public/icons/catppuccin/latte/typescript.svg +6 -6
  438. package/public/icons/catppuccin/latte/yaml.svg +3 -3
  439. package/public/icons/catppuccin/mocha/_file.svg +3 -3
  440. package/public/icons/catppuccin/mocha/_folder.svg +3 -3
  441. package/public/icons/catppuccin/mocha/_folder_open.svg +3 -3
  442. package/public/icons/catppuccin/mocha/bash.svg +7 -7
  443. package/public/icons/catppuccin/mocha/bun-lock.svg +8 -8
  444. package/public/icons/catppuccin/mocha/config.svg +3 -3
  445. package/public/icons/catppuccin/mocha/css.svg +6 -6
  446. package/public/icons/catppuccin/mocha/database.svg +3 -3
  447. package/public/icons/catppuccin/mocha/docker.svg +3 -3
  448. package/public/icons/catppuccin/mocha/env.svg +3 -3
  449. package/public/icons/catppuccin/mocha/eslint.svg +6 -6
  450. package/public/icons/catppuccin/mocha/git.svg +6 -6
  451. package/public/icons/catppuccin/mocha/go.svg +3 -3
  452. package/public/icons/catppuccin/mocha/graphql.svg +3 -3
  453. package/public/icons/catppuccin/mocha/html.svg +6 -6
  454. package/public/icons/catppuccin/mocha/javascript-react.svg +8 -8
  455. package/public/icons/catppuccin/mocha/javascript.svg +6 -6
  456. package/public/icons/catppuccin/mocha/json.svg +3 -3
  457. package/public/icons/catppuccin/mocha/lock.svg +3 -3
  458. package/public/icons/catppuccin/mocha/markdown.svg +3 -3
  459. package/public/icons/catppuccin/mocha/ms-word.svg +6 -6
  460. package/public/icons/catppuccin/mocha/next.svg +6 -6
  461. package/public/icons/catppuccin/mocha/npm-lock.svg +7 -7
  462. package/public/icons/catppuccin/mocha/pdf.svg +3 -3
  463. package/public/icons/catppuccin/mocha/python.svg +8 -8
  464. package/public/icons/catppuccin/mocha/rust.svg +6 -6
  465. package/public/icons/catppuccin/mocha/sass.svg +3 -3
  466. package/public/icons/catppuccin/mocha/terraform.svg +3 -3
  467. package/public/icons/catppuccin/mocha/toml.svg +3 -3
  468. package/public/icons/catppuccin/mocha/typescript-react.svg +8 -8
  469. package/public/icons/catppuccin/mocha/typescript.svg +6 -6
  470. package/public/icons/catppuccin/mocha/yaml.svg +3 -3
  471. package/public/icons/cuelo-icon.svg +8 -8
  472. package/public/offline.html +145 -145
  473. package/public/sw.js +135 -135
  474. package/.next/server/chunks/205.js +0 -7
  475. package/.next/server/chunks/7738.js +0 -1
  476. package/.next/static/chunks/1966.b8f83f7ba376c962.js +0 -1
  477. package/.next/static/chunks/3899.3f761f7e3a944e8c.js +0 -1
  478. package/.next/static/chunks/app/_not-found/page-9e5295df095e2e41.js +0 -1
  479. package/.next/static/chunks/app/layout-8b29ba206a96135e.js +0 -1
  480. package/.next/static/chunks/main-1ddb405481ce21f6.js +0 -5
  481. package/.next/static/chunks/next/dist/client/components/builtin/global-error-50782c8c9c06c8b5.js +0 -1
  482. package/.next/static/chunks/webpack-7b514b9855bd748c.js +0 -1
  483. /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_buildManifest.js +0 -0
  484. /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_ssgManifest.js +0 -0
@@ -1,67 +1,67 @@
1
- // 규칙 원문(AGENTS.md·RULES.md)은 한국어 정본으로 두고, 모델에 싣는 사본만 영어 압축본(prompt-copies/)으로 바꾼다.
2
- // Opus 토크나이저에서 한국어 규칙은 약 1.2자/토큰, 영어는 약 4자/토큰이라 같은 규칙이 요청마다 3배 가까이 든다.
3
- // 사본 첫 줄의 source 지문이 현재 원문과 다르면(원문만 고치고 사본을 갱신하지 않음) 그 원문은 그대로 싣는다.
4
- import { readFileSync } from "node:fs";
5
- import { join } from "node:path";
6
-
7
- import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
8
-
9
- const AGENT_DIR = join(import.meta.dir, "..");
10
- const HEADER = /^<!-- source-fingerprint: ([0-9a-f]+) -->\r?\n/;
11
-
12
- /** 원문 지문. 줄바꿈 차이와 앞뒤 공백은 무시한다. 사본 갱신 시 이 값을 사본 첫 줄에 적는다. */
13
- export function sourceFingerprint(text: string): string {
14
- return Bun.hash(text.replace(/\r\n/g, "\n").trim()).toString(16);
15
- }
16
-
17
- /** 사본이 현재 원문에서 만든 것이면 본문을, 아니면 undefined를 돌려준다. */
18
- export function freshCopy(source: string, copy: string): string | undefined {
19
- const header = HEADER.exec(copy);
20
- if (!header || header[1] !== sourceFingerprint(source)) return undefined;
21
- return copy.slice(header[0].length).trim();
22
- }
23
-
24
- /** block 안에서 open 태그 뒤부터 close 태그 앞까지를 body로 바꾼다. 태그가 없으면 block을 그대로 돌려준다. */
25
- export function replaceBetween(block: string, open: string, close: string, body: string): string {
26
- const start = block.indexOf(open);
27
- if (start < 0) return block;
28
- const from = start + open.length;
29
- const end = block.indexOf(close, from);
30
- if (end < 0) return block;
31
- return `${block.slice(0, from)}\n${body}\n${block.slice(end)}`;
32
- }
33
-
34
- export interface CompactTarget {
35
- source: string;
36
- copy: string;
37
- open: string;
38
- close: string;
39
- }
40
-
41
- export const TARGETS: readonly CompactTarget[] = [
42
- // 코어는 전역 AGENTS.md를 <file path="…"> 안에 싣고 표 공백을 다듬는다. 경로 태그로 찾아 본문만 바꾼다.
43
- { source: "AGENTS.md", copy: "prompt-copies/AGENTS.en.md", open: `<file path="${join(AGENT_DIR, "AGENTS.md")}">`, close: "</file>" },
44
- { source: "RULES.md", copy: "prompt-copies/RULES.en.md", open: "<generic-rules>", close: "</generic-rules>" },
45
- ];
46
-
47
- export function loadSwaps(agentDir: string, targets: readonly CompactTarget[]): Array<CompactTarget & { body: string }> {
48
- return targets.flatMap((target) => {
49
- try {
50
- const body = freshCopy(readFileSync(join(agentDir, target.source), "utf8"), readFileSync(join(agentDir, target.copy), "utf8"));
51
- return body ? [{ ...target, body }] : [];
52
- } catch {
53
- return [];
54
- }
55
- });
56
- }
57
-
58
- export default function promptCompact(pi: ExtensionAPI): void {
59
- // 코어도 AGENTS.md·RULES.md를 시작할 때 한 번 읽으므로 사본도 같은 시점에 한 번만 읽는다.
60
- const swaps = loadSwaps(AGENT_DIR, TARGETS);
61
- if (swaps.length === 0) return;
62
- pi.on("before_agent_start", (event) => ({
63
- systemPrompt: event.systemPrompt.map((block) =>
64
- swaps.reduce((current, swap) => replaceBetween(current, swap.open, swap.close, swap.body), block),
65
- ),
66
- }));
67
- }
1
+ // 규칙 원문(AGENTS.md·RULES.md)은 한국어 정본으로 두고, 모델에 싣는 사본만 영어 압축본(prompt-copies/)으로 바꾼다.
2
+ // Opus 토크나이저에서 한국어 규칙은 약 1.2자/토큰, 영어는 약 4자/토큰이라 같은 규칙이 요청마다 3배 가까이 든다.
3
+ // 사본 첫 줄의 source 지문이 현재 원문과 다르면(원문만 고치고 사본을 갱신하지 않음) 그 원문은 그대로 싣는다.
4
+ import { readFileSync } from "node:fs";
5
+ import { join } from "node:path";
6
+
7
+ import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
8
+
9
+ const AGENT_DIR = join(import.meta.dir, "..");
10
+ const HEADER = /^<!-- source-fingerprint: ([0-9a-f]+) -->\r?\n/;
11
+
12
+ /** 원문 지문. 줄바꿈 차이와 앞뒤 공백은 무시한다. 사본 갱신 시 이 값을 사본 첫 줄에 적는다. */
13
+ export function sourceFingerprint(text: string): string {
14
+ return Bun.hash(text.replace(/\r\n/g, "\n").trim()).toString(16);
15
+ }
16
+
17
+ /** 사본이 현재 원문에서 만든 것이면 본문을, 아니면 undefined를 돌려준다. */
18
+ export function freshCopy(source: string, copy: string): string | undefined {
19
+ const header = HEADER.exec(copy);
20
+ if (!header || header[1] !== sourceFingerprint(source)) return undefined;
21
+ return copy.slice(header[0].length).trim();
22
+ }
23
+
24
+ /** block 안에서 open 태그 뒤부터 close 태그 앞까지를 body로 바꾼다. 태그가 없으면 block을 그대로 돌려준다. */
25
+ export function replaceBetween(block: string, open: string, close: string, body: string): string {
26
+ const start = block.indexOf(open);
27
+ if (start < 0) return block;
28
+ const from = start + open.length;
29
+ const end = block.indexOf(close, from);
30
+ if (end < 0) return block;
31
+ return `${block.slice(0, from)}\n${body}\n${block.slice(end)}`;
32
+ }
33
+
34
+ export interface CompactTarget {
35
+ source: string;
36
+ copy: string;
37
+ open: string;
38
+ close: string;
39
+ }
40
+
41
+ export const TARGETS: readonly CompactTarget[] = [
42
+ // 코어는 전역 AGENTS.md를 <file path="…"> 안에 싣고 표 공백을 다듬는다. 경로 태그로 찾아 본문만 바꾼다.
43
+ { source: "AGENTS.md", copy: "prompt-copies/AGENTS.en.md", open: `<file path="${join(AGENT_DIR, "AGENTS.md")}">`, close: "</file>" },
44
+ { source: "RULES.md", copy: "prompt-copies/RULES.en.md", open: "<generic-rules>", close: "</generic-rules>" },
45
+ ];
46
+
47
+ export function loadSwaps(agentDir: string, targets: readonly CompactTarget[]): Array<CompactTarget & { body: string }> {
48
+ return targets.flatMap((target) => {
49
+ try {
50
+ const body = freshCopy(readFileSync(join(agentDir, target.source), "utf8"), readFileSync(join(agentDir, target.copy), "utf8"));
51
+ return body ? [{ ...target, body }] : [];
52
+ } catch {
53
+ return [];
54
+ }
55
+ });
56
+ }
57
+
58
+ export default function promptCompact(pi: ExtensionAPI): void {
59
+ // 코어도 AGENTS.md·RULES.md를 시작할 때 한 번 읽으므로 사본도 같은 시점에 한 번만 읽는다.
60
+ const swaps = loadSwaps(AGENT_DIR, TARGETS);
61
+ if (swaps.length === 0) return;
62
+ pi.on("before_agent_start", (event) => ({
63
+ systemPrompt: event.systemPrompt.map((block) =>
64
+ swaps.reduce((current, swap) => replaceBetween(current, swap.open, swap.close, swap.body), block),
65
+ ),
66
+ }));
67
+ }
@@ -1,102 +1,102 @@
1
- import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
2
- import { onSessionLifecycle } from "./lib/session-identity";
3
-
4
- /**
5
- * 보고 차트 누락 알림. 2026-10-19 사용자 결정(전역 `AGENTS.md` 「사용자 보고」): 기록 수치의 비교·추이·분해에 값이
6
- * 셋 이상이면 Mermaid 차트 하나를 붙인다. 같은 날 Main이 조각 세 개의 실행 시간(20.8분·34.6분·42.0분)을 `ask` 바로 앞
7
- * 한 문장에 적고 차트를 빠뜨렸다. 규칙은 문맥에 있었으므로 문구만 고쳐서는 재발을 막지 못한다고 보고, 본문에서 같은 종류의
8
- * 수치 셋 이상을 결정론적으로 찾아 한 번 일깨운다. 차트를 그릴지는 모델이 수치의 출처·비교 여부로 정한다(알림은 차단이 아니다).
9
- */
10
-
11
- export const REMINDER_TYPE = "report-chart-guard";
12
- export const MIN_VALUES = 3;
13
-
14
- type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string };
15
-
16
- // 단위를 같은 종류로 묶는다. 시간끼리, 크기끼리는 단위가 달라도 같은 축에 놓일 수 있다.
17
- // 셈 단위(건·회)는 서로 다른 것을 세는 일이 많아 따로 묶는다(2026-10-19 재생: "1건, 11회, 2건" 같은 나열 오탐).
18
- const UNIT_KIND: Readonly<Record<string, string>> = {
19
- ms: "time", s: "time", "초": "time", "분": "time", "시간": "time",
20
- "%": "percent", "배": "ratio", "건": "count-건", "회": "count-회",
21
- KB: "size", MB: "size", GB: "size", KiB: "size", MiB: "size", GiB: "size",
22
- };
23
- // 버전(0.10.38)·시각(04:48)·날짜(10-19)·경로 조각 안의 숫자는 수치로 보지 않는다(앞뒤 문자 경계).
24
- // 단위 바로 뒤에 다른 낱말이 붙으면(배포·분석·회의·초기·건너…) 단위가 아니다.
25
- const QUANTITY =
26
- /(?<![\d.:/\-A-Za-z_])(\d+(?:\.\d+)?)\s?(ms|s|초|분|시간|%|배|건|회|KiB|MiB|GiB|KB|MB|GB)(?![A-Za-z\d])(?!(?:포|치|열|석|류|기|화|의|수|복|너|당|위|면|산|간|리|야|장|별)[가-힣])/g;
27
-
28
- function textOf(content: unknown): string {
29
- if (typeof content === "string") return content;
30
- if (!Array.isArray(content)) return "";
31
- return content
32
- .filter((block): block is { type: string; text: string } => block?.type === "text" && typeof block.text === "string")
33
- .map((block) => block.text)
34
- .join("\n");
35
- }
36
-
37
- /** 값이 셋 이상인 같은 종류의 수치 묶음. 없으면 null. Mermaid 블록이 이미 있으면 판정하지 않는다. */
38
- export function chartCandidate(text: string): { kind: string; values: string[] } | null {
39
- if (/```\s*mermaid\b/i.test(text)) return null;
40
- const groups = new Map<string, string[]>();
41
- // 코드 블록·인라인 코드 안의 수치(명령·로그)는 보고 수치로 세지 않는다.
42
- const prose = text.replace(/```[\s\S]*?(?:```|$)/g, "\n").replace(/`[^`\n]*`/g, " ");
43
- for (const match of prose.matchAll(QUANTITY)) {
44
- const kind = UNIT_KIND[match[2]!];
45
- if (!kind) continue;
46
- const value = `${match[1]}${match[2]}`;
47
- const list = groups.get(kind) ?? [];
48
- if (!list.includes(value)) list.push(value);
49
- groups.set(kind, list);
50
- }
51
- let best: { kind: string; values: string[] } | null = null;
52
- for (const [kind, values] of groups) {
53
- if (values.length >= MIN_VALUES && (!best || values.length > best.values.length)) best = { kind, values };
54
- }
55
- return best;
56
- }
57
-
58
- export function reminderText(candidate: { values: string[] }): string {
59
- const shown = candidate.values.slice(0, 6).join(", ");
60
- return `직전 사용자 표시 문장에 같은 종류의 수치가 ${candidate.values.length}개 있었다(${shown}). 그런데 Mermaid 차트가 없었다. `
61
- + "이 값들이 도구 출력·실행 기록·측정 산출물에서 온 비교·추이·분해라면, 바로 다음 응답에 출처와 함께 차트 하나(`xychart-beta` 막대, `gantt` 시간선 등)를 붙인다. "
62
- + "`ask` 질문 앞 근거 문장, 진행 중 중간 보고도 보고다. 비교가 아니거나(서로 무관한 값의 나열) 추정치라면 차트를 그리지 않는다. 그때 답이 이미 끝났다면 아무 문장도 덧붙이지 말고 끝내고, 어느 경우든 이 알림을 사용자에게 언급하지 않는다.";
63
- }
64
-
65
- export default function reportChartGuard(pi: ExtensionAPI): void {
66
- let reminded = false;
67
- // 같은 응답의 `ask` 호출을 막을 때 쓰는 알림. 수치를 보여 주고 바로 결정을 묻는 경우는 차트 없이 결정하게 두지 않는다.
68
- let askHold: string | undefined;
69
- const reset = () => { reminded = false; askHold = undefined; };
70
- onSessionLifecycle(pi, { start: reset });
71
- pi.on("session_shutdown", reset);
72
- // 사용자 직접 입력 하나에 한 번만 알린다. 알림이 만든 이어 가기 응답이 다시 차트 없이 끝나도 반복하지 않는다.
73
- pi.on("message_start", (event) => {
74
- const message = event.message as Message;
75
- if (message.role === "user" && message.synthetic !== true && message.attribution !== "agent") reset();
76
- });
77
- pi.on("message_end", (event, ctx) => {
78
- const message = event.message as Message;
79
- if (reminded || message.role !== "assistant" || ctx.agent.kind !== "main") return;
80
- const candidate = chartCandidate(textOf(message.content));
81
- if (!candidate) return;
82
- reminded = true;
83
- const calls = Array.isArray(message.content)
84
- ? message.content.filter((block): block is { type: string; name?: string } => block?.type === "toolCall")
85
- : [];
86
- if (calls.some((call) => call.name === "ask")) {
87
- askHold = `[report-chart-guard] 질문을 보내지 않았다. ${reminderText(candidate)} 차트가 필요하면 차트를 붙인 응답에서 같은 질문을 다시 보낸다. 필요 없으면 같은 질문을 그대로 다시 보낸다.`;
88
- return;
89
- }
90
- // 도구를 부르는 중이면 다음 단계 경계에서, 답이 끝났으면 바로 이어 가는 내부 continuation으로 전달한다.
91
- pi.sendMessage(
92
- { customType: REMINDER_TYPE, content: reminderText(candidate), display: false, attribution: "agent" },
93
- calls.length > 0 ? { deliverAs: "aside" } : { deliverAs: "nextTurn", triggerTurn: true },
94
- );
95
- });
96
- pi.on("tool_call", (event) => {
97
- if (event.toolName !== "ask" || askHold === undefined) return;
98
- const reason = askHold;
99
- askHold = undefined;
100
- return { block: true, reason };
101
- });
102
- }
1
+ import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
2
+ import { onSessionLifecycle } from "./lib/session-identity";
3
+
4
+ /**
5
+ * 보고 차트 누락 알림. 2026-10-19 사용자 결정(전역 `AGENTS.md` 「사용자 보고」): 기록 수치의 비교·추이·분해에 값이
6
+ * 셋 이상이면 Mermaid 차트 하나를 붙인다. 같은 날 Main이 조각 세 개의 실행 시간(20.8분·34.6분·42.0분)을 `ask` 바로 앞
7
+ * 한 문장에 적고 차트를 빠뜨렸다. 규칙은 문맥에 있었으므로 문구만 고쳐서는 재발을 막지 못한다고 보고, 본문에서 같은 종류의
8
+ * 수치 셋 이상을 결정론적으로 찾아 한 번 일깨운다. 차트를 그릴지는 모델이 수치의 출처·비교 여부로 정한다(알림은 차단이 아니다).
9
+ */
10
+
11
+ export const REMINDER_TYPE = "report-chart-guard";
12
+ export const MIN_VALUES = 3;
13
+
14
+ type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string };
15
+
16
+ // 단위를 같은 종류로 묶는다. 시간끼리, 크기끼리는 단위가 달라도 같은 축에 놓일 수 있다.
17
+ // 셈 단위(건·회)는 서로 다른 것을 세는 일이 많아 따로 묶는다(2026-10-19 재생: "1건, 11회, 2건" 같은 나열 오탐).
18
+ const UNIT_KIND: Readonly<Record<string, string>> = {
19
+ ms: "time", s: "time", "초": "time", "분": "time", "시간": "time",
20
+ "%": "percent", "배": "ratio", "건": "count-건", "회": "count-회",
21
+ KB: "size", MB: "size", GB: "size", KiB: "size", MiB: "size", GiB: "size",
22
+ };
23
+ // 버전(0.10.38)·시각(04:48)·날짜(10-19)·경로 조각 안의 숫자는 수치로 보지 않는다(앞뒤 문자 경계).
24
+ // 단위 바로 뒤에 다른 낱말이 붙으면(배포·분석·회의·초기·건너…) 단위가 아니다.
25
+ const QUANTITY =
26
+ /(?<![\d.:/\-A-Za-z_])(\d+(?:\.\d+)?)\s?(ms|s|초|분|시간|%|배|건|회|KiB|MiB|GiB|KB|MB|GB)(?![A-Za-z\d])(?!(?:포|치|열|석|류|기|화|의|수|복|너|당|위|면|산|간|리|야|장|별)[가-힣])/g;
27
+
28
+ function textOf(content: unknown): string {
29
+ if (typeof content === "string") return content;
30
+ if (!Array.isArray(content)) return "";
31
+ return content
32
+ .filter((block): block is { type: string; text: string } => block?.type === "text" && typeof block.text === "string")
33
+ .map((block) => block.text)
34
+ .join("\n");
35
+ }
36
+
37
+ /** 값이 셋 이상인 같은 종류의 수치 묶음. 없으면 null. Mermaid 블록이 이미 있으면 판정하지 않는다. */
38
+ export function chartCandidate(text: string): { kind: string; values: string[] } | null {
39
+ if (/```\s*mermaid\b/i.test(text)) return null;
40
+ const groups = new Map<string, string[]>();
41
+ // 코드 블록·인라인 코드 안의 수치(명령·로그)는 보고 수치로 세지 않는다.
42
+ const prose = text.replace(/```[\s\S]*?(?:```|$)/g, "\n").replace(/`[^`\n]*`/g, " ");
43
+ for (const match of prose.matchAll(QUANTITY)) {
44
+ const kind = UNIT_KIND[match[2]!];
45
+ if (!kind) continue;
46
+ const value = `${match[1]}${match[2]}`;
47
+ const list = groups.get(kind) ?? [];
48
+ if (!list.includes(value)) list.push(value);
49
+ groups.set(kind, list);
50
+ }
51
+ let best: { kind: string; values: string[] } | null = null;
52
+ for (const [kind, values] of groups) {
53
+ if (values.length >= MIN_VALUES && (!best || values.length > best.values.length)) best = { kind, values };
54
+ }
55
+ return best;
56
+ }
57
+
58
+ export function reminderText(candidate: { values: string[] }): string {
59
+ const shown = candidate.values.slice(0, 6).join(", ");
60
+ return `직전 사용자 표시 문장에 같은 종류의 수치가 ${candidate.values.length}개 있었다(${shown}). 그런데 Mermaid 차트가 없었다. `
61
+ + "이 값들이 도구 출력·실행 기록·측정 산출물에서 온 비교·추이·분해라면, 바로 다음 응답에 출처와 함께 차트 하나(`xychart-beta` 막대, `gantt` 시간선 등)를 붙인다. "
62
+ + "`ask` 질문 앞 근거 문장, 진행 중 중간 보고도 보고다. 비교가 아니거나(서로 무관한 값의 나열) 추정치라면 차트를 그리지 않는다. 그때 답이 이미 끝났다면 아무 문장도 덧붙이지 말고 끝내고, 어느 경우든 이 알림을 사용자에게 언급하지 않는다.";
63
+ }
64
+
65
+ export default function reportChartGuard(pi: ExtensionAPI): void {
66
+ let reminded = false;
67
+ // 같은 응답의 `ask` 호출을 막을 때 쓰는 알림. 수치를 보여 주고 바로 결정을 묻는 경우는 차트 없이 결정하게 두지 않는다.
68
+ let askHold: string | undefined;
69
+ const reset = () => { reminded = false; askHold = undefined; };
70
+ onSessionLifecycle(pi, { start: reset });
71
+ pi.on("session_shutdown", reset);
72
+ // 사용자 직접 입력 하나에 한 번만 알린다. 알림이 만든 이어 가기 응답이 다시 차트 없이 끝나도 반복하지 않는다.
73
+ pi.on("message_start", (event) => {
74
+ const message = event.message as Message;
75
+ if (message.role === "user" && message.synthetic !== true && message.attribution !== "agent") reset();
76
+ });
77
+ pi.on("message_end", (event, ctx) => {
78
+ const message = event.message as Message;
79
+ if (reminded || message.role !== "assistant" || ctx.agent.kind !== "main") return;
80
+ const candidate = chartCandidate(textOf(message.content));
81
+ if (!candidate) return;
82
+ reminded = true;
83
+ const calls = Array.isArray(message.content)
84
+ ? message.content.filter((block): block is { type: string; name?: string } => block?.type === "toolCall")
85
+ : [];
86
+ if (calls.some((call) => call.name === "ask")) {
87
+ askHold = `[report-chart-guard] 질문을 보내지 않았다. ${reminderText(candidate)} 차트가 필요하면 차트를 붙인 응답에서 같은 질문을 다시 보낸다. 필요 없으면 같은 질문을 그대로 다시 보낸다.`;
88
+ return;
89
+ }
90
+ // 도구를 부르는 중이면 다음 단계 경계에서, 답이 끝났으면 바로 이어 가는 내부 continuation으로 전달한다.
91
+ pi.sendMessage(
92
+ { customType: REMINDER_TYPE, content: reminderText(candidate), display: false, attribution: "agent" },
93
+ calls.length > 0 ? { deliverAs: "aside" } : { deliverAs: "nextTurn", triggerTurn: true },
94
+ );
95
+ });
96
+ pi.on("tool_call", (event) => {
97
+ if (event.toolName !== "ask" || askHold === undefined) return;
98
+ const reason = askHold;
99
+ askHold = undefined;
100
+ return { block: true, reason };
101
+ });
102
+ }