feat: add manual export provider

This commit is contained in:
2026-06-15 11:06:00 +01:00
parent 94aaa80181
commit 1228d9f2db
3 changed files with 85 additions and 6 deletions
+32 -2
View File
@@ -87,9 +87,9 @@ Decoupled tool handlers from OpenAI implementation via a provider abstraction la
|------|-------|--------|
| test/tools/ask-chatgpt.test.js | 27 | ✅ |
| test/tools/review-plan.test.js | 28 | ✅ |
| test/tools/review-code.test.js | 28 | ✅ |
| test/tools/review-code.test.js | 27 | ✅ |
| test/tools/debug-issue.test.js | 28 | ✅ |
| test/tools/architecture-review.test.js | 28 | ✅ |
| test/tools/architecture-review.test.js | 27 | ✅ |
### New provider/config tests (3 files)
| File | Tests | Status |
@@ -103,6 +103,36 @@ Decoupled tool handlers from OpenAI implementation via a provider abstraction la
- `npm start` → tools/list shows same 5 tools, unchanged schemas
- Zero regression in existing test coverage
## Completed (Phase 8) — Manual Export Provider ✅
### src/providers/manual-export.js
- `manualExportProvider.send(request, config)` — zero-API-cost provider
- Wraps pre-built prompt in copy/paste-ready format for ChatGPT Web (`https://chatgpt.com`)
- Detects tool name from input fields: `debug_issue`, `review_code`, `architecture_review`, `review_plan`, `ask_chatgpt`
- Adds box-delimited display with `│` prefixes, corner delimiters (┌ ┐ └ ┘)
- Includes instructions section (5 numbered steps), metadata section (tool, provider, length)
- Warns on prompts over 30k characters
- Handles empty/missing prompt gracefully with advisory message
- Preserves unicode, markdown code blocks, JSON, special HTML characters exactly
### Factory integration
- `"manual"` added to SUPPORTED_PROVIDERS whitelist in `src/providers/factory.js`
- `CHATGPT_MCP_PROVIDER=manual` switches all tool handlers to manual export mode
- Defaults to `"openai"` when not set — OpenAI behaviour unchanged
- Same provider interface: `{ send(request, config) => Promise<{ content: string }> }`
### Tests added (Phase 8)
| File | Tests | Coverage |
|------|-------|----------|
| test/providers/manual-export.test.js | 56 | structure, tool detection, unicode, long prompts, edge cases, repeatability, visual layout |
| test/providers/factory.test.js | +9 manual provider tests | factory integration with "manual" |
### Final verification
- All 644 tests pass across 21 test files, zero regressions
- `npm start` → tools/list shows same 5 tools, unchanged schemas
- No `chat.openai.com` references in codebase — only `chatgpt.com`
- MCP initialize handshake succeeds with chatgpt-mcp v0.1.0
## Completed (Phase 5)
**All five MCP tools registered:** ask_chatgpt, review_plan, review_code, debug_issue, architecture_review.
+21 -3
View File
@@ -6,11 +6,11 @@ ChatGPT MCP Server
## Status
Planning complete. Phase 0 complete. Phase 1 complete. Phase 2 complete. Phase 3 complete. Phase 4 complete. Task 5.1 complete. Task 5.2 complete. Task 5.3 complete. Task 5.4 complete. Task 5.5 complete. Phase 6 complete. Phase 7 complete.
Planning complete. Phase 0 complete. Phase 1 complete. Phase 2 complete. Phase 3 complete. Phase 4 complete. Task 5.1 complete. Task 5.2 complete. Task 5.3 complete. Task 5.4 complete. Task 5.5 complete. Phase 6 complete. Phase 7 complete. Phase 8 complete (Task 8.0 — Manual Export Provider).
## Current Phase
All planned phases complete. Provider abstraction (Phase 6) and all tests (Phase 7) finished.
All planned phases complete. Provider abstraction (Phase 6), integration tests (Phase 7), and manual export provider (Phase 8) finished.
## Completed Tasks
@@ -118,6 +118,24 @@ Project-local Claude Code discovery configured:
- All 579 tests pass across 20 test files with zero regressions
- `npm start` → tools/list shows same 5 tools with unchanged schemas
- Task 8.0 — Implement ReviewRequest and Manual Export Provider ✅
**Provider implementation:**
- `src/providers/manual-export.js` — Zero-API-cost provider that wraps pre-built prompts in copy/paste-ready format
- Returns `{ content: string }` via `send(reviewRequest, config)`
- Uses `https://chatgpt.com` (never `https://chat.openai.com`)
- Detects tool name from input fields for metadata
- Warns on prompts over 30k characters
- Preserves unicode, markdown, code blocks, and special characters exactly
**Factory integration:**
- `"manual"` added to SUPPORTED_PROVIDERS whitelist in `src/providers/factory.js`
- `CHATGPT_MCP_PROVIDER=manual` switches all tool handlers to manual export mode
- Defaults to `"openai"` when not set — OpenAI behaviour unchanged
**Tests:** 56 new tests in `test/providers/manual-export.test.js` + 9 new in `test/providers/factory.test.js`
- Total: 644 passing tests across 21 test files, zero regressions
- `.claude/` added to `.gitignore` (no machine-specific paths committed)
- README.md updated with Setup, MCP Tools, and Running sections
- MCP config snippet uses `"command": "npm"`, `"args": ["start"]` — no absolute paths
@@ -192,4 +210,4 @@ All tests rewritten and verified:
## Next Pending
No pending tasks. MVP is complete. Future work roadmap: additional provider implementations (Ollama, Anthropic), streaming responses, response caching, structured output parsing.
No pending tasks. MVP is complete. Future work roadmap: Ollama provider implementation, Anthropic provider, streaming responses, response caching, structured output parsing.
+32 -1
View File
@@ -677,6 +677,36 @@ Status: ✅ Complete
---
### Task 8.0 — Implement ReviewRequest and Manual Export Provider
Add a zero-API-cost Manual Export provider that generates copy/paste-ready prompts for ChatGPT Web (https://chatgpt.com).
**Files created:**
- `src/providers/manual-export.js` — Manual export provider implementing `{ send(request, config) => Promise<{ content: string }> }`
- `test/providers/manual-export.test.js` — 56 tests covering structure, tool detection, unicode, long prompts, edge cases, repeatability
**Files modified:**
- `src/providers/factory.js` — Added `"manual"` to SUPPORTED_PROVIDERS whitelist
- `.env.example` — Documents `CHATGPT_MCP_PROVIDER=manual` option
- `README.md` — Documents manual provider in Architecture table
- `ARCHITECTURE.md` §12 — Already lists `"manual"` as supported provider
**What it provides:**
- Provider receives `{ prompt, input }` from the ReviewRequest pattern
- Wraps the pre-built prompt in a box-delimited copy/paste format for ChatGPT Web
- Uses `https://chatgpt.com` (not `https://chat.openai.com`)
- Detects tool name from input fields (debug_issue, review_code, architecture_review, review_plan, ask_chatgpt)
- Adds prompt length metadata and advisory footer
- Warns on prompts over 30k characters
- Zero API calls — purely cosmetic wrapping
**Tests added:** 56 new tests in manual-export.test.js + 9 in factory.test.js for manual provider
**Total test count:** 644 passing across 21 test files, zero regressions
Status: ✅ Complete
---
## Completion Summary
| Phase | Description | Status |
@@ -689,5 +719,6 @@ Status: ✅ Complete
| 5 | MCP Server and Registration | ✅ Complete (5 tools registered) |
| 6 | Provider Abstraction | ✅ Complete (factory + adapter) |
| 7 | Integration and Tests | ✅ Complete (579 tests across 20 files) |
| 8 | Manual Export Provider | ✅ Complete (Task 8.0, 644 tests across 21 files) |
**Total:** All planned MVP tasks complete. 579 passing tests, zero regressions, all docs updated.
**Total:** All planned MVP tasks complete. 644 passing tests, zero regressions, all docs updated.