home-dir-layout修正

This commit is contained in:
2026-04-27 22:10:36 +09:00
parent 8658845b02
commit 8cf0bd6374
9 changed files with 94 additions and 26 deletions
+3 -3
View File
@@ -87,14 +87,14 @@ target = "/abs/path"
permission = "write"
```
`[model]``ref = "<provider>/<model_id>"` でプロバイダ / モデルカタログを引く短縮形と、`scheme` / `model_id` / `auth` を直書きする inline 形式の両方を受ける。カタログは `resources/{providers,models}/builtin.toml` を builtin、`$XDG_CONFIG_HOME/insomnia/{providers,models}.toml` を user override として解決する。詳細は `docs/pod-factory.md``crates/provider/README.md`
`[model]``ref = "<provider>/<model_id>"` でプロバイダ / モデルカタログを引く短縮形と、`scheme` / `model_id` / `auth` を直書きする inline 形式の両方を受ける。カタログは `resources/{providers,models}/builtin.toml` を builtin、`<config_dir>/{providers,models}.toml` を user override として解決する`<config_dir>` の解決ルールは `manifest::paths` 参照)。詳細は `docs/pod-factory.md``crates/provider/README.md`
### PodFactory: カスケード設定
マニフェストを手書きせず、4 層のカスケードで `PodManifest` を組み立てる:
1. **ビルトインデフォルト**`manifest::defaults` の定数値
2. **ユーザー manifest**`$XDG_CONFIG_HOME/insomnia/manifest.toml`
2. **ユーザー manifest**`<config_dir>/manifest.toml``manifest::paths` で解決)
3. **プロジェクト manifest**`.insomnia/manifest.toml`cwd から上方向に探索)
4. **プログラマティック overlay** — CLI / GUI / spawn 時のインライン指定
@@ -105,7 +105,7 @@ permission = "write"
`worker.instruction` はファイル参照。3 層の prefix addressing でプロンプト資産を解決:
- `$insomnia/...` — バイナリ同梱(`resources/prompts/``include_dir!` で埋め込み)
- `$user/...``$XDG_CONFIG_HOME/insomnia/prompts/`
- `$user/...``<config_dir>/prompts/``manifest::paths` で解決)
- `$workspace/...``<project>/.insomnia/prompts/`
テンプレートは minijinja で評価。`{% include "$insomnia/common/tool-usage" %}` のようにプロンプト間で参照可能(prefix なしの include は現在のファイルからの相対解決)。
+1 -1
View File
@@ -44,7 +44,7 @@ Ollama は独自 scheme を作らず `scheme/anthropic` を base_url 差し替
## 実装原則
- 認証ストアを読むアダプタ(`~/.codex/auth.json` 等)は **llm-worker 直下に置かず上位層に配置**。llm-worker は低レベル基盤に留める方針(`feedback_llm_worker_scope.md`)と整合
- モデル列挙は **auto_discover と宣言型の両輪**。Ollama は `/api/tags` で自動、OpenAI 互換枠はモデルカタログ(`resources/models/builtin.toml` + `$XDG_CONFIG_HOME/insomnia/models.toml` の user override)で宣言
- モデル列挙は **auto_discover と宣言型の両輪**。Ollama は `/api/tags` で自動、OpenAI 互換枠はモデルカタログ(`resources/models/builtin.toml` + `<config_dir>/models.toml` の user override`<config_dir>``manifest::paths` で解決)で宣言
- UI のプロバイダ選択肢も第一級 → 二次の優先順位で並べる
- **`ollama launch insomnia` 対応を視野に**、env 注入(`ANTHROPIC_BASE_URL` / `OPENAI_BASE_URL` 等)で起動設定を受け入れる作り
+8 -8
View File
@@ -13,7 +13,7 @@ overlay をマージして、検証済みの `PodManifest` と `PromptLoader`
| 優先度 | 層 | 位置 | 典型的な内容 |
|---|---|---|---|
| 1 | ビルトインのデフォルト | `manifest::defaults` モジュールの `pub const` 群を `PodManifestConfig::builtin_defaults()` が cascade 層として注入 | `tool_output.default_max_bytes = 16KB` など |
| 2 | ユーザー manifest | `$XDG_CONFIG_HOME/insomnia/manifest.toml`(未設定時は `~/.config/insomnia/manifest.toml`) | プロバイダ指定、デフォルトモデル、常用ツール設定 |
| 2 | ユーザー manifest | `<config_dir>/manifest.toml`(解決ルールは `manifest::paths`) | プロバイダ指定、デフォルトモデル、常用ツール設定 |
| 3 | プロジェクト manifest | 起動ディレクトリから上方向に探索した最初の `<root>/.insomnia/manifest.toml` | scope、compaction、プロジェクト固有の instruction |
| 4 | プログラマティック overlay | CLI / GUI / 別 Pod からの spawn 等 | `pod.name``pod.pwd` のような Pod 固有値 |
@@ -48,7 +48,7 @@ manifest 中のパス(`provider.api_key_file` / `scope.*.target` /
| 層 | ベース |
|---|---|
| user manifest (`~/.config/insomnia/manifest.toml`) | そのファイルの親ディレクトリ |
| user manifest (`<config_dir>/manifest.toml`) | そのファイルの親ディレクトリ |
| project manifest (`<project>/.insomnia/manifest.toml`) | **プロジェクトルート**`.insomnia/` の親)。`target = "."` がワークスペース全体を指すように |
| overlayinline TOML・programmatic | プロセスの `current_dir()` |
@@ -76,7 +76,7 @@ resolve 段を取りこぼしている証拠なので `ResolveError::RelativePat
### ユーザー層(最小)
`$XDG_CONFIG_HOME/insomnia/manifest.toml`:
`<config_dir>/manifest.toml`:
```toml
[model]
@@ -180,7 +180,7 @@ import-map 形式のプレフィックスで指定する:
| プレフィックス | 解決先 |
|---|---|
| `$insomnia` | バイナリ同梱の `resources/prompts/``include_dir!` |
| `$user` | `$XDG_CONFIG_HOME/insomnia/prompts/` |
| `$user` | `<config_dir>/prompts/``manifest::paths` で解決) |
| `$workspace` | `<project>/.insomnia/prompts/` |
- `.md` 拡張子は省略する(例: `$insomnia/default``resources/prompts/default.md`
@@ -238,15 +238,15 @@ pod [--user-manifest <path>] [--project <path>] [--overlay <toml>]
| フラグ | 説明 |
|---|---|
| `--user-manifest` | ユーザー manifest のパス。省略時は XDG から自動解決 |
| `--user-manifest` | ユーザー manifest のパス。省略時は `manifest::paths::user_manifest_path()`自動解決 |
| `--project` | プロジェクト manifest 探索の起点。省略時は cwd から上方向に `.insomnia/` を探索 |
| `--overlay` | 最上層の overlay を inline TOML 文字列で渡す(例: `--overlay 'worker.instruction = "$user/foo"'` |
| `-s, --store` | セッション永続化ディレクトリ(デフォルト: `~/.insomnia/sessions/` |
| `-s, --store` | セッション永続化ディレクトリ(デフォルト: `<data_dir>/sessions/``manifest::paths` で解決 |
Pod の作業ディレクトリは `pod` 起動時の cwd が直接使われる。別ディレクトリで
動かしたい場合は `cd <path> && pod ...` のように外側で `cd` してから起動する。
引数無しで起動すると、cwd + XDG の自動解決だけで動く最小構成になる
引数無しで起動すると、cwd + `manifest::paths` の自動解決だけで動く最小構成になる
(overlay 無し、プロジェクトに `.insomnia/manifest.toml` があればそれを使う)。
---
@@ -257,7 +257,7 @@ Pod の作業ディレクトリは `pod` 起動時の cwd が直接使われる
use pod::{Pod, PodFactory};
let (manifest, loader) = PodFactory::new()
.with_user_manifest_auto()? // XDG から自動読み込み、不在 OK
.with_user_manifest_auto()? // manifest::paths から自動読み込み、不在 OK
.with_project_manifest_auto()? // cwd から上方向に .insomnia/ を探索、不在 OK
.with_overlay_toml(overlay)? // programmatic な最上層 overlay
.resolve()?; // -> (PodManifest, PromptLoader)