cuelo 0.10.21 → 0.10.22

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 (80) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/server/app/api/updates/route.js +1 -1
  26. package/.next/server/app/index.html +1 -1
  27. package/.next/server/app/index.rsc +4 -4
  28. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  29. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  30. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  31. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  33. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/office-preview.html +1 -1
  36. package/.next/server/app/office-preview.rsc +2 -2
  37. package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
  38. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  39. package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
  40. package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
  41. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  42. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  43. package/.next/server/app/office.html +1 -1
  44. package/.next/server/app/office.rsc +4 -4
  45. package/.next/server/app/office.segments/_full.segment.rsc +4 -4
  46. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  47. package/.next/server/app/office.segments/_index.segment.rsc +2 -2
  48. package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
  49. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
  50. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  51. package/.next/server/app/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/recover.html +1 -1
  54. package/.next/server/app/recover.rsc +2 -2
  55. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  56. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  57. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  58. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  59. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  60. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  61. package/.next/server/app-paths-manifest.json +4 -4
  62. package/.next/server/chunks/5489.js +2 -2
  63. package/.next/server/middleware-build-manifest.js +1 -1
  64. package/.next/server/pages/404.html +1 -1
  65. package/.next/server/pages/500.html +1 -1
  66. package/.next/server/server-reference-manifest.json +1 -1
  67. package/.next/static/chunks/{9575-032510d25828764f.js → 9575-9b108bc443510ebc.js} +2 -2
  68. package/.next/static/chunks/app/{layout-a7fca69a4fa9b2c2.js → layout-cdb057e5a5cc0f50.js} +1 -1
  69. package/.next/trace +108 -108
  70. package/.next/trace-build +1 -1
  71. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  72. package/Tools/OMP_Global_Config/agent/extensions/docmap-route.ts +124 -26
  73. package/Tools/OMP_Global_Config/agent/extensions/lib/docmap-search.ts +38 -2
  74. package/Tools/OMP_Global_Config/agent/extensions/lib/native-judge.ts +82 -0
  75. package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +11 -78
  76. package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +1 -1
  77. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +117 -198
  78. package/package.json +1 -1
  79. /package/.next/static/{IKi2VjUzAnD5AUcDn7QNi → WFIfYmiOdtHjqFYh2crxO}/_buildManifest.js +0 -0
  80. /package/.next/static/{IKi2VjUzAnD5AUcDn7QNi → WFIfYmiOdtHjqFYh2crxO}/_ssgManifest.js +0 -0
@@ -5873,56 +5873,42 @@ import { $env, $envExact, getAgentDir, logger } from "@oh-my-pi/pi-utils";
5873
5873
  }
