bigwolfe
implementation 1 -- all features built, testing needed
531624f
# Tasks: ChatGPT App Integration
**Feature**: 003-chatgpt-app-integration
**Status**: Pending
**Spec**: [spec.md](spec.md)
## Phase 1: Setup (Project Initialization)
*Goal: Configure build pipelines and backend settings to support the new widget and auth modes.*
- [x] T001 Update `backend/src/services/config.py` to include `chatgpt_service_token` and `chatgpt_cors_origin` fields
- [x] T002 Update `frontend/vite.config.ts` to support multi-page build (`index.html` and `widget.html`)
- [x] T003 Create `frontend/widget.html` as the entry point for the ChatGPT widget
- [x] T004 Create `frontend/src/widget.tsx` as the root React component for the widget
## Phase 2: Foundational Tasks
*Goal: Establish authentication and infrastructure required for the integration.*
- [x] T005 Refactor `backend/src/services/auth.py` to implement Strategy pattern (`JWTValidator` and `StaticTokenValidator`)
- [x] T006 [P] Create unit tests for new Auth Strategy in `backend/tests/unit/test_auth_strategy.py`
- [x] T007 Update `backend/src/api/middleware/auth_middleware.py` to use the new Auth Service strategies
- [x] T008 Update `backend/src/api/main.py` to configure CORS for `https://chatgpt.com`
- [x] T009 [P] Update `backend/src/api/main.py` to serve `widget.html` on `/widget` route with `text/html+skybridge` MIME type
## Phase 3: User Story 1 - The Recall Loop
*Goal: Enable searching and viewing notes within ChatGPT.*
- [x] T010 [US1] Extract `NoteViewer` component logic into a reusable pure component (if not already) in `frontend/src/components/NoteViewer.tsx`
- [x] T011 [P] [US1] Create `SearchWidget` component in `frontend/src/components/SearchWidget.tsx` for the widget view
- [x] T012 [US1] Implement `WidgetApp` component in `frontend/src/widget.tsx` to handle routing between Note and Search views based on props/URL
- [x] T013 [US1] Update `backend/src/mcp/server.py` `read_note` tool to return `CallToolResult` with `_meta.openai.outputTemplate`
- [x] T014 [US1] Update `backend/src/mcp/server.py` `search_notes` tool to return `CallToolResult` with `_meta.openai.outputTemplate`
## Phase 4: User Story 2 - In-Context Editing
*Goal: Enable editing notes from ChatGPT interactions.*
- [x] T015 [US2] Verify `write_note` tool functionality with Service Token auth (no code change expected if T007 is correct, but validation needed)
- [x] T016 [US2] Implement auto-refresh or status indication in `WidgetApp` when a note is updated externally (by ChatGPT)
## Final Phase: Polish
*Goal: Ensure seamless experience and robustness.*
- [x] T017 Verify widget load performance and optimize bundle size if needed
- [x] T018 Add error boundary to `WidgetApp` to handle load failures gracefully inside the iframe
## Dependencies
1. **Setup (T001-T004)**: Must be done first to enable widget development.
2. **Foundational (T005-T009)**: Auth and serving infrastructure required before widgets can be loaded by ChatGPT.
3. **US1 (T010-T014)**: Depends on Foundational. T013/T014 depend on T009 (widget serving).
4. **US2 (T015-T016)**: Depends on US1.
## Parallel Execution Strategy
- **Frontend vs Backend**: T002-T004 (Frontend Setup) can run parallel to T001 & T005-T008 (Backend Auth).
- **Within US1**: T011 (Search Widget UI) and T013/T014 (MCP Tool Updates) can be done in parallel.
## Implementation Strategy
1. **Infrastructure First**: Get the backend serving the widget HTML and accepting the service token.
2. **Widget Shell**: Build the minimal widget shell that can display *something*.
3. **Tool Connection**: Wire up the MCP tools to point to the widget.
4. **Features**: Flesh out the Viewer and Search capabilities.