bigwolfe
implementation 1 -- all features built, testing needed
531624f

Tasks: ChatGPT App Integration

Feature: 003-chatgpt-app-integration Status: Pending Spec: spec.md

Phase 1: Setup (Project Initialization)

Goal: Configure build pipelines and backend settings to support the new widget and auth modes.

  • T001 Update backend/src/services/config.py to include chatgpt_service_token and chatgpt_cors_origin fields
  • T002 Update frontend/vite.config.ts to support multi-page build (index.html and widget.html)
  • T003 Create frontend/widget.html as the entry point for the ChatGPT widget
  • 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.

  • T005 Refactor backend/src/services/auth.py to implement Strategy pattern (JWTValidator and StaticTokenValidator)
  • T006 [P] Create unit tests for new Auth Strategy in backend/tests/unit/test_auth_strategy.py
  • T007 Update backend/src/api/middleware/auth_middleware.py to use the new Auth Service strategies
  • T008 Update backend/src/api/main.py to configure CORS for https://chatgpt.com
  • 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.

  • T010 [US1] Extract NoteViewer component logic into a reusable pure component (if not already) in frontend/src/components/NoteViewer.tsx
  • T011 [P] [US1] Create SearchWidget component in frontend/src/components/SearchWidget.tsx for the widget view
  • T012 [US1] Implement WidgetApp component in frontend/src/widget.tsx to handle routing between Note and Search views based on props/URL
  • T013 [US1] Update backend/src/mcp/server.py read_note tool to return CallToolResult with _meta.openai.outputTemplate
  • 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.

  • T015 [US2] Verify write_note tool functionality with Service Token auth (no code change expected if T007 is correct, but validation needed)
  • 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.

  • T017 Verify widget load performance and optimize bundle size if needed
  • 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.