5874
5874
  if (accountPolicyDenial && currentModel) {`,
5875
5875
  },
5876
+ // 2026-10-17 RETIRE(사용자 결정: Vercel 판정 모드 제거): `providers.judgmentProvider: vercel` 고정 모드를 받치던 CUELO 전용 항목 전부를
5877
+ // no-op 후보로 둔다(이 세 항목 + 아래 judgment/index.ts·model-settings.ts·settings.ts 항목). 이미 그 패치를 실은 설치(18.11.3 라이브)를
5878
+ // --apply·--revert 가 upstream 줄로 되돌리도록 옛 적용본을 legacyPatched 로 둔다. 후보는 라이브에 배포된 18.11.3 판 하나뿐이다
5879
+ // (이전 판의 Vercel 후보·alternates 는 같은 판의 순정·적용본을 다루던 것이라 함께 지웠다). 회귀 시험은 core-jev-judgment-test.ts 가 맡는다.
5876
5880
  {
5877
- // 18.4.2 재앵커: import 블록 전체를 앵커로 쓰면 버전마다 upstream 이 한두 이름을 더해(18.3.0 `tokenUsage`,
5878
- // 18.4.2 `Answer`) 매번 깨지고, 적용 결과가 버전 사이에 같아져 alternates 로는 ambiguous 가 된다.
5879
- // 두 버전에 공통인 이웃 줄에 Vercel adapter 가 쓰는 두 이름만 넣는다. `Answer` 는 adapter 본문에서
5880
- // `import("@oh-my-pi/pi-ai").Answer` 로 직접 참조해 import 가 필요 없다.
5881
- // 옛 전체 블록 patched 가 적용된 라이브(18.3.5)에서도 두 marker 가 모두 들어 있어 applied 로 읽힌다.
5882
5881
  file: "src/judgment/index.ts",
5883
- marker: "\ttype ApiKey,\n\ttype AssistantMessage,\n",
5882
+ marker: "\ttype AssistantMessage,\n\tchatTextBackend,\n",
5884
5883
  anchor: "\ttype AssistantMessage,\n\tchatTextBackend,\n",
5885
- patched: "\ttype ApiKey,\n\ttype AssistantMessage,\n\tchatTextBackend,\n",
5884
+ patched: "\ttype AssistantMessage,\n\tchatTextBackend,\n",
5885
+ legacyPatched: "\ttype ApiKey,\n\ttype AssistantMessage,\n\tchatTextBackend,\n",
5886
5886
  },
5887
5887
  {
5888
5888
  file: "src/judgment/index.ts",
5889
- marker: "\ttype Questions,\n\tresolveApiKeyOnce,\n",
5889
+ marker: "\ttype Questions,\n\ttype TextBackend,\n",
5890
5890
  anchor: "\ttype Questions,\n\ttype TextBackend,\n",
5891
- patched: "\ttype Questions,\n\tresolveApiKeyOnce,\n\ttype TextBackend,\n",
5891
+ patched: "\ttype Questions,\n\ttype TextBackend,\n",
5892
+ legacyPatched: "\ttype Questions,\n\tresolveApiKeyOnce,\n\ttype TextBackend,\n",
5892
5893
  },
5893
5894
  {
5894
5895
  file: "src/judgment/index.ts",
5895
- // marker 는 버전 형태별로 좁힌다. `fetch?: typeof fetch;` 만으로는 Vercel adapter 옵션(아래 항목)에도
5896
- // 걸리고 18.4.2 후보와도 겹쳐 ambiguous 가 된다. 18.3.5 에서는 interface 끝(`}`) 바로 앞이다.
5897
- marker: "backend tests. */\n\tfetch?: typeof fetch;\n}",
5898
- anchor: ` metadataResolver?: (provider: string) => Record<string, unknown> | undefined;
5899
- onUsage?: (usage: JudgmentUsage) => void;`,
5900
- patched: ` metadataResolver?: (provider: string) => Record<string, unknown> | undefined;
5901
- onUsage?: (usage: JudgmentUsage) => void;
5902
- /** Injectable transport for deterministic judgment backend tests. */
5903
- fetch?: typeof fetch;`,
5904
- // 18.4.2: onUsage 위에 doc 주석이 생겼고 바로 아래에 telemetry 가 온다.
5905
- alternates: [{
5906
- file: "src/judgment/index.ts",
5907
- marker: "backend tests. */\n\tfetch?: typeof fetch;\n\t/** Host telemetry",
5908
- anchor: "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Host telemetry",
5909
- patched: "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Injectable transport for deterministic judgment backend tests. */\n\tfetch?: typeof fetch;\n\t/** Host telemetry",
5910
- }],
5896
+ marker: "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Host telemetry",
5897
+ anchor: "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Host telemetry",
5898
+ patched: "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Host telemetry",
5899
+ legacyPatched:
5900
+ "\tonUsage?: (usage: JudgmentUsage) => void;\n\t/** Injectable transport for deterministic judgment backend tests. */\n\tfetch?: typeof fetch;\n\t/** Host telemetry",
5911
5901
  },
5912
- // RETIRE (2026-09-21, 18.2.7): `JudgeKind` 에 `"vercel"` 을 더하던 항목은 없앴다.
5913
- // 18.2.7 은 `export type JudgeKind = "native" | "local" | "online"` 이고 분류는 모델 API 로만
5914
- // 한다(`kindOf`, judgment/index.ts:105-114). Vercel adapter 는 자체 kind 를 만들지 않고
5915
- // `withCandidate` callback 에 upstream 분류 `native` 를 넘긴다. 옛 `ResolvedJudge.kind`
5916
- // 호환 shim 도 되살리지 않는다.
5902
+ // RETIRE (2026-09-21, 18.2.7): `JudgeKind` 에 `"vercel"` 을 더하던 항목은 없앴다(그 뒤 Vercel 판정 모드 전체도 2026-10-17 에 retire).
5917
5903
  {
5918
- // 18.2.7 재앵커: 옛 앵커는 `usesTypeSafeJudge` 의 doc 주석이었는데 그 심볼이 사라졌다.
5919
- // 같은 목적지(정적 Vercel adapter 블록을 다른 헬퍼 앞에 심는다)를 `LocalTextBackend`
5920
- // 선언 앞에 붙인다. VercelJudge 는 upstream `Judge` 를 구현하고 자체 kind 를 만들지 않는다.
5904
+ // 2026-10-17 RETIRE(사용자 결정: Vercel 판정 모드 제거): 정적 Vercel adapter 블록(VERCEL_JUDGMENT_* 상수·VercelJudge·응답 parser·
5905
+ // usageReportingVercelJudge)을 `LocalTextBackend` 선언 앞에 심던 항목이다. 아래 legacyPatched 는 18.11.3 라이브에 배포된 그 블록
5906
+ // 그대로이고, --apply·--revert 가 upstream 줄(anchor)로 되돌린다. Vercel 판정 요청은 `ai-gateway.vercel.sh` 로 가던 유료 경로였다.
5921
5907
  file: "src/judgment/index.ts",
5922
- marker: `export const VERCEL_JUDGMENT_PROVIDER = "vercel";`,
5923
- anchor: `/** Keyword completions through the shared on-device tiny-model worker. */
5924
- class LocalTextBackend implements TextBackend {`,
5925
- patched: `export const VERCEL_JUDGMENT_PROVIDER = "vercel";
5908
+ marker: "/** Keyword completions through the shared on-device tiny-model worker. */\nclass LocalTextBackend implements TextBackend {",
5909
+ anchor: "/** Keyword completions through the shared on-device tiny-model worker. */\nclass LocalTextBackend implements TextBackend {",
5910
+ patched: "/** Keyword completions through the shared on-device tiny-model worker. */\nclass LocalTextBackend implements TextBackend {",
5911
+ legacyPatched: `export const VERCEL_JUDGMENT_PROVIDER = "vercel";
5926
5912
  export const VERCEL_JUDGMENT_AUTH_PROVIDER = "vercel-ai-gateway";
5927
5913
  export const VERCEL_JUDGMENT_ENDPOINT = "https://ai-gateway.vercel.sh/v4/ai/evaluation-model";
5928
5914
  export const VERCEL_JUDGMENT_MODEL = "typesafe-ai/jev";
@@ -6185,76 +6171,40 @@ function usageReportingVercelJudge(judge: VercelJudge, onUsage: JudgeDeps["onUsa
6185
6171
  class LocalTextBackend implements TextBackend {`,
6186
6172
  },
