omnilane 0.8.3 → 0.9.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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,54 @@ semantic version tags.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.0] - 2026-07-19
10
+
11
+ ### Added
12
+
13
+ - `omnilane completion fish` prints a Fish completion script
14
+ (`completions/omnilane.fish`): static command, option, and enum completion for
15
+ every public command, including the direct-API vendors and `jobs cancel`/`rm`.
16
+ Load it with `omnilane completion fish | source`. Dynamic lane-name and job-id
17
+ completion remain Bash/Zsh-only for now.
18
+ - Five OpenAI-compatible direct-API vendors — `deepseek`, `zai` (GLM),
19
+ `mistral`, `groq`, and `cerebras` — join `openrouter` as CLI-free inference
20
+ lanes (curl + a `<VENDOR>_API_KEY`, advise mode only). A single vendor registry
21
+ in `lib/common.sh` (endpoint, key env, and default model per vendor) now drives
22
+ every vendor-name check in `dispatch.sh` and `jobs.sh`, so adding another
23
+ OpenAI-compatible vendor is a one-line registry entry plus a thin runner
24
+ wrapper. `configure` lists them with suggested models. See
25
+ `docs/model-capabilities-2026-07.md` for the July 2026 model/benchmark snapshot
26
+ behind the routing defaults.
27
+ - `omnilane doctor` now reports vendor-CLI availability: which of codex, claude,
28
+ grok, gemini (the `agy` CLI), kimi, qwen, and opencode are reachable, plus
29
+ the direct-API vendors openrouter, deepseek, zai, mistral, groq, and cerebras
30
+ (curl + each `<VENDOR>_API_KEY`). Shown in human and `--json` output;
31
+ the probe mirrors the runners' `*_BIN` overrides and `local.sh` in an isolated
32
+ subshell. It is a `PASS`/`WARN` check and never fails the report.
33
+ - MCP server read-only introspection tools: `explain`, `validate`, `dry_run`,
34
+ `jobs_list`, `jobs_stats`, `jobs_audit`, and `doctor` join the existing
35
+ `route`, `list_lanes`, `jobs_status`, and `jobs_result`, so the MCP surface
36
+ mirrors the CLI's full offline read-only surface. All refuse provider calls and
37
+ create no job state; `dry_run` requires an explicit `workdir` only when `mode`
38
+ is `work`. `jobs_stats`/`jobs_audit` accept an optional `last` and `json`.
39
+ - `configure set|get|unset|list|diff` non-interactive subcommands: script or
40
+ inspect `routing.local.yaml` without a tty. `set` validates the lane, refuses
41
+ unsafe specs, and rolls back on a structural FAIL; `diff` shows how local
42
+ overrides change the effective table versus the defaults. The interactive menu
43
+ is unchanged.
44
+ - `jobs list` and `jobs stats` filters: `--lane` and `--vendor` (and, for
45
+ `list`, `--status running|done`) narrow the output in both human and `--json`
46
+ modes. `list` scans all jobs for up to 20 matches; `stats` filters within its
47
+ `--last` sample and recomputes the success rate and lane/vendor aggregates.
48
+ Invalid filter values exit 2; unfiltered behavior is unchanged.
49
+ - `jobs cancel ID`: stop a running background job. Signals the worker's process
50
+ group (SIGTERM, then SIGKILL after a grace period) so the vendor CLI child
51
+ dies too, and leaves a terminal exit recorded — 143 on graceful stop, 137 if
52
+ force-killed. Idempotent on already-finished, dead, or never-backgrounded jobs.
53
+ - `jobs rm ID`: delete one job's stored directory (task, output, exit, metadata).
54
+ Refuses a job whose worker is still alive — cancel it first — complementing
55
+ `jobs prune`, which only bulk-deletes completed jobs by count or age.
56
+
9
57
  ## [0.8.3] - 2026-07-18
10
58
 
11
59
  ### Added
@@ -259,7 +307,8 @@ semantic version tags.
259
307
  - Initial shared routing table, cross-vendor dispatcher, runners, installer,
260
308
  and baseline lint fixes.
261
309
 
