File size: 3,669 Bytes
c30798d
 
 
 
 
 
 
 
 
 
531624f
 
 
 
c30798d
 
 
 
 
531624f
 
 
 
 
c30798d
 
 
 
 
531624f
 
 
 
 
c30798d
 
 
 
 
531624f
 
c30798d
 
 
 
 
531624f
 
c30798d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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.