6187
6173
  {
6188
- // 18.2.7 재앵커: 옛 분기는 `resolveJudge` 안에서 `ResolvedJudge` 를 만들었지만, 이제
6189
- // `resolveJudge` 는 `new ChainJudge(deps)` 만 돌려주고 후보 해석은 `withCandidate` 가
6190
- // 소유한다. 명시 vercel 은 그 진입점에서 **후보 loop 바깥**으로 갈라져 한 요청만 하고,
6191
- // 실패·abort·credential 없음은 caller 로 그대로 전파된다(session/chat fallback 없음).
6192
- // callback 에는 upstream 분류 `native` 를 넘긴다.
6174
+ // 2026-10-17 RETIRE(Vercel 판정 모드 제거): `#withCandidate` 의 명시 Vercel 분기(18.11.2+ 의 images 배열 인자 판). 후보 loop 는
6175
+ // upstream 그대로이고 `judge()`·`withCandidate()` 두 진입점 모두 role chain 으로 간다. 이미지 요청의 명시 실패는 upstream 후보 loop 가 한다.
6193
6176
  file: "src/judgment/index.ts",
6194
- marker: "VERCEL_JUDGMENT_PROVIDER) {\n\t\t\tconst vercel = new VercelJudge(",
6195
- excludes: "\tasync #withCandidate<T>(",
6196
- anchor: ` async withCandidate<T>(run: (judge: Judge, kind: JudgeKind) => Promise<T>, options: JudgeOptions = {}): Promise<T> {
6197
- const signal = options.signal;`,
6198
- patched: ` async withCandidate<T>(run: (judge: Judge, kind: JudgeKind) => Promise<T>, options: JudgeOptions = {}): Promise<T> {
6199
- // Explicit Vercel mode: one fixed evaluation request, resolved before the candidate
6200
- // chain so a failure, abort, or missing credential reaches the caller instead of
6201
- // falling back to a chat or local model. Every other value keeps the upstream chain.
6202
- if (cfgJudgmentProvider.get(this.#deps.settings) === VERCEL_JUDGMENT_PROVIDER) {
6203
- const vercel = new VercelJudge({
6204
- apiKey: this.#deps.registry.authStorage.keys.resolver(VERCEL_JUDGMENT_AUTH_PROVIDER, {
6205
- sessionId: this.#deps.sessionId,
6206
- }),
6207
- fetch: this.#deps.fetch,
6208
- });
6209
- return run(usageReportingVercelJudge(vercel, this.#deps.onUsage), "native");
6210
- }
6211
- const signal = options.signal;`,
6212
- // 2026-10-16 18.11.1 ADAPT: upstream 이 후보 loop 를 private `#withCandidate(run, options, requiresImages)` 로 옮기고 공개
6213
- // `withCandidate` 는 그 위의 얇은 wrapper 로 만들었다(이미지 판정, #15471). `judge()` 도 이제 `withCandidate` 가 아니라
6214
- // `#withCandidate` 를 직접 부르므로 분기는 반드시 `#withCandidate` 안에 있어야 두 진입점을 모두 덮는다(wrapper 에 두면 judge()
6215
- // 가 명시 vercel 을 우회해 후보 chain 으로 간다). 이미지 요청은 upstream 계약대로 명시 실패한다 — VercelJudge 는 state·questions
6216
- // 만 보내므로 이미지를 조용히 버리면 안 된다. run 의 세 번째 인자(model)는 `online` 이미지 정규화에만 쓰이고 native 는 읽지
6217
- // 않아 형만 맞춘다. 판 구분은 18.11.1 에만 있는 `#withCandidate` 선언이고, 본 후보는 `excludes`, 이 후보는 `requires` 다.
6218
- alternates: [{
6219
- file: "src/judgment/index.ts",
6220
- requires: "\tasync #withCandidate<T>(",
6221
- marker: "VERCEL_JUDGMENT_PROVIDER) {\n\t\t\t// The fixed evaluation request carries no images;",
6222
- anchor: ` async #withCandidate<T>(
6223
- run: (judge: Judge, kind: JudgeKind, model: Model) => Promise<T>,
6224
- options: JudgeOptions,
6225
- requiresImages: boolean,
6226
- ): Promise<T> {
6227
- const signal = options.signal;`,
6228
- patched: ` async #withCandidate<T>(
6229
- run: (judge: Judge, kind: JudgeKind, model: Model) => Promise<T>,
6230
- options: JudgeOptions,
6231
- requiresImages: boolean,
6232
- ): Promise<T> {
6233
- // Explicit Vercel mode: one fixed evaluation request, resolved before the candidate
6234
- // chain so a failure, abort, or missing credential reaches the caller instead of
6235
- // falling back to a chat or local model. Every other value keeps the upstream chain.
6236
- if (cfgJudgmentProvider.get(this.#deps.settings) === VERCEL_JUDGMENT_PROVIDER) {
6237
- // The fixed evaluation request carries no images; fail like every image-incapable candidate rather than drop them.
6238
- if (requiresImages) throw new Error("judgment: no compatible judge candidate supports images");
6239
- const vercel = new VercelJudge({
6240
- apiKey: this.#deps.registry.authStorage.keys.resolver(VERCEL_JUDGMENT_AUTH_PROVIDER, {
6241
- sessionId: this.#deps.sessionId,
6242
- }),
6243
- fetch: this.#deps.fetch,
6244
- });
6245
- // "native" never reads \`model\` (only the "online" image path does), so the session model stands in for its type.
6246
- return run(usageReportingVercelJudge(vercel, this.#deps.onUsage), "native", this.#deps.sessionModel as Model);
6247
- }
6248
- const signal = options.signal;`,
6249
- }],
6177
+ marker: "\t\tconst requiresImages = images.length > 0;\n\t\tconst signal = options.signal;\n",
6178
+ anchor: "\t\tconst requiresImages = images.length > 0;\n\t\tconst signal = options.signal;\n",
6179
+ patched: "\t\tconst requiresImages = images.length > 0;\n\t\tconst signal = options.signal;\n",
6180
+ legacyPatched: [
6181
+ "\t\tconst requiresImages = images.length > 0;",
6182
+ "\t\t// Explicit Vercel mode: one fixed evaluation request, resolved before the candidate",
6183
+ "\t\t// chain so a failure, abort, or missing credential reaches the caller instead of",
6184
+ "\t\t// falling back to a chat or local model. Every other value keeps the upstream chain.",
6185
+ "\t\tif (cfgJudgmentProvider.get(this.#deps.settings) === VERCEL_JUDGMENT_PROVIDER) {",
6186
+ "\t\t\t// The fixed evaluation request carries no images; fail like every image-incapable candidate rather than drop them.",
6187
+ '\t\t\tif (requiresImages) throw new Error("judgment: no compatible judge candidate supports images");',
6188
+ "\t\t\tconst vercel = new VercelJudge({",
6189
+ "\t\t\t\tapiKey: this.#deps.registry.authStorage.keys.resolver(VERCEL_JUDGMENT_AUTH_PROVIDER, {",
6190
+ "\t\t\t\t\tsessionId: this.#deps.sessionId,",
6191
+ "\t\t\t\t}),",
6192
+ "\t\t\t\tfetch: this.#deps.fetch,",
6193
+ "\t\t\t});",
6194
+ '\t\t\t// "native" never reads `model` (only the "online" image path does), so the session model stands in for its type.',
6195
+ '\t\t\treturn run(usageReportingVercelJudge(vercel, this.#deps.onUsage), "native", this.#deps.sessionModel as Model);',
6196
+ "\t\t}",
6197
+ "\t\tconst signal = options.signal;",
6198
+ "",
6199
+ ].join("\n"),
6250
6200
  },