262
- [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.8.3...HEAD
310
+ [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.9.0...HEAD
311
+ [0.9.0]: https://github.com/Seraphim0916/omnilane/compare/v0.8.3...v0.9.0
263
312
  [0.8.3]: https://github.com/Seraphim0916/omnilane/compare/v0.8.2...v0.8.3
264
313
  [0.8.2]: https://github.com/Seraphim0916/omnilane/compare/v0.8.1...v0.8.2
265
314
 
package/README.ja.md CHANGED
@@ -21,6 +21,14 @@
21
21
 
22
22
  ---
23
23
 
24
+ ## v0.9.0 の新機能
25
+
26
+ - **OpenAI 互換の direct-API ベンダーを 5 つ追加** — `deepseek`、`zai`(GLM)、
27
+ `mistral`、`groq`、`cerebras` が `openrouter` と同じく CLI 不要のレーンに
28
+ (curl と `<VENDOR>_API_KEY` だけ)。`lib/common.sh` のレジストリに 1 行で
29
+ 追加でき、モデル能力の比較は [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md) を参照。
30
+ - **Fish シェル補完** — `omnilane completion fish | source`。
31
+
24
32
  ## v0.8.3 の新機能
25
33
 
26
34
  - **MCP サーバー** — `omnilane mcp` は依存ゼロの stdio MCP サーバーを起動し、
@@ -148,6 +156,8 @@ flowchart LR
148
156
  指定ベンダーに固定し、フォールバックしません。
149
157
  - **`skills/omnilane/SKILL.md`** — 四つのハーネス共通のスキル:
150
158
  自分のモデルを特定し、自分のレーンは自前で実行、残りはディスパッチ。
159
+ - **`omnilane mcp`** — 同じルーティングを MCP stdio サーバーとして提供。
160
+ スキルではなく MCP で統合するホスト向け。
151
161
 
152
162
  <div align="center">
153
163
 
@@ -301,10 +311,13 @@ MCP 対応ホストがスキルの導入やルーティングリマインダー
301
311
  }
302
312
  ```
303
313
 
304
- サーバーは `route`、`jobs_status`、`jobs_result`、`list_lanes` を公開します。
314
+ サーバーは `route` に加えて、読み取り専用の照会ツール `list_lanes`、`explain`、`validate`、`dry_run`、`jobs_list`、`jobs_status`、`jobs_result`、`jobs_stats`、`jobs_audit`、`doctor` を公開します。
305
315
  `route` のデフォルトは読み取り専用の `advise` モードで、`work` を選ぶ呼び
306
316
  出しには明示的な `workdir` が必須です。
307
317
 
318
+ 実行時に必要なのは Node.js のみ(npm パッケージは不要)。npm 派なら
319
+ `npm install -g omnilane` で MCP サーバーごと CLI をインストールできます。
320
+
308
321
  ## ⚙️ カスタマイズ
309
322
 
310
323
  三層、すべて任意:
@@ -329,6 +342,8 @@ scripts/dispatch.sh --list # 実効テーブル(フォールバック解決
329
342
  ```
330
343
  eval "$(omnilane completion bash)" # 現在の Bash で補完を有効化
331
344
  source <(omnilane completion zsh) # 現在の Zsh で補完を有効化
345
+ omnilane completion fish | source # 現在の Fish で補完を有効化
346
+ omnilane mcp # MCP stdio サーバー(Node.js が必要)
332
347
  omnilane release-audit [--target VERSION] [--json] # オフライン・読み取り専用のリリースゲート
333
348
  omnilane ui start # ローカル Live UI を起動または再利用し、URL を表示
334
349
  omnilane ui status # Live UI の稼働状態を表示
@@ -342,11 +357,15 @@ dispatch.sh [--json] --list [--json]
342
357
  dispatch.sh [--json] --explain LANE [--json] # 候補ごとの決定理由をオフライン表示
343
358
  dispatch.sh [--json] --validate [--json] # プロバイダーを呼ばず実効ルーティングを検証
344
359
  jobs.sh [--json] {list | status ID | result ID} # JSON は本文を返さずメタデータのみ
360
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 一覧を絞り込み
345
361
  jobs.sh wait ID [--timeout N] # ジョブ終了値。124 はタイムアウト、125 はワーカー消失
346
- jobs.sh [--json] stats [--last N] # ローカル成功率とルーティング集計
362
+ jobs.sh cancel ID # 実行中ジョブを停止:グループに SIGTERM、その後 SIGKILL
363
+ jobs.sh rm ID # 完了/停止ジョブを1件削除(実行中は拒否)
364
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # ローカル成功率とルーティング集計
347
365
  jobs.sh audit [--last N] [--json] # 読み取り専用のジョブ整合性・プライバシー検査
348
366
  jobs.sh prune [--keep N] [--apply] # 既定はプレビューのみ。完了ジョブだけを対象
349
367
  configure.sh # 対話式レーンメニュー
368
+ configure.sh set|get|unset|list|diff LANE [SPEC] # routing.local.yaml を非対話で編集/確認
350
369
  ```
351
370
 
352
371
  終了コード:`2` 使い方エラー(無効なベンダー、または指定ベンダーがレーンに
@@ -419,11 +438,12 @@ configure.sh # 対話式レーンメニ
419
438
 
420
439
  ## 🌱 ステータス
421
440
 
422
- v0.8.38 つのディスパッチベンダーを備えます——4 つのハーネスネイティブ
441
+ omnilane13 のディスパッチベンダーを備えます——4 つのハーネスネイティブ
423
442
  (codex、claude、grok、gemini)、3 つの集約/オーバーフロー CLI(kimi、qwen、
424
- opencode)、そして CLI 不要の `openrouter` 直接 API ベンダー——すべて統一
425
- runner 契約と契約テスト付き。Claude Code の `SessionStart` 自動リマインダー
426
- も同梱。kimi、qwen、opencode、openrouterrunner はフェイクバイナリで
443
+ opencode)、そして CLI 不要の OpenAI 互換 direct-API ベンダー 6 つ(openrouter、
444
+ deepseek、zai、mistral、groq、cerebras)——すべて統一 runner 契約と契約テスト
445
+ 付き。Claude Code `SessionStart` 自動リマインダーと MCP stdio サーバー
446
+ (`omnilane mcp`)も同梱。direct-API と集約系の runner はフェイクバイナリで
427
447
  契約テスト済みです。実モデルでの報告を歓迎します。Grok/Antigravity の
428
448
  コマンドシェル挙動は CLI バージョンで変わる可能性があります。issue と PR を
429
449
  歓迎します。
package/README.ko.md CHANGED
@@ -21,6 +21,14 @@
21
21
 
22
22
  ---
23
23
 
24
+ ## v0.9.0 새 기능
25
+
26
+ - **OpenAI 호환 direct-API 벤더 5개 추가** — `deepseek`, `zai` (GLM), `mistral`,
27
+ `groq`, `cerebras` 가 `openrouter` 처럼 CLI 없는 레인으로 추가(curl 과
28
+ `<VENDOR>_API_KEY` 만 필요). `lib/common.sh` 레지스트리에 한 줄로 추가되며,
29
+ 모델 능력 비교는 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md) 참고.
30
+ - **Fish 셸 자동완성** — `omnilane completion fish | source`.
31
+
24
32
  ## v0.8.3 새 기능
25
33
 
26
34
  - **MCP 서버** — `omnilane mcp` 는 의존성 없는 stdio MCP 서버를 시작하여,
@@ -147,6 +155,8 @@ flowchart LR
147
155
  고정하며 폴백하지 않습니다.
148
156
  - **`skills/omnilane/SKILL.md`** — 네 하네스 공용 스킬: 자기 모델을 파악하고,
149
157
  자기 레인은 직접 수행, 나머지는 디스패치.
158
+ - **`omnilane mcp`** — 같은 라우팅을 MCP stdio 서버로 제공.
159
+ 스킬 대신 MCP 로 통합하는 호스트용.
150
160
 
151
161
  <div align="center">
152
162
 
@@ -294,10 +304,13 @@ MCP 지원 호스트가 스킬 설치나 라우팅 리마인더 없이 omnilane
294
304
  }
295
305
  ```
296
306
 
297
- 서버는 `route`, `jobs_status`, `jobs_result`, `list_lanes` 를 제공합니다.
307
+ 서버는 `route` 와 함께 읽기 전용 조회 도구 `list_lanes`, `explain`, `validate`, `dry_run`, `jobs_list`, `jobs_status`, `jobs_result`, `jobs_stats`, `jobs_audit`, `doctor` 를 제공합니다.
298
308
  `route` 의 기본값은 읽기 전용 `advise` 모드이며, `work` 를 선택한 호출은
299
309
  명시적 `workdir` 을 함께 제공해야 합니다.
300
310
 
311
+ 실행에 필요한 것은 Node.js 뿐입니다(npm 패키지 없음). npm 을 선호하면
312
+ `npm install -g omnilane` 으로 MCP 서버가 포함된 CLI 를 설치할 수 있습니다.
313
+
301
314
  ## ⚙️ 사용자 설정
302
315
 
303
316
  세 계층, 모두 선택 사항:
@@ -322,6 +335,8 @@ scripts/dispatch.sh --list # 실효 테이블(폴백 해석 주석 포함)
322
335
  ```
323
336
  eval "$(omnilane completion bash)" # 현재 Bash 에서 완성 활성화
324
337
  source <(omnilane completion zsh) # 현재 Zsh 에서 완성 활성화
338
+ omnilane completion fish | source # 현재 Fish 에서 완성 활성화
339
+ omnilane mcp # MCP stdio 서버(Node.js 필요)
325
340
  omnilane release-audit [--target VERSION] [--json] # 오프라인 읽기 전용 릴리스 게이트
326
341
  omnilane ui start # 로컬 Live UI 를 시작하거나 재사용하고 URL 표시
327
342
  omnilane ui status # Live UI 실행 상태 표시
@@ -335,11 +350,15 @@ dispatch.sh [--json] --list [--json]
335
350
  dispatch.sh [--json] --explain LANE [--json] # 후보별 라우팅 결정을 오프라인 설명
336
351
  dispatch.sh [--json] --validate [--json] # 공급자 호출 없이 실효 라우팅 검사
337
352
  jobs.sh [--json] {list | status ID | result ID} # JSON은 본문 없이 메타데이터만 반환
353
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 목록 필터
338
354
  jobs.sh wait ID [--timeout N] # 작업 종료값, 124 시간 초과, 125 작업자 소실
339
- jobs.sh [--json] stats [--last N] # 로컬 성공률과 라우팅 집계
355
+ jobs.sh cancel ID # 실행 작업 중지: 그룹 SIGTERM 후 SIGKILL
356
+ jobs.sh rm ID # 완료/종료 작업 1건 삭제(실행 중이면 거부)
357
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # 로컬 성공률과 라우팅 집계
340
358
  jobs.sh audit [--last N] [--json] # 읽기 전용 작업 무결성/개인정보 검사
341
359
  jobs.sh prune [--keep N] [--apply] # 기본은 미리보기이며 완료된 작업만 정리
342
360
  configure.sh # 대화형 레인 메뉴
361
+ configure.sh set|get|unset|list|diff LANE [SPEC] # routing.local.yaml 비대화식 편집/확인
343
362
  ```
344
363
 
345
364
  종료 코드: `2` 사용법 오류(잘못된 벤더 또는 지정 벤더가 레인에 없는 경우 포함),
@@ -407,10 +426,11 @@ CLI 를 사용할 수 없음, `5` 1라운드 성공 투표자 부족, `6` 2라
407
426
 
408
427
  ## 🌱 상태
409
428
 
410
- v0.8.3 8개의 디스패치 벤더를 갖춥니다——4개의 하네스 네이티브(codex,
429
+ omnilane 13개의 디스패치 벤더를 갖춥니다——4개의 하네스 네이티브(codex,
411
430
  claude, grok, gemini), 3개의 집합/오버플로 CLI(kimi, qwen, opencode), 그리고
412
- CLI 가 필요 없는 `openrouter` 직접 API 벤더——모두 통일 runner 계약과 계약
413
- 테스트를 갖추었고, Claude Code `SessionStart` 자동 리마인더도 포함합니다.
431
+ CLI 가 필요 없는 OpenAI 호환 direct-API 벤더 6개(openrouter, deepseek, zai,
432
+ mistral, groq, cerebras)——모두 통일 runner 계약과 계약 테스트를 갖추었고,
433
+ Claude Code `SessionStart` 자동 리마인더와 MCP stdio 서버(`omnilane mcp`)도 포함합니다.
414
434
  kimi, qwen, opencode, openrouter 의 runner 는 페이크 바이너리로 계약 테스트를
415
435
  마쳤습니다. 실제 모델 사용 보고를 환영합니다. Grok/Antigravity 커맨드 셸
416
436
  동작은 CLI 버전에 따라 달라질 수 있습니다. issue 와 PR 환영합니다.
package/README.md CHANGED
@@ -21,6 +21,14 @@ or any hosted model via OpenRouter — on the subscriptions you already pay for,
21
21
 
22
22
  ---
23
23
 
24
+ ## What's new in v0.9.0
25
+
26
+ - **Five OpenAI-compatible direct-API vendors** — `deepseek`, `zai` (GLM),
27
+ `mistral`, `groq`, and `cerebras` join `openrouter` as CLI-free lanes (curl +
28
+ a `<VENDOR>_API_KEY`). A one-line `lib/common.sh` registry entry adds each;
29
+ see [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md).
30
+ - **Fish shell completion** — `omnilane completion fish | source`.
31
+
24
32
  ## What's new in v0.8.3
25
33
 
26
34
  - **MCP server** — `omnilane mcp` starts a zero-dependency stdio MCP server,
@@ -37,6 +45,12 @@ or any hosted model via OpenRouter — on the subscriptions you already pay for,
37
45
  Advise/consult only (it cannot edit files; work mode fails with guidance)
38
46
  and the model slug is mandatory, e.g.
39
47
  `dispatch.sh --vendor openrouter --model anthropic/claude-sonnet-5 consult "..."`.
48
+ - **`deepseek`, `zai`, `mistral`, `groq`, `cerebras` vendors** — the same
49
+ CLI-free direct-API path as `openrouter`, for OpenAI-compatible providers:
50
+ DeepSeek, Z.ai GLM, Mistral, Groq, and Cerebras. Each needs only `curl` and
51
+ its `<VENDOR>_API_KEY`; advise/consult only. A one-line `lib/common.sh`
52
+ registry entry defines each endpoint, key env, and default model. See
53
+ [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md).
40
54
  - **`opencode` vendor** — headless dispatch through the OpenCode
41
55
  multi-provider aggregator CLI (`opencode run`). Advise mode pins OpenCode's
42
56
  built-in read-only `plan` agent; work mode uses `--auto`. Joins the default
@@ -149,6 +163,8 @@ flowchart LR
149
163
  vendor without fallback.
150
164
  - **`skills/omnilane/SKILL.md`** — a single skill every harness can load:
151
165
  identify your own model, self-execute your lane, dispatch the rest.
166
+ - **`omnilane mcp`** — the same routing surface as an MCP stdio server,
167
+ for hosts that integrate via MCP instead of skills.
152
168
 
153
169
  <div align="center">
154
170
 
@@ -301,10 +317,15 @@ adding a routing reminder. Configure the host to launch the installed CLI:
301
317
  }
302
318
  ```
303
319
 
304
- The server exposes `route`, `jobs_status`, `jobs_result`, and `list_lanes`.
305
- `route` defaults to read-only `advise` mode. Calls that select `work` must also
320
+ The server exposes `route` plus read-only introspection: `list_lanes`,
321
+ `explain`, `validate`, `dry_run`, `jobs_list`, `jobs_status`, `jobs_result`,
322
+ `jobs_stats`, `jobs_audit`, and `doctor`. `route` defaults to read-only `advise` mode. Calls that select `work` must also
306
323
  provide an explicit `workdir`.
307
324
 
325
+ Node.js is the only runtime requirement (no npm packages). If you prefer
326
+ npm, `npm install -g omnilane` installs the CLI with the MCP server
327
+ included.
328
+
308
329
  ## ⚙️ Configure
309
330
 
310
331
  Three layers, all optional:
@@ -314,6 +335,9 @@ Three layers, all optional:
314
335
  future models), and writes the result to `~/.omnilane/routing.local.yaml`.
315
336
  It intentionally skips the multi-vendor `consult` lane; edit that one by
316
337
  hand if needed. `install.sh` offers to run the menu at the end of a normal install.
338
+ For scripting, `configure set|get|unset|list|diff LANE [SPEC]` edits or inspects the same file
339
+ without a tty — `set` validates the lane and rejects an unsafe or structurally
340
+ invalid spec, rolling back on failure.
317
341
  2. **`~/.omnilane/routing.local.yaml`** — hand-edited overrides, same format
318
342
  as `routing.yaml`; local lines win. See `routing.local.yaml.example`.
319
343
  3. **`~/.omnilane/local.sh`** — per-machine binaries, proxies, auth wrappers;
@@ -332,6 +356,8 @@ omnilane list | route … | jobs … | configure # global wrapper, works anywh
332
356
  # (install.sh links it into ~/.local/bin)
333
357
  eval "$(omnilane completion bash)" # enable Bash completion for this shell
334
358
  source <(omnilane completion zsh) # enable Zsh completion for this shell
359
+ omnilane completion fish | source # enable Fish completion for this shell
360
+ omnilane mcp # MCP stdio server (needs Node.js)
335
361
  omnilane release-audit [--target VERSION] [--json] # offline, read-only release gate
336
362
  omnilane ui start # start/reuse the local Live UI; print its URL
337
363
  omnilane ui status # report whether the Live UI is running
@@ -345,11 +371,15 @@ dispatch.sh [--json] --list [--json]
345
371
  dispatch.sh [--json] --explain LANE [--json] # offline candidate-by-candidate decision trace
346
372
  dispatch.sh [--json] --validate [--json] # lint effective routing; no provider calls
347
373
  jobs.sh [--json] {list | status ID | result ID} # JSON result reports metadata, never bodies
374
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # filter the listing
348
375
  jobs.sh wait ID [--timeout N] # job exit; 124 timeout; 125 dead worker
349
- jobs.sh [--json] stats [--last N] # local success and routing aggregates
376
+ jobs.sh cancel ID # stop a running job: group SIGTERM, then SIGKILL
377
+ jobs.sh rm ID # delete one finished/dead job (refuses a running job)
378
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # local success and routing aggregates
350
379
  jobs.sh audit [--last N] [--json] # read-only job integrity/privacy check
351
380
  jobs.sh prune [--keep N] [--apply] # preview by default; completed jobs only
352
381
  configure.sh # interactive lane menu
382
+ configure.sh set|get|unset|list|diff LANE [SPEC] # script/inspect routing.local.yaml, no tty
353
383
  ```
354
384
 
355
385
  **Big decisions can get a panel, not a person.** The `arbitrate` lane ships
@@ -439,11 +469,13 @@ configurator and `routing.local.yaml` exist so you can disagree.
439
469
 
440
470
  ## 🌱 Status
441
471
 
442
- v0.8.3 spans eight dispatch vendors — four harness natives (codex, claude,
443
- grok, gemini), three aggregator/overflow CLIs (kimi, qwen, opencode), and the
444
- CLI-free `openrouter` direct-API vendor on the uniform runner contract with
445
- contract tests, plus the Claude Code `SessionStart` auto-reminder. kimi, qwen,
446
- opencode, and openrouter runners are contract-tested against fake binaries;
472
+ omnilane now spans thirteen dispatch vendors — four harness natives (codex,
473
+ claude, grok, gemini), three aggregator/overflow CLIs (kimi, qwen, opencode),
474
+ and six CLI-free OpenAI-compatible direct-API vendors (openrouter, deepseek,
475
+ zai, mistral, groq, cerebras) on the uniform runner contract with
476
+ contract tests, plus the Claude Code `SessionStart`
477
+ auto-reminder and an MCP stdio server surface (`omnilane mcp`). The direct-API
478
+ and aggregator runners are contract-tested against fake binaries;
447
479
  real-model reports welcome. Grok/Antigravity command-shell behavior may still
448
480
  vary across CLI versions. Issues and PRs welcome.
449
481
 
package/README.zh-CN.md CHANGED
@@ -21,6 +21,11 @@
21
21
 
22
22
  ---
23
23
 
24
+ ## v0.9.0 新功能
25
+
26
+ - **新增 5 个 OpenAI-compatible direct-API vendor** — `deepseek`、`zai`(GLM)、`mistral`、`groq`、`cerebras`,与 `openrouter` 同为免 CLI 通道(curl 加一把 `<VENDOR>_API_KEY`);`lib/common.sh` registry 一行即加一个。详见 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
27
+ - **fish shell 补全** — `omnilane completion fish | source`。
28
+
24
29
  ## v0.8.3 新功能
25
30
 
26
31
  - **MCP server** — `omnilane mcp` 启动零依赖的 stdio MCP server,任何支持
@@ -131,6 +136,8 @@ flowchart LR
131
136
  调用对应厂商的 CLI。`--vendor` 会锁定指定厂商,不做降级。
132
137
  - **`skills/omnilane/SKILL.md`** — 一份技能四个框架都能加载:
133
138
  先认出自己是哪个模型,自己通道的活自己干,其余派出去。
139
+ - **`omnilane mcp`** — 同一套路由改以 MCP stdio server 提供,
140
+ 给走 MCP 而非 skill 集成的宿主。
134
141
 
135
142
  <div align="center">
136
143
 
@@ -267,10 +274,13 @@ Esc。服务器发送事件(SSE)会实时更新,又不会重建当前聚焦的
267
274
  }
