開発コンポーネント
プロジェクトエディタコンポーネント
執筆画面を構成するエディタパネルコンポーネント群
プロジェクトエディタコンポーネント
執筆画面(/project/[id])を構成する主要なパネルコンポーネントです。
LeftPanel (Plot Panel)
プロットの構造(Part > Arc > Chapter > Story > Section)をツリー形式で管理・表示するコンポーネントです。
- 責務:
- プロット階層の表示と操作(追加、削除、並べ替え、編集)。
- ドラッグ&ドロップによる並べ替え:
@dnd-kit/coreを使用してプロットアイテムの並べ替えを可能にする。 - 同期スクロール (受信):
selectedSectionAtomの変更を監視し、外部(CenterPanelなど)でセクションが選択された場合、自動的に該当するプロットアイテムまでツリーを展開し、スクロールして表示する。 - AIによるプロット生成・翻訳のトリガー。
- 各プロットアイテムに対して、生成、翻訳、リライト、編集、削除などのアクションを提供する。
- 関連Atoms:
partsAtom: プロットデータ全体。selectedSectionAtom: 現在選択されているセクションID。plotCollapseStateAtom: ツリーの展開状態を管理。generatingSectionAtom: 生成中のセクションIDを管理。editingPlotItemAtom: 編集中のプロットアイテムを管理。focusedPlotItemAtom: フォーカス中のプロットアイテムを管理。
CenterPanel (Manuscript Panel)
原稿の執筆・閲覧を行うメインパネルです。
- 責務:
- プロットに対応する原稿カード(
ManuscriptCard)のリスト表示。 - 同期スクロール (送信): 原稿カードがクリックされた際、
selectedSectionAtomを更新してLeftPanelへ通知する。 - 同期スクロール (受信):
selectedSectionAtomが変更された際、該当する原稿カードまでスクロールする。 - 未執筆箇所のハンドリング: 選択されたセクションに対応する原稿カードが存在しない場合(未執筆)、自動的にリストの最下部(新規執筆位置)までスクロールする。
- 原稿の削除: 確認ダイアログ付きで原稿バージョンの削除機能を提供。
- 原稿の再生成: AIによる原稿の再生成機能を提供。
- 全原稿の整理: 使用されていない原稿バージョンを一括削除する「整理」機能を提供。
- 保存機能: プロジェクトの保存状態を表示し、保存ボタンを提供。
- プロットに対応する原稿カード(
- 関連Atoms:
manuscriptsAtom: 原稿データ。selectedSectionAtom: スクロール同期のキーとなる状態。isProjectDirtyAtom: プロジェクトの未保存状態を管理。manuscriptFontSizeAtom: 原稿のフォントサイズ。manuscriptFontWeightAtom: 原稿のフォントウェイト。manuscriptContentChangeAtom: 原稿内容の変更を処理。deleteManuscriptVersionAtom: 原稿バージョンの削除。pruneAllManuscriptsAtom: 全原稿の整理。
ManuscriptCard
個々の原稿セクションを表示・編集するカードコンポーネントです。
- 責務:
- 原稿本文の表示と編集(
Textarea)。 - バージョン管理(翻訳、オリジナル)の切り替え。
- 選択検知: クリックイベントを親コンポーネントに通知し、アクティブなセクションとして設定させる。
- 文字数カウンター: 原稿の文字数をリアルタイムで表示。
- 原稿本文の表示と編集(
RightPanel (Writing Tools Panel)
執筆支援ツールを提供するパネルコンポーネントです。
- 責務:
- タブ構成: 「執筆プロンプト」と「AI設定」の2つのタブを提供。
- 執筆プロンプトタブ:
PromptManagementPanelを使用して、プロジェクト固有の執筆プロンプトを管理。 - AI設定タブ:
ConfigurableApiSettingsPanelを使用して、AI生成のための設定(プロバイダー、モデル、温度など)を管理。
- 関連Atoms:
writingPromptsAtom: プロジェクト固有の執筆プロンプト一覧。addWritingPromptAtom: 新規プロンプトの追加。updateWritingPromptAtom: プロンプトの更新。deleteWritingPromptAtom: プロンプトの削除。reorderWritingPromptsAtom: プロンプトの並べ替え。writingLlmProviderAtom: AIプロバイダーの設定。writingModelAtom: AIモデルの設定。writingTemperatureAtom: 生成温度の設定。writingTopPAtom: Top-Pの設定。writingStreamingEnabledAtom: ストリーミング生成の有効/無効。writingContextWindowAtom: コンテキストウィンドウの設定。writingApiRequestIntervalAtom: APIリクエスト間隔の設定。
RewriteDialog
AIによる原稿のリライト・推敲を行うためのモーダルダイアログです。
- 責務:
- 一括リライト対象のセクション一覧表示。
- グローバル指示およびプロンプトアセットの構成。
- AIによるプランニング結果とリライトプレビューの表示。
diffライブラリを用いた新旧原稿の文字単位差分表示。- 生成結果の直接編集(Editモード)と、最終的な原稿への一括適用。
- 関連Atoms:
rewriteStateAtom: ダイアログの状態(指示、プレビュー、進行状況など)を永続化。manuscriptsAtom: リライト結果の適用先。
PromptAssetSelector
リライト指示に使用するプロンプトのテンプレート(アセット)を選択するためのシートコンポーネントです。
- 責務:
- 保存済みプロンプトアセットの検索と一覧表示。
- 選択されたアセットを
RewriteDialogの指示に統合。
- データソース:
promptAssetsAtom: データベースから取得したプロンプトアセット一覧。
PromptManagementPanel
プロンプトアセットを管理するためのパネルコンポーネントです。
- 責務:
- プロンプトアセットの作成、編集、削除。
- タグによるフィルタリングと検索。
- 有効/無効の切り替え。
- ドラッグ&ドロップによる並べ替え。
- データソース:
- 対象となるプロンプトAtom(執筆プロンプトなど)。
- 各種操作Atom(追加、更新、削除、並べ替え)。
プロンプトシステムのアーキテクチャ
本アプリケーションのプロンプトシステムは、3つの異なるテーブルで管理され、それぞれ異なるスコープと用途を持ちます。
執筆プロンプト (writingPrompts)
- スコープ: プロジェクト固有
- 用途: 執筆支援(プロット生成、文章生成など)
- 管理場所: プロジェクトごとの
writingPromptsテーブル - 同期: Project Chunk に含まれる
- UI: 右パネルの「執筆プロンプト」タブ
チャットプロンプト (chatPrompts)
- スコープ: グローバル
- 用途: AIチャットの性格や振る舞いを定義
- 管理場所: グローバルな
chatPromptsテーブル - 同期: Global Chunk に含まれる
- UI: チャット設定画面
プロンプトアセット (prompt_assets)
- スコープ: グローバル
- 用途: 再利用可能なプロンプトテンプレート(タグ、説明、公開設定などのメタデータを含む)
- 管理場所: グローバルな
prompt_assetsテーブル - 同期: Global Chunk に含まれる
- UI: プロンプト管理パネル、リライトダイアログ内のアセット選択
同期トリガー
- プロンプトアセットの変更時:
globalChunkVersionAtomが更新され、Global Chunk の同期がトリガーされます。 - 執筆プロンプトの変更時: プロジェクトの
updatedAtが更新され、Project Chunk の同期がトリガーされます。