mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-24 23:54:13 +08:00
Compare commits
4 Commits
claude/iss
...
ashwin/too
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40d8f2f444 | ||
|
|
9c9859aff1 | ||
|
|
176dbc369d | ||
|
|
8ae72a97c6 |
2
.github/workflows/claude.yml
vendored
2
.github/workflows/claude.yml
vendored
@@ -34,3 +34,5 @@ jobs:
|
|||||||
uses: anthropics/claude-code-action@beta
|
uses: anthropics/claude-code-action@beta
|
||||||
with:
|
with:
|
||||||
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||||
|
allowed_tools: "Bash(bun install),Bash(bun test:*),Bash(bun run format),Bash(bun typecheck)"
|
||||||
|
custom_instructions: "You have also been granted tools for editing files and running bun commands (install, run, test, typecheck) for testing your changes: bun install, bun test, bun run format, bun typecheck."
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|||||||
```
|
```
|
||||||
|
|
||||||
This applies to all sensitive values including API keys, access tokens, and credentials.
|
This applies to all sensitive values including API keys, access tokens, and credentials.
|
||||||
We also reccomend that you always use short-lived tokens when possible
|
We also recommend that you always use short-lived tokens when possible
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ runs:
|
|||||||
- name: Run Claude Code
|
- name: Run Claude Code
|
||||||
id: claude-code
|
id: claude-code
|
||||||
if: steps.prepare.outputs.contains_trigger == 'true'
|
if: steps.prepare.outputs.contains_trigger == 'true'
|
||||||
uses: anthropics/claude-code-base-action@5097b6cdfe5fc5a3ac0166cc344c34ed23c93982 # https://github.com/anthropics/claude-code-base-action/releases/tag/v0.0.5
|
uses: anthropics/claude-code-base-action@78eef48a8f466f7a800a2315134506d4c7ad9163 # v0.0.7
|
||||||
with:
|
with:
|
||||||
prompt_file: /tmp/claude-prompts/claude-prompt.txt
|
prompt_file: /tmp/claude-prompts/claude-prompt.txt
|
||||||
allowed_tools: ${{ env.ALLOWED_TOOLS }}
|
allowed_tools: ${{ env.ALLOWED_TOOLS }}
|
||||||
|
|||||||
@@ -58,27 +58,10 @@ export function buildAllowedToolsString(
|
|||||||
|
|
||||||
export function buildDisallowedToolsString(
|
export function buildDisallowedToolsString(
|
||||||
customDisallowedTools?: string,
|
customDisallowedTools?: string,
|
||||||
allowedTools?: string,
|
|
||||||
): string {
|
): string {
|
||||||
let disallowedTools = [...DISALLOWED_TOOLS];
|
let allDisallowedTools = DISALLOWED_TOOLS.join(",");
|
||||||
|
|
||||||
// If user has explicitly allowed some hardcoded disallowed tools, remove them from disallowed list
|
|
||||||
if (allowedTools) {
|
|
||||||
const allowedToolsArray = allowedTools
|
|
||||||
.split(",")
|
|
||||||
.map((tool) => tool.trim());
|
|
||||||
disallowedTools = disallowedTools.filter(
|
|
||||||
(tool) => !allowedToolsArray.includes(tool),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let allDisallowedTools = disallowedTools.join(",");
|
|
||||||
if (customDisallowedTools) {
|
if (customDisallowedTools) {
|
||||||
if (allDisallowedTools) {
|
|
||||||
allDisallowedTools = `${allDisallowedTools},${customDisallowedTools}`;
|
allDisallowedTools = `${allDisallowedTools},${customDisallowedTools}`;
|
||||||
} else {
|
|
||||||
allDisallowedTools = customDisallowedTools;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return allDisallowedTools;
|
return allDisallowedTools;
|
||||||
}
|
}
|
||||||
@@ -665,7 +648,6 @@ export async function createPrompt(
|
|||||||
);
|
);
|
||||||
const allDisallowedTools = buildDisallowedToolsString(
|
const allDisallowedTools = buildDisallowedToolsString(
|
||||||
preparedContext.disallowedTools,
|
preparedContext.disallowedTools,
|
||||||
preparedContext.allowedTools,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
core.exportVariable("ALLOWED_TOOLS", allAllowedTools);
|
core.exportVariable("ALLOWED_TOOLS", allAllowedTools);
|
||||||
|
|||||||
@@ -722,51 +722,4 @@ describe("buildDisallowedToolsString", () => {
|
|||||||
expect(parts).toContain("BadTool1");
|
expect(parts).toContain("BadTool1");
|
||||||
expect(parts).toContain("BadTool2");
|
expect(parts).toContain("BadTool2");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should remove hardcoded disallowed tools if they are in allowed tools", () => {
|
|
||||||
const customDisallowedTools = "BadTool1,BadTool2";
|
|
||||||
const allowedTools = "WebSearch,SomeOtherTool";
|
|
||||||
const result = buildDisallowedToolsString(
|
|
||||||
customDisallowedTools,
|
|
||||||
allowedTools,
|
|
||||||
);
|
|
||||||
|
|
||||||
// WebSearch should be removed from disallowed since it's in allowed
|
|
||||||
expect(result).not.toContain("WebSearch");
|
|
||||||
|
|
||||||
// WebFetch should still be disallowed since it's not in allowed
|
|
||||||
expect(result).toContain("WebFetch");
|
|
||||||
|
|
||||||
// Custom disallowed tools should still be present
|
|
||||||
expect(result).toContain("BadTool1");
|
|
||||||
expect(result).toContain("BadTool2");
|
|
||||||
});
|
|
||||||
|
|
||||||
test("should remove all hardcoded disallowed tools if they are all in allowed tools", () => {
|
|
||||||
const allowedTools = "WebSearch,WebFetch,SomeOtherTool";
|
|
||||||
const result = buildDisallowedToolsString(undefined, allowedTools);
|
|
||||||
|
|
||||||
// Both hardcoded disallowed tools should be removed
|
|
||||||
expect(result).not.toContain("WebSearch");
|
|
||||||
expect(result).not.toContain("WebFetch");
|
|
||||||
|
|
||||||
// Result should be empty since no custom disallowed tools provided
|
|
||||||
expect(result).toBe("");
|
|
||||||
});
|
|
||||||
|
|
||||||
test("should handle custom disallowed tools when all hardcoded tools are overridden", () => {
|
|
||||||
const customDisallowedTools = "BadTool1,BadTool2";
|
|
||||||
const allowedTools = "WebSearch,WebFetch";
|
|
||||||
const result = buildDisallowedToolsString(
|
|
||||||
customDisallowedTools,
|
|
||||||
allowedTools,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Hardcoded tools should be removed
|
|
||||||
expect(result).not.toContain("WebSearch");
|
|
||||||
expect(result).not.toContain("WebFetch");
|
|
||||||
|
|
||||||
// Only custom disallowed tools should remain
|
|
||||||
expect(result).toBe("BadTool1,BadTool2");
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user