268
275
  ```
269
276
 
270
- Server 提供 `route`、`jobs_status`、`jobs_result`、`list_lanes` 四个工具。
277
+ Server 提供 `route`,以及一组只读查询工具:`list_lanes`、`explain`、`validate`、`dry_run`、`jobs_list`、`jobs_status`、`jobs_result`、`jobs_stats`、`jobs_audit`、`doctor`。
271
278
  `route` 默认只读 `advise` 模式;选择 `work` 的调用必须同时提供明确的
272
279
  `workdir`。
273
280
 
281
+ 唯一的运行需求是 Node.js(不装任何 npm 包);也可以直接
282
+ `npm install -g omnilane`,CLI 连同 MCP server 一起装好。
283
+
274
284
  ## ⚙️ 自定义设置
275
285
 
276
286
  三层,全部可选:
@@ -295,6 +305,8 @@ scripts/dispatch.sh --list # 生效表,标出候选链降级与关闭的通
295
305
  ```
296
306
  eval "$(omnilane completion bash)" # 在当前 Bash 启用补全
297
307
  source <(omnilane completion zsh) # 在当前 Zsh 启用补全
308
+ omnilane completion fish | source
309
+ omnilane mcp # MCP stdio server(需 Node.js)
298
310
  omnilane release-audit [--target 版本] [--json] # 离线、只读的发布闸门
