oh-my-opencode-slim 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.ja-JP.md +13 -12
  2. package/README.ko-KR.md +13 -12
  3. package/README.md +29 -16
  4. package/README.zh-CN.md +13 -12
  5. package/dist/agents/index.d.ts +0 -4
  6. package/dist/cli/index.js +49 -6
  7. package/dist/config/constants.d.ts +10 -0
  8. package/dist/config/schema.d.ts +680 -2
  9. package/dist/config/strip-orchestrator-model.d.ts +9 -0
  10. package/dist/hooks/command-hook-utils.d.ts +5 -0
  11. package/dist/hooks/foreground-fallback/index.d.ts +40 -28
  12. package/dist/hooks/image-hook.d.ts +1 -0
  13. package/dist/hooks/index.d.ts +1 -1
  14. package/dist/index.js +1871 -326
  15. package/dist/interview/document.d.ts +2 -1
  16. package/dist/interview/ui.d.ts +0 -1
  17. package/dist/multiplexer/cmux/close-policy.d.ts +20 -0
  18. package/dist/multiplexer/cmux/index.d.ts +102 -0
  19. package/dist/multiplexer/cmux/session-lifecycle.d.ts +92 -0
  20. package/dist/multiplexer/cmux/session-state.d.ts +45 -0
  21. package/dist/multiplexer/factory.d.ts +0 -9
  22. package/dist/multiplexer/herdr/index.d.ts +2 -0
  23. package/dist/multiplexer/index.d.ts +3 -1
  24. package/dist/multiplexer/session-manager.d.ts +10 -2
  25. package/dist/multiplexer/shared.d.ts +8 -1
  26. package/dist/multiplexer/types.d.ts +5 -2
  27. package/dist/tools/smartfetch/utils.d.ts +3 -1
  28. package/dist/tui-state.d.ts +5 -5
  29. package/dist/tui.js +86 -20
  30. package/dist/utils/escape-html.d.ts +1 -0
  31. package/dist/utils/frontmatter.d.ts +6 -0
  32. package/dist/utils/index.d.ts +1 -1
  33. package/dist/utils/logger.d.ts +0 -2
  34. package/oh-my-opencode-slim.schema.json +717 -2
  35. package/package.json +1 -1
  36. package/src/skills/clonedeps/SKILL.md +32 -29
  37. package/src/skills/codemap.md +7 -3
  38. package/src/skills/deepwork/SKILL.md +17 -6
  39. package/src/skills/verification-planning/SKILL.md +103 -0
  40. package/src/skills/worktrees/SKILL.md +14 -7
package/README.ja-JP.md CHANGED
@@ -32,19 +32,13 @@ oh-my-opencode-slim は OpenCode 向けのエージェントオーケストレ
32
32
 
