























@@ -391,6 +391,162 @@ describe("buildEmbeddedCompactionRuntimeContext", () => {
391391expect(result.authProfileId).toBeUndefined();
392392});
393393394+it("resolves compaction.model alias to canonical model ref on same provider (#90340)", () => {
395+const result = resolveEmbeddedCompactionTarget({
396+config: {
397+agents: {
398+defaults: {
399+models: {
400+"openai/gpt-5.4-mini": {
401+alias: "gpt54mini",
402+params: { thinking: "high" },
403+},
404+},
405+compaction: { model: "gpt54mini" },
406+},
407+},
408+} as unknown as OpenClawConfig,
409+provider: "openai",
410+modelId: "gpt-5.5",
411+authProfileId: "openai:default",
412+defaultProvider: "openai",
413+defaultModel: "gpt-5.5",
414+});
415+expect(result.provider).toBe("openai");
416+expect(result.model).toBe("gpt-5.4-mini");
417+expect(result.authProfileId).toBe("openai:default");
418+});
419+420+it("resolves compaction.model alias to canonical model ref on different provider", () => {
421+const result = resolveEmbeddedCompactionTarget({
422+config: {
423+agents: {
424+defaults: {
425+models: {
426+"anthropic/claude-opus-4-6": {
427+alias: "thinky",
428+},
429+},
430+compaction: { model: "thinky" },
431+},
432+},
433+} as unknown as OpenClawConfig,
434+provider: "openai",
435+modelId: "gpt-5.5",
436+authProfileId: "openai:default",
437+defaultProvider: "openai",
438+defaultModel: "gpt-5.5",
439+});
440+expect(result.provider).toBe("anthropic");
441+expect(result.model).toBe("claude-opus-4-6");
442+// Auth profile must be dropped when provider changes
443+expect(result.authProfileId).toBeUndefined();
444+});
445+446+it("falls back to literal model when alias does not match", () => {
447+const result = resolveEmbeddedCompactionTarget({
448+config: {
449+agents: {
450+defaults: {
451+models: {
452+"openai/gpt-5.4-mini": {
453+alias: "gpt54mini",
454+},
455+},
456+compaction: { model: "nonexistent-alias" },
457+},
458+},
459+} as unknown as OpenClawConfig,
460+provider: "openai",
461+modelId: "gpt-5.5",
462+authProfileId: "openai:default",
463+defaultProvider: "openai",
464+defaultModel: "gpt-5.5",
465+});
466+expect(result.provider).toBe("openai");
467+expect(result.model).toBe("nonexistent-alias");
468+expect(result.authProfileId).toBe("openai:default");
469+});
470+471+it("preserves auth when an omitted provider uses the effective default", () => {
472+const result = resolveEmbeddedCompactionTarget({
473+config: {
474+agents: {
475+defaults: {
476+models: {
477+"openai/gpt-5.4-mini": {
478+alias: "summary",
479+},
480+},
481+compaction: { model: "summary" },
482+},
483+},
484+} as unknown as OpenClawConfig,
485+authProfileId: "openai:default",
486+defaultProvider: "openai",
487+defaultModel: "gpt-5.5",
488+});
489+expect(result.provider).toBe("openai");
490+expect(result.model).toBe("gpt-5.4-mini");
491+expect(result.authProfileId).toBe("openai:default");
492+});
493+494+it("prefers literal configured model ids over alias collisions (#90340)", () => {
495+const result = resolveEmbeddedCompactionTarget({
496+config: {
497+agents: {
498+defaults: {
499+models: {
500+"openai/gpt-5.4-mini": {
501+alias: "gpt54mini",
502+},
503+"openai/gpt54mini": {},
504+},
505+compaction: { model: "gpt54mini" },
506+},
507+},
508+} as unknown as OpenClawConfig,
509+provider: "openai",
510+modelId: "gpt-5.5",
511+authProfileId: "openai:default",
512+defaultProvider: "openai",
513+defaultModel: "gpt-5.5",
514+});
515+expect(result.provider).toBe("openai");
516+expect(result.model).toBe("gpt54mini");
517+expect(result.authProfileId).toBe("openai:default");
518+});
519+520+it("keeps current-provider configured model ids over cross-provider alias collisions (#90340)", () => {
521+const result = resolveEmbeddedCompactionTarget({
522+config: {
523+agents: {
524+defaults: {
525+models: {
526+"anthropic/claude-opus-4-6": {
527+alias: "gpt-5.4-mini",
528+},
529+},
530+compaction: { model: "gpt-5.4-mini" },
531+},
532+},
533+models: {
534+providers: {
535+openai: { models: [{ id: "gpt-5.4-mini" }] },
536+},
537+},
538+} as unknown as OpenClawConfig,
539+provider: "openai",
540+modelId: "gpt-5.5",
541+authProfileId: "openai:default",
542+defaultProvider: "openai",
543+defaultModel: "gpt-5.5",
544+});
545+expect(result.provider).toBe("openai");
546+expect(result.model).toBe("gpt-5.4-mini");
547+expect(result.authProfileId).toBe("openai:default");
548+});
549+394550it("leaves non-openai providers unchanged", () => {
395551const result = resolveEmbeddedCompactionTarget({
396552provider: "anthropic",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。