omnilane 0.7.1 → 0.8.1
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.
- package/CHANGELOG.md +35 -1
- package/README.ja.md +25 -2
- package/README.ko.md +24 -3
- package/README.md +24 -2
- package/README.zh-CN.md +20 -2
- package/README.zh-TW.md +20 -2
- package/VERSION +1 -1
- package/completions/omnilane.bash +1 -1
- package/package.json +1 -1
- package/routing.yaml +1 -1
- package/scripts/configure.sh +5 -1
- package/scripts/dispatch.sh +4 -4
- package/scripts/jobs.sh +3 -3
- package/scripts/lib/common.sh +2 -0
- package/scripts/runners/run-kimi.sh +53 -0
- package/scripts/runners/run-qwen.sh +48 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,37 @@ semantic version tags.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.8.1] - 2026-07-18
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Claude Code plugin `SessionStart` hook (`hooks/hooks.json`): plugin installs
|
|
14
|
+
now auto-inject the routing reminder (`hooks/routing-instruction.md`) at
|
|
15
|
+
session open (`startup|resume|clear`) via `${CLAUDE_PLUGIN_ROOT}`, with no
|
|
16
|
+
edit to the user's `~/.claude/CLAUDE.md`. The `install.sh` instruction-file
|
|
17
|
+
reminder remains the path for the other CLIs.
|
|
18
|
+
|
|
19
|
+
## [0.8.0] - 2026-07-18
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Two new dispatch vendors: `kimi` (Moonshot Kimi Code CLI, binary `kimi`,
|
|
24
|
+
override `KIMI_BIN`) and `qwen` (Alibaba Qwen Code CLI, binary `qwen`,
|
|
25
|
+
override `QWEN_BIN`). Both runners follow the uniform
|
|
26
|
+
`MODE WORKDIR MODEL EFFORT PROMPT_FILE OUTPUT_FILE` contract: advise stays
|
|
27
|
+
read-only (kimi `--plan`; qwen default approvals), work auto-approves
|
|
28
|
+
(kimi `-y`; qwen `--approval-mode yolo`), API-key env is stripped so the
|
|
29
|
+
CLIs use their own subscription logins, and empty output is a failure.
|
|
30
|
+
- `coding-overflow` now falls back grok → kimi → qwen before `off`, so the
|
|
31
|
+
quota relief valve works with any one of the three vendors installed.
|
|
32
|
+
- Configurator and bash completion know the new vendors; `--vendor kimi|qwen`
|
|
33
|
+
pins them directly. The `vote` panel still accepts the original four
|
|
34
|
+
vendors only.
|
|
35
|
+
- Both new runners are contract-tested (argv construction, exit codes,
|
|
36
|
+
empty-output failure) against fake binaries; real-model end-to-end runs
|
|
37
|
+
are pending community feedback — failures surface loudly, never as a
|
|
38
|
+
silent rc=0.
|
|
39
|
+
|
|
9
40
|
## [0.7.1] - 2026-07-18
|
|
10
41
|
|
|
11
42
|
### Changed
|
|
@@ -208,8 +239,11 @@ semantic version tags.
|
|
|
208
239
|
- Initial shared routing table, cross-vendor dispatcher, runners, installer,
|
|
209
240
|
and baseline lint fixes.
|
|
210
241
|
|
|
211
|
-
[Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.
|
|
242
|
+
[Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.8.1...HEAD
|
|
243
|
+
|
|
244
|
+
[0.8.1]: https://github.com/Seraphim0916/omnilane/compare/v0.8.0...v0.8.1
|
|
212
245
|
|
|
246
|
+
[0.8.0]: https://github.com/Seraphim0916/omnilane/compare/v0.7.1...v0.8.0
|
|
213
247
|
[0.7.1]: https://github.com/Seraphim0916/omnilane/compare/v0.7.0...v0.7.1
|
|
214
248
|
[0.7.0]: https://github.com/Seraphim0916/omnilane/compare/v0.6.0...v0.7.0
|
|
215
249
|
[0.6.0]: https://github.com/Seraphim0916/omnilane/compare/v0.5.1...v0.6.0
|
package/README.ja.md
CHANGED
|
@@ -20,6 +20,27 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## v0.8.1 の新機能
|
|
24
|
+
|
|
25
|
+
- **Claude Code プラグインがルーティングリマインダーを自動読み込み** —
|
|
26
|
+
プラグインに `SessionStart` フック(`hooks/hooks.json`)を同梱。
|
|
27
|
+
セッション開始時(`startup|resume|clear`)にルーティングリマインダーを
|
|
28
|
+
自動注入するため、`~/.claude/CLAUDE.md` を編集せずプラグインの
|
|
29
|
+
インストールだけで有効になります。他の CLI は引き続き `install.sh` の
|
|
30
|
+
指示ファイル方式です。
|
|
31
|
+
|
|
32
|
+
## v0.8.0 の新機能
|
|
33
|
+
|
|
34
|
+
- **2 つの新ディスパッチベンダー** — `kimi`(Moonshot Kimi Code CLI)と
|
|
35
|
+
`qwen`(Alibaba Qwen Code CLI)が統一 runner 契約で加わりました:
|
|
36
|
+
advise は読み取り専用、work は自動承認、API キー環境変数を除去して
|
|
37
|
+
CLI 自身のサブスクリプションログインを使用、空出力は明示的な失敗。
|
|
38
|
+
`--vendor kimi|qwen` で直接指名できます。
|
|
39
|
+
- **coding-overflow にフォールバックチェーン** — クォータ逃し弁が
|
|
40
|
+
grok → kimi → qwen → `off` の順にフォールバックし、3 ベンダーの
|
|
41
|
+
いずれか 1 つで動作します。runner はフェイクバイナリで契約テスト済み。
|
|
42
|
+
実モデルでの報告を歓迎します。
|
|
43
|
+
|
|
23
44
|
## v0.7.1 の新機能
|
|
24
45
|
|
|
25
46
|
- **ルーティング表を更新(2026-07 モデルデータ)** — hardest-coding の第一候補を
|
|
@@ -128,7 +149,7 @@ flowchart LR
|
|
|
128
149
|
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 100 万トークン級の長文統合——分析専用、agentic ループ禁止 |
|
|
129
150
|
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | 高速なマルチステップ agentic ループ、マルチモーダル確認 |
|
|
130
151
|
| 📡 live-search | Grok 4.5 | —(off) | リアルタイム X/ウェブ検索とソーシャル文脈 |
|
|
131
|
-
| 🚰 coding-overflow | Grok 4.5 |
|
|
152
|
+
| 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus | Codex クォータ逼迫時の中級コーディング逃し弁 |
|
|
132
153
|
| 🗳️ arbitrate | off(オプトイン) | — | 内蔵オピニオンパネル(重大な判断用)——デフォルト無効。`routing.local.yaml` で有効化;投票者×ラウンドごとに 1 コール消費 |
|
|
133
154
|
|
|
134
155
|
**バックアップ**はチェーンの次の候補——第一候補のベンダー CLI が未インストールの
|
|
@@ -229,7 +250,9 @@ CLI バージョンにより異なる場合あり)へマーカー付きの可逆
|
|
|
229
250
|
`./install.sh --uninstall` を実行します。
|
|
230
251
|
|
|
231
252
|
- **Claude Code**:プラグインとしてインストール(`/route`、`/route-jobs`
|
|
232
|
-
|
|
253
|
+
コマンドに加え、セッション開始時にルーティングリマインダーを自動注入する
|
|
254
|
+
`SessionStart` フック付き。CLAUDE.md の編集は不要)、または
|
|
255
|
+
`skills/omnilane` を `~/.claude/skills/` へ。
|
|
233
256
|
- **Codex**:`skills/omnilane` を `~/.codex/skills/` へ配置/リンク。
|
|
234
257
|
- **Grok Build**:`grok plugin install <このリポジトリ> --trust`
|
|
235
258
|
- **Antigravity**:`agy plugin install <このリポジトリ>`(先に
|
package/README.ko.md
CHANGED
|
@@ -20,6 +20,26 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## v0.8.1 새 기능
|
|
24
|
+
|
|
25
|
+
- **Claude Code 플러그인이 라우팅 리마인더를 자동 로드** — 플러그인에
|
|
26
|
+
`SessionStart` 훅(`hooks/hooks.json`)이 포함되어 세션 시작 시
|
|
27
|
+
(`startup|resume|clear`) 라우팅 리마인더를 자동 주입합니다.
|
|
28
|
+
`~/.claude/CLAUDE.md` 수정 없이 플러그인 설치만으로 적용됩니다.
|
|
29
|
+
다른 CLI는 기존대로 `install.sh` 지침 파일 방식을 사용합니다.
|
|
30
|
+
|
|
31
|
+
## v0.8.0 새 기능
|
|
32
|
+
|
|
33
|
+
- **새 디스패치 벤더 2종** — `kimi`(Moonshot Kimi Code CLI)와
|
|
34
|
+
`qwen`(Alibaba Qwen Code CLI)이 통일 runner 계약으로 합류:
|
|
35
|
+
advise 는 읽기 전용, work 는 자동 승인, API 키 환경 변수를 제거해
|
|
36
|
+
CLI 자체 구독 로그인을 사용, 빈 출력은 명시적 실패.
|
|
37
|
+
`--vendor kimi|qwen` 으로 직접 지정할 수 있습니다.
|
|
38
|
+
- **coding-overflow 폴백 체인** — 쿼터 안전 밸브가 grok → kimi → qwen
|
|
39
|
+
→ `off` 순으로 폴백해 세 벤더 중 하나만 설치돼 있어도 동작합니다.
|
|
40
|
+
runner 는 페이크 바이너리로 계약 테스트 완료. 실제 모델 사용 보고를
|
|
41
|
+
환영합니다.
|
|
42
|
+
|
|
23
43
|
## v0.7.1 새 기능
|
|
24
44
|
|
|
25
45
|
- **라우팅 테이블 갱신(2026-07 모델 데이터)** — hardest-coding 1순위를
|
|
@@ -128,7 +148,7 @@ flowchart LR
|
|
|
128
148
|
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 100만 토큰급 장문 통합——분석 전용, agentic 루프 금지 |
|
|
129
149
|
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | 빠른 멀티스텝 agentic 루프, 멀티모달 확인 |
|
|
130
150
|
| 📡 live-search | Grok 4.5 | —(off) | 실시간 X/웹 검색과 소셜 맥락 |
|
|
131
|
-
| 🚰 coding-overflow | Grok 4.5 |
|
|
151
|
+
| 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus | Codex 쿼터 소진 시 중급 코딩 안전 밸브 |
|
|
132
152
|
| 🗳️ arbitrate | off(옵트인) | — | 내장 의견 패널(중대한 결정용)——기본 비활성. `routing.local.yaml` 에서 활성화;투표자×라운드마다 1콜 소모 |
|
|
133
153
|
|
|
134
154
|
**백업**은 체인의 다음 후보입니다——1순위 벤더 CLI 가 설치되지 않았을 때
|
|
@@ -224,8 +244,9 @@ omnilane ui stop # 정상 중지
|
|
|
224
244
|
설치 프로그램이 소유한 링크와 표시된 알림을 되돌리려면
|
|
225
245
|
`./install.sh --uninstall` 을 실행합니다.
|
|
226
246
|
|
|
227
|
-
- **Claude Code**: 플러그인으로 설치(`/route`, `/route-jobs`
|
|
228
|
-
|
|
247
|
+
- **Claude Code**: 플러그인으로 설치(`/route`, `/route-jobs` 명령과 함께
|
|
248
|
+
세션 시작 시 라우팅 리마인더를 자동 주입하는 `SessionStart` 훅 포함,
|
|
249
|
+
CLAUDE.md 수정 불필요), 또는 `skills/omnilane` 을 `~/.claude/skills/` 에 배치.
|
|
229
250
|
- **Codex**: `skills/omnilane` 을 `~/.codex/skills/` 에 배치/링크.
|
|
230
251
|
- **Grok Build**: `grok plugin install <이 저장소> --trust`
|
|
231
252
|
- **Antigravity**: `agy plugin install <이 저장소>`(먼저
|
package/README.md
CHANGED
|
@@ -20,6 +20,26 @@ Every subtask goes to the model that is actually best at it — across<br/>
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## What's new in v0.8.1
|
|
24
|
+
|
|
25
|
+
- **Claude Code plugin auto-loads the routing reminder** — the plugin now
|
|
26
|
+
ships a `SessionStart` hook (`hooks/hooks.json`) that injects the routing
|
|
27
|
+
reminder at session open (`startup|resume|clear`), so plugin installs get
|
|
28
|
+
the persistent reminder with no edit to `~/.claude/CLAUDE.md`. The
|
|
29
|
+
`install.sh` instruction-file reminder still covers the other CLIs.
|
|
30
|
+
|
|
31
|
+
## What's new in v0.8.0
|
|
32
|
+
|
|
33
|
+
- **Two new dispatch vendors** — `kimi` (Moonshot Kimi Code CLI) and `qwen`
|
|
34
|
+
(Alibaba Qwen Code CLI) join the vendor set with the uniform runner
|
|
35
|
+
contract: advise stays read-only, work auto-approves, API-key env is
|
|
36
|
+
stripped so the CLIs use their own subscription logins, and empty output
|
|
37
|
+
is a loud failure. Pin them with `--vendor kimi|qwen`.
|
|
38
|
+
- **coding-overflow grows a chain** — the quota relief valve now falls back
|
|
39
|
+
grok → kimi → qwen before `off`, so it works with any one of the three
|
|
40
|
+
vendors installed. Runners are contract-tested against fake binaries;
|
|
41
|
+
real-model reports welcome.
|
|
42
|
+
|
|
23
43
|
## What's new in v0.7.1
|
|
24
44
|
|
|
25
45
|
- **Routing refresh (2026-07 model data)** — hardest-coding now dispatches
|
|
@@ -130,7 +150,7 @@ flowchart LR
|
|
|
130
150
|
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 1M-token synthesis — analysis only, never agentic loops |
|
|
131
151
|
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | Fast multi-step agentic loops, multimodal checks |
|
|
132
152
|
| 📡 live-search | Grok 4.5 | — (off) | Realtime X/web search and social context |
|
|
133
|
-
| 🚰 coding-overflow | Grok 4.5 |
|
|
153
|
+
| 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus | Codex-quota relief valve for mid-tier coding |
|
|
134
154
|
| 🗳️ arbitrate | off (opt-in vote panel) | — | Built-in opinion panel for big calls — disabled by default; enable it in `routing.local.yaml`, one call per voter per round |
|
|
135
155
|
|
|
136
156
|
The **backup** is the next candidate in the lane's `routing.yaml` chain — what
|
|
@@ -231,7 +251,9 @@ Rollback the installer-owned links and marked reminders with
|
|
|
231
251
|
`./install.sh --uninstall`.
|
|
232
252
|
|
|
233
253
|
- **Claude Code**: install as a plugin (ships the skill + `/route`,
|
|
234
|
-
`/route-jobs` commands
|
|
254
|
+
`/route-jobs` commands, and a `SessionStart` hook that auto-injects the
|
|
255
|
+
routing reminder at session open — no CLAUDE.md edit needed), or drop
|
|
256
|
+
`skills/omnilane` into `~/.claude/skills/`.
|
|
235
257
|
- **Codex**: drop/symlink `skills/omnilane` into `~/.codex/skills/`.
|
|
236
258
|
- **Grok Build**: `grok plugin install <this repo> --trust`
|
|
237
259
|
- **Antigravity**: `agy plugin install <this repo>` (check first with
|
package/README.zh-CN.md
CHANGED
|
@@ -20,6 +20,23 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## v0.8.1 新功能
|
|
24
|
+
|
|
25
|
+
- **Claude Code 插件开场自动载入路由提醒** — 插件新增 `SessionStart`
|
|
26
|
+
hook(`hooks/hooks.json`),在会话开始(`startup|resume|clear`)时自动
|
|
27
|
+
注入路由提醒,安装插件即生效,无需修改 `~/.claude/CLAUDE.md`。其他
|
|
28
|
+
CLI 仍使用 `install.sh` 的指令文件提醒。
|
|
29
|
+
|
|
30
|
+
## v0.8.0 新功能
|
|
31
|
+
|
|
32
|
+
- **两个新派工 vendor** — `kimi`(Moonshot Kimi Code CLI)与 `qwen`
|
|
33
|
+
(Alibaba Qwen Code CLI)加入,沿用统一 runner 契约:advise 只读、
|
|
34
|
+
work 自动批准、剥除 API key 环境变量改用 CLI 自身订阅登录、空输出
|
|
35
|
+
视为失败。可用 `--vendor kimi|qwen` 直接指定。
|
|
36
|
+
- **coding-overflow 新增备选链** — 额度溢流道改为 grok → kimi → qwen
|
|
37
|
+
再到 `off`,三家装任一家即可用。runner 以假可执行文件完成契约测试;
|
|
38
|
+
欢迎反馈真实模型实测结果。
|
|
39
|
+
|
|
23
40
|
## v0.7.1 新功能
|
|
24
41
|
|
|
25
42
|
- **路由表更新(2026-07 模型数据)** — hardest-coding 首选改为 GPT-5.6 Sol
|
|
@@ -117,7 +134,7 @@ flowchart LR
|
|
|
117
134
|
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 百万 token 长文整合——仅限分析,不派 agentic 长链 |
|
|
118
135
|
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | 快速多步骤 agentic 循环、多模态检查 |
|
|
119
136
|
| 📡 live-search | Grok 4.5 | —(off) | 实时 X/网络搜索与社群脉络 |
|
|
120
|
-
| 🚰 coding-overflow | Grok 4.5 |
|
|
137
|
+
| 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus | Codex 额度吃紧时的中量级编码溢流道;事实性声明须另行查证 |
|
|
121
138
|
| 🗳️ arbitrate | off(可选评审团) | — | 内置意见评审团,重大决定用——默认关闭,要用在 `routing.local.yaml` 打开;每评审每轮烧一次额度 |
|
|
122
139
|
|
|
123
140
|
**备选模型**是候选链的下一位——首选那家的厂商 CLI 没装时,派发就降到它。
|
|
@@ -202,7 +219,8 @@ Esc。服务器发送事件(SSE)会实时更新,又不会重建当前聚焦的
|
|
|
202
219
|
`--dry-run`,可先预览每个由这份 checkout 拥有的文件动作。
|
|
203
220
|
要回滚安装器拥有的链接与标记提示,执行 `./install.sh --uninstall`。
|
|
204
221
|
|
|
205
|
-
- **Claude Code**:以插件安装(附 `/route`、`/route-jobs`
|
|
222
|
+
- **Claude Code**:以插件安装(附 `/route`、`/route-jobs` 命令,并内置
|
|
223
|
+
`SessionStart` hook,会话开始时自动注入路由提醒,无需修改 CLAUDE.md),
|
|
206
224
|
或把 `skills/omnilane` 放进 `~/.claude/skills/`。
|
|
207
225
|
- **Codex**:把 `skills/omnilane` 放进或链接到 `~/.codex/skills/`。
|
|
208
226
|
- **Grok Build**:`grok plugin install <本仓库路径> --trust`
|
package/README.zh-TW.md
CHANGED
|
@@ -20,6 +20,23 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
## v0.8.1 新功能
|
|
24
|
+
|
|
25
|
+
- **Claude Code 外掛開場自動載入路由提醒** — 外掛新增 `SessionStart`
|
|
26
|
+
hook(`hooks/hooks.json`),於開場(`startup|resume|clear`)自動注入
|
|
27
|
+
路由提醒,裝外掛即生效,不必修改 `~/.claude/CLAUDE.md`。其他 CLI
|
|
28
|
+
仍走 `install.sh` 的指令檔提醒。
|
|
29
|
+
|
|
30
|
+
## v0.8.0 新功能
|
|
31
|
+
|
|
32
|
+
- **兩個新派工 vendor** — `kimi`(Moonshot Kimi Code CLI)與 `qwen`
|
|
33
|
+
(Alibaba Qwen Code CLI)加入,沿用統一 runner 契約:advise 唯讀、
|
|
34
|
+
work 自動核准、剝除 API key 環境變數改用 CLI 自身訂閱登入、空輸出
|
|
35
|
+
視為失敗。可用 `--vendor kimi|qwen` 直接點名。
|
|
36
|
+
- **coding-overflow 長出備援鏈** — 額度溢流道改為 grok → kimi → qwen
|
|
37
|
+
再到 `off`,三家裝任一家即可用。runner 以假執行檔完成契約測試;
|
|
38
|
+
歡迎回報真實模型實測結果。
|
|
39
|
+
|
|
23
40
|
## v0.7.1 新功能
|
|
24
41
|
|
|
25
42
|
- **路由表更新(2026-07 模型數據)** — hardest-coding 首選改為 GPT-5.6 Sol
|
|
@@ -117,7 +134,7 @@ flowchart LR
|
|
|
117
134
|
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 百萬 token 長文整合——僅限分析,不派 agentic 長鏈 |
|
|
118
135
|
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | 快速多步驟 agentic 迴圈、多模態檢查 |
|
|
119
136
|
| 📡 live-search | Grok 4.5 | —(off) | 即時 X/網路搜尋與社群脈絡 |
|
|
120
|
-
| 🚰 coding-overflow | Grok 4.5 |
|
|
137
|
+
| 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus | Codex 額度吃緊時的中量級編碼溢流道;事實性宣稱須另行查證 |
|
|
121
138
|
| 🗳️ arbitrate | off(選配評審團) | — | 內建意見評審團,重大決定用——預設關閉,要用在 `routing.local.yaml` 開;每評審每輪燒一次額度 |
|
|
122
139
|
|
|
123
140
|
**備選模型**是候選鏈的下一位——首選那家的廠商 CLI 沒裝時,派工就降到它。
|
|
@@ -203,7 +220,8 @@ omnilane ui stop # 正常停止
|
|
|
203
220
|
|
|
204
221
|
要回滾安裝器擁有的連結與標記提示,執行 `./install.sh --uninstall`。
|
|
205
222
|
|
|
206
|
-
- **Claude Code**:以外掛安裝(附 `/route`、`/route-jobs`
|
|
223
|
+
- **Claude Code**:以外掛安裝(附 `/route`、`/route-jobs` 指令,並內建
|
|
224
|
+
`SessionStart` hook,開場自動注入路由提醒,不必修改 CLAUDE.md),
|
|
207
225
|
或把 `skills/omnilane` 放進 `~/.claude/skills/`。
|
|
208
226
|
- **Codex**:把 `skills/omnilane` 放進或連結到 `~/.codex/skills/`。
|
|
209
227
|
- **Grok Build**:`grok plugin install <本 repo 路徑> --trust`
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.8.1
|
|
@@ -64,7 +64,7 @@ _omnilane() {
|
|
|
64
64
|
route|dispatch)
|
|
65
65
|
case "$prev" in
|
|
66
66
|
--mode) words="advise work" ;;
|
|
67
|
-
--vendor) words="codex claude grok gemini exec vote" ;;
|
|
67
|
+
--vendor) words="codex claude grok gemini kimi qwen exec vote" ;;
|
|
68
68
|
--effort) words="low medium high xhigh max" ;;
|
|
69
69
|
--workdir)
|
|
70
70
|
COMPREPLY=()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnilane",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "One routing table, every harness — classify subtasks into lanes and dispatch each lane to the best vendor's agentic CLI (Codex, Claude, Gemini, Grok) using your existing subscription logins.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"omnilane": "bin/omnilane"
|
package/routing.yaml
CHANGED
|
@@ -22,7 +22,7 @@ ui-draft: codex gpt-5.6-sol xhigh | claude claude-opus-4-8 high # only w
|
|
|
22
22
|
long-context: gemini "Gemini 3.1 Pro (High)" - | claude claude-opus-4-8 high | codex gpt-5.6-sol high # 1M-token synthesis ONLY — never agentic loops (AA agentic 21.4)
|
|
23
23
|
fast-agentic: gemini "Gemini 3.5 Flash (High)" - | codex gpt-5.6-luna high # speed + agentic tool loops
|
|
24
24
|
live-search: grok grok-4.5 - | off # native X/web search lane; no real substitute
|
|
25
|
-
coding-overflow: grok grok-4.5 - | off
|
|
25
|
+
coding-overflow: grok grok-4.5 - | kimi kimi-k3 - | qwen qwen3-coder-plus - | off # codex-quota relief valve: mid-tier coding; verify factual claims (grok hallucination-prone). kimi/qwen model fields are CLI aliases — adjust to your login.
|
|
26
26
|
arbitrate: off - - # opinion panel is OPT-IN: it costs one call per voter per round.
|
|
27
27
|
# Enable: `arbitrate: vote codex,claude,grok -` (any 1-4 of codex/claude/grok/gemini)
|
|
28
28
|
# Debate round (each voter rebuts the others): set the effort field to 2.
|
package/scripts/configure.sh
CHANGED
|
@@ -16,6 +16,8 @@ CLAUDE_MODELS=("claude-opus-4-8" "claude-fable-5" "claude-sonnet-5" "claude-haik
|
|
|
16
16
|
CLAUDE_EFFORTS=("max" "xhigh" "high" "medium" "low" "-")
|
|
17
17
|
GEMINI_MODELS=("Gemini 3.1 Pro (High)" "Gemini 3.1 Pro (Low)" "Gemini 3.5 Flash (High)" "Gemini 3.5 Flash (Medium)" "Gemini 3.5 Flash (Low)")
|
|
18
18
|
GROK_MODELS=("grok-4.5" "grok-4.3")
|
|
19
|
+
KIMI_MODELS=("kimi-k3" "kimi-k2.7-code")
|
|
20
|
+
QWEN_MODELS=("qwen3-coder-plus" "qwen3-coder-flash")
|
|
19
21
|
|
|
20
22
|
custom_value_is_safe() {
|
|
21
23
|
case "$1" in
|
|
@@ -74,7 +76,7 @@ while true; do
|
|
|
74
76
|
echo "$(msgf cfg_pick_range "${#LANES[@]}")"; continue
|
|
75
77
|
fi
|
|
76
78
|
lane="${LANES[$((n - 1))]}"
|
|
77
|
-
vendor="$(pick "$(msgf cfg_vendor_for "$lane")" codex claude grok gemini "vote (multi-model panel)" "exec (your own script/gate)" off)"
|
|
79
|
+
vendor="$(pick "$(msgf cfg_vendor_for "$lane")" codex claude grok gemini kimi qwen "vote (multi-model panel)" "exec (your own script/gate)" off)"
|
|
78
80
|
[[ "$vendor" == exec* ]] && vendor="exec"
|
|
79
81
|
[[ "$vendor" == vote* ]] && vendor="vote"
|
|
80
82
|
if [[ "$vendor" == "off" ]]; then
|
|
@@ -86,6 +88,8 @@ while true; do
|
|
|
86
88
|
claude) model="$(pick "$(msg cfg_model)" "${CLAUDE_MODELS[@]}")"; effort="$(pick "$(msg cfg_effort)" "${CLAUDE_EFFORTS[@]}")" ;;
|
|
87
89
|
gemini) model="$(pick "$(msg cfg_model)" "${GEMINI_MODELS[@]}")"; effort="-" ;;
|
|
88
90
|
grok) model="$(pick "$(msg cfg_model)" "${GROK_MODELS[@]}")"; effort="-" ;;
|
|
91
|
+
kimi) model="$(pick "$(msg cfg_model)" "${KIMI_MODELS[@]}")"; effort="-" ;;
|
|
92
|
+
qwen) model="$(pick "$(msg cfg_model)" "${QWEN_MODELS[@]}")"; effort="-" ;;
|
|
89
93
|
vote) while true; do
|
|
90
94
|
count="$(pick "$(msg cfg_voters_count)" "1" "2" "3" "4")"
|
|
91
95
|
[[ "$count" =~ ^[1-4]$ ]] && break
|
package/scripts/dispatch.sh
CHANGED
|
@@ -52,7 +52,7 @@ flags:
|
|
|
52
52
|
before any provider call or job state
|
|
53
53
|
--mode advise|work advise (read-only, default) or work (may edit files)
|
|
54
54
|
--workdir DIR working directory handed to the vendor CLI
|
|
55
|
-
--vendor V pin one configured vendor (codex|claude|grok|gemini)
|
|
55
|
+
--vendor V pin one configured vendor (codex|claude|grok|gemini|kimi|qwen)
|
|
56
56
|
--model M override the routed model
|
|
57
57
|
--effort E override the routed effort
|
|
58
58
|
--timeout SECONDS cap each CLI call (default 600)
|
|
@@ -363,7 +363,7 @@ validate_routing() {
|
|
|
363
363
|
lane_invalid=1
|
|
364
364
|
break
|
|
365
365
|
fi
|
|
366
|
-
if ! [[ "$vendor" =~ ^(codex|claude|grok|gemini|exec|off)$ ]]; then
|
|
366
|
+
if ! [[ "$vendor" =~ ^(codex|claude|grok|gemini|kimi|qwen|exec|off)$ ]]; then
|
|
367
367
|
printf 'FAIL %s unknown-vendor=%s\n' "$lane" "$vendor"
|
|
368
368
|
lane_invalid=1
|
|
369
369
|
break
|
|
@@ -489,8 +489,8 @@ TASK="$2"
|
|
|
489
489
|
# A typo like --mode advice must not fall through to the write-enabled branch.
|
|
490
490
|
[[ "$MODE" == "advise" || "$MODE" == "work" ]] || { echo "omnilane: invalid --mode (advise|work)" >&2; exit 2; }
|
|
491
491
|
if [[ -n "$OVERRIDE_VENDOR" ]] &&
|
|
492
|
-
! [[ "$OVERRIDE_VENDOR" =~ ^(codex|claude|grok|gemini)$ ]]; then
|
|
493
|
-
echo "omnilane: invalid vendor (codex|claude|grok|gemini)" >&2
|
|
492
|
+
! [[ "$OVERRIDE_VENDOR" =~ ^(codex|claude|grok|gemini|kimi|qwen)$ ]]; then
|
|
493
|
+
echo "omnilane: invalid vendor (codex|claude|grok|gemini|kimi|qwen)" >&2
|
|
494
494
|
exit 2
|
|
495
495
|
fi
|
|
496
496
|
|
package/scripts/jobs.sh
CHANGED
|
@@ -132,7 +132,7 @@ read_job_pid() {
|
|
|
132
132
|
|
|
133
133
|
parse_stats_metadata() {
|
|
134
134
|
local value="$1"
|
|
135
|
-
local metadata_re='^\{"lane":"([a-z][a-z0-9-]*)","vendor":"(codex|claude|grok|gemini|exec)"(,|})'
|
|
135
|
+
local metadata_re='^\{"lane":"([a-z][a-z0-9-]*)","vendor":"(codex|claude|grok|gemini|kimi|qwen|exec)"(,|})'
|
|
136
136
|
STATS_LANE=""
|
|
137
137
|
STATS_VENDOR=""
|
|
138
138
|
[[ "$value" =~ $metadata_re ]] || return 1
|
|
@@ -143,7 +143,7 @@ parse_stats_metadata() {
|
|
|
143
143
|
parse_audit_metadata() {
|
|
144
144
|
local value="$1" metadata_re
|
|
145
145
|
local json_string='([^"\\]|\\["\\/bfnrt]|\\u[0-9a-fA-F]{4})*'
|
|
146
|
-
metadata_re="^\\{\"lane\":\"[a-z][a-z0-9-]*\",\"vendor\":\"(codex|claude|grok|gemini|exec)\",\"model\":\"${json_string}\",\"effort\":\"${json_string}\",\"timeout\":(0|[1-9][0-9]*),\"job_timeout\":(null|0|[1-9][0-9]*),\"mode\":\"(advise|work)\",\"workdir\":\"${json_string}\",\"candidate\":\"[1-9][0-9]*/[1-9][0-9]*\",\"started\":\"[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z\"\\}$"
|
|
146
|
+
metadata_re="^\\{\"lane\":\"[a-z][a-z0-9-]*\",\"vendor\":\"(codex|claude|grok|gemini|kimi|qwen|exec)\",\"model\":\"${json_string}\",\"effort\":\"${json_string}\",\"timeout\":(0|[1-9][0-9]*),\"job_timeout\":(null|0|[1-9][0-9]*),\"mode\":\"(advise|work)\",\"workdir\":\"${json_string}\",\"candidate\":\"[1-9][0-9]*/[1-9][0-9]*\",\"started\":\"[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z\"\\}$"
|
|
147
147
|
[[ "$value" =~ $metadata_re ]]
|
|
148
148
|
}
|
|
149
149
|
|
|
@@ -252,7 +252,7 @@ case "${1:-}" in
|
|
|
252
252
|
read_public_metadata "$JOB_DIR/meta.json" || {
|
|
253
253
|
die 1 "cannot retry: unreadable job metadata"
|
|
254
254
|
}
|
|
255
|
-
retry_re='^\{"lane":"([a-z][a-z0-9-]*)","vendor":"(codex|claude|grok|gemini|exec)","model":"([^"\\]*)","effort":"([^"\\]*)","timeout":([1-9][0-9]*),"job_timeout":([1-9][0-9]*|null),"mode":"(advise|work)","workdir":"([^"\\]*)",'
|
|
255
|
+
retry_re='^\{"lane":"([a-z][a-z0-9-]*)","vendor":"(codex|claude|grok|gemini|kimi|qwen|exec)","model":"([^"\\]*)","effort":"([^"\\]*)","timeout":([1-9][0-9]*),"job_timeout":([1-9][0-9]*|null),"mode":"(advise|work)","workdir":"([^"\\]*)",'
|
|
256
256
|
[[ "$PUBLIC_METADATA" =~ $retry_re ]] || {
|
|
257
257
|
die 1 "cannot retry: job metadata is not safely parseable"
|
|
258
258
|
}
|
package/scripts/lib/common.sh
CHANGED
|
@@ -70,6 +70,8 @@ vendor_bin() { # vendor -> binary (honors local.sh overrides)
|
|
|
70
70
|
claude) echo "${CLAUDE_BIN:-claude}" ;;
|
|
71
71
|
grok) echo "${GROK_BIN:-grok}" ;;
|
|
72
72
|
gemini) echo "${AGY_BIN:-agy}" ;;
|
|
73
|
+
kimi) echo "${KIMI_BIN:-kimi}" ;;
|
|
74
|
+
qwen) echo "${QWEN_BIN:-qwen}" ;;
|
|
73
75
|
*) echo "" ;;
|
|
74
76
|
esac
|
|
75
77
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# omnilane runner: Moonshot Kimi Code CLI
|
|
5
|
+
#
|
|
6
|
+
# Usage: run-kimi.sh MODE WORKDIR MODEL EFFORT PROMPT_FILE OUTPUT_FILE
|
|
7
|
+
# MODE = advise (read-only, plan mode) | work (may edit files in WORKDIR)
|
|
8
|
+
#
|
|
9
|
+
# MODEL is a Kimi Code model alias from the user's config.toml (e.g. kimi-k3);
|
|
10
|
+
# an unknown alias fails at the CLI, not here. Kimi has no reasoning-effort
|
|
11
|
+
# knob, so EFFORT is accepted for interface parity only.
|
|
12
|
+
|
|
13
|
+
source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh"
|
|
14
|
+
|
|
15
|
+
MODE="$1"; WORKDIR="$2"; MODEL="$3"; EFFORT="$4"; PROMPT_FILE="$5"; OUTPUT_FILE="$6"
|
|
16
|
+
: "$EFFORT" # parity with the uniform runner interface
|
|
17
|
+
|
|
18
|
+
KIMI_BIN="${KIMI_BIN:-kimi}"
|
|
19
|
+
RUN_TIMEOUT="${OMNILANE_TIMEOUT:-600}"
|
|
20
|
+
|
|
21
|
+
truncate_payload "$PROMPT_FILE" 140000
|
|
22
|
+
|
|
23
|
+
# --plan starts plan mode (read-only); -y auto-approves actions for work mode.
|
|
24
|
+
ARGS=(-p "$(cat "$PROMPT_FILE")" --output-format text)
|
|
25
|
+
[[ -n "$MODEL" && "$MODEL" != "-" ]] && ARGS+=(-m "$MODEL")
|
|
26
|
+
if [[ "$MODE" == "advise" ]]; then
|
|
27
|
+
ARGS+=(--plan)
|
|
28
|
+
else
|
|
29
|
+
ARGS+=(-y)
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
set +e
|
|
33
|
+
(
|
|
34
|
+
cd "$WORKDIR" || exit 127
|
|
35
|
+
# Subscription-login path: strip API-key env so the CLI uses its own auth.
|
|
36
|
+
run_with_timeout "$RUN_TIMEOUT" env \
|
|
37
|
+
-u MOONSHOT_API_KEY -u KIMI_API_KEY \
|
|
38
|
+
OMNILANE_DEPTH=1 \
|
|
39
|
+
"$KIMI_BIN" "${ARGS[@]}" \
|
|
40
|
+
> "${OUTPUT_FILE}.tmp" 2> "${OUTPUT_FILE}.stderr.log"
|
|
41
|
+
)
|
|
42
|
+
RC=$?
|
|
43
|
+
set -e
|
|
44
|
+
|
|
45
|
+
# Empty output is a failure, not a silent rc=0 success.
|
|
46
|
+
if ! grep -q '[^[:space:]]' "${OUTPUT_FILE}.tmp" 2>/dev/null; then
|
|
47
|
+
echo "omnilane: kimi produced no output" >> "${OUTPUT_FILE}.stderr.log"
|
|
48
|
+
[[ "$RC" -eq 0 ]] && RC=1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
[[ -f "${OUTPUT_FILE}.tmp" ]] && mv "${OUTPUT_FILE}.tmp" "$OUTPUT_FILE"
|
|
52
|
+
[[ -s "${OUTPUT_FILE}.stderr.log" ]] || rm "${OUTPUT_FILE}.stderr.log" 2>/dev/null || true
|
|
53
|
+
exit "$RC"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# omnilane runner: Alibaba Qwen Code CLI
|
|
5
|
+
#
|
|
6
|
+
# Usage: run-qwen.sh MODE WORKDIR MODEL EFFORT PROMPT_FILE OUTPUT_FILE
|
|
7
|
+
# MODE = advise (default approvals: write tools blocked non-interactively)
|
|
8
|
+
# | work (--approval-mode yolo: may edit files in WORKDIR)
|
|
9
|
+
#
|
|
10
|
+
# Qwen Code has no reasoning-effort knob, so EFFORT is parity-only.
|
|
11
|
+
|
|
12
|
+
source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh"
|
|
13
|
+
|
|
14
|
+
MODE="$1"; WORKDIR="$2"; MODEL="$3"; EFFORT="$4"; PROMPT_FILE="$5"; OUTPUT_FILE="$6"
|
|
15
|
+
: "$EFFORT" # parity with the uniform runner interface
|
|
16
|
+
|
|
17
|
+
QWEN_BIN="${QWEN_BIN:-qwen}"
|
|
18
|
+
RUN_TIMEOUT="${OMNILANE_TIMEOUT:-600}"
|
|
19
|
+
|
|
20
|
+
truncate_payload "$PROMPT_FILE" 140000
|
|
21
|
+
|
|
22
|
+
ARGS=(-p "$(cat "$PROMPT_FILE")" --output-format text)
|
|
23
|
+
[[ -n "$MODEL" && "$MODEL" != "-" ]] && ARGS+=(-m "$MODEL")
|
|
24
|
+
[[ "$MODE" == "work" ]] && ARGS+=(--approval-mode yolo)
|
|
25
|
+
|
|
26
|
+
set +e
|
|
27
|
+
(
|
|
28
|
+
cd "$WORKDIR" || exit 127
|
|
29
|
+
# Subscription-login path: strip OpenAI-compatible env overrides so the CLI
|
|
30
|
+
# uses its own Qwen OAuth instead of a hijacked endpoint.
|
|
31
|
+
run_with_timeout "$RUN_TIMEOUT" env \
|
|
32
|
+
-u OPENAI_API_KEY -u OPENAI_BASE_URL -u DASHSCOPE_API_KEY \
|
|
33
|
+
OMNILANE_DEPTH=1 \
|
|
34
|
+
"$QWEN_BIN" "${ARGS[@]}" \
|
|
35
|
+
> "${OUTPUT_FILE}.tmp" 2> "${OUTPUT_FILE}.stderr.log"
|
|
36
|
+
)
|
|
37
|
+
RC=$?
|
|
38
|
+
set -e
|
|
39
|
+
|
|
40
|
+
# Empty output is a failure, not a silent rc=0 success.
|
|
41
|
+
if ! grep -q '[^[:space:]]' "${OUTPUT_FILE}.tmp" 2>/dev/null; then
|
|
42
|
+
echo "omnilane: qwen produced no output" >> "${OUTPUT_FILE}.stderr.log"
|
|
43
|
+
[[ "$RC" -eq 0 ]] && RC=1
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
[[ -f "${OUTPUT_FILE}.tmp" ]] && mv "${OUTPUT_FILE}.tmp" "$OUTPUT_FILE"
|
|
47
|
+
[[ -s "${OUTPUT_FILE}.stderr.log" ]] || rm "${OUTPUT_FILE}.stderr.log" 2>/dev/null || true
|
|
48
|
+
exit "$RC"
|