33
33
  各エージェントについて知りたい場合は **[Meet the Pantheon](#meet-the-pantheon)** を参照してください。機能の全体像は下記の **[Features & Workflows](#features-and-workflows)** をご覧ください。
34
34
 
35
- ### LazySkills でエージェントスキルを管理
35
+ ### OpenAI GPT-5.6
36
36
 
37
37
  <p align="center">
38
- <a href="https://github.com/alvinunreal/lazyskills">
39
- <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
- </a>
38
+ <img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 パンテオン:Terra、Sol、Luna" width="720">
41
39
  </p>
42
40
 
43
- **[LazySkills](https://github.com/alvinunreal/lazyskills)** は、エージェントスキルを管理するためのターミナル UI です。インストール済みのスキル、各スキルを使用できるエージェント、可視性が壊れている理由、次に安全に実行できる操作を 1 か所で確認できます。
44
-
45
- <p align="center">
46
- <a href="https://github.com/alvinunreal/lazyskills"><b>LazySkills を見る →</b></a>
47
- </p>
41
+ デフォルトの [OpenAI プリセット](docs/openai-preset.md) は、Terra Orchestrator、Sol Oracle、Luna を高速な専門レーンに割り当てます。
48
42
 
49
43
  ### ユーザーの声
50
44
 
@@ -141,7 +135,7 @@ bun run build
141
135
  > バックグラウンドオーケストレーションの仕組みを理解しておくことを**推奨**します。**[Orchestrator のプロンプト](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** には、スケジューラーのルール、専門エージェントへのルーティングロジック、作業をバックグラウンドエージェントへ割り当てるしきい値が記述されています。`@agentName <task>` のようにサブエージェントを呼び出すことで、いつでも手動で委譲できます。
142
136
 
143
137
  > [!TIP]
144
- > バックグラウンドエージェントが現在のデフォルトワークフローになっているため、**[Multiplexer Integration](docs/multiplexer-integration.md)** を有効化して設定することを**強く推奨**します。各エージェントが専用の Tmux、Zellij または Herdr ペインで自動的に開かれるため、Orchestrator がセッションを調整し続けている間も、専門エージェントの作業をリアルタイムで追えます。
138
+ > バックグラウンドエージェントが現在のデフォルトワークフローになっているため、**[Multiplexer Integration](docs/multiplexer-integration.md)** を有効化して設定することを**強く推奨**します。各エージェントが専用の Tmux、Zellij、Herdr または cmux ペインで自動的に開かれるため、Orchestrator がセッションを調整し続けている間も、専門エージェントの作業をリアルタイムで追えます。
145
139
 
146
140
  デフォルトで生成される設定には `openai` と `opencode-go` の両方のプリセットが含まれます。
147
141
 
@@ -204,6 +198,7 @@ V2 は oh-my-opencode-slim を、スケジューラー中心のマルチエー
204
198
  - **[バックグラウンドエージェント](#バックグラウンドエージェント)** - Orchestrator は専門家をバックグラウンドタスクとしてディスパッチし、タスク/セッション ID を追跡し、完了イベントを待ってから結果を整合します。
205
199
  - **[Companion](#companion)** - 任意のフローティングデスクトップウィンドウが、並列実行中のバックグラウンド専門家を含め、現在アクティブなエージェントを表示します。
206
200
  - **[Deepwork](#deepwork)** - 大規模、多ファイル、高リスク、または段階的なコーディング作業向けの構造化ワークフローです。永続的な計画ファイルと Oracle レビューゲートを使用します。
201
+ - **[検証計画](#検証計画)** - 自明でない実装の前にプロジェクト固有の証拠経路を計画し、システムをエージェントにとってより判読可能にする検証機能も扱います。
207
202
  - **[Reflect](#reflect)** - 繰り返される作業パターンを振り返り、再利用可能な skill、エージェント、コマンド、設定ルール、プロンプトルール、プロジェクト playbook を提案します。
208
203
  - **[Worktrees](#worktrees)** - 複雑、高リスク、または並列タスク向けに、安全プロトコル付きの隔離されたコーディング lane として Git worktree を管理します。
209
204
  - **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** - モデル、プロンプト、カスタムエージェント、MCP アクセス、プリセット、プラグイン動作を安全に調整するための同梱設定 skill です。
@@ -243,6 +238,12 @@ Deepwork は、大規模リファクタリング、多段階機能、高リス
243
238
 
244
239
  いつ使うべきか、ワークフローがどのように動くかは **[Skills](docs/skills.md#deepwork)** を参照してください。
245
240
 
241
+ #### 検証計画
242
+
243
+ 検証計画は、自明でない変更を実装する前に、その変更をどう証明するかを Orchestrator が決めるための skill です。成立させる主張を定め、プロジェクト固有の証拠経路を設計し、システムが決定的な状態をエージェントへ直接示せない場合には、小さな検証機能を作れます。不慣れな機能を扱うときは、方針を選ぶ前に Librarian に焦点を絞った調査を依頼します。
244
+
245
+ 証拠経路のワークフローと安全境界は **[Skills](docs/skills.md#verification-planning)** を参照してください。
246
+
246
247
  #### Reflect
247
248
 
248
249
  Reflect は、Orchestrator が繰り返し発生するワークフロー上の摩擦から学ぶのを助けます。最近の作業と既存の資産を確認し、skill、カスタムエージェント、コマンド、設定ルール、プロンプトルール、MCP 権限変更、プロジェクト playbook の中から、最小で有用な改善を提案します。十分な証拠がない場合は、何も作成しないことを推奨します。
@@ -636,7 +637,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
636
637
  | **[Council](docs/council.md)** | 複数のモデルを並列実行し、`@council` で 1 つの回答に統合します |
637
638
  | **[Custom Agents](docs/configuration.md#custom-agents)** | カスタムプロンプト、モデル、MCP アクセス、Orchestrator の委譲ルールを備えた独自の専門エージェントを定義します |
638
639
  | **[ACP Agents](docs/acp-agents.md)** | Claude Code ACP や Gemini ACP などの外部 ACP 互換エージェントを委譲可能なサブエージェントとして接続します |
639
- | **[Multiplexer Integration](docs/multiplexer-integration.md)** | エージェントの動作を Tmux、Zellij や Herdr のペインでライブ表示します |
640
+ | **[Multiplexer Integration](docs/multiplexer-integration.md)** | エージェントの動作を Tmux、Zellij、Herdrcmux のペインでライブ表示します |
640
641
  | **[Codemap](docs/codemap.md)** | 階層的なコードマップを生成し、大規模コードベースを迅速に理解します |
641
642
  | **[Clonedeps](docs/clonedeps.md)** | 選択した依存関係のソースを ignore 済みのローカルワークスペースにクローンし、調査できるようにします |
642
643
  | **[Worktrees](docs/worktrees.md)** | `.slim/worktrees/` lane を使い、隔離された並列または高リスクなコーディング作業を行います |
@@ -652,7 +653,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
652
653
  | **[Configuration](docs/configuration.md)** | 設定ファイルの配置場所、JSONC サポート、プロンプトの上書き、全オプションのリファレンス |
653
654
  | **[Background Orchestration](docs/background-orchestration.md)** | ネイティブのバックグラウンドサブエージェントを中心にした、スケジューラー優先の Orchestrator モデル |
654
655
  | **[Maintainer Guide](docs/maintainers.md)** | Issue のトリアージルール、ラベルの意味、サポートの振り分け、リポジトリ運用ワークフロー |
655
- | **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`reflect`、`worktrees`、`oh-my-opencode-slim` などの同梱スキル |
656
+ | **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`verification-planning`、`reflect`、`worktrees`、`oh-my-opencode-slim` などの同梱スキル |
656
657
  | **[MCPs](docs/mcps.md)** | `websearch`、`context7`、`gh_grep`、およびエージェントごとの MCP 権限の仕組み |
657
658
  | **[Tools](docs/tools.md)** | `webfetch`、LSP ツール、コード検索、フォーマッターなどの組み込みツール機能 |
658
659
 
package/README.ko-KR.md CHANGED
@@ -32,19 +32,13 @@ oh-my-opencode-slim은 OpenCode용 에이전트 오케스트레이션 플러그
32
32
 
33
33
  에이전트 자체를 살펴보려면 **[판테온 만나보기](#meet-the-pantheon)** 를 참고하세요. 전체 기능 세트는 아래의 **[기능 & 워크플로우](#features-and-workflows)** 에서 확인할 수 있습니다.
34
34
 
35
- ### LazySkills로 에이전트 스킬 관리하기
35
+ ### OpenAI GPT-5.6
36
36
 
37
37
  <p align="center">
38
- <a href="https://github.com/alvinunreal/lazyskills">
39
- <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
- </a>
38
+ <img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 판테온: Terra, Sol, Luna" width="720">
41
39
  </p>
42
40
 
43
- **[LazySkills](https://github.com/alvinunreal/lazyskills)** 에이전트 스킬을 관리하기 위한 터미널 UI입니다. 설치된 스킬, 각 스킬을 사용할 수 있는 에이전트, 가시성이 깨질 수 있는 이유, 다음에 안전하게 실행할 수 있는 작업을 한곳에서 확인할 수 있습니다.
44
-
45
- <p align="center">
46
- <a href="https://github.com/alvinunreal/lazyskills"><b>LazySkills 살펴보기 →</b></a>
47
- </p>
41
+ 기본 [OpenAI 프리셋](docs/openai-preset.md) Terra를 Orchestrator에, Sol을 Oracle에, Luna를 빠른 전문 레인에 매핑합니다.
48
42
 
49
43
  ### 사용자들의 말
50
44
 
@@ -139,7 +133,7 @@ bun run build
139
133
  > 자동 위임이 어떻게 동작하는지 이해하는 것을 **권장**합니다. **[Orchestrator 프롬프트](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** 에는 위임 규칙, 전문 에이전트 라우팅 로직, 메인 에이전트가 언제 서브에이전트로 작업을 넘겨야 하는지에 대한 임계값이 포함되어 있습니다. 수동으로 위임하려면 `@agentName <task>`로 서브에이전트를 호출하면 됩니다.
140
134
 
141
135
  > [!TIP]
142
- > 이제 백그라운드 에이전트가 기본 워크플로이므로 **[Multiplexer Integration](docs/multiplexer-integration.md)** 을 활성화하고 설정하는 것을 **강력히 권장**합니다. 각 에이전트를 전용 Tmux, Zellij, 또는 Herdr 창에서 자동으로 열어 주기 때문에, Orchestrator가 세션을 계속 조율하는 동안 전문 에이전트들의 작업을 실시간으로 따라볼 수 있습니다.
136
+ > 이제 백그라운드 에이전트가 기본 워크플로이므로 **[Multiplexer Integration](docs/multiplexer-integration.md)** 을 활성화하고 설정하는 것을 **강력히 권장**합니다. 각 에이전트를 전용 Tmux, Zellij, Herdr 또는 cmux 창에서 자동으로 열어 주기 때문에, Orchestrator가 세션을 계속 조율하는 동안 전문 에이전트들의 작업을 실시간으로 따라볼 수 있습니다.
143
137
 
144
138
  기본 생성 설정에는 `openai`와 `opencode-go` 프리셋이 모두 포함되어 있습니다.
145
139
 
@@ -202,6 +196,7 @@ V2는 oh-my-opencode-slim을 스케줄러 중심의 멀티 에이전트 워크
202
196
  - **[백그라운드 에이전트](#백그라운드-에이전트)** - Orchestrator가 전문가를 백그라운드 작업으로 디스패치하고, 작업/세션 ID를 추적하며, 완료 이벤트를 기다린 뒤 결과를 조정합니다.
203
197
  - **[Companion](#companion)** - 선택 사항인 플로팅 데스크톱 창이 병렬 백그라운드 전문가를 포함해 현재 활성 에이전트를 보여줍니다.
204
198
  - **[Deepwork](#deepwork)** - 대규모, 다중 파일, 위험도가 높거나 단계적인 코딩 작업을 위한 구조화된 워크플로입니다. 지속적인 계획 파일과 Oracle 리뷰 게이트를 사용합니다.
199
+ - **[검증 계획](#검증-계획)** - 복잡한 구현 전에 프로젝트별 증거 경로를 계획하고, 시스템을 에이전트가 더 잘 이해할 수 있도록 검증 기능을 마련합니다.
205
200
  - **[Reflect](#reflect)** - 반복되는 작업 패턴을 돌아보고 재사용 가능한 skill, 에이전트, 명령, 설정 규칙, 프롬프트 규칙, 프로젝트 playbook을 제안합니다.
206
201
  - **[Worktrees](#worktrees)** - 복잡하거나 위험하거나 병렬로 진행되는 작업을 위해 Git worktree를 안전 프로토콜이 있는 격리된 코딩 lane으로 관리합니다.
207
202
  - **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** - 모델, 프롬프트, 커스텀 에이전트, MCP 접근, 프리셋, 플러그인 동작을 안전하게 조정하는 번들 설정 skill입니다.
@@ -241,6 +236,12 @@ Deepwork는 대규모 리팩터링, 다단계 기능, 위험한 아키텍처 변
241
236
 
242
237
  사용 시점과 워크플로 동작 방식은 **[Skills](docs/skills.md#deepwork)** 를 참고하세요.
243
238
 
239
+ #### 검증 계획
240
+
241
+ 검증 계획은 복잡한 변경을 구현하기 전에 그 변경이 어떻게 입증될지를 Orchestrator가 결정하도록 돕는 skill입니다. 성립해야 할 주장을 정하고 프로젝트별 증거 경로를 설계하며, 시스템이 결정적인 상태를 에이전트에게 직접 보여줄 수 없을 때는 작은 검증 기능을 만들 수 있습니다. 익숙하지 않은 기능을 다룰 때는 접근 방식을 고르기 전에 Librarian에게 집중적인 조사를 맡깁니다.
242
+
243
+ 증거 경로 워크플로와 안전 경계는 **[Skills](docs/skills.md#verification-planning)** 를 참고하세요.
244
+
244
245
  #### Reflect
245
246
 
246
247
  Reflect는 Orchestrator가 반복되는 워크플로 마찰에서 배우도록 돕습니다. 최근 작업과 기존 자산을 검토한 뒤 skill, 커스텀 에이전트, 명령, 설정 규칙, 프롬프트 규칙, MCP 권한 변경, 프로젝트 playbook 중 가장 작고 유용한 개선안을 제안합니다. 근거가 부족하면 아무것도 만들지 않는 것을 권장해야 합니다.
@@ -634,7 +635,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고
634
635
  | **[Council](docs/council.md)** | `@council`로 여러 모델을 병렬 실행하고 하나의 답변으로 종합 |
635
636
  | **[Custom Agents](docs/configuration.md#custom-agents)** | 커스텀 프롬프트, 모델, MCP 접근, Orchestrator 위임 규칙으로 커스텀 전문 에이전트 정의 |
636
637
  | **[ACP Agents](docs/acp-agents.md)** | Claude Code ACP 또는 Gemini ACP 같은 외부 ACP 호환 에이전트를 위임 가능한 서브에이전트로 연결 |
637
- | **[Multiplexer Integration](docs/multiplexer-integration.md)** | Tmux, Zellij, 또는 Herdr 페인에서 에이전트 작업을 실시간으로 확인 |
638
+ | **[Multiplexer Integration](docs/multiplexer-integration.md)** | Tmux, Zellij, Herdr 또는 cmux 페인에서 에이전트 작업을 실시간으로 확인 |
638
639
  | **[Codemap](docs/codemap.md)** | 계층형 코드맵을 생성하여 대규모 코드베이스를 빠르게 파악 |
639
640
  | **[Clonedeps](docs/clonedeps.md)** | 선택한 의존성 소스를 무시된 로컬 워크스페이스에 복제하여 검사 |
640
641
  | **[Worktrees](docs/worktrees.md)** | `.slim/worktrees/` lane을 사용해 격리된 병렬 또는 고위험 코딩 작업 수행 |
@@ -650,7 +651,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고
650
651
  | **[Configuration](docs/configuration.md)** | 설정 파일 위치, JSONC 지원, 프롬프트 오버라이드, 전체 옵션 레퍼런스 |
651
652
  | **[Background Orchestration](docs/background-orchestration.md)** | 네이티브 백그라운드 서브에이전트를 기반으로 한 스케줄러 우선 Orchestrator 모델 |
652
653
  | **[Maintainer Guide](docs/maintainers.md)** | 이슈 트리아지 규칙, 라벨 의미, 지원 라우팅, 저장소 유지보수 워크플로우 |
653
- | **[Skills](docs/skills.md)** | `simplify`, `codemap`, `clonedeps`, `deepwork`, `reflect`, `worktrees`, `oh-my-opencode-slim` 등 번들된 스킬 |
654
+ | **[Skills](docs/skills.md)** | `simplify`, `codemap`, `clonedeps`, `deepwork`, `verification-planning`, `reflect`, `worktrees`, `oh-my-opencode-slim` 등 번들된 스킬 |
654
655
  | **[MCPs](docs/mcps.md)** | `websearch`, `context7`, `gh_grep` 및 에이전트별 MCP 권한 동작 방식 |
655
656
  | **[Tools](docs/tools.md)** | `webfetch`, LSP 도구, 코드 검색, 포매터 등 내장 도구 기능 |
656
657
 
package/README.md CHANGED
@@ -30,19 +30,14 @@ The main idea is simple: instead of forcing one model to do everything, the plug
30
30
 
31
31
  To explore the agents themselves, see **[Meet the Pantheon](#meet-the-pantheon)**. For the full feature set, see **[Features & Workflows](#features-and-workflows)** below.
32
32
 
33
- ### Manage Agent Skills with LazySkills
33
+ ### OpenAI GPT-5.6
34
34
 
35
35
  <p align="center">
36
- <a href="https://github.com/alvinunreal/lazyskills">
37
- <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
38
- </a>
36
+ <img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 Pantheon: Terra, Sol, and Luna" width="100%">
39
37
  </p>
40
38
 
41
- **[LazySkills](https://github.com/alvinunreal/lazyskills)** is a terminal UI for managing agent skills. It gives you one place to see what is installed, which agents can use each skill, why visibility may be broken, and what actions are safe to run next.
42
-
43
- <p align="center">
44
- <a href="https://github.com/alvinunreal/lazyskills"><b>Explore LazySkills →</b></a>
45
- </p>
39
+ The default [OpenAI preset](docs/openai-preset.md) maps Terra to Orchestrator,
40
+ Sol to Oracle, and Luna to the fast specialist lanes.
46
41
 
47
42
  ### What Users Say
48
43
 
@@ -137,7 +132,7 @@ Then:
137
132
  > It's **recommended** to understand how background orchestration works. The **[Orchestrator prompt](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** contains the scheduler rules, specialist routing logic, and thresholds for when work should be assigned to background agents. You can always delegate manually by calling a subagent via: `@agentName <task>`
138
133
 
139
134
  > [!TIP]
140
- > Because background agents are now the default workflow, it is **highly recommended** to enable and configure **[Multiplexer Integration](docs/multiplexer-integration.md)**. It automatically opens each agent in a dedicated Tmux, Zellij, or Herdr pane, so you can watch specialists work live while the Orchestrator continues coordinating the session.
135
+ > Because background agents are now the default workflow, it is **highly recommended** to enable and configure **[Multiplexer Integration](docs/multiplexer-integration.md)**. It automatically opens each agent in a dedicated Tmux, Zellij, Herdr, or cmux pane, so you can watch specialists work live while the Orchestrator continues coordinating the session.
141
136
 
142
137
  The default generated configuration includes both `openai` and `opencode-go` presets.
143
138
 
@@ -214,6 +209,9 @@ verification while specialists do the work in their own lanes.
214
209
  agents are currently active, including parallel background specialists.
215
210
  - **[Deepwork](#deepwork)** - a structured workflow for large, multi-file, risky,
216
211
  or phased coding work using persistent plan files and Oracle review gates.
212
+ - **[Verification Planning](#verification-planning)** - plans a project-specific
213
+ evidence path before non-trivial implementation, including verification
214
+ affordances when the system needs to become more legible to an agent.
217
215
  - **[Reflect](#reflect)** - reviews repeated work patterns and suggests reusable skills,
218
216
  agents, commands, config rules, prompt rules, or project playbooks.
219
217
  - **[Worktrees](#worktrees)** - manages Git worktrees as isolated coding lanes
@@ -228,7 +226,7 @@ V2 makes background specialists the default mental model: the Orchestrator plans
228
226
  the work graph, launches the right agents, avoids overlapping write ownership,
229
227
  and waits for terminal task results before acting on them.
230
228
 
231
- See **[Background Orchestration](docs/v2-background-orchestration.md)** for the
229
+ See **[Background Orchestration](docs/background-orchestration.md)** for the
232
230
  full scheduler model.
233
231
 
234
232
  #### Companion
@@ -268,6 +266,18 @@ Start it with:
268
266
  See **[Skills](docs/skills.md#deepwork)** for when to use it and how the workflow
269
267
  runs.
270
268
 
269
+ #### Verification Planning
270
+
271
+ Verification Planning gives the Orchestrator a way to decide how a non-trivial
272
+ change will be proven before implementation begins. It frames the claim, designs
273
+ project-specific evidence paths, and can create a small verification affordance
274
+ when the system cannot directly reveal the decisive state to an agent. For
275
+ unfamiliar capabilities, it asks the Librarian for focused research before
276
+ choosing an approach.
277
+
278
+ See **[Skills](docs/skills.md#verification-planning)** for the evidence-path
279
+ workflow and its safety boundaries.
280
+
271
281
  #### Reflect
272
282
 
273
283
  Reflect helps the Orchestrator learn from repeated workflow friction. It reviews
@@ -619,7 +629,7 @@ rules.
619
629
  ### Observer: The Silent Witness
620
630
 
621
631
  > [!NOTE]
622
- > **Why a separate agent?** If your Orchestrator model is not multimodal, enable Observer to handle images, screenshots, PDFs, and other visual files. Observer is disabled by default and gives the Orchestrator a dedicated multimodal reader without forcing you to change your main reasoning model. Set `disabled_agents: []` and an `observer` model in your configuration. The bundled `opencode-go` install preset does this automatically because its GLM Orchestrator is not multimodal.
632
+ > **Why a separate agent?** If your Orchestrator model is not multimodal, enable Observer to handle images, screenshots, and other visual files. Observer is disabled by default and gives the Orchestrator a dedicated multimodal reader without forcing you to change your main reasoning model. Set `disabled_agents: []` and an `observer` model in your configuration. The bundled `opencode-go` install preset does this automatically because its GLM Orchestrator is not multimodal. Omitting `image_routing` preserves existing conditional Observer behavior. Set `image_routing: "auto"` only when Observer is enabled, or `"direct"` to always pass image attachments to the Orchestrator.
623
633
 
624
634
  <table>
625
635
  <tr>
@@ -633,7 +643,7 @@ rules.
633
643
 
634
644
  - Images, screenshots, diagrams → `read` tool (native image support)
635
645
  - PDFs and binary documents → `read` tool (text + structure extraction)
636
- - **Disabled by default** - enable with `"disabled_agents": []` and configure a vision-capable model; installing with `--preset=opencode-go` enables it with `opencode-go/kimi-k2.6`
646
+ - **Disabled by default** - enable with `"disabled_agents": []` and configure a vision-capable model; installing with `--preset=opencode-go` enables it with `opencode-go/kimi-k2.6`. Image attachments route to Observer by default when it is enabled; set `"image_routing": "direct"` to keep them on the Orchestrator.
637
647
 
638
648
  </td>
639
649
  </tr>
@@ -669,7 +679,7 @@ Use this section as a map: start with installation, then jump to features, confi
669
679
  | **[Council](docs/council.md)** | Run multiple models in parallel and synthesize a single answer with `@council` |
670
680
  | **[Custom Agents](docs/configuration.md#custom-agents)** | Define your own specialists with custom prompts, models, MCP access, and Orchestrator delegation rules |
671
681
  | **[ACP Agents](docs/acp-agents.md)** | Connect external ACP-compatible agents such as Claude Code ACP or Gemini ACP as delegatable subagents |
672
- | **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux, Zellij, or Herdr panes |
682
+ | **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux, Zellij, Herdr, or cmux panes |
673
683
  | **[Codemap](docs/codemap.md)** | Generate hierarchical codemaps to understand large codebases faster |
674
684
  | **[Clonedeps](docs/clonedeps.md)** | Clone selected dependency source into an ignored local workspace for inspection |
675
685
  | **[Worktrees](docs/worktrees.md)** | Use `.slim/worktrees/` lanes for isolated parallel or risky coding work |
@@ -686,7 +696,7 @@ Use this section as a map: start with installation, then jump to features, confi
686
696
  | **[Project Customization](docs/project-local-customization.md)** | Repository-specific custom agents, prompt overrides, per-agent skills, and precedence |
687
697
  | **[Background Orchestration](docs/background-orchestration.md)** | Scheduler-first orchestrator model built around native background subagents |
688
698
  | **[Maintainer Guide](docs/maintainers.md)** | Issue triage rules, label meanings, support routing, and repo maintenance workflow |
689
- | **[Skills](docs/skills.md)** | Bundled skills such as `simplify`, `codemap`, `clonedeps`, `deepwork`, `reflect`, `worktrees`, and `oh-my-opencode-slim` |
699
+ | **[Skills](docs/skills.md)** | Bundled skills such as `simplify`, `codemap`, `clonedeps`, `deepwork`, `verification-planning`, `reflect`, `worktrees`, and `oh-my-opencode-slim` |
690
700
  | **[MCPs](docs/mcps.md)** | `websearch`, `context7`, `gh_grep`, and how MCP permissions work per agent |
691
701
  | **[Tools](docs/tools.md)** | Built-in tool capabilities like `webfetch`, LSP tools, code search, and formatters |
692
702
 
@@ -707,7 +717,7 @@ Use this section as a map: start with installation, then jump to features, confi
707
717
  <p><sub>Every merged contribution leaves a mark on the realm.</sub></p>
708
718
 
709
719
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
710
- [![All Contributors](https://img.shields.io/badge/all_contributors-73-orange.svg?style=flat-square)](#contributors-)
720
+ [![All Contributors](https://img.shields.io/badge/all_contributors-76-orange.svg?style=flat-square)](#contributors-)
711
721
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
712
722
  </div>
713
723
 
@@ -816,6 +826,9 @@ Use this section as a map: start with installation, then jump to features, confi
816
826
  </tr>
817
827
  <tr>
818
828
  <td align="center" valign="top" width="16.66%"><a href="https://github.com/Jiajun0413"><img src="https://avatars.githubusercontent.com/u/184531967?v=4?s=100" width="100px;" alt="Liu Jiajun"/><br /><sub><b>Liu Jiajun</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Jiajun0413" title="Code">💻</a></td>
829
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/umi008"><img src="https://avatars.githubusercontent.com/u/200843810?v=4?s=100" width="100px;" alt="Ulises Millán"/><br /><sub><b>Ulises Millán</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=umi008" title="Code">💻</a></td>
830
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/HighColdHC"><img src="https://avatars.githubusercontent.com/u/35870222?v=4?s=100" width="100px;" alt="HighColdHC"/><br /><sub><b>HighColdHC</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=HighColdHC" title="Code">💻</a></td>
831
+ <td align="center" valign="top" width="16.66%"><a href="https://hardcore.engineer/about"><img src="https://avatars.githubusercontent.com/u/401815?v=4?s=100" width="100px;" alt="Stephan Schielke"/><br /><sub><b>Stephan Schielke</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=stephanschielke" title="Code">💻</a></td>
819
832
  </tr>
820
833
  </tbody>
821
834
  </table>
package/README.zh-CN.md CHANGED
@@ -32,19 +32,13 @@ oh-my-opencode-slim 是一个用于 OpenCode 的智能体编排插件。它内
32
32
 
33
33
  要了解智能体本身,请参阅 **[认识众神殿](#meet-the-pantheon)**。如需了解完整特性集,请参阅下方的 **[特性与工作流](#features-and-workflows)**。
34
34
 
35
- ### LazySkills 管理智能体技能
35
+ ### OpenAI GPT-5.6
36
36
 
37
37
  <p align="center">
38
- <a href="https://github.com/alvinunreal/lazyskills">
39
- <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
- </a>
38
+ <img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 众神殿:Terra、Sol 和 Luna" width="720">
41
39
  </p>
42
40
 
43
- **[LazySkills](https://github.com/alvinunreal/lazyskills)** 是一个用于管理智能体技能的终端 UI。它让你可以在一个地方查看已安装的技能、哪些智能体可以使用每个技能、为什么可见性可能失效,以及接下来可以安全执行哪些操作。
44
-
45
- <p align="center">
46
- <a href="https://github.com/alvinunreal/lazyskills"><b>探索 LazySkills →</b></a>
47
- </p>
41
+ 默认的 [OpenAI 预设](docs/openai-preset.md) Terra 映射为 Orchestrator、Sol 映射为 Oracle、Luna 映射为快速专家通道。
48
42
 
49
43
  ### 用户怎么说
50
44
 
@@ -134,7 +128,7 @@ bun run build
134
128
  > **建议**了解后台编排的工作原理。**[编排者提示词 (Orchestrator prompt)](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** 包含调度规则、专家路由逻辑,以及何时应把工作分配给后台智能体的阈值。您始终可以通过以下方式手动委派任务:`@智能体名称 <任务内容>`
135
129
 
136
130
  > [!TIP]
137
- > 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij 或 Herdr 窗格中打开每个智能体,让您在 Orchestrator 继续协调会话时,实时跟进各个专家智能体的工作。
131
+ > 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij、Herdrcmux 窗格中打开每个智能体,让您在 Orchestrator 继续协调会话时,实时跟进各个专家智能体的工作。
138
132
 
139
133
  默认生成的配置包含 `openai` 和 `opencode-go` 两个预设:
140
134
 
@@ -197,6 +191,7 @@ V2 将 oh-my-opencode-slim 变成了以调度器为核心的多智能体工作
197
191
  - **[后台智能体](#后台智能体)** - Orchestrator 现在会把专家作为后台任务派发,跟踪任务/会话 ID,等待完成事件,并在继续之前整合结果。
198
192
  - **[Companion](#companion)** - 可选的浮动桌面窗口会显示当前活跃的智能体,包括并行运行的后台专家。
199
193
  - **[Deepwork](#deepwork)** - 面向大型、多文件、高风险或分阶段编码工作的结构化工作流,使用持久化计划文件和 Oracle 评审关卡。
194
+ - **[验证规划](#验证规划)** - 在非平凡实现前规划项目特定的证据路径;当系统需要更易被智能体理解时,可加入验证能力。
200
195
  - **[Reflect](#reflect)** - 回顾重复出现的工作模式,并建议可复用的 skill、智能体、命令、配置规则、提示词规则或项目 playbook。
201
196
  - **[Worktrees](#worktrees)** - 将 Git worktree 作为隔离编码通道管理,并为复杂、高风险或并行任务提供安全协议。
202
197
  - **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** - 随包提供的配置技能,可安全调优模型、提示词、自定义智能体、MCP 访问、预设和插件行为。
@@ -236,6 +231,12 @@ Deepwork 适用于重型编码会话:大范围重构、多阶段功能、高
236
231
 
237
232
  何时使用以及工作流如何运行,请参阅 **[Skills](docs/skills.md#deepwork)**。
238
233
 
234
+ #### 验证规划
235
+
236
+ 验证规划让 Orchestrator 在开始非平凡实现前,先决定如何证明变更有效。它会界定要成立的主张、设计项目特定的证据路径;当系统无法直接向智能体揭示决定性状态时,还可创建小型验证能力。面对不熟悉的能力时,它会在选择方案前请 Librarian 做有针对性的研究。
237
+
238
+ 证据路径工作流及其安全边界见 **[Skills](docs/skills.md#verification-planning)**。
239
+
239
240
  #### Reflect
240
241
 
241
242
  Reflect 帮助 Orchestrator 从重复出现的工作流摩擦中学习。它会回顾近期工作和现有资产,然后建议最小且有用的改进:skill、自定义智能体、命令、配置规则、提示词规则、MCP 权限变更或项目 playbook。如果证据不足,它应建议什么都不创建。
@@ -629,7 +630,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
629
630
  | **[Council](docs/council.md)** | 使用 `@council` 并行运行多个模型并合成单一答案 |
630
631
  | **[自定义智能体](docs/configuration.md#custom-agents)** | 使用自定义提示词、模型、MCP 访问和 Orchestrator 委派规则定义自己的专家 |
631
632
  | **[ACP Agents](docs/acp-agents.md)** | 将 Claude Code ACP 或 Gemini ACP 等外部 ACP 兼容智能体连接为可委派子智能体 |
632
- | **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij 或 Herdr 窗格中实时观看智能体工作 |
633
+ | **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij、Herdrcmux 窗格中实时观看智能体工作 |
633
634
  | **[Codemap](docs/codemap.md)** | 生成层级代码地图,更快理解大型代码库 |
634
635
  | **[Clonedeps](docs/clonedeps.md)** | 将选定的依赖源码克隆到被忽略的本地工作区中以供检查 |
635
636
  | **[Worktrees](docs/worktrees.md)** | 使用 `.slim/worktrees/` 通道进行隔离的并行或高风险编码工作 |
@@ -645,7 +646,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
645
646
  | **[配置](docs/configuration.md)** | 配置文件位置、JSONC 支持、提示词覆盖和完整选项参考 |
646
647
  | **[后台编排](docs/background-orchestration.md)** | 围绕原生后台子智能体构建的调度器优先 Orchestrator 模型 |
647
648
  | **[维护者指南](docs/maintainers.md)** | issue 分流规则、标签含义、支持路由和仓库维护工作流 |
648
- | **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
649
+ | **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`verification-planning`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
649
650
  | **[MCPs](docs/mcps.md)** | `websearch`、`context7`、`gh_grep` 以及每个智能体的 MCP 权限机制 |
650
651
  | **[Tools](docs/tools.md)** | `webfetch`、LSP 工具、代码搜索和格式化工具等内置工具能力 |
651
652
 
@@ -29,7 +29,3 @@ export declare function getAgentConfigs(config?: PluginConfig, options?: {
29
29
  * Get the set of disabled agent names from config, applying protection rules.
30
30
  */
31
31
  export declare function getDisabledAgents(config?: PluginConfig): Set<string>;
32
- /**
33
- * Get the list of enabled (non-disabled) agent names.
34
- */
35
- export declare function getEnabledAgentNames(config?: PluginConfig): string[];
package/dist/cli/index.js CHANGED
@@ -415,6 +415,33 @@ var ManualPlanSchema = z2.object({
415
415
  librarian: ManualAgentPlanSchema,
416
416
  fixer: ManualAgentPlanSchema
417
417
  }).strict();
418
+ var PermissionActionSchema = z2.enum(["ask", "allow", "deny"]);
419
+ var PermissionRuleSchema = z2.union([
420
+ PermissionActionSchema,
421
+ z2.record(z2.string(), PermissionActionSchema)
422
+ ]);
423
+ var PermissionObjectSchema = z2.object({
424
+ read: PermissionRuleSchema.optional(),
425
+ edit: PermissionRuleSchema.optional(),
426
+ glob: PermissionRuleSchema.optional(),
427
+ grep: PermissionRuleSchema.optional(),
428
+ list: PermissionRuleSchema.optional(),
429
+ bash: PermissionRuleSchema.optional(),
430
+ task: PermissionRuleSchema.optional(),
431
+ external_directory: PermissionRuleSchema.optional(),
432
+ lsp: PermissionRuleSchema.optional(),
433
+ skill: PermissionRuleSchema.optional(),
434
+ todowrite: PermissionActionSchema.optional(),
435
+ question: PermissionActionSchema.optional(),
436
+ webfetch: PermissionActionSchema.optional(),
437
+ websearch: PermissionActionSchema.optional(),
438
+ codesearch: PermissionActionSchema.optional(),
439
+ doom_loop: PermissionActionSchema.optional()
440
+ }).catchall(PermissionRuleSchema);
441
+ var PermissionConfigSchema = z2.union([
442
+ PermissionActionSchema,
443
+ PermissionObjectSchema
444
+ ]);
418
445
  var AgentOverrideConfigSchema = z2.object({
419
446
  model: z2.union([
420
447
  z2.string(),
@@ -433,13 +460,15 @@ var AgentOverrideConfigSchema = z2.object({
433
460
  prompt: z2.string().min(1).optional(),
434
461
  orchestratorPrompt: z2.string().min(1).optional(),
435
462
  options: z2.record(z2.string(), z2.unknown()).optional(),
436
- displayName: z2.string().min(1).optional()
463
+ displayName: z2.string().min(1).optional(),
464
+ permission: PermissionConfigSchema.optional()
437
465
  }).strict();
438
466
  var MultiplexerTypeSchema = z2.enum([
439
467
  "auto",
440
468
  "tmux",
441
469
  "zellij",
442
470
  "herdr",
471
+ "cmux",
443
472
  "none"
444
473
  ]);
445
474
  var MultiplexerLayoutSchema = z2.enum([
@@ -485,7 +514,7 @@ var FailoverConfigSchema = z2.object({
485
514
  retryDelayMs: z2.number().min(0).default(500),
486
515
  maxRetries: z2.number().int().min(0).default(3).describe("Number of consecutive 429/rate-limit responses tolerated on the " + "same model before aborting (or swapping to the next fallback " + "model when a chain is configured)."),
487
516
  retry_on_empty: z2.boolean().default(true).describe("When true (default), empty provider responses are treated as failures, " + "triggering fallback/retry. Set to false to treat them as successes."),
488
- runtimeOverride: z2.boolean().default(true).describe("When true (default), a runtime model selected via /model that is " + "outside the configured fallback chain will still trigger the chain " + "on rate-limit errors. When false, out-of-chain runtime picks are " + "respected and the error surfaces instead of silently falling back " + "to the chain. Models that are members of the chain always fall back " + "regardless of this setting.")
517
+ runtimeOverride: z2.boolean().optional().describe("DEPRECATED: no longer used. Previously controlled whether out-of-chain " + "runtime model picks triggered fallback. Fallback is now always " + "disabled when a user explicitly selects a model via /model.")
489
518
  }).strict();
490
519
  var CompanionConfigSchema = z2.object({
491
520
  enabled: z2.boolean().optional(),
@@ -527,11 +556,13 @@ var PluginConfigSchema = z2.object({
527
556
  preset: z2.string().optional(),
528
557
  setDefaultAgent: z2.boolean().optional(),
529
558
  compactSidebar: z2.boolean().optional().describe("Use the compact TUI sidebar layout. Defaults to true; set false to use the expanded layout."),
559
+ stripOrchestratorModel: z2.boolean().optional().describe("When true, omit orchestrator.model and orchestrator.variant from the SDK config so OpenCode uses the session model selected with /model after subagent dispatch. An explicitly selected preset that sets orchestrator.model is preserved. Defaults to false."),
530
560
  autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
531
561
  presets: z2.record(z2.string(), PresetSchema).optional(),
532
562
  agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
533
563
  disabled_agents: z2.array(z2.string()).optional().describe("Agent names to disable completely. " + "Disabled agents are not instantiated and cannot be delegated to. " + "Orchestrator and council internal agents (councillor) cannot be disabled. " + "By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable."),
534
- disabled_mcps: z2.array(z2.string()).optional(),
564
+ image_routing: z2.enum(["auto", "direct"]).optional().describe("How image attachments are handled. " + "When omitted, preserves legacy conditional behavior: intercept " + 'attachments only when observer is enabled. "auto": requires ' + "observer to be enabled and saves attachments to disk before " + 'nudging delegation to @observer. "direct": always passes ' + "attachments to the orchestrator untouched."),
565
+ disabled_mcps: z2.array(z2.string()).optional().describe("MCP server names to disable completely. Disabled servers are not " + "started and cannot be used by agents."),
535
566
  disabled_tools: z2.array(z2.string()).optional().describe("Tool names to disable completely. Disabled tools are not registered with OpenCode and cannot be used by agents."),
536
567
  disabled_skills: z2.array(z2.string()).optional().describe("Skill names to disable completely. Disabled skills are not granted to agents, even when referenced by presets or agent overrides."),
537
568
  multiplexer: MultiplexerConfigSchema.optional(),
@@ -595,6 +626,12 @@ var CUSTOM_SKILLS = [
595
626
  allowedAgents: ["orchestrator"],
596
627
  sourcePath: "src/skills/deepwork"
597
628
  },
629
+ {
630
+ name: "verification-planning",
631
+ description: "Plan credible, proportionate evidence before non-trivial implementation",
632
+ allowedAgents: ["orchestrator"],
633
+ sourcePath: "src/skills/verification-planning"
634
+ },
598
635
  {
599
636
  name: "reflect",
600
637
  description: "Review repeated work and suggest reusable workflow improvements",
@@ -2757,7 +2794,9 @@ async function installCompanionArchive(finalBinaryPath, target, manifest, downlo
2757
2794
  if (tempDir) {
2758
2795
  try {
2759
2796
  rmSync3(tempDir, { recursive: true, force: true });
2760
- } catch {}
2797
+ } catch (err) {
2798
+ log("[updater] install cleanup failed", String(err));
2799
+ }
2761
2800
  }
2762
2801
  }
2763
2802
  }
@@ -2767,7 +2806,9 @@ function readInstallMetadata(binaryPath) {
2767
2806
  if (parsed?.version && parsed.tag && parsed.target) {
2768
2807
  return parsed;
2769
2808
  }
2770
- } catch {}
2809
+ } catch (err) {
2810
+ log("[updater] metadata read failed", String(err));
2811
+ }
2771
2812
  return null;
2772
2813
  }
2773
2814
  function writeInstallMetadata(binaryPath, metadata) {
@@ -2789,7 +2830,9 @@ async function withCompanionInstallLock(binaryPath, timeoutMs, staleMs, run) {
2789
2830
  } finally {
2790
2831
  try {
2791
2832
  rmSync3(lock, { recursive: true, force: true });
2792
- } catch {}
2833
+ } catch (err) {
2834
+ log("[updater] lock release failed", String(err));
2835
+ }
2793
2836
  }
2794
2837
  } catch (err) {
2795
2838
  const code = err.code;
@@ -26,3 +26,13 @@ export declare const STABLE_POLLS_THRESHOLD = 3;
26
26
  /** Agents that are disabled by default. Users must explicitly enable them
27
27
  * by removing from disabled_agents and configuring an appropriate model. */
28
28
  export declare const DEFAULT_DISABLED_AGENTS: string[];
29
+ export declare const DEFAULT_MAX_SESSIONS_PER_AGENT = 2;
30
+ export declare const DEFAULT_READ_CONTEXT_MIN_LINES = 10;
31
+ export declare const DEFAULT_READ_CONTEXT_MAX_FILES = 8;
32
+ export type ImageRouting = 'auto' | 'direct';
33
+ /**
34
+ * Used when image_routing is omitted, preserving legacy conditional Observer
35
+ * routing. Explicit "auto" is validated separately after config layers merge.
36
+ */
37
+ export declare const DEFAULT_IMAGE_ROUTING: ImageRouting;
38
+ export declare function resolveImageRouting(imageRouting: ImageRouting | undefined): ImageRouting;