6251
6201
  {
6252
- // 18.3.1 에는 `Settings.get` 이 없다. 위 분기는 typed handle 로 읽으므로 그 import 를 넣는다.
6202
+ // 2026-10-17 RETIRE(Vercel 판정 모드 제거): 위 분기가 읽던 typed handle import.
6253
6203
  file: "src/judgment/index.ts",
6254
- marker: 'import type { Settings } from "../config/settings";\nimport { cfgJudgmentProvider } from "../config/model-settings";',
6204
+ marker: 'import type { Settings } from "../config/settings";',
6255
6205
  anchor: 'import type { Settings } from "../config/settings";',
6256
- patched: `import type { Settings } from "../config/settings";
6257
- import { cfgJudgmentProvider } from "../config/model-settings";`,
6206
+ patched: 'import type { Settings } from "../config/settings";',
6207
+ legacyPatched: 'import type { Settings } from "../config/settings";\nimport { cfgJudgmentProvider } from "../config/model-settings";',
6258
6208
  },
6259
6209
  // 2026-10-17 RETIRE(사용자 결정: Experiential 탈퇴): typesafe 경로를 Experiential Labs gateway 로 보내던 설정을 지웠으므로
6260
6210
  // 그 gateway decoder 의 32문항 한도(MAX_DECISION_QUESTIONS) 때문에 judge chain 이 typesafe 요청을 32개씩 나누던
