Files
chatgpt-mcp/AGENT_HANDOFF.md
T

141 lines
5.9 KiB
Markdown

# AGENT_HANDOFF.md
## Completed
### Phase 0 — Repository Setup
- Repository skeleton (TASK 0.1)
- package.json with dependencies (TASK 0.2)
### Phase 1 — Core Utilities
- Configuration loader (`src/config/env.js`) — TASK 1.1
- Secret redaction utility (`src/utils/redact.js`) — TASK 1.2
- Context budget utility (`src/utils/context-budget.js`) — TASK 1.3
- Safe logging helper (`src/utils/logging.js`) — TASK 1.4
### Phase 2 — OpenAI Integration
- OpenAI client wrapper (`src/openai/client.js`) — TASK 2.1
- Response builder (`src/openai/responses.js`) — TASK 2.2
- Error handling and edge cases (tests) — TASK 2.3
### Phase 3 — Tool Inputs and Prompts
- Zod input validation schemas (`src/tools/schemas.js`, tests) — TASK 3.1
- Base prompt template (`src/prompts/base.js`, tests) — TASK 3.2
- ask_chatgpt prompt builder (`src/prompts/ask-chatgpt.js`, tests) — TASK 3.3
- review_plan prompt builder (`src/prompts/review-plan.js`, tests) — TASK 3.4
- review_code prompt builder (`src/prompts/review-code.js`, tests) — TASK 3.5
- debug_issue prompt builder (`src/prompts/debug-issue.js`, tests) — TASK 3.6
- architecture_review prompt builder (`src/prompts/architecture-review.js`, tests) — TASK 3.7
## Next Phase
### Phase 4 - Tool Handlers
Build the MCP tool handlers that:
1. Register each tool with the MCP server.
2. Validate input using `schemas.js`.
3. Call the appropriate prompt builder.
4. Send the prompt to OpenAI via `responses.js`.
5. Return structured advisory output to Claude Code.
## Completed (Phase 4)
All five MCP tool handlers are complete:
| Handler | File | Tests |
|---------|------|-------|
| handleAskChatGpt | `src/tools/ask-chatgpt.js` | ✅ 27 |
| handleReviewPlan | `src/tools/review-plan.js` | ✅ 28 |
| handleReviewCode | `src/tools/review-code.js` | ✅ 28 |
| handleDebugIssue | `src/tools/debug-issue.js` | ✅ 28 |
| handleArchitectureReview | `src/tools/architecture-review.js` | ✅ 28 |
Total: 139 orchestration-only tests, all passing.
## Completed (Phase 5)
**All five MCP tools registered:** ask_chatgpt, review_plan, review_code, debug_issue, architecture_review.
### Task 5.1 - MCP server skeleton ✅
Minimal MCP stdio server in `src/server.js`. MCP initialize handshake succeeds. No tools registered yet.
### Task 5.2 - Register ask_chatgpt MCP tool ✅
`ask_chatgpt` is now registered as an MCP tool on the server (`src/server.js`).
**Registration details:**
- Uses shared `baseInputSchema` (question required + context, constraints, expectedOutput, projectSummary, taskSummary, relevantFiles, logs optional).
- All 3 external deps injected: `loadConfig`, `createOpenAIClient`, `sendOpenAIResponse`.
- Returns structured MCP tool result: `{ content: [{ type: "text", text }], isError, warnings }`.
**Smoke test results (all passing):**
- initialize → server returns `chatgpt-mcp` v0.1.0 ✅
- tools/list → exposes `ask_chatgpt` with correct schema ✅
- tools/call (happy path, mocked OpenAI) → `{ content: [...], isError: false }` with answer ✅
- tools/call (minimal input `{ question: "hi" }`) → works ✅
- tools/call (full input, all 10 schema fields) → handled correctly ✅
- tools/call (missing OPENAI_API_KEY) → structured MCP error `"Error: Configuration error: OPENAI_API_KEY is missing."`
- tools/call (invalid API key) → structured MCP error `"OpenAI API error (OpenAIAuthError): 401"`
- All 523 unit tests pass across 18 test files ✅
**Production code (`src/server.js`):** ~39 lines, single `ask_chatgpt` tool registered with MCP via Stdio transport.
### Task 5.3 - Register remaining MCP tools ✅
Four additional MCP tools registered on the server (`src/server.js`):
| Tool | Handler |
|------|---------|
| `review_plan` | handleReviewPlan |
| `review_code` | handleReviewCode |
| `debug_issue` | handleDebugIssue |
| `architecture_review` | handleArchitectureReview |
**All five MCP tools now registered:** ask_chatgpt, review_plan, review_code, debug_issue, architecture_review.
**Smoke test results (all passing):**
- initialize → server returns `chatgpt-mcp` v0.1.0 ✅
- tools/list → 5 tools total ✅
- tools/call reaches handlers for all 5 tools ✅
- missing OPENAI_API_KEY → structured tool errors: `"Error: Configuration error: OPENAI_API_KEY is missing."`
- npm test → 523 tests pass across 18 test files, no regressions ✅
**Implementation notes:**
- Each tool registered explicitly with its own `registerTool()` call — no registry abstraction.
- All handlers use existing modules only (no new imports or files).
- SDK quirk: `isError: true` wraps results in JSON-RPC error envelope (`code: -32603`).
### Task 5.4 - Normalize MCP tool error formatting ✅
MCP tool error formatting normalized in `src/server.js`. All 5 tool registrations now produce a single "Error:" prefix — no more duplicate `"Error: Error:"` strings.
**Changes:** Each tool callback normalizes the error text before returning:
- If `result.error` already starts with `"Error:"`, it is used as-is.
- Otherwise, `"Error: "` is prepended.
- `result.ok` responses are unchanged.
Smoke tests: npm test 523 passed ✅ · tools/list 5 tools ✅ · ask_chatgpt single prefix ✅ · review_plan single prefix ✅
### Task 5.5 - Claude Code MCP configuration and local end-to-end setup ✅
Project-local Claude Code discovery configured:
- `.claude/` added to `.gitignore` — no machine-specific paths in repo
- README.md updated with Setup, MCP Tools, and Running sections
- MCP config uses `"command": "npm"`, `"args": ["start"]` — platform-independent
- All 5 tools documented: `ask_chatgpt`, `review_plan`, `review_code`, `debug_issue`, `architecture_review`
## Next Pending
N/A — all planned tasks complete.
## General Rules
- Read ARCHITECTURE.md before making changes.
- Work incrementally.
- Keep changes small.
- Do not implement multiple phases at once.
- Do not add features not described in ARCHITECTURE.md.
- Update documentation when appropriate.
- Claude Code is the implementation agent.
- ChatGPT MCP is advisory only.