Compare commits

...

2 Commits

Author SHA1 Message Date
David Blass 1328894afd update action 2025-10-23 17:10:28 -04:00
Pullfrog Action 85731f8360 fix action cwd 2025-10-23 16:18:55 -04:00
7 changed files with 57 additions and 16 deletions
+3 -2
View File
@@ -32,9 +32,10 @@ runs:
shell: bash shell: bash
working-directory: ${{ github.action_path }} working-directory: ${{ github.action_path }}
- name: Run agent - name: Run agent
run: node entry.ts run: |
cd $GITHUB_WORKSPACE
node ${{ github.action_path }}/entry.ts
shell: bash shell: bash
working-directory: ${{ github.action_path }}
env: env:
INPUTS_JSON: ${{ toJSON(inputs) }} INPUTS_JSON: ${{ toJSON(inputs) }}
+20 -8
View File
@@ -1,6 +1,7 @@
import { access, constants } from "node:fs/promises"; import { access, constants } from "node:fs/promises";
import * as core from "@actions/core"; import * as core from "@actions/core";
import { createMcpConfig } from "../mcp/config.ts"; import { createMcpConfig } from "../mcp/config.ts";
import { debugLog, isDebug } from "../utils/logging.ts";
import { spawn } from "../utils/subprocess.ts"; import { spawn } from "../utils/subprocess.ts";
import { boxString, tableString } from "../utils/table.ts"; import { boxString, tableString } from "../utils/table.ts";
import { instructions } from "./shared.ts"; import { instructions } from "./shared.ts";
@@ -77,23 +78,27 @@ export class ClaudeAgent implements Agent {
const env = { const env = {
ANTHROPIC_API_KEY: this.apiKey, ANTHROPIC_API_KEY: this.apiKey,
...(isDebug() && { LOG_LEVEL: "debug" }),
}; };
console.log(boxString(prompt, { title: "Prompt" })); console.log(boxString(prompt, { title: "Prompt" }));
const mcpConfig = createMcpConfig(this.githubInstallationToken); const mcpConfig = createMcpConfig(this.githubInstallationToken);
console.log("📋 MCP Config:", mcpConfig);
if (isDebug()) {
debugLog(`📋 MCP Config: ${mcpConfig}`);
}
const args = [ const args = [
"--print", "--print",
"--output-format", "--output-format",
"stream-json", "stream-json",
"--verbose", "--verbose",
"--debug",
"--permission-mode", "--permission-mode",
"bypassPermissions", "bypassPermissions",
"--mcp-config", "--mcp-config",
mcpConfig, mcpConfig,
...(isDebug() ? ["--debug"] : []),
]; ];
core.startGroup("🔄 Run details"); core.startGroup("🔄 Run details");
@@ -114,7 +119,9 @@ export class ClaudeAgent implements Agent {
input: `${instructions} ${prompt}`, input: `${instructions} ${prompt}`,
timeout: 10 * 60 * 1000, // 10 minutes timeout: 10 * 60 * 1000, // 10 minutes
onStdout: (_chunk) => { onStdout: (_chunk) => {
processJSONChunk(_chunk, this); if (_chunk.trim()) {
processJSONChunk(_chunk, this);
}
}, },
onStderr: (_chunk) => { onStderr: (_chunk) => {
if (_chunk.trim()) { if (_chunk.trim()) {
@@ -165,14 +172,19 @@ export class ClaudeAgent implements Agent {
*/ */
function processJSONChunk(chunk: string, agent?: ClaudeAgent): void { function processJSONChunk(chunk: string, agent?: ClaudeAgent): void {
try { try {
// Skip debug lines that start with [DEBUG] or [debug]
const trimmedChunk = chunk.trim(); const trimmedChunk = chunk.trim();
if (trimmedChunk.startsWith("[DEBUG]") || trimmedChunk.startsWith("[debug]")) { if (trimmedChunk.startsWith("[DEBUG]") || trimmedChunk.startsWith("[debug]")) {
console.log(chunk); console.log(chunk);
return; return;
} }
console.log(chunk); if (trimmedChunk.startsWith("[ERROR]") || trimmedChunk.startsWith("[error]")) {
console.error(chunk);
return;
}
debugLog(trimmedChunk);
const parsedChunk = JSON.parse(trimmedChunk); const parsedChunk = JSON.parse(trimmedChunk);
switch (parsedChunk.type) { switch (parsedChunk.type) {
@@ -309,11 +321,11 @@ function processJSONChunk(chunk: string, agent?: ClaudeAgent): void {
break; break;
default: default:
core.debug(`📦 Unknown chunk type: ${parsedChunk.type}`); debugLog(`📦 Unknown chunk type: ${parsedChunk.type}`);
break; break;
} }
} catch (error) { } catch (error) {
core.debug(`Failed to parse chunk: ${error}`); debugLog(`Failed to parse chunk: ${error}`);
core.debug(`Raw chunk: ${chunk.substring(0, 200)}...`); debugLog(`Raw chunk: ${chunk.substring(0, 200)}...`);
} }
} }
+1 -1
View File
@@ -21,7 +21,7 @@ export function createMcpConfig(githubInstallationToken: string) {
env: { env: {
GITHUB_INSTALLATION_TOKEN: githubInstallationToken, GITHUB_INSTALLATION_TOKEN: githubInstallationToken,
GITHUB_REPOSITORY: githubRepository, GITHUB_REPOSITORY: githubRepository,
LOG_LEVEL: "debug", LOG_LEVEL: process.env.LOG_LEVEL,
}, },
}, },
}, },
-2
View File
@@ -9,7 +9,6 @@ export interface ToolResult {
type: "text"; type: "text";
text: string; text: string;
}[]; }[];
error?: string;
isError?: boolean; isError?: boolean;
} }
@@ -72,7 +71,6 @@ const handleToolError = (error: unknown): ToolResult => {
text: `Error: ${errorMessage}`, text: `Error: ${errorMessage}`,
}, },
], ],
error: errorMessage,
isError: true, isError: true,
}; };
}; };
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@pullfrog/action", "name": "@pullfrog/action",
"version": "0.0.57", "version": "0.0.60",
"type": "module", "type": "module",
"files": [ "files": [
"index.js", "index.js",
+30
View File
@@ -0,0 +1,30 @@
/**
* Centralized debug logging utility
* Controls debug behavior based on LOG_LEVEL environment variable
*/
import * as core from "@actions/core";
const isDebugEnabled = process.env.LOG_LEVEL === "debug";
const isGitHubActions = !!process.env.GITHUB_ACTIONS;
/**
* Check if debug logging is enabled
*/
export function isDebug(): boolean {
return isDebugEnabled;
}
/**
* Log debug message if debug is enabled
* Uses core.debug() in GitHub Actions, console.log() locally
*/
export function debugLog(message: string): void {
if (isDebugEnabled) {
if (isGitHubActions) {
core.debug(message);
} else {
console.log(`[DEBUG] ${message}`);
}
}
}
+2 -2
View File
@@ -43,8 +43,8 @@ export function setupTestRepo(options: SetupOptions): void {
*/ */
export function setupGitConfig(): void { export function setupGitConfig(): void {
console.log("🔧 Setting up git configuration..."); console.log("🔧 Setting up git configuration...");
execSync('git config --global user.email "action@pullfrog.ai"', { stdio: "inherit" }); execSync('git config user.email "action@pullfrog.ai"', { stdio: "inherit" });
execSync('git config --global user.name "Pullfrog Action"', { stdio: "inherit" }); execSync('git config user.name "Pullfrog Action"', { stdio: "inherit" });
} }
/** /**