@@ -6299,92 +6249,71 @@ import { cfgJudgmentProvider } from "../config/model-settings";`,
6299
6249
  ].join("\n"),
6300
6250
  },
6301
6251
  {
6302
- // 18.2.7 에는 `providers.judgmentProvider` schema 항목 자체가 없다(legacy key 목록에만
6303
- // 남아 migration 이 소비한다). 이 빌드의 로컬 선택 설정으로 최소 enum 만 되살린다:
6304
- // auto=upstream judge role chain, vercel=one-shot no fallback. upstream 에서 제거된
6305
- // typesafe/llm selector 는 되살리지 않는다. `SETTING_PATH_SEGMENTS` 가 schema 키에서
6306
- // 파생되므로 이 항목이 있어야 `settings.get("providers.judgmentProvider")` 가 성립한다.
6307
- file: "src/config/settings-schema.ts",
6308
- marker: `"providers.judgmentProvider": {`,
6309
- anchor: ` "providers.autoThinkingMaxEffort": {`,
6310
- patched: ` "providers.judgmentProvider": {
6311
- type: "enum",
6312
- values: ["auto", "vercel"] as const,
6313
- default: "auto",
6314
- ui: {
6315
- tab: "providers",
6316
- group: "Judgment",
6317
- label: "Judgment Provider",
6318
- description:
6319
- "Backend for typed judgments (auto-thinking difficulty, Smart unexpected-stop detection, git AI staging, eval judge()). \`auto\` uses the judge model role chain (native judgment APIs, then chat/local candidates). \`vercel\` runs one fixed Vercel AI Gateway evaluation request and never falls back to a chat or local model.",
6320
- options: [
6321
- { value: "auto", label: "Auto", description: "Judge model role chain (default)" },
6322
- {
6323
- value: "vercel",
6324
- label: "Vercel Jev",
6325
- description: "One fixed evaluation request; failures never fall back",
6326
- },
6327
- ],
6328
- },
6329
- },
6330
- "providers.autoThinkingMaxEffort": {`,
6331
- alternates: [{
6332
- file: "src/config/model-settings.ts",
6333
- marker: 'id: "providers.judgmentProvider"',
6334
- anchor: 'export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });',
6335
- patched: `export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });
6336
-
6337
- export const cfgJudgmentProvider = register({
6338
- id: "providers.judgmentProvider",
6339
- type: "enum",
6340
- values: ["auto", "vercel"] as const,
6341
- default: "auto",
6342
- ui: {
6343
- tab: "providers",
6344
- group: "Judgment",
6345
- label: "Judgment Provider",
6346
- description:
6347
- "Backend for typed judgments (auto-thinking difficulty, Smart unexpected-stop detection, git AI staging, eval judge()). \`auto\` uses the judge model role chain (native judgment APIs, then chat/local candidates). \`vercel\` runs one fixed Vercel AI Gateway evaluation request and never falls back to a chat or local model.",
6348
- options: [
6349
- { value: "auto", label: "Auto", description: "Judge model role chain (default)" },
6350
- { value: "vercel", label: "Vercel Jev", description: "One fixed evaluation request; failures never fall back" },
6351
- ],
6352
- },
6353
- });`,
6354
- }],
6252
+ // 2026-10-17 RETIRE(Vercel 판정 모드 제거): model-settings.ts 의 `providers.judgmentProvider` enum(auto·vercel) 등록. 이 값은 이제
6253
+ // upstream 18.11.3 의 legacy 설정 키로만 남는다. `vercel` 을 남긴 사용자 설정은 upstream migration 이 받는다(core-jev-judgment-test.ts).
6254
+ file: "src/config/model-settings.ts",
6255
+ marker: 'export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });',
6256
+ anchor: 'export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });',
6257
+ patched: 'export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });',
6258
+ legacyPatched: [
6259
+ 'export const cfgModelRoles = register({ id: "modelRoles", type: "record", default: EMPTY_STRING_RECORD });',
6260
+ "",
6261
+ "export const cfgJudgmentProvider = register({",
6262
+ '\tid: "providers.judgmentProvider",',
6263
+ '\ttype: "enum",',
6264
+ '\tvalues: ["auto", "vercel"] as const,',
6265
+ '\tdefault: "auto",',
6266
+ "\tui: {",
6267
+ '\t\ttab: "providers",',
6268
+ '\t\tgroup: "Judgment",',
6269
+ '\t\tlabel: "Judgment Provider",',
6270
+ "\t\tdescription:",
6271
+ '\t\t\t"Backend for typed judgments (auto-thinking difficulty, Smart unexpected-stop detection, git AI staging, eval judge()). `auto` uses the judge model role chain (native judgment APIs, then chat/local candidates). `vercel` runs one fixed Vercel AI Gateway evaluation request and never falls back to a chat or local model.",',
6272
+ "\t\toptions: [",
6273
+ '\t\t\t{ value: "auto", label: "Auto", description: "Judge model role chain (default)" },',
6274
+ '\t\t\t{ value: "vercel", label: "Vercel Jev", description: "One fixed evaluation request; failures never fall back" },',
6275
+ "\t\t],",
6276
+ "\t},",
6277
+ "});",
6278
+ ].join("\n"),
6355
6279
  },
6356
6280
  {
6357
- // 18.2.7 은 `providers.judgmentProvider` 를 legacy selector 로 보고 값을 읽은 뒤 키를
6358
- // 지운다(config/settings.ts:2847,2887-2902). 값이 `vercel` 이면 그것은 이 빌드의 로컬
6359
- // one-shot adapter 선택이므로 키를 남기고 legacy judge role 주입도 건너뛴다. auto/typesafe/
6360
- // llm/undefined 는 upstream migration 그대로다.
6281
+ // 2026-10-17 RETIRE(Vercel 판정 모드 제거): legacy `judgmentProvider: vercel` 을 로컬 설정으로 살리던 migration 예외 셋(아래 세 항목).
6282
+ // 되돌리면 upstream 처럼 `vercel` 도 비-auto legacy 선택자로 읽혀 judge role chain 으로 옮겨지고 키는 지워진다.
6361
6283
  file: "src/config/settings.ts",
6362
- marker: `const localVercelJudgment = legacyJudgmentProvider === "vercel";`,
6363
- anchor: ` const legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");`,
6364
- patched: ` const legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");
6365
- // \`vercel\` selects this build's local one-shot Vercel judge adapter, not a retired
6366
- // provider selector: keep the key and skip the legacy judge role injection for it.
6367
- const localVercelJudgment = legacyJudgmentProvider === "vercel";`,
6284
+ marker: '\t\t\tconst legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");',
6285
+ anchor: '\t\t\tconst legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");',
6286
+ patched: '\t\t\tconst legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");',
6287
+ legacyPatched: [
6288
+ '\t\t\tconst legacyJudgmentProvider = legacy(providerSettings, "judgmentProvider", "providers.judgmentProvider");',
6289
+ "\t\t\t// `vercel` selects this build's local one-shot Vercel judge adapter, not a retired",
6290
+ "\t\t\t// provider selector: keep the key and skip the legacy judge role injection for it.",
6291
+ '\t\t\tconst localVercelJudgment = legacyJudgmentProvider === "vercel";',
6292
+ ].join("\n"),
6368
6293
  },