299
311
  omnilane ui start # 启动或复用本地 Live UI,输出链接
300
312
  omnilane ui status # 查看 Live UI 是否正在运行
@@ -308,11 +320,15 @@ dispatch.sh [--json] --list [--json]
308
320
  dispatch.sh [--json] --explain 通道 [--json] # 离线逐候选解释路由决策
309
321
  dispatch.sh [--json] --validate [--json] # 离线检查生效路由,不调用模型
310
322
  jobs.sh [--json] {list | status 作业ID | result 作业ID} # JSON 结果只回元数据,不回正文
323
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 过滤列表
311
324
  jobs.sh wait 作业ID [--timeout N] # 作业退出码;124 超时;125 工作进程消失
312
- jobs.sh [--json] stats [--last N] # 本机成功率与路由汇总
325
+ jobs.sh cancel 作业ID # 停止运行中的作业:整组 SIGTERM,再 SIGKILL
326
+ jobs.sh rm 作业ID # 删除单个已完成/已死作业(运行中会被拒绝)
327
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # 本机成功率与路由汇总
313
328
  jobs.sh audit [--last N] [--json] # 只读检查作业完整性与隐私
314
329
  jobs.sh prune [--keep N] [--apply] # 默认仅预览;只清理已完成作业
315
330
  configure.sh # 交互通道菜单
