Compare commits
2 Commits
04f1837fa9
...
f09e6a0156
| Author | SHA1 | Date | |
|---|---|---|---|
| f09e6a0156 | |||
| 8c12e799da |
1
TODO.md
1
TODO.md
|
|
@ -1,7 +1,6 @@
|
|||
- Workflow / Skills
|
||||
- 内部 Worker / 内部 Pod の Workflow 化 → [tickets/internal-worker-workflow.md](tickets/internal-worker-workflow.md)
|
||||
- 半自動開発運用 Workflow → [tickets/auto-maintain-workflow.md](tickets/auto-maintain-workflow.md)
|
||||
- Workflow の物理配置を `.insomnia/workflow` に分離 → [tickets/workflow-directory-layout.md](tickets/workflow-directory-layout.md)
|
||||
- パーミッション: パターンベースのツール実行制御 → [tickets/permission-extension-point.md](tickets/permission-extension-point.md)
|
||||
- Pod CLI: マニフェスト関連フラグの整理 → [tickets/pod-cli-manifest-flags.md](tickets/pod-cli-manifest-flags.md)
|
||||
- Pod: 空応答ターン (Submit 後 AI 応答ゼロで Pause/Cancel) を自動巻き戻し → [tickets/pod-empty-turn-rollback.md](tickets/pod-empty-turn-rollback.md)
|
||||
|
|
|
|||
|
|
@ -443,8 +443,8 @@ mod tests {
|
|||
let layout = WorkspaceLayout::new(dir.path().to_path_buf());
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/memory/decisions")).unwrap();
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/memory/requests")).unwrap();
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/memory/workflow")).unwrap();
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/memory/_staging")).unwrap();
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/workflow")).unwrap();
|
||||
std::fs::create_dir_all(dir.path().join(".insomnia/knowledge")).unwrap();
|
||||
(dir, layout)
|
||||
}
|
||||
|
|
@ -556,7 +556,7 @@ mod tests {
|
|||
#[tokio::test]
|
||||
async fn memory_query_excludes_workflow_and_staging() {
|
||||
let (dir, layout) = setup();
|
||||
let wf = dir.path().join(".insomnia/memory/workflow/wf.md");
|
||||
let wf = dir.path().join(".insomnia/workflow/wf.md");
|
||||
std::fs::write(&wf, "needle in workflow\n").unwrap();
|
||||
let stg = dir.path().join(".insomnia/memory/_staging/abc.json");
|
||||
std::fs::write(&stg, "needle in staging\n").unwrap();
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ INSOMNIA が内部で固定 prompt を持って disposable Worker / 専用 Pod
|
|||
- Phase 2 統合 + 整理(`tickets/memory-phase2-consolidation.md`、本チケット時点では実装中 / 直前)
|
||||
- Compact(`PromptCatalog::compact_system`)
|
||||
|
||||
これらは実装内 `&str` 定数や `PromptCatalog` の overlay で管理されており、prompt の調整や運用カスタマイズが「コード変更 + 再ビルド」を要する。一方、ユーザー向け `/<slug>` Workflow(`tickets/workflow.md`)は `<workspace_root>/.insomnia/memory/workflow/<slug>.md` に住み、frontmatter + Markdown 本文 + `requires` Knowledge inject を持つ宣言形式で運用できる。
|
||||
これらは実装内 `&str` 定数や `PromptCatalog` の overlay で管理されており、prompt の調整や運用カスタマイズが「コード変更 + 再ビルド」を要する。一方、ユーザー向け `/<slug>` Workflow(`tickets/workflow.md`)は `<workspace_root>/.insomnia/workflow/<slug>.md` に住み、frontmatter + Markdown 本文 + `requires` Knowledge inject を持つ宣言形式で運用できる。
|
||||
|
||||
両者を寄せ、内部 Worker / 内部 Pod の prompt + ツール surface + Knowledge 依存を **Workflow と同一仕様で記述** できる経路を用意する。これにより:
|
||||
|
||||
|
|
@ -22,7 +22,7 @@ INSOMNIA が内部で固定 prompt を持って disposable Worker / 専用 Pod
|
|||
|
||||
`tickets/workflow.md` の Workflow 仕様は「ユーザーが `/<slug>` で submit する制約付き作業」だが、本チケットでは **内部トリガー(Pod 内部の状態遷移)から呼び出される Workflow** を一級扱いに広げる。
|
||||
|
||||
- 同じファイル形式(`memory/workflow/<slug>.md`)、同じ frontmatter / Linter
|
||||
- 同じファイル形式(`.insomnia/workflow/<slug>.md`)、同じ frontmatter / Linter
|
||||
- `user_invocable: false` で `/<slug>` 経路から見えなくする
|
||||
- `model_invokation` は通常 Pod 用の system prompt 注入仕様のまま(内部 Workflow は通常 OFF)
|
||||
- 内部 Workflow を識別するキー(例: `internal_role`)と、必要なツール surface を表明する手段を frontmatter に追加する。具体 schema は実装で詰める
|
||||
|
|
@ -59,7 +59,7 @@ Pod 側の既存トリガー(Phase 1 post-run / Phase 2 staging 閾値 / Compa
|
|||
## 完了条件
|
||||
|
||||
- 各内部 Worker / 内部 Pod(少なくとも Phase 1 / Phase 2 / Compact のうち、本チケット着手時点で実装済みのもの)が内部識別キー付き Workflow を解決して prompt とツール surface を組み立てる
|
||||
- workspace で `memory/workflow/<slug>.md` を上書きすれば内部 Worker の prompt が変わる
|
||||
- workspace で `.insomnia/workflow/<slug>.md` を上書きすれば内部 Worker の prompt が変わる
|
||||
- workspace に該当 Workflow が無い場合、bundled default が使われる
|
||||
- `user_invocable: false` の内部 Workflow は `/<slug>` 候補から除外され、ユーザーからは呼べない
|
||||
- 内部 Workflow も consolidation の自動書き込み禁止対象のまま(Linter で構造的担保、`workflow.md` と整合)
|
||||
|
|
|
|||
|
|
@ -1,115 +0,0 @@
|
|||
# Workflow の物理配置を `.insomnia/workflow` に分離する
|
||||
|
||||
## 背景
|
||||
|
||||
現行の Workflow は `<workspace>/.insomnia/memory/workflow/<slug>.md` に配置される。これは実装上 memory subsystem の loader / linter に載せていた名残だが、概念上は不自然になっている。
|
||||
|
||||
Workflow は session-derived な記憶ではなく、人間が管理する手順・操作ポリシーである。一方で `.insomnia/memory/summary.md`、`decisions/`、`requests/`、`_staging/` は自動抽出・統合される memory state であり、ignore や書き込み禁止の扱いも異なる。
|
||||
|
||||
この混在により、`.insomnia/.gitignore` で `memory` を ignore すると project-authored Workflow まで Git 管理から外れる。また、memory write tool が Workflow 書き込みを禁止するなど、「memory 配下にあるが memory ではない」ものとして扱う歪みが出ている。
|
||||
|
||||
Knowledge は既に `.insomnia/knowledge/<slug>.md` として `memory/` の外にある。Workflow も同様に `.insomnia/workflow/<slug>.md` を canonical path とし、memory state から分離する。
|
||||
|
||||
## 要件
|
||||
|
||||
### canonical path の変更
|
||||
|
||||
Workflow の標準配置を以下に変更する。
|
||||
|
||||
```text
|
||||
<workspace>/.insomnia/workflow/<slug>.md
|
||||
```
|
||||
|
||||
旧配置は以下。
|
||||
|
||||
```text
|
||||
<workspace>/.insomnia/memory/workflow/<slug>.md
|
||||
```
|
||||
|
||||
新規作成・ドキュメント・補完・resolver の説明は新配置を使う。旧配置の互換読み取りは行わない(このリポジトリ内で完結する移行であり、外部利用者の互換配慮は不要との判断)。旧配置にファイルが残っていても loader は読まないし、linter / scope deny も新配置のみを対象にする。
|
||||
|
||||
### linter / registry / completion
|
||||
|
||||
- Workflow linter は新配置を検査できる
|
||||
- `requires` の Knowledge 参照検査は従来通り維持する
|
||||
- `WorkflowRegistry` は新配置の source path を保持する
|
||||
- `/<slug>` completion / invocation は新配置から読める
|
||||
- resident workflow (`model_invokation: true`) の広告も新配置を対象にする
|
||||
|
||||
### memory state との分離
|
||||
|
||||
`.insomnia/memory/` は generated / session-derived state として扱い、Workflow は含めない。
|
||||
|
||||
推奨される layout:
|
||||
|
||||
```text
|
||||
.insomnia/
|
||||
manifest.toml
|
||||
workflow/
|
||||
auto-maintain.md
|
||||
worktree-workflow.md
|
||||
knowledge/
|
||||
<slug>.md
|
||||
memory/
|
||||
summary.md
|
||||
decisions/
|
||||
requests/
|
||||
_staging/
|
||||
```
|
||||
|
||||
`.insomnia/.gitignore` は `memory` 丸ごと ignore ではなく、generated memory state のみを ignore する形にする。
|
||||
|
||||
例:
|
||||
|
||||
```gitignore
|
||||
/memory/_staging/
|
||||
/memory/summary.md
|
||||
/memory/decisions/
|
||||
/memory/requests/
|
||||
```
|
||||
|
||||
### 既存ファイルの移行
|
||||
|
||||
workspace に既存 Workflow がある場合、新配置へ移す。
|
||||
|
||||
対象例:
|
||||
|
||||
```text
|
||||
.insomnia/memory/workflow/auto-maintain.md
|
||||
.insomnia/memory/workflow/worktree-workflow.md
|
||||
```
|
||||
|
||||
移行後:
|
||||
|
||||
```text
|
||||
.insomnia/workflow/auto-maintain.md
|
||||
.insomnia/workflow/worktree-workflow.md
|
||||
```
|
||||
|
||||
移行は Git 管理対象として扱えるようにする。
|
||||
|
||||
## 範囲外
|
||||
|
||||
- Workflow の自動生成ポリシー変更
|
||||
- Workflow frontmatter schema の大幅変更
|
||||
- Workflow DSL 化
|
||||
- memory tool で Workflow を書けるようにする変更
|
||||
- 内部 Worker Workflow 化そのもの(`tickets/internal-worker-workflow.md` の対象)
|
||||
|
||||
## 完了条件
|
||||
|
||||
- Workflow の canonical path が `.insomnia/workflow/<slug>.md` として実装・文書化されている
|
||||
- loader / linter / scope deny / completion / invocation が新配置のみを対象にしている
|
||||
- Workflow linter / loader / completion / invocation のテストが新配置をカバーしている
|
||||
- `.insomnia/.gitignore` が generated memory state のみを ignore し、`.insomnia/workflow/*.md` を Git 管理できる
|
||||
- この workspace の既存 Workflow が `.insomnia/workflow/` に移されている
|
||||
- `docs/plan/workflow.md` や関連コメントが新配置に更新されている
|
||||
|
||||
## 参照
|
||||
|
||||
- `docs/plan/workflow.md`
|
||||
- `crates/memory/src/workspace.rs`
|
||||
- `crates/memory/src/workflow.rs`
|
||||
- `crates/pod/src/workflow/mod.rs`
|
||||
- `tickets/auto-maintain-workflow.md`
|
||||
- `tickets/internal-worker-workflow.md`
|
||||
Loading…
Reference in New Issue
Block a user