セッションのドメインモデル。チャットセッションを生成・永続化し、親/子の関係と使用量を追跡し、ストレージ行とランタイムオブジェクト間をマッピングし、セッションのライフサイクルイベントをバスに発行する。

Classes

BusyError
Service

Members

(static, constant) Event

セッション関連のイベント。Created/Updated/Deleted はプロジェクター経由で永続化される同期イベントであり、DiffError はバス専用のイベントである。

(static, constant) getUsage

モデルステップのトークン使用量とコストを計算する。プロバイダーの使用量フィールドを正規化し(キャッシュ済みトークンを入力から減算し、推論トークンを分離する)、モデルの 100 万トークンあたりの価格(オプションの 200K 超ティアを含む)を適用する。

(static, constant) layer

Session サービスを構築する Layer。セッション・メッセージ・パートに対する CRUD を提供する。

Methods

(static) fromRow(row) → {Object}

sqlite のセッション行をランタイムのセッション Info オブジェクトに変換する。ネストされた summary/share/model/time フィールドをデコードし、null を undefined に正規化する。

Parameters:
NameTypeDescription
rowObject

プレーンなデータベース行。

Returns:

セッション Info オブジェクト。

Type: 
Object

(static) isDefaultTitle(title) → {boolean}

タイトルが自動生成されたデフォルト(プレフィックス + ISO タイムスタンプ)かどうかを判定する。

Parameters:
NameTypeDescription
titlestring

判定対象のセッションタイトル。

Returns:

タイトルがデフォルトタイトルのパターンに一致する場合は true。

Type: 
boolean

(static) listGlobal(input) → {AsyncGenerator.<Object>}

全プロジェクトを横断してセッションを非同期に反復処理する(現在のインスタンスにスコープされない)。任意のディレクトリ/ルート/期間/検索/アーカイブ済みフィルタを適用し、各セッションをそのプロジェクトサマリと結合する。

Parameters:
NameTypeDescription
inputObject

任意のフィルタ { directory, roots, start, cursor, search, archived, limit }

Returns:

GlobalInfo 形式のセッションオブジェクトに project を付加して yield する。

Type: 
AsyncGenerator.<Object>

(static) plan(input, instance) → {string}

セッションのプラン markdown ファイルの絶対パスを計算する。プロジェクトがバージョン管理下にある場合は worktree の .closedcode/plans 配下に、そうでない場合はグローバルデータディレクトリ配下に格納される。

Parameters:
NameTypeDescription
inputObject

time.createdslug を提供するセッション情報。

instanceObject

project.vcsworktree を持つインスタンスコンテキスト。

Returns:

プランファイルへの絶対パス。

Type: 
string

(static) toRow(info) → {Object}

ランタイムのセッション Info オブジェクトを sqlite の行に変換する。ネストされた summary/share/time フィールドをそれぞれのカラム名にフラット化する。

Parameters:
NameTypeDescription
infoObject

セッション Info オブジェクト。

Returns:

データベース行の表現。

Type: 
Object

(inner) createDefaultTitle(isChild) → {string}

タイムスタンプ付きのプレフィックスからデフォルトのセッションタイトルを構築する。

Parameters:
NameTypeDefaultDescription
isChildbooleanfalse

セッションが子セッションかどうか(子用のプレフィックスを使用する)。

Returns:

生成されたデフォルトタイトル。

Type: 
string

(inner) db(fn) → {*}

非同期のデータベースコールバックを Effect 内で実行し、sequelize のハンドルを提供する。

Parameters:
NameTypeDescription
fnfunction

ハンドル { models, sequelize, tx } を受け取る非同期コールバック。

Returns:

コールバックの結果を返す Effect。

Type: 
*

(inner) getForkedTitle(title) → {string}

フォークしたセッションのタイトルを導出する。既存の (fork #N) サフィックスをインクリメントするか、存在しない場合は (fork #1) を付加する。

Parameters:
NameTypeDescription
titlestring

元のセッションタイトル。

Returns:

新しいフォークのタイトル。

Type: 
string

(async, inner) listByProject(input) → {Promise.<Array>}

プロジェクトのセッションを照会する。任意のワークスペース/パス/ディレクトリ、ルートのみ、開始時刻、タイトル検索によるフィルタを適用し、最終更新が新しい順に並べる。

Parameters:
NameTypeDescription
inputObject

projectID に加え、任意の workspaceIDpathdirectoryscoperootsstartsearchlimit を含むフィルタ。

Returns:

一致するセッションの Info オブジェクトの promise。

Type: 
Promise.<Array>

(inner) plain(row) → {Object}

sequelize の行インスタンスからプレーンな JS オブジェクトを抽出する。

Parameters:
NameTypeDescription
row*

sequelize の行(または null/undefined)。

Returns:

プレーンな行オブジェクト。行が null の場合は undefined。

Type: 
Object

(inner) sessionPath(worktree, cwd) → {string}

worktree からの相対的なセッションのディレクトリパスを計算し、スラッシュに正規化する。

Parameters:
NameTypeDescription
worktreestring

絶対パスの worktree ルート。

cwdstring

セッションの作業ディレクトリ。

Returns:

worktree 相対かつスラッシュ正規化されたパス。

Type: 
string