diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c0e3d9c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Mark generated files as linguist-generated to exclude from language statistics +entry.js linguist-generated + diff --git a/README.md b/README.md index f31a773..d215ea3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ GitHub Action for running Claude Code and other agents via Pullfrog. pnpm install ``` -## Testing with play.ts +## Testing with `play.ts` ```bash pnpm play # Uses fixtures/play.txt diff --git a/agents/jules.ts b/agents/jules.ts index 9cf68dd..a61379f 100644 --- a/agents/jules.ts +++ b/agents/jules.ts @@ -12,6 +12,7 @@ export const jules = agent({ packageName: "@google/jules", version: "latest", executablePath: "run.cjs", + installDependencies: true, }); }, run: async ({ diff --git a/agents/shared.ts b/agents/shared.ts index 5945d56..e28050e 100644 --- a/agents/shared.ts +++ b/agents/shared.ts @@ -37,10 +37,12 @@ export async function installFromNpmTarball({ packageName, version, executablePath, + installDependencies, }: { packageName: string; version: string; executablePath: string; + installDependencies?: boolean; }): Promise { // Resolve version if it's a range or "latest" let resolvedVersion = version; @@ -119,6 +121,22 @@ export async function installFromNpmTarball({ throw new Error(`Executable not found in extracted package at ${cliPath}`); } + // Install dependencies if requested + if (installDependencies) { + log.info(`Installing dependencies for ${packageName}...`); + const installResult = spawnSync("npm", ["install", "--production"], { + cwd: extractedDir, + stdio: "pipe", + encoding: "utf-8", + }); + if (installResult.status !== 0) { + throw new Error( + `Failed to install dependencies: ${installResult.stderr || installResult.stdout || "Unknown error"}` + ); + } + log.info(`✓ Dependencies installed`); + } + // Make the file executable chmodSync(cliPath, 0o755);