Skip to content

00_概要

システムの目的

Shadowwork Navigator は、ユーザーがシャドウワーク(内省ワーク)を継続できるようにするためのサービスである。
本リポジトリ(filix-shadowwork-api)は、そのバックエンド API として以下を提供する。

  • シャドウワークの進行を「スレッド(thread)」「実行(run)」として管理するための API
  • ユーザーの有料状態(paid)にもとづく利用権限の判定と、権限制御の土台
  • セッションの記録(メッセージ)と、後から参照するための取得 API
  • LLM(大規模言語モデル)との連携のためのサーバー側窓口(プロキシ)

目的を一言でまとめると、フロントエンドがシャドウワーク体験を提供するために必要な、状態管理・永続化・利用権限・LLM連携を、APIとして安定提供することである。

スコープ

対象(このバックエンドが責任を持つ範囲)

  • API提供
  • スレッドの開始/進行/状態取得/終了
  • 実行(run)の開始/再開、履歴の一覧取得
  • メッセージの保存と取得
  • 有料判定(paid)と、それに基づくアクセス許可の判断材料の提供
  • データ永続化
  • D1 に、スレッド・実行・メッセージ・ユーザーフラグ等を保存
  • 外部連携(バックエンド側の境界)
  • Stripe webhook による paid 更新(冪等性を含む)
  • LLM への問い合わせ(必要に応じてプロキシ)
  • 運用に必要な最小機能
  • ヘルスチェック、ログ出力、障害切り分けのための最低限の観測点

非対象(このバックエンドが責任を持たない範囲)

  • フロントエンド UI / UX(画面・導線・入力フォーム等)
  • 会員登録 / ログイン UI(Memberstack などの外部サービス側の体験)
  • 課金導線の UI(Checkout / Customer Portal 等の画面提供)
  • マーケティング機能(メルマガ、キャンペーン、アフィリエイト等)
  • 高度な分析・レポート(BI、行動分析、課金分析のダッシュボード等)
  • LLMの品質チューニングそのもの(プロンプトや会話設計は別ドキュメントで管理)

全体像

以下は「フロントエンド」「バックエンド」「外部サービス」「データストア」の関係を、箱と矢印のレベルで示す。

flowchart LR
  U[User] --> FE[Frontend: shadowwork-navigator]
  FE --> API[Backend API: filix-shadowwork-api]

  API --> D1[(Cloudflare D1)]
  API --> DO[Durable Objects<br/>(必要に応じて)]
  API --> LLM[LLM Provider]
  Stripe[Stripe] -->|Webhook| API
  MS[Memberstack] -. Auth context .-> FE

  subgraph Cloudflare
    API
    D1
    DO
  end

代表的な処理の流れ(例)

1. シャドウワークの開始〜進行〜終了

  • フロントエンドが thread を開始し、メッセージを送信しながら進行する
  • バックエンドは状態を保持し、必要なら LLM と連携し、結果を永続化する
sequenceDiagram
  autonumber
  participant U as User
  participant FE as Frontend
  participant API as Backend API
  participant D1 as D1
  participant LLM as LLM

  U->>FE: 入力(ワーク開始)
  FE->>API: thread start
  API->>D1: thread/run 作成
  API-->>FE: thread_id/run_id

  loop 進行(複数回)
    U->>FE: 入力(メッセージ)
    FE->>API: thread message
    API->>D1: message 保存
    API->>LLM: 応答生成(必要時)
    LLM-->>API: 応答
    API->>D1: 応答 message 保存
    API-->>FE: 応答
  end

  FE->>API: thread close(必要時)
  API->>D1: 状態更新
  API-->>FE: close 結果

2. 課金状態(paid)の更新と利用権限

  • Stripe から webhook が届く
  • バックエンドが検証し、D1 の paid 状態を更新する
  • フロントエンドは、必要に応じて paid 状態を照会し、UI/導線を分岐する
sequenceDiagram
  autonumber
  participant Stripe as Stripe
  participant API as Backend API
  participant D1 as D1
  participant FE as Frontend

  Stripe->>API: webhook(支払い完了等)
  API->>API: 署名検証・冪等性チェック
  API->>D1: user_flags 等を更新(paid)
  API-->>Stripe: 200 OK

  FE->>API: paid status check(必要時)
  API->>D1: paid 読み取り
  API-->>FE: paid=true/false

用語(本ドキュメントでの最小定義)

  • thread: 1つの内省ワークの会話単位(開始〜終了まで)
  • run: thread の進行を「1回の実行」として扱う単位(再開・履歴管理の軸)
  • message: thread/run に紐づく発話・応答の記録
  • paid: 有料状態を示すフラグ(利用権限の判断材料)