mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-27 11:20:42 +01:00
Merge branch 'codex/work-folders-pi-refresh' into codex/work-folders-storybook-refresh
* codex/work-folders-pi-refresh: fix: normalize omitted Pi models to the qualified default
This commit is contained in:
commit
82a37bb587
5 files changed
+27
-7
No files matched your search
@@ -5,6 +5,7 @@ import {
|
||||
PAPERCLIP_OPERATIONAL_SKILL_KEY,
|
||||
resolveLegacyPaperclipDesiredSkillNames,
|
||||
} from "@paperclipai/adapter-utils/server-utils";
|
||||
import { resolvePaperclipRunnerProviderProfile } from "../services/native-runtime/provider-profile.js";
|
||||
|
||||
const legacyConfig = {
|
||||
paperclipSkillSync: {
|
||||
@@ -13,6 +14,16 @@ const legacyConfig = {
|
||||
};
|
||||
|
||||
describe("paperclip_runner operational skill normalization", () => {
|
||||
it.each([undefined, "", " "])("qualifies Pi's default model at persistence and execution (%s)", (model) => {
|
||||
const input = { provider: "acpx", acpxAgent: "pi", model };
|
||||
const normalized = normalizePaperclipRunnerAdapterConfig("paperclip_runner", input);
|
||||
expect(normalized.model).toBe("openrouter/deepseek/deepseek-v4-flash-0731");
|
||||
expect(resolvePaperclipRunnerProviderProfile(normalized)).toMatchObject({ provider: "acpx", acpxAgent: "pi", model: normalized.model });
|
||||
expect(resolvePaperclipRunnerProviderProfile(input)).toMatchObject({ provider: "acpx", acpxAgent: "pi", model: normalized.model });
|
||||
const explicit = normalizePaperclipRunnerAdapterConfig("paperclip_runner", { ...input, model: "unqualified-model" });
|
||||
expect(explicit.model).toBe("unqualified-model");
|
||||
expect(() => resolvePaperclipRunnerProviderProfile(explicit)).toThrow("requires exact model");
|
||||
});
|
||||
it("applies full-auto native runner defaults at persistence boundaries", () => {
|
||||
expect(normalizePaperclipRunnerAdapterConfig("paperclip_runner", {})).toEqual({
|
||||
provider: "codex",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
isPaperclipRunnerProvider,
|
||||
PAPERCLIP_RUNNER_PERMISSION_CAPABILITIES,
|
||||
PAPERCLIP_RUNNER_ACPX_DEFAULT_MODELS,
|
||||
resolvePaperclipRunnerPermissionMode,
|
||||
type PaperclipRunnerProvider,
|
||||
} from "@paperclipai/adapter-utils";
|
||||
@@ -14,11 +15,7 @@ export const DEFAULT_OPENCODE_RUNNER_MODEL =
|
||||
"openrouter/deepseek/deepseek-v4-flash-0731" as const;
|
||||
export const CLAUDE_MANAGED_BETA_VERSION = "managed-agents-2026-04-01" as const;
|
||||
|
||||
export const QUALIFIED_ACPX_RUNNER_MODELS = {
|
||||
claude: "claude-sonnet-5",
|
||||
codex: "gpt-5.6-sol",
|
||||
pi: "openrouter/deepseek/deepseek-v4-flash-0731",
|
||||
} as const;
|
||||
export const QUALIFIED_ACPX_RUNNER_MODELS = PAPERCLIP_RUNNER_ACPX_DEFAULT_MODELS;
|
||||
|
||||
export type QualifiedPaperclipRunnerAcpxAgent =
|
||||
keyof typeof QUALIFIED_ACPX_RUNNER_MODELS;
|
||||
@@ -412,7 +409,7 @@ export function resolvePaperclipRunnerProviderProfile(
|
||||
);
|
||||
}
|
||||
const qualifiedModel = QUALIFIED_ACPX_RUNNER_MODELS[acpxAgent];
|
||||
if (acpxAgent !== "claude" && model !== qualifiedModel) {
|
||||
if (acpxAgent !== "claude" && model !== null && model !== qualifiedModel) {
|
||||
throw new PaperclipRunnerProviderProfileError(
|
||||
"paperclip_runner_acpx_model_unqualified",
|
||||
`Paperclip Runner ACPX ${acpxAgent} requires exact model ${qualifiedModel}.`,
|
||||
|
||||
Reference in new issue
Block a user