331
+ configure.sh set|get|unset|list|diff LANE [SPEC] # 非交互编辑/查看 routing.local.yaml
316
332
  ```
317
333
 
318
334
  退出码:`2` 用法错误(包括厂商值无效,或指定厂商不在该通道)、`3` 通道已关闭、
@@ -380,12 +396,7 @@ configure.sh # 交互通道菜单
380
396
 
381
397
  ## 🌱 状态
382
398
 
383
- v0.8.3 共有八个派发 vendor——四个框架原生(codex、claude、grok、gemini)、
384
- 三个聚合/溢流 CLI(kimi、qwen、opencode),加上免 CLI 的 `openrouter` 直连
385
- API vendor——全部走统一 runner 契约并附 contract 测试,另有 Claude Code
386
- `SessionStart` 自动提醒。kimi、qwen、opencode、openrouter 的 runner 以假
387
- 可执行文件做过契约测试;欢迎反馈真实模型使用经验。Grok/Antigravity 命令壳
388
- 行为仍可能随 CLI 版本变动。欢迎提交 issue 与 PR。
399
+ omnilane 现有 13 个派工 vendor——4 个框架原生(codex、claude、grok、gemini)、3 个聚合/溢流 CLI(kimi、qwen、opencode),加上 6 个免 CLI 的 OpenAI-compatible direct-API vendor(openrouter、deepseek、zai、mistral、groq、cerebras)——全部走统一 runner 契约并附 contract 测试,另有 Claude Code `SessionStart` 自动提醒与 MCP stdio server 介面(`omnilane mcp`)。direct-API 与聚合 runner 皆以假可执行档做过契约测试;欢迎反馈真实模型使用经验。Grok/Antigravity 命令壳行为仍可能随 CLI 版本变动。欢迎提交 issue 与 PR。
389
400
 
390
401
  项目文档:[贡献指南](CONTRIBUTING.md) · [安全政策](SECURITY.md) ·
391
402
  [变更记录](CHANGELOG.md)
package/README.zh-TW.md CHANGED
@@ -21,6 +21,14 @@
21
21
 
22
22
  ---
23
23
 
24
+ ## v0.9.0 新功能
25
+
26
+ - **五個 OpenAI-compatible direct-API vendor** — `deepseek`、`zai`(GLM)、
27
+ `mistral`、`groq`、`cerebras`,與 `openrouter` 同為免 CLI 通道(curl 加一把
28
+ `<VENDOR>_API_KEY`);`lib/common.sh` registry 一行即加一個。詳見
29
+ [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
30
+ - **fish shell 補全** — `omnilane completion fish | source`。
31
+
24
32
  ## v0.8.3 新功能
25
33
 
26
34
  - **MCP server** — `omnilane mcp` 啟動零依賴的 stdio MCP server,任何支援
@@ -36,6 +44,11 @@
36
44
  託管模型,不必再裝任何代理 CLI。僅限 advise/consult(不能改檔,
37
45
  work 模式會明確報錯指路),模型 slug 必填,例如
38
46
  `dispatch.sh --vendor openrouter --model anthropic/claude-sonnet-5 consult "..."`。
47
+ - **`deepseek`、`zai`、`mistral`、`groq`、`cerebras` vendor** — 與 `openrouter`
48
+ 同一條免 CLI 直連 API 路徑,對應 OpenAI-compatible 供應商:DeepSeek、Z.ai GLM、
49
+ Mistral、Groq、Cerebras。各只要 `curl` 加自己那把 `<VENDOR>_API_KEY`;僅限
50
+ advise/consult。端點、金鑰、預設模型由 `lib/common.sh` 一行 registry 定義。
51
+ 詳見 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
39
52
  - **`opencode` vendor** — 透過 OpenCode 多供應商聚合 CLI 無頭派工
40
53
  (`opencode run`)。advise 模式鎖定內建唯讀 `plan` agent;work 模式
41
54
  用 `--auto`。加入預設 `coding-overflow` 鏈作為最後備援。
@@ -131,6 +144,8 @@ flowchart LR
131
144
  呼叫對應廠商的 CLI。`--vendor` 會鎖定點名廠商,不做降級。
132
145
  - **`skills/omnilane/SKILL.md`** — 一份技能四個框架都能載入:
133
146
  先認出自己是哪個模型,自己通道的活自己做,其餘派出去。
147
+ - **`omnilane mcp`** — 同一套路由改以 MCP stdio server 提供,
148
+ 給走 MCP 而非 skill 整合的宿主。
134
149
 
135
150
  <div align="center">
136
151
 
@@ -268,10 +283,13 @@ omnilane ui stop # 正常停止
268
283
  }
269
284
  ```
