open-multi-agent-kit 0.98.2 → 0.98.4
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 +45 -0
- package/README.md +11 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +14 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +3 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/mcp-attach.d.ts +3 -3
- package/dist/cli/mcp-attach.d.ts.map +1 -1
- package/dist/cli/mcp-attach.js +5 -4
- package/dist/cli/mcp-attach.js.map +1 -1
- package/dist/cli/model-contract.d.ts +5 -0
- package/dist/cli/model-contract.d.ts.map +1 -0
- package/dist/cli/model-contract.js +45 -0
- package/dist/cli/model-contract.js.map +1 -0
- package/dist/commands/adaptorch-doctor-cli.d.ts.map +1 -1
- package/dist/commands/adaptorch-doctor-cli.js +32 -10
- package/dist/commands/adaptorch-doctor-cli.js.map +1 -1
- package/dist/commands/init-cli.d.ts +12 -0
- package/dist/commands/init-cli.d.ts.map +1 -0
- package/dist/commands/init-cli.js +76 -0
- package/dist/commands/init-cli.js.map +1 -0
- package/dist/commands/provider-sync-cli.d.ts +27 -0
- package/dist/commands/provider-sync-cli.d.ts.map +1 -0
- package/dist/commands/provider-sync-cli.js +177 -0
- package/dist/commands/provider-sync-cli.js.map +1 -0
- package/dist/commands/run-command.d.ts +8 -0
- package/dist/commands/run-command.d.ts.map +1 -0
- package/dist/commands/run-command.js +26 -0
- package/dist/commands/run-command.js.map +1 -0
- package/dist/core/active-skill-state.d.ts +7 -0
- package/dist/core/active-skill-state.d.ts.map +1 -0
- package/dist/core/active-skill-state.js +25 -0
- package/dist/core/active-skill-state.js.map +1 -0
- package/dist/core/advisory-judge-model.d.ts.map +1 -1
- package/dist/core/advisory-judge-model.js +8 -1
- package/dist/core/advisory-judge-model.js.map +1 -1
- package/dist/core/advisory-judge-types.d.ts +18 -1
- package/dist/core/advisory-judge-types.d.ts.map +1 -1
- package/dist/core/advisory-judge-types.js.map +1 -1
- package/dist/core/advisory-judge.d.ts.map +1 -1
- package/dist/core/advisory-judge.js +41 -6
- package/dist/core/advisory-judge.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +0 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +30 -85
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/codex-chatgpt-web-bridge.d.ts +99 -0
- package/dist/core/codex-chatgpt-web-bridge.d.ts.map +1 -0
- package/dist/core/codex-chatgpt-web-bridge.js +192 -0
- package/dist/core/codex-chatgpt-web-bridge.js.map +1 -0
- package/dist/core/codex-chatgpt-web-sync.d.ts +50 -0
- package/dist/core/codex-chatgpt-web-sync.d.ts.map +1 -0
- package/dist/core/codex-chatgpt-web-sync.js +119 -0
- package/dist/core/codex-chatgpt-web-sync.js.map +1 -0
- package/dist/core/compaction/compaction-headroom.d.ts +30 -0
- package/dist/core/compaction/compaction-headroom.d.ts.map +1 -0
- package/dist/core/compaction/compaction-headroom.js +48 -0
- package/dist/core/compaction/compaction-headroom.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +2 -29
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +19 -47
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/overflow-retry-guard.d.ts +20 -0
- package/dist/core/compaction/overflow-retry-guard.d.ts.map +1 -0
- package/dist/core/compaction/overflow-retry-guard.js +38 -0
- package/dist/core/compaction/overflow-retry-guard.js.map +1 -0
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-types.js +1 -1
- package/dist/core/context-budget-headroom-types.js.map +1 -1
- package/dist/core/context-budget-token-counter-types.d.ts +27 -0
- package/dist/core/context-budget-token-counter-types.d.ts.map +1 -0
- package/dist/core/context-budget-token-counter-types.js +2 -0
- package/dist/core/context-budget-token-counter-types.js.map +1 -0
- package/dist/core/context-budget-token-counter.d.ts +2 -26
- package/dist/core/context-budget-token-counter.d.ts.map +1 -1
- package/dist/core/context-budget-token-counter.js +2 -0
- package/dist/core/context-budget-token-counter.js.map +1 -1
- package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
- package/dist/core/context-budget-v2-scoring.js +14 -10
- package/dist/core/context-budget-v2-scoring.js.map +1 -1
- package/dist/core/domain-router.d.ts.map +1 -1
- package/dist/core/domain-router.js +1 -1
- package/dist/core/domain-router.js.map +1 -1
- package/dist/core/grok-harness-dispatch.d.ts +4 -0
- package/dist/core/grok-harness-dispatch.d.ts.map +1 -1
- package/dist/core/grok-harness-dispatch.js +20 -3
- package/dist/core/grok-harness-dispatch.js.map +1 -1
- package/dist/core/grok-harness.d.ts +15 -9
- package/dist/core/grok-harness.d.ts.map +1 -1
- package/dist/core/grok-harness.js +34 -8
- package/dist/core/grok-harness.js.map +1 -1
- package/dist/core/mcp/tools.d.ts +2 -2
- package/dist/core/mcp/tools.d.ts.map +1 -1
- package/dist/core/mcp/tools.js +29 -3
- package/dist/core/mcp/tools.js.map +1 -1
- package/dist/core/model-registry-schema.d.ts +1081 -0
- package/dist/core/model-registry-schema.d.ts.map +1 -0
- package/dist/core/model-registry-schema.js +148 -0
- package/dist/core/model-registry-schema.js.map +1 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +1 -146
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +2 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/prompt-preset.d.ts +1 -1
- package/dist/core/prompt-preset.d.ts.map +1 -1
- package/dist/core/prompt-preset.js +16 -1
- package/dist/core/prompt-preset.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/provider-resilience.d.ts +8 -0
- package/dist/core/provider-resilience.d.ts.map +1 -1
- package/dist/core/provider-resilience.js +20 -3
- package/dist/core/provider-resilience.js.map +1 -1
- package/dist/core/provider-usage-types.d.ts +42 -0
- package/dist/core/provider-usage-types.d.ts.map +1 -0
- package/dist/core/provider-usage-types.js +2 -0
- package/dist/core/provider-usage-types.js.map +1 -0
- package/dist/core/provider-usage.d.ts +2 -31
- package/dist/core/provider-usage.d.ts.map +1 -1
- package/dist/core/provider-usage.js +4 -0
- package/dist/core/provider-usage.js.map +1 -1
- package/dist/core/redaction.d.ts.map +1 -1
- package/dist/core/redaction.js +18 -2
- package/dist/core/redaction.js.map +1 -1
- package/dist/core/sandbox/policy-merge.d.ts +6 -0
- package/dist/core/sandbox/policy-merge.d.ts.map +1 -0
- package/dist/core/sandbox/policy-merge.js +74 -0
- package/dist/core/sandbox/policy-merge.js.map +1 -0
- package/dist/core/sandbox/policy-paths.d.ts +4 -0
- package/dist/core/sandbox/policy-paths.d.ts.map +1 -0
- package/dist/core/sandbox/policy-paths.js +21 -0
- package/dist/core/sandbox/policy-paths.js.map +1 -0
- package/dist/core/sandbox/policy-types.d.ts +75 -0
- package/dist/core/sandbox/policy-types.d.ts.map +1 -0
- package/dist/core/sandbox/policy-types.js +2 -0
- package/dist/core/sandbox/policy-types.js.map +1 -0
- package/dist/core/sandbox/policy.d.ts +3 -77
- package/dist/core/sandbox/policy.d.ts.map +1 -1
- package/dist/core/sandbox/policy.js +3 -98
- package/dist/core/sandbox/policy.js.map +1 -1
- package/dist/core/sdk-provider-stream.d.ts +14 -0
- package/dist/core/sdk-provider-stream.d.ts.map +1 -0
- package/dist/core/sdk-provider-stream.js +38 -0
- package/dist/core/sdk-provider-stream.js.map +1 -0
- package/dist/core/sdk.d.ts +5 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -33
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-bash-runtime.d.ts +7 -0
- package/dist/core/session-bash-runtime.d.ts.map +1 -1
- package/dist/core/session-bash-runtime.js +10 -1
- package/dist/core/session-bash-runtime.js.map +1 -1
- package/dist/core/session-failure-cause.d.ts.map +1 -1
- package/dist/core/session-failure-cause.js +10 -3
- package/dist/core/session-failure-cause.js.map +1 -1
- package/dist/core/session-run-termination.d.ts +18 -0
- package/dist/core/session-run-termination.d.ts.map +1 -0
- package/dist/core/session-run-termination.js +61 -0
- package/dist/core/session-run-termination.js.map +1 -0
- package/dist/core/session-termination.d.ts.map +1 -1
- package/dist/core/session-termination.js +1 -1
- package/dist/core/session-termination.js.map +1 -1
- package/dist/core/skill-selector.d.ts +40 -0
- package/dist/core/skill-selector.d.ts.map +1 -0
- package/dist/core/skill-selector.js +102 -0
- package/dist/core/skill-selector.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +2 -4
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/turn-metrics-record.d.ts +55 -0
- package/dist/core/turn-metrics-record.d.ts.map +1 -0
- package/dist/core/turn-metrics-record.js +149 -0
- package/dist/core/turn-metrics-record.js.map +1 -0
- package/dist/core/turn-metrics.d.ts +4 -56
- package/dist/core/turn-metrics.d.ts.map +1 -1
- package/dist/core/turn-metrics.js +12 -60
- package/dist/core/turn-metrics.js.map +1 -1
- package/dist/core/verified-bash-runtime.d.ts +40 -0
- package/dist/core/verified-bash-runtime.d.ts.map +1 -1
- package/dist/core/verified-bash-runtime.js +60 -13
- package/dist/core/verified-bash-runtime.js.map +1 -1
- package/dist/guardrails/evidence-system.d.ts +1 -1
- package/dist/guardrails/evidence-system.d.ts.map +1 -1
- package/dist/guardrails/evidence-system.js +18 -29
- package/dist/guardrails/evidence-system.js.map +1 -1
- package/dist/guardrails/merge-gate-result.d.ts +4 -0
- package/dist/guardrails/merge-gate-result.d.ts.map +1 -0
- package/dist/guardrails/merge-gate-result.js +32 -0
- package/dist/guardrails/merge-gate-result.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +22 -22
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-login-options.d.ts +27 -0
- package/dist/modes/interactive/interactive-login-options.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-login-options.js +54 -0
- package/dist/modes/interactive/interactive-login-options.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +7 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +138 -140
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-resume-command.d.ts +3 -0
- package/dist/modes/interactive/interactive-resume-command.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-resume-command.js +24 -0
- package/dist/modes/interactive/interactive-resume-command.js.map +1 -0
- package/dist/modes/interactive/interactive-tool-result.d.ts +32 -0
- package/dist/modes/interactive/interactive-tool-result.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-tool-result.js +59 -0
- package/dist/modes/interactive/interactive-tool-result.js.map +1 -0
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +22 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +10 -60
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/terminal-links.d.ts +13 -0
- package/dist/utils/terminal-links.d.ts.map +1 -0
- package/dist/utils/terminal-links.js +68 -0
- package/dist/utils/terminal-links.js.map +1 -0
- package/dist/utils/windows-clipboard-image.d.ts +16 -0
- package/dist/utils/windows-clipboard-image.d.ts.map +1 -0
- package/dist/utils/windows-clipboard-image.js +87 -0
- package/dist/utils/windows-clipboard-image.js.map +1 -0
- package/docs/adaptorch-onboarding.md +80 -0
- package/docs/advisory-selection.md +112 -0
- package/docs/containerization.md +12 -0
- package/docs/context-files.md +97 -0
- package/docs/correctness-wall.md +8 -0
- package/docs/custom-provider.md +35 -0
- package/docs/development.md +18 -3
- package/docs/environment-variables.md +2 -0
- package/docs/grok-harness.md +4 -0
- package/docs/harness-boundaries.md +154 -0
- package/docs/harness-improvements.md +90 -0
- package/docs/json.md +19 -0
- package/docs/keybindings.md +1 -1
- package/docs/mcp.md +22 -2
- package/docs/metrics.md +66 -16
- package/docs/model-catalog-refresh.md +190 -0
- package/docs/model-contract.md +168 -0
- package/docs/models.md +21 -4
- package/docs/provider-resilience.md +5 -3
- package/docs/providers.md +68 -1
- package/docs/quickstart.md +4 -0
- package/docs/release-audit-0.98.3.md +97 -0
- package/docs/release-audit-0.98.4.md +112 -0
- package/docs/review-bundle-followup.md +195 -0
- package/docs/run-protocol.md +3 -1
- package/docs/runtime-algorithms.md +38 -2
- package/docs/sdk.md +35 -3
- package/docs/sessions.md +1 -1
- package/docs/settings.md +17 -1
- package/docs/skills.md +2 -0
- package/docs/tb21-audit.md +131 -0
- package/docs/terminal-setup.md +20 -0
- package/docs/usage.md +23 -1
- package/docs/windows.md +48 -0
- package/examples/README.md +4 -0
- package/examples/context/AGENTS.md +64 -0
- package/examples/context/CLAUDE.md +17 -0
- package/examples/context/INTERNET.md +42 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +18 -18
- package/package.json +6 -6
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# 모델 목록·thinking 갱신 기록
|
|
2
|
+
|
|
3
|
+
확인일: 2026-09-09. 생성기와 공급자 어댑터를 수정한 뒤 `npm run models:refresh`로
|
|
4
|
+
두 카탈로그를 재생성했다. 생성 파일을 손으로 수정하지 않았다.
|
|
5
|
+
|
|
6
|
+
## 2026-09-10 재검증: DeepSeek V4.1 Flash 제공 경로
|
|
7
|
+
|
|
8
|
+
공식 문서·공개 API에서 확인한 기존 OMK 공급자 4곳을 반영했다.
|
|
9
|
+
현재 설정의 인증·endpoint·선택 모델은 변경하지 않았다.
|
|
10
|
+
|
|
11
|
+
| OMK provider | 요청 model ID | 입력 | 추론 요청 |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `deepseek` | `deepseek-flash` | text/image | `thinking.type` + `reasoning_effort: low/high/max` |
|
|
14
|
+
| `opencode-go` | `deepseek-flash` | text/image | `thinking.type` + `reasoning_effort: low/high/max` |
|
|
15
|
+
| `openrouter` | `deepseek/deepseek-v4.1-flash` | text/image | `reasoning.effort: low/high/max` |
|
|
16
|
+
| `vercel-ai-gateway` | `deepseek/deepseek-v4.1-flash` | text/image | adaptive `thinking` + `output_config.effort: low/high/max` |
|
|
17
|
+
|
|
18
|
+
네 경로 모두 `off/low/high/max`를 노출한다. 새 native ID는 누락돼 있었고,
|
|
19
|
+
OpenCode Go ID는 목록에는 있었지만 thinking 계약이 빠져 있었다. 직접/Go 경로는
|
|
20
|
+
출력 상한을 `max_tokens`로 보내며, off는 명시적 `thinking.type: disabled`로 보낸다.
|
|
21
|
+
기존 직접 `deepseek-v4-flash`는 제거하지 않고 **V4.1 Flash 호환 별칭**으로 표시한다.
|
|
22
|
+
기존 별칭의 `xhigh → max` 호환 매핑도 유지한다.
|
|
23
|
+
|
|
24
|
+
DeepSeek 공식 가격은 시간대별이다. native 정적 비용은 peak 가격
|
|
25
|
+
(input/output/cache-read: $0.30/$1.20/$0.006 per 1M tokens)을 저장한다.
|
|
26
|
+
Off-peak는 절반이며, Vercel·OpenCode Go 목록이 제공하는 기본 가격과 다를 수 있다.
|
|
27
|
+
현재 숫자형 스키마는 시간대를 표현하지 않으므로 실제 청구액이라고 주장하지 않는다.
|
|
28
|
+
V4 Pro도 현재 공식 peak 가격으로 정정했으며, 9월14일 예정된 리다이렉트는 미리 적용하지 않았다.
|
|
29
|
+
|
|
30
|
+
`npm run models:refresh` 종료0: **37 providers, 1,333 coding models**,
|
|
31
|
+
HEAD `29624c3962` 대비 **81 추가·35 제거**. OpenRouter 371, Vercel 235,
|
|
32
|
+
이미지 54개다. 모든 필수 소스가 응답했고, 키 없는 Zyloo는 기존 정적 목록을 유지했다.
|
|
33
|
+
제거는 갱신 소스에서 미선정됐다는 뜻이며 모든 계정의 폐기 여부까지 증명하지 않는다.
|
|
34
|
+
|
|
35
|
+
`deepseek-v41-native.test.ts` 신규 11개가 먼저 실패했고, 생성기 보완·재생성 후
|
|
36
|
+
11개 모두 통과했다. 기존 gateway 4개를 포함한 표적 5파일 62개도 통과했다.
|
|
37
|
+
실제 모델 추론은 호출하지 않고 전송 직전 payload, 출력 상한, 토글·effort를 확인했다.
|
|
38
|
+
models.dev에 있는 신규 provider 이름만 보고 별도 어댑터를 임의 등록하지 않았다.
|
|
39
|
+
|
|
40
|
+
근거: [DeepSeek 출시·별칭](https://api-docs.deepseek.com/updates/),
|
|
41
|
+
[직접 모델·가격](https://api-docs.deepseek.com/quick_start/pricing),
|
|
42
|
+
[직접 thinking 계약](https://api-docs.deepseek.com/guides/thinking_mode),
|
|
43
|
+
[OpenCode Go ID·endpoint](https://opencode.ai/docs/go/),
|
|
44
|
+
[OpenRouter models](https://openrouter.ai/api/v1/models),
|
|
45
|
+
[Vercel models](https://ai-gateway.vercel.sh/v1/models).
|
|
46
|
+
|
|
47
|
+
## 2026-09-09 후속 갱신 기록: DeepSeek V4.1 Flash
|
|
48
|
+
|
|
49
|
+
다시 조회한 목록에서는 OpenRouter와 Vercel 모두 정식 ID
|
|
50
|
+
`deepseek/deepseek-v4.1-flash`를 제공한다. 이전 Vercel beta 항목 대신 이 ID를 사용한다.
|
|
51
|
+
OpenRouter가 선언한 수준은 `low/high/max`, thinking은 선택적이다. 두 route 모두
|
|
52
|
+
OMK에서 `off/low/high/max`를 노출한다.
|
|
53
|
+
|
|
54
|
+
- OpenRouter: `reasoning.effort: "max"`.
|
|
55
|
+
- Vercel Messages: `thinking.type: "adaptive"`와 `output_config.effort: "max"`.
|
|
56
|
+
이는 게이트웨이 요청 형식이다. DeepSeek 네이티브 API가 Claude의 adaptive 형식을
|
|
57
|
+
받는다는 뜻이 아니다. 고정 thinking-budget 경로로 낮추거나 요청 출력 상한을 늘리지 않는다.
|
|
58
|
+
|
|
59
|
+
후속 재생성 결과는 코딩 모델 1,332개(OpenRouter 371개)이며, 아래 이전 집계는
|
|
60
|
+
2026-09-09 갱신의 기록으로 유지한다. `deepseek-v41-thinking.test.ts`에서 정식 ID,
|
|
61
|
+
두 route의 max payload와 상한 보존을 공급자 호출 없이 확인한다. 실제 게이트웨이의
|
|
62
|
+
내부 매핑·모델 추론량은 별도 검증 대상이다. 후속 표적 검사 90개, 전체 타입 검사,
|
|
63
|
+
주 LSP 2파일과 diff 검사는 종료0으로 통과했다. `npm run check`는 아래에 기록한 기존
|
|
64
|
+
서식/import 오류3건에서 중단했다.
|
|
65
|
+
|
|
66
|
+
후속 변경 단위는 `catalog-thinking.ts`, 생성 카탈로그, `deepseek-v41-thinking.test.ts`,
|
|
67
|
+
adaptive-envelope 회귀 및 이 문서다. 제안 커밋 메시지는
|
|
68
|
+
`fix: DeepSeek V4.1 Flash 정식 경로와 max effort 전달 보정`이다.
|
|
69
|
+
실제 추론·빌드·커밋은 실행하지 않았다.
|
|
70
|
+
|
|
71
|
+
참고: [Vercel Messages effort](https://vercel.com/docs/ai-gateway/sdks-and-apis/anthropic-messages-api/reasoning),
|
|
72
|
+
[게이트웨이 effort 매핑](https://vercel.com/docs/ai-gateway/models-and-providers/reasoning).
|
|
73
|
+
|
|
74
|
+
## 목록 확인 범위
|
|
75
|
+
|
|
76
|
+
| 소스 | 확인 | 적용 범위 |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| [OpenRouter models](https://openrouter.ai/api/v1/models) | HTTP 200, 431개 | tool 지원 364개 + 기존 auto 항목 = 365개 |
|
|
79
|
+
| [models.dev](https://models.dev/api.json) | HTTP 200, 213개 공급자 | 기존 생성기가 지원하는 공급자들의 공개 메타데이터 |
|
|
80
|
+
| [Vercel AI Gateway](https://ai-gateway.vercel.sh/v1/models) | HTTP 200, 373개 | tool 지원 235개 |
|
|
81
|
+
| [NVIDIA NIM](https://integrate.api.nvidia.com/v1/models) | HTTP 200, 80개 ID | tool 메타데이터·기존 호환성 필터를 충족하는 19개 |
|
|
82
|
+
| Zyloo | 키 미설정 | 기존 정적 6개 유지. 최신 목록 확인으로 표시하지 않음 |
|
|
83
|
+
|
|
84
|
+
코딩 카탈로그는 **37개 공급자, 1,287→1,326개 모델**(74개 추가·35개 제거),
|
|
85
|
+
OpenRouter 이미지 카탈로그는 **54개**다. 모델 수는 route별 항목 수이며 서로 다른 기반 모델 수가 아니다.
|
|
86
|
+
models.dev는 공급자 원본 API나 계정별 권한 증명이 아닌 보조 카탈로그다.
|
|
87
|
+
|
|
88
|
+
OpenRouter 추가 항목에는 GPT-6 Astra/Pro와 batch 변형, Mercury 2.5, Nex N2.5
|
|
89
|
+
Mini/Pro free, Qwen3.8 Max 0902가 있다. OpenAI·Azure·OpenCode·Copilot에도 해당
|
|
90
|
+
소스가 제공하는 Astra 항목을 반영했다. Copilot GPT-6는 Responses 경로를 사용한다.
|
|
91
|
+
Vertex의 신규 Gemini 항목은 **Vertex 자체 목록에 있는 ID만** 추가한다.
|
|
92
|
+
|
|
93
|
+
삭제 목록도 대조했다. 예를 들어 OpenRouter의 `qwen/qwen3.8-max` 대신
|
|
94
|
+
`qwen/qwen3.8-max-0902`, `inception/mercury-2.5-preview` 대신 정식 Mercury 2.5가
|
|
95
|
+
목록에 있다. Copilot 구형 route, Moonshot 구형 Kimi, NVIDIA 2개 항목도 갱신 소스에서
|
|
96
|
+
더 이상 선정되지 않는다. 이것을 공급자의 공식 폐기 공지나 모든 계정의 사용 불가로
|
|
97
|
+
해석하지 않는다. 소스 응답 실패를 숨기는 `--allow-partial`은 사용하지 않았다.
|
|
98
|
+
|
|
99
|
+
자동 라우팅 항목 `openrouter/auto`·`openrouter/auto-beta`의 가격 `-1` 표시는 미정
|
|
100
|
+
가격이다. 이를 음수 요금으로 계산하던 코딩·이미지 카탈로그 경로를 교정했다. 기존 숫자형 카탈로그의
|
|
101
|
+
미가격값 0으로 저장하며 **무료라는 뜻이 아니다**. 실제 선택된 모델의 사용량·청구를
|
|
102
|
+
별도로 확인해야 한다.
|
|
103
|
+
|
|
104
|
+
## Thinking: 모델 이름보다 해당 route의 계약
|
|
105
|
+
|
|
106
|
+
OpenRouter의 `reasoning.supported_efforts`로 표시할 수준을 만들고,
|
|
107
|
+
`reasoning.mandatory`로 끄기 가능 여부를 구분한다. 선언이 있는 수준은 과거의 이름별
|
|
108
|
+
추정보다 우선한다. 선언 자체가 없는 경우에는 기존 fallback을 유지하며 지원 범위를
|
|
109
|
+
새로 지어내지 않는다.
|
|
110
|
+
|
|
111
|
+
**토글과 노력 수준은 별개다.** 선택적 thinking 모델은 노력 목록에 `none`이 없어도
|
|
112
|
+
`reasoning.enabled: false`로 끌 수 있다. 반대로 mandatory 모델에는 끄기를 노출하지
|
|
113
|
+
않는다. Mercury 2 계열의 기존 tool-use/instant-mode 제한도 유지한다.
|
|
114
|
+
|
|
115
|
+
| 모델·route | 이번 정합성 규칙 |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| GPT-6 Astra, OpenAI/Responses 및 OpenRouter | low·medium·high·xhigh·max. off/minimal 미노출 |
|
|
118
|
+
| Claude Opus 5, Anthropic Messages | adaptive thinking, low·medium·high·xhigh·max. off는 high 이하에서 가능 |
|
|
119
|
+
| Claude Opus 5, Bedrock | legacy budget 대신 adaptive 및 xhigh 사용. application profile의 표시명 매칭 보존 |
|
|
120
|
+
| Gemini 3.7/3.8 Flash, Google/Vertex | low·medium·high. minimal은 API 오류. SDK의 off 요청도 LOW로 처리하며 완전 비활성화로 주장하지 않음 |
|
|
121
|
+
| DeepSeek V4, 직접 API | low·high·max. 기존 OMK xhigh→max 별칭 보존 |
|
|
122
|
+
| DeepSeek V4, OpenRouter | 해당 route가 선언한 high·xhigh 및 optional off. 직접 API의 max 문자열을 이식하지 않음 |
|
|
123
|
+
| Qwen3.8 Max 0902, OpenRouter | mandatory, minimal·low·medium·high·xhigh. 추정으로 max를 추가하지 않음 |
|
|
124
|
+
| GLM-5.2, OpenRouter | optional off·high·xhigh. ZAI 직접 route의 max 규칙과 구분 |
|
|
125
|
+
| Nex N2.5 free, OpenRouter | off·medium·high |
|
|
126
|
+
| Muse Spark 1.3, OpenRouter | gateway가 선언한 max 사용. 직접 Meta의 max→xhigh 규칙과 구분 |
|
|
127
|
+
|
|
128
|
+
수준 이름은 제공된 API 값이지 모델 간 동일한 추론량이나 토큰 보장이 아니다.
|
|
129
|
+
OpenRouter의 batch 항목을 모델 목록에 포함했다고 OMK가 Batch API를 별도로 구현한
|
|
130
|
+
것은 아니다. 실제 route 지원과 과금은 공급자 계약을 따로 확인해야 한다.
|
|
131
|
+
|
|
132
|
+
## 로컬 덮어쓰기와 적용
|
|
133
|
+
|
|
134
|
+
`models.json`의 동일 ID custom model은 새 카탈로그보다 우선할 수 있다.
|
|
135
|
+
기존 `thinkingLevelMap`이나 `compat.supportsReasoningEffort: false`가 남아 있으면
|
|
136
|
+
새 수준이 숨겨지거나 전송되지 않는다. [모델 설정](models.md)을 함께 확인한다.
|
|
137
|
+
|
|
138
|
+
Model Studio의 DeepSeek V4는 `thinkingFormat: "qwen"`과
|
|
139
|
+
`supportsReasoningEffort: true`를 모델 단위로 설정하면 `enable_thinking`과
|
|
140
|
+
공식 low/medium/high/xhigh/max 값이 전송된다. 네이티브 DeepSeek의 `thinking` 객체와
|
|
141
|
+
혼동하지 않는다. 인증·주소·모델 ID·기본 선택 모델 변경은 thinking 수정과 분리한다.
|
|
142
|
+
|
|
143
|
+
소스 변경을 설치 CLI에 적용하려면 검토한 build/install 및 새 프로세스가 필요하다.
|
|
144
|
+
로컬 모델 설정만 바꾼 경우에도 진행 중인 요청의 모델 snapshot이 바뀌었다고 간주하지
|
|
145
|
+
않고 모델 목록을 다시 로드한 새 세션에서 확인한다.
|
|
146
|
+
|
|
147
|
+
## 검증과 한계
|
|
148
|
+
|
|
149
|
+
카탈로그 누락/수준 오류 16개, Bedrock Opus 5 payload 오류 2개, Gemini off payload
|
|
150
|
+
오류 4개, 직접 DeepSeek low/max 누락 2개를 먼저 실패로 확인했다. 추가 검토에서
|
|
151
|
+
OpenRouter의 토글과 effort 목록을 혼동한 경로도 2개 RED 검사로 교정했다.
|
|
152
|
+
|
|
153
|
+
검사는 합성 payload를 전송 직전에 포착하거나 HTTP fetch를 대체한다. 공급자 추론,
|
|
154
|
+
OAuth 갱신, 벤치마크, 설치·배포는 하지 않는다. 실제 계정별 사용 가능 여부, rate limit,
|
|
155
|
+
생성 품질과 청구액은 검증 범위가 아니다. 특히 OpenRouter의 모델 존재를 근거로
|
|
156
|
+
ChatGPT/Codex 계정에서 같은 모델을 사용할 수 있다고 추론하지 않는다.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
npm run models:refresh
|
|
160
|
+
# packages/ai에서: 공급자 추론 없이 표적 검사
|
|
161
|
+
node ../../node_modules/vitest/dist/cli.js --run test/latest-model-thinking.test.ts test/catalog-thinking.test.ts test/latest-thinking-payload.test.ts --maxWorkers=1 --no-file-parallelism
|
|
162
|
+
# 저장소 루트에서
|
|
163
|
+
node_modules/.bin/tsgo --noEmit --pretty false
|
|
164
|
+
npm run check
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 현재 검사 결과와 커밋 체크포인트
|
|
168
|
+
|
|
169
|
+
- 표적 검사 **251개 통과**, 유료 Bedrock E2E 1개 제외. 동일 검사의 재실행은 합산하지 않았다.
|
|
170
|
+
- 전체 `tsgo --noEmit --pretty false`, 표적 Biome, 주 LSP 11파일, import-cycle 검사,
|
|
171
|
+
`git diff --check`는 통과했다. 원래 대형 어댑터의 thinking 책임을 작은 모듈로 분리해
|
|
172
|
+
이번 변경으로 module-size baseline을 늘리지 않았다.
|
|
173
|
+
- `npm run check`는 기존 범위 밖 Biome 오류3건에서 중단했다:
|
|
174
|
+
`packages/ai/src/utils/oauth/meta.ts`, `packages/coding-agent/test/mcp/tools.test.ts`,
|
|
175
|
+
`packages/coding-agent/test/session-termination.test.ts`.
|
|
176
|
+
별도 module-size 검사의 기존 초과6건과 미추적 문서 링크 문제도 남아 있다.
|
|
177
|
+
전체 저장소 PASS라고 표현하지 않는다.
|
|
178
|
+
- 카탈로그/생성기 단위: `packages/ai/scripts/{generate-models,generate-image-models,catalog-thinking,catalog-pricing}.ts`, 생성 카탈로그2개,
|
|
179
|
+
catalog/level 회귀와 본 문서. 제안 메시지: `feat: 최신 모델 목록과 route별 thinking 메타데이터 반영`.
|
|
180
|
+
- 어댑터 단위: `packages/ai/src/providers/{google,google-vertex,google-thinking-disable,amazon-bedrock,bedrock-thinking,openai-completions}.ts`,
|
|
181
|
+
payload 회귀와 직접 사용 문서. 제안 메시지: `fix: 신규 모델 thinking 토글과 effort 전송 정합성 교정`.
|
|
182
|
+
- 사용자 로컬 설정 변경은 저장소 커밋에 포함하지 않는다. 인증·주소·ID·기본 모델을
|
|
183
|
+
보존한 원본 백업과 별도 의미 비교로 검증한다. build/install·stage/commit·push는 하지 않았다.
|
|
184
|
+
|
|
185
|
+
근거 문서:
|
|
186
|
+
[OpenAI Astra](https://developers.openai.com/api/docs/models/gpt-6-astra),
|
|
187
|
+
[Claude Opus 5](https://platform.claude.com/docs/en/models/opus-5/whats-new-opus-5),
|
|
188
|
+
[Gemini thinking](https://ai.google.dev/gemini-api/docs/generate-content/thinking),
|
|
189
|
+
[DeepSeek thinking](https://api-docs.deepseek.com/guides/thinking_mode),
|
|
190
|
+
[Model Studio DeepSeek](https://www.alibabacloud.com/help/en/model-studio/deepseek-api).
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Model dispatch contracts
|
|
2
|
+
|
|
3
|
+
This opt-in working-tree feature implements the first execution-contract slice of
|
|
4
|
+
[the harness roadmap](../../../ROADMAP.md). It restricts **logical stream dispatch**
|
|
5
|
+
and checks the final **Chat Completions model ID and output-limit parameter**.
|
|
6
|
+
Other APIs, network destinations, and billable attempts are not fully covered.
|
|
7
|
+
It is not a sandbox or a benchmark-integrity attestation.
|
|
8
|
+
|
|
9
|
+
## CLI
|
|
10
|
+
|
|
11
|
+
Create a UTF-8 JSON policy, replacing the example identities with the exact
|
|
12
|
+
provider and model you intend to use:
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"allowedModels": [{ "provider": "your-provider", "id": "exact-model-id" }],
|
|
17
|
+
"allowedProviders": ["your-provider"],
|
|
18
|
+
"allowedAuthOrigins": ["your-provider"],
|
|
19
|
+
"thinking": false,
|
|
20
|
+
"thinkingLevel": "off",
|
|
21
|
+
"maxOutputTokens": 4096
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
omk --provider your-provider --model exact-model-id --thinking off \
|
|
27
|
+
--model-contract ./policy.json -p "Run the requested checks"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The flag does not start an extra model call. A normal prompt still calls the
|
|
31
|
+
configured provider and may incur cost. `--offline` suppresses startup network
|
|
32
|
+
work; it does not prevent prompt inference.
|
|
33
|
+
|
|
34
|
+
The CLI reads the policy once, before migrations and session creation, and keeps
|
|
35
|
+
that snapshot when replacing or resuming sessions within the process. A later
|
|
36
|
+
process must supply the flag again. It does not alter settings, credentials,
|
|
37
|
+
model selection, or a saved transcript. `--help` does not read the policy.
|
|
38
|
+
|
|
39
|
+
Missing, unreadable, malformed, non-regular, or oversized files exit with code 1.
|
|
40
|
+
Reads are bounded to 64 KiB; invalid UTF-8 and unknown top-level fields are
|
|
41
|
+
rejected. Missing flag values and duplicate flags are errors. Both
|
|
42
|
+
`--model-contract policy.json` and `--model-contract=policy.json` are accepted.
|
|
43
|
+
|
|
44
|
+
## SDK
|
|
45
|
+
|
|
46
|
+
`createAgentSession()` and `createAgentSessionFromServices()` accept an optional
|
|
47
|
+
`modelContract` and main-loop `maxTokens`. `Agent` accepts the same options.
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const { session } = await createAgentSession({
|
|
51
|
+
model,
|
|
52
|
+
thinkingLevel: "off",
|
|
53
|
+
modelContract: {
|
|
54
|
+
allowedModels: [{ provider: model.provider, id: model.id }],
|
|
55
|
+
allowedProviders: [model.provider],
|
|
56
|
+
allowedAuthOrigins: [model.provider],
|
|
57
|
+
thinking: false,
|
|
58
|
+
thinkingLevel: "off",
|
|
59
|
+
maxOutputTokens: 4096,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`ModelContract`, `RouteRequest`, `ModelContractViolation`,
|
|
65
|
+
`snapshotModelContract()`, and `assertModelContract()` are exported by
|
|
66
|
+
`omk-agent-core`. No global setting enables this policy implicitly.
|
|
67
|
+
|
|
68
|
+
The policy is copied and frozen. Each allowlist has 1–64 entries; identities are
|
|
69
|
+
exact, bounded strings, not wildcards. Allowed models are provider/ID pairs.
|
|
70
|
+
`allowedAuthOrigins` names logical credential resolvers, normally the provider;
|
|
71
|
+
it does not authenticate an account or HTTPS origin.
|
|
72
|
+
|
|
73
|
+
`thinking: false` forbids a requested reasoning level. `thinking: true` permits
|
|
74
|
+
reasoning, while optional `thinkingLevel` pins the effective logical level.
|
|
75
|
+
An absent level is `off` in the compatibility validator. The runtime supplies
|
|
76
|
+
an explicit effective level when checking a request.
|
|
77
|
+
|
|
78
|
+
Contract and explicit request limits must be positive safe integers. A larger
|
|
79
|
+
explicit limit is rejected rather than silently clamped. When a runtime request
|
|
80
|
+
omits `maxTokens`, the dispatch boundary supplies the smaller of the contract
|
|
81
|
+
cap and model metadata cap. `assertModelContract()` alone retains compatibility
|
|
82
|
+
with an omitted limit and does not fill it in.
|
|
83
|
+
|
|
84
|
+
## Covered paths
|
|
85
|
+
|
|
86
|
+
- In contract mode, tool-generated images do not trigger automatic vision routing.
|
|
87
|
+
For a text-only selected model, the provider view replaces those image blocks
|
|
88
|
+
with explicit uninspected-image notices and retains the existing text/tool IDs.
|
|
89
|
+
Original session attachments are unchanged. This is not OCR or visual analysis.
|
|
90
|
+
User-provided images still require a permitted vision route; they are not silently
|
|
91
|
+
discarded. A vision-capable selected model and non-contract routing retain their
|
|
92
|
+
existing behavior. The SDK summary stream uses the same projection.
|
|
93
|
+
- Core prompt and continuation loops check the automatically selected route
|
|
94
|
+
before resolving its credentials. Policy remains fixed across lifecycle,
|
|
95
|
+
context, auth, and next-turn callbacks.
|
|
96
|
+
- The SDK stream checks again before authentication, covering first-party
|
|
97
|
+
compaction and branch-summary calls that use `session.agent.streamFn`.
|
|
98
|
+
An explicitly requested summary cap above the policy is rejected, not reduced.
|
|
99
|
+
- For `openai-completions`, the payload hook checks the serialized model ID and
|
|
100
|
+
exactly one defined `max_tokens` or `max_completion_tokens` before HTTP dispatch.
|
|
101
|
+
The cap must be a positive safe integer no larger than the effective logical
|
|
102
|
+
request cap. Missing, ambiguous, enlarged, or invalid limits are refused, even
|
|
103
|
+
without a user hook. Model identity is pinned before asynchronous callbacks.
|
|
104
|
+
- Contracted payload hooks may observe detached immutable payload/model data or
|
|
105
|
+
return an equivalent payload. In-place changes and replacements are refused.
|
|
106
|
+
Optional `undefined` payload fields are accepted. Hook-return equivalence is
|
|
107
|
+
conservative JSON serialization equality, not arbitrary semantic equivalence.
|
|
108
|
+
Without a user observer, validation does not clone the conversation; nested
|
|
109
|
+
core/SDK enforcement shares the existing observation boundary.
|
|
110
|
+
- Automatic cross-provider vision routing never forwards the source provider's
|
|
111
|
+
static API key, request headers, or model headers. This isolation also applies
|
|
112
|
+
when no contract is configured. Destination credentials must come from the
|
|
113
|
+
destination resolver or the provider's normal credential path.
|
|
114
|
+
|
|
115
|
+
## Dispatch events
|
|
116
|
+
|
|
117
|
+
Contracted **core-loop** calls emit:
|
|
118
|
+
|
|
119
|
+
| Event | Meaning |
|
|
120
|
+
| --- | --- |
|
|
121
|
+
| `provider_denied` | A logical contract violation or observed cancellation prevented dispatch |
|
|
122
|
+
| `provider_request` | The harness entered its stream-function dispatch boundary |
|
|
123
|
+
| `provider_request_end` | That dispatch finished, errored, or aborted |
|
|
124
|
+
|
|
125
|
+
`provider_request.omittedToolImages`, when present, counts tool attachments replaced
|
|
126
|
+
in this request's provider view. It does not count visual interpretations or saved
|
|
127
|
+
bytes in the session. A core contract denial becomes a non-retryable `configuration`
|
|
128
|
+
termination rather than a provider-protocol diagnosis.
|
|
129
|
+
|
|
130
|
+
`requestId` joins the events. Request and end events identify their boundary as
|
|
131
|
+
`stream-dispatch`. Metadata excludes prompts, output, headers, keys, and raw
|
|
132
|
+
errors. The end outcome is a transport/lifecycle result, not task correctness;
|
|
133
|
+
`completed` does not mean an answer passed a verifier.
|
|
134
|
+
|
|
135
|
+
A start event can be followed by an error before network transmission, including
|
|
136
|
+
an observer or custom-stream error. An abort event does not prove that a remote
|
|
137
|
+
request or custom stream has stopped. Auth/context failures before dispatch are
|
|
138
|
+
not a complete attempted-request ledger. Summaries using the SDK wrapper are
|
|
139
|
+
checked but do not yet emit these core-loop events. Persistence, run/attempt
|
|
140
|
+
correlation, HTTP retry accounting, usage and billing joins remain follow-up work.
|
|
141
|
+
|
|
142
|
+
## Limits and next steps
|
|
143
|
+
|
|
144
|
+
The Chat Completions check validates the parameter sent by the first-party
|
|
145
|
+
adapter, not the provider's interpretation or enforcement of it. Reasoning-token
|
|
146
|
+
budgets, remote routing, response model identity, and actual charges still need
|
|
147
|
+
separate evidence. Adapters that rewrite model names (for example, adding a
|
|
148
|
+
namespace) are rejected by this exact-identity check unless the selected model ID
|
|
149
|
+
already equals the transmitted ID.
|
|
150
|
+
|
|
151
|
+
Other APIs still have only logical checks. For example,
|
|
152
|
+
`adjustMaxTokensForThinking()` can add thinking tokens, and the inspected Codex
|
|
153
|
+
request builder does not serialize `maxTokens`. Thus this contract is **not a
|
|
154
|
+
universal output or billing cap**. A strict single-model benchmark still needs
|
|
155
|
+
adapter-specific request provenance. For Model Studio's thinking fields and
|
|
156
|
+
separate billing endpoints, see [the provider guide](providers.md#model-studio-deepseek-v4).
|
|
157
|
+
|
|
158
|
+
Direct `omk-ai` calls, the separate `AgentHarness` family, advisory judges, child
|
|
159
|
+
processes, custom streams that replace the SDK wrapper, and arbitrary extension
|
|
160
|
+
code do not acquire this policy automatically. Extensions execute with their
|
|
161
|
+
existing host permissions; freezing hook arguments does not isolate their code.
|
|
162
|
+
Tool permissions, endpoint trust, effect idempotency, deadlines, and semantic
|
|
163
|
+
completion still belong to their existing owners.
|
|
164
|
+
|
|
165
|
+
A fresh build/restart is required to use source changes in an installed CLI.
|
|
166
|
+
This implementation work did not build, install, deploy, change active settings,
|
|
167
|
+
or run a paid benchmark. See [the boundary redesign](harness-boundaries.md) and
|
|
168
|
+
ROADMAP §15 for dated evidence, limitations, and the remaining architecture work.
|
package/docs/models.md
CHANGED
|
@@ -4,7 +4,7 @@ Add custom providers and models (Ollama, vLLM, LM Studio, proxies) via `~/.omk/a
|
|
|
4
4
|
|
|
5
5
|
## Table of Contents
|
|
6
6
|
|
|
7
|
-
- [
|
|
7
|
+
- [Catalog availability](#catalog-availability)
|
|
8
8
|
- [Minimal Example](#minimal-example)
|
|
9
9
|
- [Full Example](#full-example)
|
|
10
10
|
- [Supported APIs](#supported-apis)
|
|
@@ -16,9 +16,15 @@ Add custom providers and models (Ollama, vLLM, LM Studio, proxies) via `~/.omk/a
|
|
|
16
16
|
- [Anthropic Messages Compatibility](#anthropic-messages-compatibility)
|
|
17
17
|
- [OpenAI Compatibility](#openai-compatibility)
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Catalog availability
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
The NVIDIA catalog is filtered against NIM's live model IDs and known compatibility
|
|
22
|
+
limits. A historical GLM route is not evidence that NIM still lists it. Use the
|
|
23
|
+
current model selector rather than copying a removed ID from older examples.
|
|
24
|
+
|
|
25
|
+
The [2026-09-09 catalog refresh](model-catalog-refresh.md) records new models,
|
|
26
|
+
provider-specific thinking ladders, and verification limits. Model discovery does
|
|
27
|
+
not prove that an account can invoke that model.
|
|
22
28
|
|
|
23
29
|
## Minimal Example
|
|
24
30
|
|
|
@@ -420,7 +426,18 @@ For providers with partial OpenAI compatibility, use the `compat` field.
|
|
|
420
426
|
| `openRouterRouting` | OpenRouter provider routing preferences. This object is sent as-is in the `provider` field of the [OpenRouter API request](https://openrouter.ai/docs/guides/routing/provider-selection). |
|
|
421
427
|
| `vercelGatewayRouting` | Vercel AI Gateway routing config for provider selection (`only`, `order`) |
|
|
422
428
|
|
|
423
|
-
`openrouter` uses `reasoning: { effort }
|
|
429
|
+
`openrouter` uses `reasoning: { effort }` for enabled thinking and
|
|
430
|
+
`reasoning: { enabled: false }` for its supported off toggle. Mandatory-thinking
|
|
431
|
+
models do not offer off. Declared per-route efforts override model-family guesses.
|
|
432
|
+
`together` uses `reasoning: { enabled }` and also `reasoning_effort` when `supportsReasoningEffort` is enabled. `qwen` uses top-level `enable_thinking`. Use `qwen-chat-template` for local Qwen-compatible servers that require `chat_template_kwargs.enable_thinking`.
|
|
433
|
+
|
|
434
|
+
On official HTTPS Model Studio hosts, automatic defaults use `max_tokens`, the
|
|
435
|
+
`system` role, and `enable_thinking`; OpenAI store and long-cache fields are omitted.
|
|
436
|
+
The legacy `thinkingFormat: "deepseek"` override is translated to `qwen` on those
|
|
437
|
+
hosts only. DeepSeek V4 also sends `reasoning_effort` when enabled; an explicit
|
|
438
|
+
`supportsReasoningEffort: false` remains an opt-out. A custom proxy hostname needs
|
|
439
|
+
explicit compatibility settings because its upstream protocol cannot be inferred.
|
|
440
|
+
See [Model Studio endpoint and plan guidance](providers.md#model-studio-deepseek-v4).
|
|
424
441
|
|
|
425
442
|
`cacheControlFormat: "anthropic"` is for OpenAI-compatible providers that expose Anthropic-style prompt caching through `cache_control` markers on text content and tool definitions.
|
|
426
443
|
|
|
@@ -21,7 +21,7 @@ Configure resilience in `~/.omk/agent/settings.json` or `.omk/settings.json`:
|
|
|
21
21
|
"autoFailoverOnSafetyStop": true,
|
|
22
22
|
"failoverCandidates": [
|
|
23
23
|
{ "provider": "kimi-coding", "id": "k3" },
|
|
24
|
-
{ "provider": "modelstudio-maas", "id": "qwen3.8-max
|
|
24
|
+
{ "provider": "modelstudio-maas", "id": "qwen3.8-max" }
|
|
25
25
|
]
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -52,14 +52,16 @@ For a safety stop or recognized quota/billing error, OMK:
|
|
|
52
52
|
|
|
53
53
|
A content/safety stop gets at most one automatic retry, including a retry that switches model, regardless of the larger transport retry budget. Other transient failures keep the configured retry policy and backoff. Plain authentication errors remain non-retryable and do not trigger failover.
|
|
54
54
|
|
|
55
|
-
Recognized quota shapes include billing-cycle usage limits, `insufficient_quota`, exhausted balances, `GoUsageLimitError`, `FreeUsageLimitError`, and out-of-budget responses. These are classified as `provider.rate_limit`, even when a provider wraps them in HTTP 403.
|
|
55
|
+
Recognized quota shapes include billing-cycle usage limits, `insufficient_quota`, exhausted balances, `GoUsageLimitError`, `FreeUsageLimitError`, and out-of-budget responses. These are classified as `provider.rate_limit`, even when a provider wraps them in HTTP 403. Provider-capacity bodies that omit a status or limit token are classified the same way: xAI `currently at capacity` / `high demand` (HTTP 429) and Anthropic `overloaded_error` / `Overloaded` (HTTP 529). Left unmatched they fall through to `provider.protocol` and advertise orphan-`tool_call_id` sanitize.
|
|
56
|
+
|
|
57
|
+
Two HTTP 400s are permanent `configuration.invalid`, not retryable protocol faults: Anthropic `claude_code_version_too_old`, and Codex ChatGPT-account `The '<slug>' model is not supported when using Codex with a ChatGPT account.` Same-model retry, transcript sanitize, and `/new session` re-send the same client version or slug. Switch with `/model`, or for Codex use an API-key route that has the model.
|
|
56
58
|
|
|
57
59
|
Gateway/upstream availability failures — "503 Upstream request failed", "Endpoint is unavailable", or a stream that ended without a finish reason — are classified as `provider.network`: transport problems that heal by retry or model switch, never by transcript sanitization.
|
|
58
60
|
|
|
59
61
|
The default candidate order is:
|
|
60
62
|
|
|
61
63
|
1. `kimi-coding/k3`
|
|
62
|
-
2. `modelstudio-maas/qwen3.8-max
|
|
64
|
+
2. `modelstudio-maas/qwen3.8-max`
|
|
63
65
|
3. `xai/grok-4.5`
|
|
64
66
|
4. `deepseek/deepseek-v4-pro`
|
|
65
67
|
5. `deepseek/deepseek-v4-flash`
|
package/docs/providers.md
CHANGED
|
@@ -32,6 +32,41 @@ Alibaba Model Studio Token Plan is recognized as **QWEN TOKEN PLAN** and reads i
|
|
|
32
32
|
|
|
33
33
|
With a stored native `xai` OAuth credential, OMK reads `GET https://cli-chat-proxy.grok.com/v1/billing?format=credits` and shows the weekly SuperGrok pool from `config.creditUsagePercent` plus its reset from `config.currentPeriod.end`. `XAI_API_KEY` is a separate API-billing credential and does not authorize this subscription endpoint.
|
|
34
34
|
|
|
35
|
+
### Model Studio DeepSeek V4
|
|
36
|
+
|
|
37
|
+
Model Studio uses `enable_thinking`, including for DeepSeek. OMK's Chat Completions
|
|
38
|
+
adapter recognizes official HTTPS DashScope and `*.maas.aliyuncs.com` hosts, defaults
|
|
39
|
+
to `max_tokens` and the `system` role, and omits unsupported OpenAI store/long-cache
|
|
40
|
+
fields. Legacy `thinkingFormat: "deepseek"` on these hosts is translated to the
|
|
41
|
+
`enable_thinking` format. Native DeepSeek endpoints keep their native format.
|
|
42
|
+
|
|
43
|
+
DeepSeek V4 sends the selected `reasoning_effort` when compatibility settings permit
|
|
44
|
+
it. Without a model-specific mapping, `minimal` maps to the supported `low` value.
|
|
45
|
+
An explicit `supportsReasoningEffort: false` still suppresses that field; remove
|
|
46
|
+
that override or enable it for the model if you intend to send `high`, `xhigh`, or
|
|
47
|
+
`max`. With thinking off, OMK sends `enable_thinking: false` rather than relying on
|
|
48
|
+
the server default. See [custom model configuration](models.md#openai-compatibility).
|
|
49
|
+
|
|
50
|
+
Keep the key paired with its purchased product and region. These are distinct
|
|
51
|
+
billing paths, not interchangeable aliases:
|
|
52
|
+
|
|
53
|
+
| Product | Example OpenAI-compatible base URL |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| Token Plan, Singapore | `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` |
|
|
56
|
+
| Coding Plan, China | `https://coding.dashscope.aliyuncs.com/v1` |
|
|
57
|
+
| Pay-as-you-go | `https://dashscope.aliyuncs.com/compatible-mode/v1` |
|
|
58
|
+
|
|
59
|
+
Protocol detection never changes the URL, credentials, model ID, or subscription.
|
|
60
|
+
For a comparison run, pin the exact Flash snapshot offered by that endpoint in
|
|
61
|
+
both arms; `deepseek-v4-flash-0731` and an unversioned alias are not automatically
|
|
62
|
+
the same experimental condition. Apply a [model contract](model-contract.md), and
|
|
63
|
+
verify the installed adapter and final request before starting a benchmark.
|
|
64
|
+
|
|
65
|
+
Sources: Alibaba's [DeepSeek API](https://www.alibabacloud.com/help/en/model-studio/deepseek-api)
|
|
66
|
+
and [plan endpoint separation](https://www.alibabacloud.com/help/en/model-studio/token-plan-team-quickstart),
|
|
67
|
+
consulted 2026-09-08. The local tests exercise serialization, not account availability,
|
|
68
|
+
provider compliance, billing, or benchmark performance.
|
|
69
|
+
|
|
35
70
|
### OpenAI Codex
|
|
36
71
|
|
|
37
72
|
- Requires ChatGPT Plus or Pro subscription
|
|
@@ -94,6 +129,7 @@ omk
|
|
|
94
129
|
| Fireworks | `FIREWORKS_API_KEY` | `fireworks` |
|
|
95
130
|
| Together AI | `TOGETHER_API_KEY` | `together` |
|
|
96
131
|
| Kimi For Coding | `KIMI_API_KEY` | `kimi-coding` |
|
|
132
|
+
| Meta Model API | `META_API_KEY` (or `META_MODEL_API_KEY`, `MODEL_API_KEY`) | `meta` |
|
|
97
133
|
| MiniMax | `MINIMAX_API_KEY` | `minimax` |
|
|
98
134
|
| MiniMax (China) | `MINIMAX_CN_API_KEY` | `minimax-cn` |
|
|
99
135
|
| Xiaomi MiMo | `XIAOMI_API_KEY` | `xiaomi` |
|
|
@@ -106,7 +142,38 @@ Reference for environment variables and `auth.json` keys: [`const envMap`](https
|
|
|
106
142
|
|
|
107
143
|
#### NVIDIA NIM
|
|
108
144
|
|
|
109
|
-
Set `NVIDIA_API_KEY` and select
|
|
145
|
+
Set `NVIDIA_API_KEY` and select a currently listed NVIDIA model with `/model`.
|
|
146
|
+
NIM entries are filtered against its live `/v1/models` list; historical GLM examples
|
|
147
|
+
may no longer be listed. Thinking capabilities stay model-specific. See the
|
|
148
|
+
[latest catalog audit](model-catalog-refresh.md) for source coverage and limits.
|
|
149
|
+
|
|
150
|
+
#### Meta Model API
|
|
151
|
+
|
|
152
|
+
Meta's first-party [Muse Spark](https://dev.meta.ai/docs/overview) endpoint, served over the OpenAI
|
|
153
|
+
Responses API at `https://api.meta.ai/v1`:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
export META_API_KEY=...
|
|
157
|
+
omk --provider meta --model muse-spark-1.3
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Two auth paths:
|
|
161
|
+
|
|
162
|
+
- **Subscription:** `/login` → Use a subscription → Muse Code. Device-code sign-in at
|
|
163
|
+
`auth.meta.com`, then a mint at `https://api.meta.ai/muse-code/key`. Honors `HTTP_PROXY` /
|
|
164
|
+
`HTTPS_PROXY`. The minted key is what inference uses.
|
|
165
|
+
- **Pay-as-you-go:** `META_API_KEY` (then `META_MODEL_API_KEY`, then `MODEL_API_KEY`), or paste a
|
|
166
|
+
Model API key under `/login` → Use an API key → Meta Model API. Extra keys you create on the
|
|
167
|
+
dashboard are billed [per token](https://dev.meta.ai/docs/muse-code/subscriptions), even with an
|
|
168
|
+
active Muse Code subscription.
|
|
169
|
+
|
|
170
|
+
Standard tier: `muse-spark-1.3`, `muse-spark-1.2`, `muse-spark-1.1`. Contributor tier:
|
|
171
|
+
`muse-spark-1.3-contributor`, `muse-spark-1.2-contributor`. All carry a 1M-token context window.
|
|
172
|
+
|
|
173
|
+
Thinking levels run `minimal` → `max`. Muse Spark's own effort ceiling is `xhigh`, which its docs
|
|
174
|
+
call "maximum reasoning depth", so omk's `max` level maps onto `xhigh` rather than sending an enum
|
|
175
|
+
the API would reject. Thinking cannot be switched off: Muse Spark rejects `reasoning_effort: "none"`
|
|
176
|
+
with HTTP 400, so omk never sends it.
|
|
110
177
|
|
|
111
178
|
#### Zyloo
|
|
112
179
|
|
package/docs/quickstart.md
CHANGED
|
@@ -85,6 +85,10 @@ Additional built-in read-only tools (`grep`, `find`, `ls`) are available through
|
|
|
85
85
|
|
|
86
86
|
## Give omk project instructions
|
|
87
87
|
|
|
88
|
+
For optional, portable user defaults, preview `omk init --global --dry-run`, then
|
|
89
|
+
run `omk init --global`. Existing instructions and settings are preserved.
|
|
90
|
+
See [User context setup](context-files.md) for migration, loading, and interoperability.
|
|
91
|
+
|
|
88
92
|
OMK loads context files at startup. Add an `AGENTS.md` file to tell it how to work in a project:
|
|
89
93
|
|
|
90
94
|
```markdown
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Release audit: v0.98.3
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-06. Target: seven lockstep npm packages, GitHub Release and a tag on `main`.
|
|
4
|
+
This audit is release engineering evidence, not algorithm accuracy or correctness proof.
|
|
5
|
+
|
|
6
|
+
## Source and scope
|
|
7
|
+
|
|
8
|
+
The published v0.98.2 tag was `7e10858f5ecfeee1eea5364a2f21336c5c416f11`.
|
|
9
|
+
The working algorithm branch at `60f520f0c103888ef27438ac5058bdfc78b3e409` had forked before
|
|
10
|
+
that release and still declared 0.98.1. Its four committed evidence-library changes were
|
|
11
|
+
merged with remote main `92dca0f598243a38de156bbe4d099e3e60414cb6` in a separate clean
|
|
12
|
+
publication checkout. The merge preserves the original release ancestry; it does not move
|
|
13
|
+
the v0.98.2 tag or rewrite published changelogs.
|
|
14
|
+
|
|
15
|
+
Included new work:
|
|
16
|
+
|
|
17
|
+
- the four committed trace/effect/claim-closure/VERA projection changes;
|
|
18
|
+
- the reviewed advisory SDK integrity patch, tests and specification;
|
|
19
|
+
- release-facing documentation, manifest/lock/shrinkwrap alignment and publication-auth truth.
|
|
20
|
+
|
|
21
|
+
Excluded: unrelated uncommitted provider integrations, UI, context-init and reverse-skill
|
|
22
|
+
changes, private agent-home material, the untracked algorithm-copy document, research data,
|
|
23
|
+
sessions, local temporary output and optional generated wiki corpora. The original dirty
|
|
24
|
+
working tree was not reset, stashed, broadly staged or copied into the release.
|
|
25
|
+
|
|
26
|
+
## Public package manifest
|
|
27
|
+
|
|
28
|
+
| Package | Version | Role |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `open-multi-agent-kit` | `0.98.3` | CLI and explicit advisory/evidence SDK |
|
|
31
|
+
| `omk-ai` | `0.98.3` | Provider API; lockstep, no catalog refresh in this release |
|
|
32
|
+
| `omk-agent-core` | `0.98.3` | Runtime; internal trace/effect primitives |
|
|
33
|
+
| `omk-tui` | `0.98.3` | TUI; lockstep |
|
|
34
|
+
| `omk-protocol` | `0.98.3` | Run and claim-closure contracts |
|
|
35
|
+
| `omk-adaptorch-wpl` | `0.98.3` | Explicit WPL and proof/VERA projections |
|
|
36
|
+
| `omk-book-to-skill` | `0.98.3` | Optional document compiler; lockstep |
|
|
37
|
+
|
|
38
|
+
The root/workspace manifests, internal dependency ranges, root/example lockfiles,
|
|
39
|
+
book compiler version constant and CLI `npm-shrinkwrap.json` are synchronized.
|
|
40
|
+
Model catalogs are not fetched or regenerated. No API is intentionally removed.
|
|
41
|
+
The new `judge-tied` reason and stricter normal-stop requirement are documented in
|
|
42
|
+
[Advisory selection integrity](advisory-selection.md).
|
|
43
|
+
|
|
44
|
+
## Changelog and document audit
|
|
45
|
+
|
|
46
|
+
- Each public package has a changelog; new protocol/book changelogs explicitly state their
|
|
47
|
+
historical limits instead of fabricating entries for old versions.
|
|
48
|
+
- Root/package README release links and document-compiler install pins name v0.98.3.
|
|
49
|
+
- The runtime-algorithm audit distinguishes its historical v0.97.0 snapshot from subsequent
|
|
50
|
+
v0.98.0 guards and the new v0.98.3 library scope.
|
|
51
|
+
- Internal agent modules are not advertised as default runtime authority or root exports.
|
|
52
|
+
- The actual workflow is token-authenticated GitHub CI. The earlier constitution claimed
|
|
53
|
+
OIDC despite an existing token-only job. A failing-first test exposed that mismatch; the
|
|
54
|
+
documentation now matches the unchanged workflow. No token was read or replaced.
|
|
55
|
+
|
|
56
|
+
## Local verification
|
|
57
|
+
|
|
58
|
+
The first full keyless pass used an isolated temporary HOME. All affected tests passed but
|
|
59
|
+
one Rust diagnostics test could not find its rustup toolchain. Supplying the non-secret
|
|
60
|
+
`RUSTUP_HOME` path restored that fixture: 6/6 diagnostics tests passed. No production code
|
|
61
|
+
was changed to suppress this environment failure. Final release checks are run again on the
|
|
62
|
+
bumped candidate with the isolated HOME and explicit toolchain path.
|
|
63
|
+
|
|
64
|
+
Final local results on the 0.98.3 candidate:
|
|
65
|
+
|
|
66
|
+
| Gate | Result |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| Seven-workspace build | PASS |
|
|
69
|
+
| `npm run check` | PASS; informational legacy switch-case findings only |
|
|
70
|
+
| `check-release-consistency --release` | PASS; v0.98.2 ancestor, all surfaces 0.98.3, no drift |
|
|
71
|
+
| Full keyless workspace tests | 7,124 passed, 821 skipped, 0 failed |
|
|
72
|
+
| Test breakdown | WPL 116, agent 640, AI 487, book compiler 22, coding-agent 5,109, protocol 25, TUI 725 |
|
|
73
|
+
| Go initcheck vet/race/shuffle + native symbol validation | PASS |
|
|
74
|
+
| Committed algorithm/staged patch gitleaks | No leaks found |
|
|
75
|
+
| Seven npm dry-run packs | 0.98.3, each carries CHANGELOG.md, restricted-path matches 0 |
|
|
76
|
+
| Existing five changelog histories from v0.98.2 | Byte-preserved |
|
|
77
|
+
| Clean-environment compiled CLI | Reports 0.98.3 |
|
|
78
|
+
|
|
79
|
+
The first tarball inspection exposed that six package `files` allowlists omitted changelogs.
|
|
80
|
+
A failing-first release test now requires each public package to ship its current dated
|
|
81
|
+
changelog; all six allowlists were corrected. The publication helper's misleading automatic
|
|
82
|
+
CI-provenance message was also corrected without changing authentication behavior.
|
|
83
|
+
|
|
84
|
+
An inherited `OMK_PACKAGE_DIR` pointed the local smoke command at older package metadata.
|
|
85
|
+
Unsetting only that override changed its reported version from 0.98.1 to 0.98.3, and a fully
|
|
86
|
+
clean environment confirmed 0.98.3. The override was not changed globally; the isolated build
|
|
87
|
+
and package manifests are the release subject.
|
|
88
|
+
|
|
89
|
+
A local pass is not a completed npm publication: the matching tag workflow must still pass,
|
|
90
|
+
and npm `latest` plus GitHub Release must agree on the version.
|
|
91
|
+
|
|
92
|
+
## Publication boundary
|
|
93
|
+
|
|
94
|
+
The existing `build-binaries.yml` workflow verifies source/tag identity, builds six platform
|
|
95
|
+
archives, validates and publishes npm packages, then creates the GitHub Release. Publishing
|
|
96
|
+
uses the existing environment-scoped granular token; OIDC/Sigstore provenance is not claimed.
|
|
97
|
+
No local `npm publish`, credential rotation, gate bypass or force-push is part of this release.
|