6369
6294
  {
6370
6295
  file: "src/config/settings.ts",
6371
- marker: `const nonDefaultJudge =
6372
- (!localVercelJudgment &&`,
6373
- anchor: ` const nonDefaultJudge =
6374
- (typeof legacyJudgmentProvider === "string" && legacyJudgmentProvider !== "auto") ||`,
6375
- patched: ` const nonDefaultJudge =
6376
- (!localVercelJudgment &&
6377
- typeof legacyJudgmentProvider === "string" &&
6378
- legacyJudgmentProvider !== "auto") ||`,
6296
+ marker: '\t\t\tconst nonDefaultJudge =\n\t\t\t\t(typeof legacyJudgmentProvider === "string" && legacyJudgmentProvider !== "auto") ||',
6297
+ anchor: '\t\t\tconst nonDefaultJudge =\n\t\t\t\t(typeof legacyJudgmentProvider === "string" && legacyJudgmentProvider !== "auto") ||',
6298
+ patched: '\t\t\tconst nonDefaultJudge =\n\t\t\t\t(typeof legacyJudgmentProvider === "string" && legacyJudgmentProvider !== "auto") ||',
6299
+ legacyPatched: [
6300
+ "\t\t\tconst nonDefaultJudge =",
6301
+ "\t\t\t\t(!localVercelJudgment &&",
6302
+ '\t\t\t\t\ttypeof legacyJudgmentProvider === "string" &&',
6303
+ '\t\t\t\t\tlegacyJudgmentProvider !== "auto") ||',
6304
+ ].join("\n"),
6379
6305
  },
