mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-08-03 09:48:31 +08:00
fix: preserve repeated add-dir flags in claude args (#1256)
This commit is contained in:
parent
d060ddc963
commit
235b39bf21
@ -19,6 +19,7 @@ const ACCUMULATING_FLAGS = new Set([
|
|||||||
"disallowedTools",
|
"disallowedTools",
|
||||||
"disallowed-tools",
|
"disallowed-tools",
|
||||||
"mcp-config",
|
"mcp-config",
|
||||||
|
"add-dir",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Delimiter used to join accumulated flag values
|
// Delimiter used to join accumulated flag values
|
||||||
@ -200,6 +201,14 @@ export function parseSdkOptions(options: ClaudeOptions): ParsedSdkOptions {
|
|||||||
// Detect if --json-schema is present (for hasJsonSchema flag)
|
// Detect if --json-schema is present (for hasJsonSchema flag)
|
||||||
const hasJsonSchema = "json-schema" in extraArgs;
|
const hasJsonSchema = "json-schema" in extraArgs;
|
||||||
|
|
||||||
|
const additionalDirectories = extraArgs["add-dir"]
|
||||||
|
? extraArgs["add-dir"]
|
||||||
|
.split(ACCUMULATE_DELIMITER)
|
||||||
|
.map((dir) => dir.trim())
|
||||||
|
.filter(Boolean)
|
||||||
|
: [];
|
||||||
|
delete extraArgs["add-dir"];
|
||||||
|
|
||||||
// Extract and merge allowedTools from all sources:
|
// Extract and merge allowedTools from all sources:
|
||||||
// 1. From extraArgs (parsed from claudeArgs - contains tag mode's tools)
|
// 1. From extraArgs (parsed from claudeArgs - contains tag mode's tools)
|
||||||
// - Check both camelCase (--allowedTools) and hyphenated (--allowed-tools) variants
|
// - Check both camelCase (--allowedTools) and hyphenated (--allowed-tools) variants
|
||||||
@ -304,6 +313,8 @@ export function parseSdkOptions(options: ClaudeOptions): ParsedSdkOptions {
|
|||||||
systemPrompt,
|
systemPrompt,
|
||||||
fallbackModel: options.fallbackModel,
|
fallbackModel: options.fallbackModel,
|
||||||
pathToClaudeCodeExecutable: options.pathToClaudeCodeExecutable,
|
pathToClaudeCodeExecutable: options.pathToClaudeCodeExecutable,
|
||||||
|
additionalDirectories:
|
||||||
|
additionalDirectories.length > 0 ? additionalDirectories : undefined,
|
||||||
|
|
||||||
// Pass through claudeArgs as extraArgs - CLI handles --mcp-config, --json-schema, etc.
|
// Pass through claudeArgs as extraArgs - CLI handles --mcp-config, --json-schema, etc.
|
||||||
// Note: allowedTools and disallowedTools have been removed from extraArgs to prevent duplicates
|
// Note: allowedTools and disallowedTools have been removed from extraArgs to prevent duplicates
|
||||||
|
|||||||
@ -402,6 +402,45 @@ describe("parseSdkOptions", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("add-dir handling", () => {
|
||||||
|
test("should accumulate multiple add-dir flags into additionalDirectories", () => {
|
||||||
|
const options: ClaudeOptions = {
|
||||||
|
claudeArgs: '--add-dir "/path/to/dir-a"\n--add-dir "/path/to/dir-b"',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = parseSdkOptions(options);
|
||||||
|
|
||||||
|
expect(result.sdkOptions.additionalDirectories).toEqual([
|
||||||
|
"/path/to/dir-a",
|
||||||
|
"/path/to/dir-b",
|
||||||
|
]);
|
||||||
|
expect(result.sdkOptions.extraArgs?.["add-dir"]).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should map a single add-dir flag to additionalDirectories", () => {
|
||||||
|
const options: ClaudeOptions = {
|
||||||
|
claudeArgs: '--add-dir "/path/to/dir"',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = parseSdkOptions(options);
|
||||||
|
|
||||||
|
expect(result.sdkOptions.additionalDirectories).toEqual(["/path/to/dir"]);
|
||||||
|
expect(result.sdkOptions.extraArgs?.["add-dir"]).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should preserve other extraArgs when extracting add-dir", () => {
|
||||||
|
const options: ClaudeOptions = {
|
||||||
|
claudeArgs: '--model "claude-3-5-sonnet" --add-dir "/path/to/dir"',
|
||||||
|
};
|
||||||
|
|
||||||
|
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?.["add-dir"]).toBeUndefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("other extraArgs passthrough", () => {
|
describe("other extraArgs passthrough", () => {
|
||||||
test("should pass through json-schema in extraArgs", () => {
|
test("should pass through json-schema in extraArgs", () => {
|
||||||
const options: ClaudeOptions = {
|
const options: ClaudeOptions = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user