セッションのドメインモデル。チャットセッションを生成・永続化し、親/子の関係と使用量を追跡し、ストレージ行とランタイムオブジェクト間をマッピングし、セッションのライフサイクルイベントをバスに発行する。
Classes
Members
(static, constant) Event
セッション関連のイベント。Created/Updated/Deleted はプロジェクター経由で永続化される同期イベントであり、Diff と Error はバス専用のイベントである。
(static, constant) getUsage
モデルステップのトークン使用量とコストを計算する。プロバイダーの使用量フィールドを正規化し(キャッシュ済みトークンを入力から減算し、推論トークンを分離する)、モデルの 100 万トークンあたりの価格(オプションの 200K 超ティアを含む)を適用する。
(static, constant) layer
Session サービスを構築する Layer。セッション・メッセージ・パートに対する CRUD を提供する。
Methods
(static) fromRow(row) → {Object}
sqlite のセッション行をランタイムのセッション Info オブジェクトに変換する。ネストされた summary/share/model/time フィールドをデコードし、null を undefined に正規化する。
| Name | Type | Description |
|---|---|---|
row | Object | プレーンなデータベース行。 |
セッション Info オブジェクト。
- Type:
- Object
(static) isDefaultTitle(title) → {boolean}
タイトルが自動生成されたデフォルト(プレフィックス + ISO タイムスタンプ)かどうかを判定する。
| Name | Type | Description |
|---|---|---|
title | string | 判定対象のセッションタイトル。 |
タイトルがデフォルトタイトルのパターンに一致する場合は true。
- Type:
- boolean
(static) listGlobal(input) → {AsyncGenerator.<Object>}
全プロジェクトを横断してセッションを非同期に反復処理する(現在のインスタンスにスコープされない)。任意のディレクトリ/ルート/期間/検索/アーカイブ済みフィルタを適用し、各セッションをそのプロジェクトサマリと結合する。
| Name | Type | Description |
|---|---|---|
input | Object | 任意のフィルタ |
GlobalInfo 形式のセッションオブジェクトに project を付加して yield する。
- Type:
- AsyncGenerator.<Object>
(static) plan(input, instance) → {string}
セッションのプラン markdown ファイルの絶対パスを計算する。プロジェクトがバージョン管理下にある場合は worktree の .closedcode/plans 配下に、そうでない場合はグローバルデータディレクトリ配下に格納される。
| Name | Type | Description |
|---|---|---|
input | Object |
|
instance | Object |
|
プランファイルへの絶対パス。
- Type:
- string
(static) toRow(info) → {Object}
ランタイムのセッション Info オブジェクトを sqlite の行に変換する。ネストされた summary/share/time フィールドをそれぞれのカラム名にフラット化する。
| Name | Type | Description |
|---|---|---|
info | Object | セッション Info オブジェクト。 |
データベース行の表現。
- Type:
- Object
(inner) createDefaultTitle(isChild) → {string}
タイムスタンプ付きのプレフィックスからデフォルトのセッションタイトルを構築する。
| Name | Type | Default | Description |
|---|---|---|---|
isChild | boolean | false | セッションが子セッションかどうか(子用のプレフィックスを使用する)。 |
生成されたデフォルトタイトル。
- Type:
- string
(inner) db(fn) → {*}
非同期のデータベースコールバックを Effect 内で実行し、sequelize のハンドルを提供する。
| Name | Type | Description |
|---|---|---|
fn | function | ハンドル |
コールバックの結果を返す Effect。
- Type:
- *
(inner) getForkedTitle(title) → {string}
フォークしたセッションのタイトルを導出する。既存の (fork #N) サフィックスをインクリメントするか、存在しない場合は (fork #1) を付加する。
| Name | Type | Description |
|---|---|---|
title | string | 元のセッションタイトル。 |
新しいフォークのタイトル。
- Type:
- string
(async, inner) listByProject(input) → {Promise.<Array>}
プロジェクトのセッションを照会する。任意のワークスペース/パス/ディレクトリ、ルートのみ、開始時刻、タイトル検索によるフィルタを適用し、最終更新が新しい順に並べる。
| Name | Type | Description |
|---|---|---|
input | Object |
|
一致するセッションの Info オブジェクトの promise。
- Type:
- Promise.<Array>
(inner) plain(row) → {Object}
sequelize の行インスタンスからプレーンな JS オブジェクトを抽出する。
| Name | Type | Description |
|---|---|---|
row | * | sequelize の行(または null/undefined)。 |
プレーンな行オブジェクト。行が null の場合は undefined。
- Type:
- Object
(inner) sessionPath(worktree, cwd) → {string}
worktree からの相対的なセッションのディレクトリパスを計算し、スラッシュに正規化する。
| Name | Type | Description |
|---|---|---|
worktree | string | 絶対パスの worktree ルート。 |
cwd | string | セッションの作業ディレクトリ。 |
worktree 相対かつスラッシュ正規化されたパス。
- Type:
- string