* refactor: remove CLI path, use Agent SDK exclusively
- Remove CLI-based Claude execution in favor of Agent SDK
- Delete prepareRunConfig, parseAndSetSessionId, parseAndSetStructuredOutputs functions
- Remove named pipe IPC and sanitizeJsonOutput helper
- Remove test-agent-sdk job from test-base-action workflow (SDK is now default)
- Delete run-claude.test.ts and structured-output.test.ts (testing removed CLI code)
- Update CLAUDE.md to remove named pipe references
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Generated-By: Claude Code (cli/claude-opus-4-5=100%)
Claude-Steers: 2
Claude-Permission-Prompts: 1
Claude-Escapes: 0
Claude-Plan:
<claude-plan>
# Plan: Remove Non-Agent SDK Code Path
## Overview
Since `use_agent_sdk` defaults to `true`, remove the legacy CLI code path entirely from `base-action/src/run-claude.ts`.
## Files to Modify
### 1. `base-action/src/run-claude.ts` - Main Cleanup
**Remove imports:**
- `exec` from `child_process`
- `promisify` from `util`
- `unlink`, `writeFile`, `stat` from `fs/promises` (keep `readFile` - check if needed)
- `createWriteStream` from `fs`
- `spawn` from `child_process`
- `parseShellArgs` from `shell-quote` (still used in `parse-sdk-options.ts`, keep package)
**Remove constants:**
- `execAsync`
- `PIPE_PATH`
- `EXECUTION_FILE` (defined in both files, keep in SDK file)
- `BASE_ARGS`
**Remove types:**
- `PreparedConfig` type (lines 85-89) - only used by `prepareRunConfig()`
**Remove functions:**
- `sanitizeJsonOutput()` (lines 21-68)
- `prepareRunConfig()` (lines 91-125) - also remove export
- `parseAndSetSessionId()` (lines 131-155) - also remove export
- `parseAndSetStructuredOutputs()` (lines 162-197) - also remove export
**Simplify `runClaude()`:**
- Remove `useAgentSdk` flag check and logging (lines 200-204)
- Remove the `if (useAgentSdk)` block, make SDK call direct
- Remove entire CLI path (lines 211-438)
- Resulting function becomes just:
```typescript
export async function runClaude(promptPath: string, options: ClaudeOptions) {
const parsedOptions = parseSdkOptions(options);
return runClaudeWithSdk(promptPath, parsedOptions);
}
```
### 2. Delete Test Files
**`base-action/test/run-claude.test.ts`:**
- Delete entire file (only tests `prepareRunConfig()`)
**`base-action/test/structured-output.test.ts`:**
- Delete entire file (only tests `parseAndSetStructuredOutputs()` and `parseAndSetSessionId()`)
### 3. Workflow Update
**`.github/workflows/test-base-action.yml`:**
- Remove `test-agent-sdk` job (lines 120-176) - redundant now
### 4. Documentation Update
**`base-action/CLAUDE.md`:**
- Line 30: Remove "- Named pipes for IPC between prompt input and Claude process"
- Line 57: Remove "- Uses `mkfifo` to create named pipes for prompt input"
## Verification
1. Run `bun run typecheck` to ensure no type errors
2. Run `bun test` to ensure remaining tests pass
3. Run `bun run format` to fix any formatting issues
</claude-plan>
* fix: address PR review comments
- Add session_id output handling in run-claude-sdk.ts (critical)
- Remove unused claudeEnv parameter from ClaudeOptions and index.ts
- Update stale CLI path comment in parse-sdk-options.ts
Claude-Generated-By: Claude Code (cli/claude-opus-4-5=100%)
Claude-Steers: 0
Claude-Permission-Prompts: 0
Claude-Escapes: 0
Claude-Plan:
<claude-plan>
# Plan: Remove Non-Agent SDK Code Path
## Overview
Since `use_agent_sdk` defaults to `true`, remove the legacy CLI code path entirely from `base-action/src/run-claude.ts`.
## Files to Modify
### 1. `base-action/src/run-claude.ts` - Main Cleanup
**Remove imports:**
- `exec` from `child_process`
- `promisify` from `util`
- `unlink`, `writeFile`, `stat` from `fs/promises` (keep `readFile` - check if needed)
- `createWriteStream` from `fs`
- `spawn` from `child_process`
- `parseShellArgs` from `shell-quote` (still used in `parse-sdk-options.ts`, keep package)
**Remove constants:**
- `execAsync`
- `PIPE_PATH`
- `EXECUTION_FILE` (defined in both files, keep in SDK file)
- `BASE_ARGS`
**Remove types:**
- `PreparedConfig` type (lines 85-89) - only used by `prepareRunConfig()`
**Remove functions:**
- `sanitizeJsonOutput()` (lines 21-68)
- `prepareRunConfig()` (lines 91-125) - also remove export
- `parseAndSetSessionId()` (lines 131-155) - also remove export
- `parseAndSetStructuredOutputs()` (lines 162-197) - also remove export
**Simplify `runClaude()`:**
- Remove `useAgentSdk` flag check and logging (lines 200-204)
- Remove the `if (useAgentSdk)` block, make SDK call direct
- Remove entire CLI path (lines 211-438)
- Resulting function becomes just:
```typescript
export async function runClaude(promptPath: string, options: ClaudeOptions) {
const parsedOptions = parseSdkOptions(options);
return runClaudeWithSdk(promptPath, parsedOptions);
}
```
### 2. Delete Test Files
**`base-action/test/run-claude.test.ts`:**
- Delete entire file (only tests `prepareRunConfig()`)
**`base-action/test/structured-output.test.ts`:**
- Delete entire file (only tests `parseAndSetStructuredOutputs()` and `parseAndSetSessionId()`)
### 3. Workflow Update
**`.github/workflows/test-base-action.yml`:**
- Remove `test-agent-sdk` job (lines 120-176) - redundant now
### 4. Documentation Update
**`base-action/CLAUDE.md`:**
- Line 30: Remove "- Named pipes for IPC between prompt input and Claude process"
- Line 57: Remove "- Uses `mkfifo` to create named pipes for prompt input"
## Verification
1. Run `bun run typecheck` to ensure no type errors
2. Run `bun test` to ensure remaining tests pass
3. Run `bun run format` to fix any formatting issues
</claude-plan>
59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# CLAUDE.md
|
|
|
|
## Common Commands
|
|
|
|
### Development Commands
|
|
|
|
- Build/Type check: `bun run typecheck`
|
|
- Format code: `bun run format`
|
|
- Check formatting: `bun run format:check`
|
|
- Run tests: `bun test`
|
|
- Install dependencies: `bun install`
|
|
|
|
### Action Testing
|
|
|
|
- Test action locally: `./test-local.sh`
|
|
- Test specific file: `bun test test/prepare-prompt.test.ts`
|
|
|
|
## Architecture Overview
|
|
|
|
This is a GitHub Action that allows running Claude Code within GitHub workflows. The action consists of:
|
|
|
|
### Core Components
|
|
|
|
1. **Action Definition** (`action.yml`): Defines inputs, outputs, and the composite action steps
|
|
2. **Prompt Preparation** (`src/index.ts`): Runs Claude Code with specified arguments
|
|
|
|
### Key Design Patterns
|
|
|
|
- Uses Bun runtime for development and execution
|
|
- JSON streaming output format for execution logs
|
|
- Composite action pattern to orchestrate multiple steps
|
|
- Provider-agnostic design supporting Anthropic API, AWS Bedrock, and Google Vertex AI
|
|
|
|
## Provider Authentication
|
|
|
|
1. **Anthropic API** (default): Requires API key via `anthropic_api_key` input
|
|
2. **AWS Bedrock**: Uses OIDC authentication when `use_bedrock: true`
|
|
3. **Google Vertex AI**: Uses OIDC authentication when `use_vertex: true`
|
|
|
|
## Testing Strategy
|
|
|
|
### Local Testing
|
|
|
|
- Use `act` tool to run GitHub Actions workflows locally
|
|
- `test-local.sh` script automates local testing setup
|
|
- Requires `ANTHROPIC_API_KEY` environment variable
|
|
|
|
### Test Structure
|
|
|
|
- Unit tests for configuration logic
|
|
- Integration tests for prompt preparation
|
|
- Full workflow tests in `.github/workflows/test-base-action.yml`
|
|
|
|
## Important Technical Details
|
|
|
|
- Outputs execution logs as JSON to `/tmp/claude-execution-output.json`
|
|
- Timeout enforcement via `timeout` command wrapper
|
|
- Strict TypeScript configuration with Bun-specific settings
|