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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -4
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/updates/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview.html +1 -1
- package/.next/server/app/office-preview.rsc +2 -2
- package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
- package/.next/server/app/office.html +1 -1
- package/.next/server/app/office.rsc +4 -4
- package/.next/server/app/office.segments/_full.segment.rsc +4 -4
- package/.next/server/app/office.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/office.segments/office.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover.html +1 -1
- package/.next/server/app/recover.rsc +2 -2
- package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
- package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +4 -4
- package/.next/server/chunks/5489.js +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{9575-032510d25828764f.js → 9575-9b108bc443510ebc.js} +2 -2
- package/.next/static/chunks/app/{layout-a7fca69a4fa9b2c2.js → layout-cdb057e5a5cc0f50.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
- package/Tools/OMP_Global_Config/agent/extensions/docmap-route.ts +124 -26
- package/Tools/OMP_Global_Config/agent/extensions/lib/docmap-search.ts +38 -2
- package/Tools/OMP_Global_Config/agent/extensions/lib/native-judge.ts +82 -0
- package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +11 -78
- package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +1 -1
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +117 -198
- package/package.json +1 -1
- /package/.next/static/{IKi2VjUzAnD5AUcDn7QNi → WFIfYmiOdtHjqFYh2crxO}/_buildManifest.js +0 -0
- /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
|
|
5882
|
+
marker: "\ttype AssistantMessage,\n\tchatTextBackend,\n",
|
|
5884
5883
|
anchor: "\ttype AssistantMessage,\n\tchatTextBackend,\n",
|
|
5885
|
-
patched: "\ttype
|
|
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\
|
|
5889
|
+
marker: "\ttype Questions,\n\ttype TextBackend,\n",
|
|
5890
5890
|
anchor: "\ttype Questions,\n\ttype TextBackend,\n",
|
|
5891
|
-
patched: "\ttype Questions,\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
|
-
|
|
5896
|
-
|
|
5897
|
-
|
|
5898
|
-
|
|
5899
|
-
|
|
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
|
-
//
|
|
5919
|
-
//
|
|
5920
|
-
//
|
|
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:
|
|
5923
|
-
anchor:
|
|
5924
|
-
|
|
5925
|
-
|
|
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
|
|
6189
|
-
//
|
|
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: "
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6198
|
-
|
|
6199
|
-
|
|
6200
|
-
|
|
6201
|
-
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
})
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
|
|
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
|
-
//
|
|
6202
|
+
// 2026-10-17 RETIRE(Vercel 판정 모드 제거): 위 분기가 읽던 typed handle import.
|
|
6253
6203
|
file: "src/judgment/index.ts",
|
|
6254
|
-
marker: 'import type { Settings } from "../config/settings"
|
|
6204
|
+
marker: 'import type { Settings } from "../config/settings";',
|
|
6255
6205
|
anchor: 'import type { Settings } from "../config/settings";',
|
|
6256
|
-
patched:
|
|
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
|
-
//
|
|
6303
|
-
//
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
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
|
-
//
|
|
6358
|
-
//
|
|
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:
|
|
6363
|
-
anchor:
|
|
6364
|
-
patched:
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
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:
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
|
|
6376
|
-
|
|
6377
|
-
|
|
6378
|
-
|
|
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:
|
|
6383
|
-
anchor:
|
|
6384
|
-
patched:
|
|
6385
|
-
|
|
6386
|
-
|
|
6387
|
-
|
|
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),
|
|
14961
|
-
//
|
|
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
|
File without changes
|
|
File without changes
|