6380
6306
  {
6381
6307
  file: "src/config/settings.ts",
6382
- marker: `if (key === "judgmentProvider" && localVercelJudgment) continue;`,
6383
- anchor: ` removeLegacy(providerSettings, key, \`providers.\${key}\`);`,
6384
- patched: ` // The local explicit mode is a live selection setting, not a retired
6385
- // selector; it must survive for the judge adapter to read.
6386
- if (key === "judgmentProvider" && localVercelJudgment) continue;
6387
- removeLegacy(providerSettings, key, \`providers.\${key}\`);`,
6308
+ marker: "\t\t\t\tremoveLegacy(providerSettings, key, `providers.${key}`);",
6309
+ anchor: "\t\t\t\tremoveLegacy(providerSettings, key, `providers.${key}`);",
6310
+ patched: "\t\t\t\tremoveLegacy(providerSettings, key, `providers.${key}`);",
6311
+ legacyPatched: [
6312
+ "\t\t\t\t// The local explicit mode is a live selection setting, not a retired",
6313
+ "\t\t\t\t// selector; it must survive for the judge adapter to read.",
6314
+ '\t\t\t\tif (key === "judgmentProvider" && localVercelJudgment) continue;',
6315
+ "\t\t\t\tremoveLegacy(providerSettings, key, `providers.${key}`);",
6316
+ ].join("\n"),
6388
6317
  },
6389
6318
  // --- usage 보고의 저장 행 귀속 (localCredentialId) ---
6390
6319
  // API 키 계정(opencode-go 등)의 usage 보고에는 email·accountId가 없어 localCredentialId가
@@ -14957,8 +14886,8 @@ interface ComputerElementRef
14957
14886
  // 2026-10-17 18.11.3 이식(공개 이슈 #31·#33 포함). 18.11.1 후보는 한 바이트도 바꾸지 않고, 18.11.3 순정에서 앵커를 잃은 항목마다
14958
14887
  // 그 판에만 성립하는 후보를 더한다. marker 를 공유하는 후보는 18.11.3 에만 있는 문자열로 requires(새 후보)·excludes(옛 후보)를
14959
14888
  // 짝지어 서로 배타적으로 둔다.
14960
- // - ADAPT: IRC steer bracket(in-flight epoch), wake-turn 판정·완료 기록(publishMessageResult·messageResult), Vercel judge
14961
- // (#31: #withCandidate 의 셋째 인자가 images 배열), task schema 의 seance 필드, recall 의 tool 가중(env 로 바뀜).
14889
+ // - ADAPT: IRC steer bracket(in-flight epoch), wake-turn 판정·완료 기록(publishMessageResult·messageResult),
14890
+ // task schema 의 seance 필드, recall 의 tool 가중(env 로 바뀜).
14962
14891
  // - RETIRE: upstream 이 seance 와 함께 넣은 task model 타입·전달 줄(같은 줄을 두 번 넣지 않는다. 특히 TaskItem·TaskParams 의
