mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-08-03 01:38:30 +08:00
fix: map claude_args model to SDK options (#1474)
This commit is contained in:
parent
5f509a1c1f
commit
214a70611b
@ -201,6 +201,9 @@ export function parseSdkOptions(options: ClaudeOptions): ParsedSdkOptions {
|
||||
// Detect if --json-schema is present (for hasJsonSchema flag)
|
||||
const hasJsonSchema = "json-schema" in extraArgs;
|
||||
|
||||
const modelFromClaudeArgs = extraArgs["model"] || undefined;
|
||||
delete extraArgs["model"];
|
||||
|
||||
const additionalDirectories = extraArgs["add-dir"]
|
||||
? extraArgs["add-dir"]
|
||||
.split(ACCUMULATE_DELIMITER)
|
||||
@ -304,7 +307,7 @@ export function parseSdkOptions(options: ClaudeOptions): ParsedSdkOptions {
|
||||
// Build SDK options - use merged tools from both direct options and claudeArgs
|
||||
const sdkOptions: SdkOptions = {
|
||||
// Direct options from ClaudeOptions inputs
|
||||
model: options.model,
|
||||
model: options.model || modelFromClaudeArgs,
|
||||
maxTurns: options.maxTurns ? parseInt(options.maxTurns, 10) : undefined,
|
||||
allowedTools:
|
||||
mergedAllowedTools.length > 0 ? mergedAllowedTools : undefined,
|
||||
|
||||
@ -106,7 +106,8 @@ describe("parseSdkOptions", () => {
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.extraArgs?.["allowedTools"]).toBeUndefined();
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-3-5-sonnet");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-3-5-sonnet");
|
||||
});
|
||||
|
||||
test("should handle hyphenated --allowed-tools flag", () => {
|
||||
@ -366,7 +367,8 @@ describe("parseSdkOptions", () => {
|
||||
);
|
||||
expect(mcpConfig.mcpServers).toHaveProperty("server1");
|
||||
expect(mcpConfig.mcpServers).toHaveProperty("server2");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-3-5-sonnet");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-3-5-sonnet");
|
||||
});
|
||||
|
||||
test("should handle real-world scenario: action config + user config", () => {
|
||||
@ -436,7 +438,8 @@ describe("parseSdkOptions", () => {
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.additionalDirectories).toEqual(["/path/to/dir"]);
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-3-5-sonnet");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-3-5-sonnet");
|
||||
expect(result.sdkOptions.extraArgs?.["add-dir"]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@ -464,7 +467,8 @@ describe("parseSdkOptions", () => {
|
||||
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-haiku");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-haiku");
|
||||
expect(result.sdkOptions.allowedTools).toEqual(["Edit"]);
|
||||
});
|
||||
|
||||
@ -475,7 +479,8 @@ describe("parseSdkOptions", () => {
|
||||
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-haiku");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-haiku");
|
||||
});
|
||||
|
||||
test("should not strip inline # that appears inside a quoted value", () => {
|
||||
@ -485,11 +490,37 @@ describe("parseSdkOptions", () => {
|
||||
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBe("claude-haiku");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
expect(result.sdkOptions.model).toBe("claude-haiku");
|
||||
expect(result.sdkOptions.extraArgs?.["prompt"]).toBe("use color #ff0000");
|
||||
});
|
||||
});
|
||||
|
||||
describe("model handling", () => {
|
||||
test("should map --model from claudeArgs to sdkOptions.model", () => {
|
||||
const options: ClaudeOptions = {
|
||||
claudeArgs: "--model claude-haiku-4-5-20251001",
|
||||
};
|
||||
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.model).toBe("claude-haiku-4-5-20251001");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
});
|
||||
|
||||
test("should prefer direct model option over --model from claudeArgs", () => {
|
||||
const options: ClaudeOptions = {
|
||||
model: "claude-sonnet-4-6",
|
||||
claudeArgs: "--model claude-haiku-4-5-20251001",
|
||||
};
|
||||
|
||||
const result = parseSdkOptions(options);
|
||||
|
||||
expect(result.sdkOptions.model).toBe("claude-sonnet-4-6");
|
||||
expect(result.sdkOptions.extraArgs?.["model"]).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("environment variables passthrough", () => {
|
||||
test("should include OTEL environment variables in sdkOptions.env", () => {
|
||||
// Set up test environment variables
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user