270
285
 
271
- Server 提供 `route`、`jobs_status`、`jobs_result`、`list_lanes` 四個工具。
286
+ Server 提供 `route`,以及一組唯讀查詢工具:`list_lanes`、`explain`、`validate`、`dry_run`、`jobs_list`、`jobs_status`、`jobs_result`、`jobs_stats`、`jobs_audit`、`doctor`。
272
287
  `route` 預設唯讀 `advise` 模式;選 `work` 的呼叫必須同時提供明確的
273
288
  `workdir`。
274
289
 
290
+ 唯一的執行需求是 Node.js(不裝任何 npm 套件);也可以直接
291
+ `npm install -g omnilane`,CLI 連同 MCP server 一起裝好。
292
+
275
293
  ## ⚙️ 自訂設定
276
294
 
277
295
  三層,全部選用:
@@ -298,6 +316,7 @@ omnilane list | route … | jobs … | configure # 全域指令,任何目錄
298
316
  # (install.sh 會連結進 ~/.local/bin)
299
317
  eval "$(omnilane completion bash)" # 在目前 Bash 啟用補全
300
318
  source <(omnilane completion zsh) # 在目前 Zsh 啟用補全
319
+ omnilane completion fish | source # 在目前 Fish 啟用補全
301
320
  omnilane ui start # 啟動或沿用本機 Live UI,印出網址
