Refactor action with agent interface system and make anthropic_api_key optional

- Created extensible agent interface with install() and execute() methods
- Moved Claude Code logic to agents/claude.ts implementing Agent interface
- Added utilities directory for reusable functions (exec, files)
- Refactored index.ts to be minimal (35 lines) using agent abstraction
- Made anthropic_api_key optional in action.yml
- Updated Node.js imports to use node: prefix convention
- Bumped version to 0.0.5
- Architecture now supports multiple agents (OpenAI, Gemini, etc.)
This commit is contained in:
Colin McDonnell
2025-08-28 13:37:20 -07:00
parent 6a0d9cc244
commit 1abbd7ff41
10 changed files with 364 additions and 71 deletions
+15
View File
@@ -0,0 +1,15 @@
import { exec } from "node:child_process";
import { promisify } from "node:util";
export const execAsync = promisify(exec);
/**
* Execute a shell command with optional environment variables
*/
export async function executeCommand(
command: string,
env?: Record<string, string>
): Promise<{ stdout: string; stderr: string }> {
const execEnv = env ? { ...process.env, ...env } : process.env;
return execAsync(command, { env: execEnv });
}
+13
View File
@@ -0,0 +1,13 @@
import { mkdtempSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
/**
* Create a temporary file with the given content
*/
export function createTempFile(content: string, filename = "temp.txt"): string {
const tempDir = mkdtempSync(join(tmpdir(), "pullfrog-"));
const filePath = join(tempDir, filename);
writeFileSync(filePath, content);
return filePath;
}