# llm-worker-rs 開発instruction ## パッケージ管理ルール - クレートに依存関係を追加・更新する際は必ず `cargo`コマンドを使い、`Cargo.toml`を直接手で書き換えず、必ずコマンド経由で管理すること。 ## worker-types `worker-types` クレートには次の条件を満たす型だけを置く。 1. **共有セマンティクスの源泉** - ランタイム(`worker`)、proc-macro(`worker-macros`)、外部利用者のすべてで同じ定義を共有したい値型。 - 例: `BlockId`, `ProviderEvent`, `ToolArgumentsDelta` などイベント/DTO群。 2. **シリアライズ境界を越えるもの** - serde経由でプロセス外へ渡したり、APIレスポンスとして公開するもの。 - ロジックを持たない純粋なデータキャリアに限定する。 3. **依存の最小化が必要な型** - `serde`, `serde_json` 程度の軽量依存で収まる。 4. **マクロが直接参照する型** - 属性/derive/proc-macro が型に対してコード生成する場合は `worker-macros` -> `worker-types` の単方向依存を維持するため、対象型を `worker-types` に置く。 5. **副作用を伴わないこと** - `worker-types` 内では I/O・状態保持・スレッド操作などの副作用を禁止。 - 振る舞いを持つ場合でも `impl` は純粋な計算か軽量ユーティリティのみに留める。 この基準に当てはまらない型(例えばクライアント状態管理、エラー型で追加依存が必要、プロバイダ固有ロジックなど)は `worker` クレート側に配置し、どうしても公開が必要なら `worker` 経由で再エクスポートする。 何にせよ、`worker` -> `worker-types`の片方向依存を維持すること。