302
321
  omnilane ui status # 查看 Live UI 是否運作中
303
322
  omnilane ui url # 印出目前通過驗證的本機網址
@@ -310,12 +329,17 @@ dispatch.sh [--json] --list [--json]
310
329
  dispatch.sh [--json] --explain 通道 [--json] # 離線逐候選解釋路由決策
311
330
  dispatch.sh [--json] --validate [--json] # 離線檢查生效路由,不呼叫模型
312
331
  jobs.sh [--json] {list | status 工作ID | result 工作ID} # JSON 結果只回中繼資料,不回本文
332
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 過濾清單
313
333
  jobs.sh wait 工作ID [--timeout N] # 工作結束碼;124 逾時;125 工作者消失
314
- jobs.sh [--json] stats [--last N] # 本機成功率與路由彙整
334
+ jobs.sh cancel 工作ID # 停止執行中的工作:整組 SIGTERM,再 SIGKILL
335
+ jobs.sh rm 工作ID # 刪除單一已完成/已死工作(執行中會被拒絕)
336
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # 本機成功率與路由彙整
315
337
  jobs.sh audit [--last N] [--json] # 唯讀檢查工作完整性與隱私
316
338
  jobs.sh prune [--keep N] [--apply] # 預設只預覽;只清理已完成工作