14963
14892
  // `model?: string` 은 upstream 의 `string | string[]` 과 겹쳐 TS2717 이 된다), 번들의 advisor transcript filter 새 이름.
14964
14893
  {
@@ -15073,23 +15002,6 @@ interface ComputerElementRef
15073
15002
  patched: swap(completion.patched, ...resultBranch),
15074
15003
  });
15075
15004
 
15076
- // #31 Vercel judge: 18.11.2 부터 #withCandidate 의 셋째 인자가 images 배열이고 첫 줄에서 requiresImages 를 계산하며 후보는
15077
- // #resolveCandidates(images) 로 고른다. upstream 세 줄은 그대로 두고 명시 Vercel 분기를 requiresImages 계산 바로 뒤에 둔다.
15078
- // 고정 평가 요청은 이미지를 싣지 않으므로 이미지 요청은 명시적으로 거절하고, 텍스트 요청은 한 번만 보내 usage 를 한 번 남기며
15079
- // chat/local 후보로 넘어가지 않는다(18.11.1 후보와 같은 본문).
15080
- const IMAGES_18112 = "const requiresImages = images.length > 0;";
15081
- const vercel = one(entry => entry.file === "src/judgment/index.ts" && entry.marker.startsWith("VERCEL_JUDGMENT_PROVIDER) {\n\t\t\tconst vercel = new VercelJudge("), "Vercel judge");
15082
- const vercelPrivate = vercel.alternates.find(candidate => candidate.requires === "\tasync #withCandidate<T>(");
15083
- const imagesArg = ["\t\trequiresImages: boolean,\n\t): Promise<T> {\n", `\t\timages: readonly ImageContent[],\n\t): Promise<T> {\n\t\t${IMAGES_18112}\n`];
15084
- vercelPrivate.excludes = IMAGES_18112;
15085
- vercel.alternates.push({
15086
- file: vercel.file,
15087
- requires: IMAGES_18112,
15088
- marker: vercelPrivate.marker,
15089
- anchor: swap(vercelPrivate.anchor, ...imagesArg),
15090
- patched: swap(vercelPrivate.patched, ...imagesArg),
15091
- });
15092
-
15093
15005
  // recall 가중: upstream 이 상수표를 env 로 읽는 resolveTrustWeights 로 바꿨다(MNEMOPI_TOOL_WEIGHT, 기본 0.5). learn/retain 의
15094
15006
  // 의도적 기록 가중 1.0 은 기본값으로만 지키고, 사용자가 env 로 정한 값은 그대로 따른다.
15095
15007
  const TRUST_18113 = "function resolveTrustWeights(";
@@ -15306,6 +15218,13 @@ function main() {
15306
15218
  // (tab-supervisor.ts) 앞 항목이 이미 디스크를 바꿔 놓았으므로, 스냅샷으로
15307
15219
  // 되돌리면 그 편집이 통째로 되살아난다. 항상 현재 내용을 읽어서 치환한다.
15308
15220
  const current = readFileSync(s.path, "utf8");
15221
+ // retire 항목(patched === anchor, no-op)은 옛 적용본(legacyPatched)이 anchor 를 부분 문자열로 품어 아래 patched 검사가 항상 먼저
15222
+ // 걸리고 아무것도 되돌리지 못한다. 옛 패치가 실린 상태면 그 본문을 먼저 anchor 로 되돌린다.
15223
+ if (s.status === "legacy" && s.patched === s.anchor && s.legacyPatched && current.includes(s.legacyPatched)) {
15224
+ writeFileSync(s.path, current.replace(s.legacyPatched, s.anchor), "utf8");
15225
+ console.log(` 복원 ${s.file} (옛 패치)`);
15226
+ continue;
15227
+ }
15309
15228
  if (current.includes(s.patched)) {
15310
15229
  writeFileSync(s.path, current.replace(s.patched, s.anchor), "utf8");
15311
15230
  console.log(` 복원 ${s.file}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.10.21",
3
+ "version": "0.10.22",
4
4
  "description": "CUELO — open-source AI coding agent workspace and harness for omp (oh-my-pi)",
5
5
  "homepage": "https://github.com/gim47656-ship-it/CUELO#readme",
6
6
  "repository": {