339
+ omnilane mcp # MCP stdio server(需 Node.js)
317
340
  omnilane release-audit [--target 版本] [--json] # 離線、唯讀的發布閘門
318
341
  configure.sh # 互動通道選單
342
+ configure.sh set|get|unset|list|diff LANE [SPEC] # 非互動編輯/檢視 routing.local.yaml
319
343
  ```
320
344
 
321
345
  **重大決定可以開評審團,不是問一個人。**`arbitrate` 通道**預設關閉**——
@@ -390,10 +414,11 @@ codex/claude/grok/gemini 自選 1-4 個評審。開了之後,同一個問題丟
390
414
 
391
415
  ## 🌱 狀態
392
416
 
393
- v0.8.3 共有八個派工 vendor——四個框架原生(codex、claude、grok、gemini)、
394
- 三個聚合/溢流 CLI(kimi、qwen、opencode),加上免 CLI 的 `openrouter` 直連
395
- API vendor——全部走統一 runner 契約並附 contract 測試,另有 Claude Code
396
- `SessionStart` 自動提醒。kimi、qwen、opencode、openrouter 的 runner 以假
417
+ omnilane 現有十三個派工 vendor——四個框架原生(codex、claude、grok、gemini)、
418
+ 三個聚合/溢流 CLI(kimi、qwen、opencode),加上六個免 CLI 的 OpenAI-compatible
419
+ 直連 API vendor(openrouter、deepseek、zai、mistral、groq、cerebras)——全部走
420
+ 統一 runner 契約並附 contract 測試,另有 Claude Code `SessionStart` 自動提醒與
421
+ MCP stdio server 介面(`omnilane mcp`)。直連 API 與聚合 runner 皆以假
397
422
  執行檔做過契約測試;歡迎回報真實模型使用經驗。Grok/Antigravity 指令殼行為
398
423
  仍可能隨 CLI 版本變動。歡迎回報 issue 與 PR。
399
424
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.3
1
+ 0.9.0
package/bin/omnilane CHANGED
@@ -40,13 +40,14 @@ case "$cmd" in
40
40
  ;;
41
41
  completion)
42
42
  [[ $# -eq 1 ]] || {
43
- echo "usage: omnilane completion bash|zsh" >&2
43
+ echo "usage: omnilane completion bash|zsh|fish" >&2
44
44
  exit 2
45
45
  }
46
46
  case "$1" in
47
47
  bash) cat "$REPO/completions/omnilane.bash" ;;
48
48
  zsh) cat "$REPO/completions/_omnilane" ;;
49
- *) echo "usage: omnilane completion bash|zsh" >&2; exit 2 ;;
49
+ fish) cat "$REPO/completions/omnilane.fish" ;;
50
+ *) echo "usage: omnilane completion bash|zsh|fish" >&2; exit 2 ;;
50
51
  esac
51
52
  ;;
52
53
  release-audit) exec bash "$REPO/scripts/release-audit.sh" "$@" ;;
@@ -69,7 +70,7 @@ omnilane — one routing table, every harness
69
70
  dispatch or consult a model
70
71
  omnilane jobs [--json] COMMAND [ARGS] list, status, result, stats, wait, or audit
71
72
  omnilane mcp start the MCP stdio server
72
- omnilane completion bash|zsh print a shell completion script
73
+ omnilane completion bash|zsh|fish print a shell completion script
73
74
  omnilane release-audit [flags] offline, read-only release gate
74
75
  omnilane doctor [--json] read-only local health report
75
76
  omnilane ui start|status|url|stop