open-multi-agent-kit 0.98.3 → 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 +32 -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/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-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/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/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/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.4.md +112 -0
- package/docs/review-bundle-followup.md +195 -0
- package/docs/runtime-algorithms.md +19 -0
- package/docs/sdk.md +11 -2
- 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,154 @@
|
|
|
1
|
+
# 벤치마크 실패에서 다시 나눈 하네스 책임
|
|
2
|
+
|
|
3
|
+
2026-09-09. 대상은 Terminal-Bench 2.1의 **중단된 Flash 24-task 개발용 비교**다.
|
|
4
|
+
새 오케스트레이터를 추가하는 대신, 기존 런타임에서 입력·권한·실행·완료 판정의 책임을
|
|
5
|
+
분리한다. 이 문서는 구현한 경계와 후속 설계를 구분하며 성능 우위를 주장하지 않는다.
|
|
6
|
+
|
|
7
|
+
## 1. 무엇을 고쳐야 하는가
|
|
8
|
+
|
|
9
|
+
비공개 실행 `tb21-flash24-20260908T151234Z-pYN3`의 결과·요청 원장·세션 메타데이터를
|
|
10
|
+
읽기 전용으로 재집계했다. 고정 dataset SHA는 `5c8eadf1f393183288fa08b8f73ca9a469cc5e00`,
|
|
11
|
+
실행 소스 HEAD는 `29624c3962d00cc8355191265e7827d9fdf0f3ad`다. 실행에는 미커밋 코드가
|
|
12
|
+
포함됐으므로 HEAD만으로 실행물을 재현할 수 없다. 실행 manifest의 파일 해시가 별도로 필요하다.
|
|
13
|
+
|
|
14
|
+
| 관측 | 확인된 사실 | 설계 결정 |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| 완료 범위 | 43/48시행. A 21개, B 22개 | 같은 21쌍만 비교. 미완료 5개를 실패·성공으로 채우지 않음 |
|
|
17
|
+
| 같은 21쌍 해결 | OMK 7, Terminus-2 10 | 최종 24개 점수나 공식 순위가 아님 |
|
|
18
|
+
| OMK 비정상 종료 4건 | 모두 `read`의 image 결과 다음 공급자 계약 거부 | 도구 관측값이 모델 선택을 변경하지 않게 함 |
|
|
19
|
+
| 시간 초과 | OMK 4, Terminus 3 | 원인별 시간 분해 뒤에만 deadline 정책 변경 |
|
|
20
|
+
| 같은 21쌍 요청 | OMK 574, Terminus 617 | 이전 Pro 실험의 요청 증폭 결론을 그대로 재사용하지 않음 |
|
|
21
|
+
| 같은 21쌍 기록된 입력 토큰 | OMK 9,523,530, Terminus 22,752,932 | 토큰 감소만으로 품질·비용 개선을 판정하지 않음 |
|
|
22
|
+
| 동일 tool 인수 반복 | OMK 완료 시행에서 최대 3회 | 반복 차단 임계값을 일괄 낮출 근거 없음 |
|
|
23
|
+
| 중단 상태 | 소유 프로세스가 없는데 `state.json`은 running | supervisor 상태와 살아 있는 실행 소유권을 분리 |
|
|
24
|
+
| 별도 WSL 측정 | OMK 8세션과 자식 프로세스 PSS 약15.8GiB, SwapPSS 약6.4GiB | MCP 시작 전 자원 입장 제어가 필요. benchmark만의 점유량이 아님 |
|
|
25
|
+
|
|
26
|
+
이미지 실패 4건은 자동 라우팅→계약 거부까지 확인한 인과 경로다. 아래 수정으로 그
|
|
27
|
+
종료 원인을 없애도 네 task가 해결된다는 뜻은 아니다. 시간 초과 중 `tune-mjcf`의
|
|
28
|
+
기록된 gateway 시간은 약120초, `db-wal-recovery`는 약712초였다. 나머지 시간을 모두
|
|
29
|
+
도구 낭비라고 추정하지 않는다. 대기·tool·검증·호스트 압박 측정이 더 필요하다.
|
|
30
|
+
|
|
31
|
+
## 2. 선택한 구조
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
원본 session / tool artifact [보관·재생]
|
|
35
|
+
│
|
|
36
|
+
사용자가 선택한 모델 + 명시적 사용자 첨부 [모델 선택]
|
|
37
|
+
│
|
|
38
|
+
ProviderInputProjection [전송 표현]
|
|
39
|
+
├─ 지원하는 입력: 유지
|
|
40
|
+
└─ text-only + tool image: 명시적 미관측 안내
|
|
41
|
+
│
|
|
42
|
+
ModelContract → provider-specific payload check [허용·거부]
|
|
43
|
+
│
|
|
44
|
+
SDK/provider → tool execution → 실행 관측 [실행]
|
|
45
|
+
│
|
|
46
|
+
classifyRunTermination → durable run journal [시도 종료]
|
|
47
|
+
│
|
|
48
|
+
prompt_settled (retry·continuation 종료 후) [프롬프트 종료]
|
|
49
|
+
│
|
|
50
|
+
CLI exit status ── text / JSON renderer [보고]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
원본 보관은 입력 변환과 별개다. 계약 검사는 입력을 해석하거나 임의 모델을 선택하지 않는다.
|
|
54
|
+
`agent_end`는 재시도 전의 시도 종료일 수 있으므로 CLI의 최종 판정으로 바로 쓰지 않는다.
|
|
55
|
+
종료 코드 0이나 `prompt_settled=completed`도 외부 verifier의 해결 판정과는 다르다.
|
|
56
|
+
|
|
57
|
+
선행연구는 [SWE-agent의 ACI 연구](https://arxiv.org/abs/2405.15793v3)의 초록을 확인했다.
|
|
58
|
+
모델과 도구 사이의 인터페이스를 먼저 고친다는 방향의 참고 자료이며, 이 변경의 구현
|
|
59
|
+
세부사항이나 TB 성능 이득을 증명하는 자료가 아니다. 새 학습형 라우터·judge·앙상블은
|
|
60
|
+
이번 실패 원인을 해결하지 않으므로 추가하지 않는다.
|
|
61
|
+
|
|
62
|
+
## 3. 이번에 구현한 경계
|
|
63
|
+
|
|
64
|
+
### 입력 표현: provider-input.ts
|
|
65
|
+
|
|
66
|
+
`packages/agent/src/provider-input.ts`는 `projectToolImagesForModel()`을 제공한다.
|
|
67
|
+
계약이 있는 core/SDK 경로에서만 사용한다.
|
|
68
|
+
|
|
69
|
+
- text-only 모델의 `toolResult` 이미지 블록만 텍스트 안내로 바꾼다. 시각 내용을
|
|
70
|
+
추측하거나 OCR 결과를 만들어 내지 않는다.
|
|
71
|
+
- 기존 text, tool-call ID, 오류 여부와 순서를 유지한다. 원본 세션의 image는 수정하지 않는다.
|
|
72
|
+
- 현재 모델이 이미지 입력을 지원하면 그대로 전송한다. 사용자 첨부는 자동 제거하지 않는다.
|
|
73
|
+
- 계약 모드에서는 **tool 이미지로 자동 vision 모델을 선택하지 않는다**. 사용자 이미지가
|
|
74
|
+
있는 경우는 기존 vision 라우트를 검사하고, 허용된 vision 모델이면 모든 첨부를 유지한다.
|
|
75
|
+
- 계약 없는 일반 제품 경로는 기존 자동 vision 라우팅을 유지한다.
|
|
76
|
+
- core의 `provider_request.omittedToolImages`는 해당 요청에서 생략한 이미지 수다.
|
|
77
|
+
누적 제거량이나 이미지 해석 성공률이 아니다. SDK 요약은 동일 변환을 쓰지만 아직 이
|
|
78
|
+
core 사건 원장의 소비자가 아니므로 별도의 완전한 요청 원장으로 주장하지 않는다.
|
|
79
|
+
|
|
80
|
+
이는 원본 이미지 메모리를 줄이는 변경이 아니다. read producer의 decode/resize나
|
|
81
|
+
세션 내 base64 저장을 없애지 않았다. 그 부분은 아래 artifact-reference 후속 단위다.
|
|
82
|
+
|
|
83
|
+
### 원인 분류: session-run-termination.ts
|
|
84
|
+
|
|
85
|
+
기존 `AgentSession`의 종료 원인 분류를 별도 순수 함수로 옮겼다. 세션 수명주기와
|
|
86
|
+
원장 append 책임은 그대로 두고, 시계·모델·관측된 거부/timeout을 분류기에 전달한다.
|
|
87
|
+
|
|
88
|
+
`provider_denied(contract-violation)`가 관측된 core run은 문자열 추측보다 먼저
|
|
89
|
+
`configuration.invalid`, `retryable=false`로 분류한다. 계약을 완화하거나 다른 모델로
|
|
90
|
+
전환하는 재시도는 추가하지 않는다. 다음 run에서 원인을 초기화한다.
|
|
91
|
+
이전 로그의 `retryable=true`는 잘못된 안내였으며, 그것만으로 실제 재시도 지출이
|
|
92
|
+
발생했다고 주장하지 않는다. SDK/사용자 정의 stream의 모든 오류까지 이 사건으로
|
|
93
|
+
변환한 것은 아니다.
|
|
94
|
+
|
|
95
|
+
### CLI 결과: print-mode.ts
|
|
96
|
+
|
|
97
|
+
최종 실패 판단은 renderer 바깥에 둔다. 각 `session.prompt()`가 끝난 뒤
|
|
98
|
+
`prompt_settled` 결과를 확인한다. 이 사건이 없는 호환 경로에서는 해당 프롬프트의
|
|
99
|
+
assistant error/abort와 typed termination을 확인한다.
|
|
100
|
+
|
|
101
|
+
text와 JSON 모두 실패 시 종료 코드 1을 반환하고 후속 CLI 프롬프트를 실행하지 않는다.
|
|
102
|
+
내부 재시도에서 한 번 실패했어도 최종 settlement가 성공이면 실패로 고정하지 않는다.
|
|
103
|
+
실행 전부터 존재하던 이전 termination을 새 프롬프트의 실패로 재사용하지 않는다.
|
|
104
|
+
|
|
105
|
+
## 4. 다음 고도화: 작은 독립 단위로 구현
|
|
106
|
+
|
|
107
|
+
아래는 **설계이며 아직 구현하지 않았다**. 이번 실행이나 기본 설정에 몰래 적용하지 않는다.
|
|
108
|
+
|
|
109
|
+
| 단위 | 기존 책임과 연결 지점 | 수용 기준·중단 기준 |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| H1: 실행 소유권·재개 | benchmark supervisor, `run-journal-store.ts` | PID뿐 아니라 boot ID+process start+heartbeat로 소유권 식별. 중단 시 미확정 요청·원본 결과 보존. 재시도는 새 attempt이며 사용자 승인 필요 |
|
|
112
|
+
| H2: 공유 시간 예산 | prompt 수명주기, provider signal, `tool-timeout.ts` | 단조 시계 deadline 하나를 모든 대기에 전달. 남은 예산에서 검증·정리 시간을 예약. queue/model/tool/cleanup 구간 측정; fake-clock·child 종료·부분 결과 보존 검사 통과 전 활성화 금지 |
|
|
113
|
+
| H3: artifact-reference 입력 | read producer, 세션 저장, provider-input | 큰 이미지/출력을 파일·digest·MIME·크기 참조로 보관. text-only 요청은 decoding 이전에 metadata만 사용. 원본 회수·권한·수명·재생 동일성을 검사하며 조용한 정보 손실 금지 |
|
|
114
|
+
| H4: MCP 입장 제어 | MCP manager의 spawn, 기존 resource admission | 사용자 선택 loadout에서 필요할 때 시작. 실제 소유 child에만 종료·유휴회수 적용. 다른 세션·인증·프로젝트 경계를 공유하지 않음. host memory pressure와 startup 비용을 전후 측정 |
|
|
115
|
+
| H5: 단일 요청 원장 | core 사건+SDK 요약+provider HTTP 경계 | run/trial/attempt/request ID로 시작·완료·거부·미확정을 연결. 시간창 귀속 금지. 사용량 결측을0으로 대체하지 않음. redaction·append 실패는 평가 completeness에 반영 |
|
|
116
|
+
|
|
117
|
+
H1→H2→H3/H4→H5 순으로 무조건 전부 재작성하지 않는다. 먼저 각각의 현재 호출 경로와
|
|
118
|
+
검사로 최소 diff를 정한다. H2는 “더 빨리 포기하기”가 목표가 아니며, H4는 머신 전체의
|
|
119
|
+
프로세스나 Docker를 일괄 종료하는 기능이 아니다. global MCP pool은 인증 격리 비용이
|
|
120
|
+
크므로 첫 구현에서 제외한다.
|
|
121
|
+
|
|
122
|
+
## 5. 검증과 주장 범위
|
|
123
|
+
|
|
124
|
+
이번 회귀는 공개 합성 입력만 사용했다. benchmark task 이름에 따라 동작을 바꾸거나
|
|
125
|
+
원본 정답·verifier를 모델에 노출하지 않았다. 원본 실행물·결과·STOP 상태는 그대로다.
|
|
126
|
+
|
|
127
|
+
| 검증 | 증명하는 범위 |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| core 이미지 회귀 | text-only 모델 유지, 원본 불변, idempotent 입력, 사용자 이미지 거부/허용, legacy 라우팅 유지 |
|
|
130
|
+
| SDK 요약 회귀 | 요약에도 동일한 이미지 projection, 계약 거부 후 다음 허용 run 복구 |
|
|
131
|
+
| 실제 소스 CLI + loopback HTTP | 실제 read image→두 번째 모델 요청 성공, raw 이벤트의 원본 image 보존, 최종 요청에 image payload 없음 |
|
|
132
|
+
| CLI text/JSON 회귀 | 금지 모델의 네트워크0·exit1, settlement 실패 전파, 실패 후 후속 프롬프트 중단, 내부 복구 성공 보존 |
|
|
133
|
+
| 기존 런타임 회귀 | auth/network/quota/abort/tool/persistence/compaction 분류와 기존 계약 유지 |
|
|
134
|
+
|
|
135
|
+
구현 전에는 core 이미지 2개, SDK 요약/분류 2개, CLI 결과 5개 요구 검사가 실제 실패했다.
|
|
136
|
+
직접 검토 중 사용자 이미지로 허용된 vision 모델을 선택했을 때 tool image까지 제거되는
|
|
137
|
+
문제를 별도 RED로 발견하고 수정했다. 테스트 타입/fixture 오류는 제품 RED에 합산하지 않는다.
|
|
138
|
+
|
|
139
|
+
실행 명령은 해당 package 디렉터리 기준이다. 메모리 부담을 줄이기 위해 worker 1로 실행한다.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# packages/agent
|
|
143
|
+
node ../../node_modules/vitest/dist/cli.js --run test/provider-input.test.ts test/provider-request-boundary.test.ts --maxWorkers=1 --no-file-parallelism
|
|
144
|
+
# packages/coding-agent
|
|
145
|
+
node ../../node_modules/vitest/dist/cli.js --run test/sdk-model-contract.test.ts test/print-mode.test.ts test/model-contract-wire-cli.test.ts test/agent-session-termination-runtime.test.ts --maxWorkers=1 --no-file-parallelism
|
|
146
|
+
# repository root
|
|
147
|
+
node_modules/.bin/tsgo --noEmit --pretty false
|
|
148
|
+
npm run check
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
실제 모델 재호출·벤치마크 재개·WSL 재시작·빌드/설치·커밋은 이번 작업에서 하지 않는다.
|
|
152
|
+
본 변경은 중단된 24-task 결과를 보정하지 않는다. 재측정 전에 실행 snapshot과 양 arm의
|
|
153
|
+
동일 조건을 다시 고정해야 한다. 현재 본 적 있는 24개는 개발 집합으로 유지하고,
|
|
154
|
+
일반화 주장은 별도의 사전 고정 확인 평가로 검증한다.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# OMK 하네스 개선 점검 — 2026-09-05
|
|
2
|
+
|
|
3
|
+
기준은 `60f520f0c1`에서 시작한 현재 작업 트리입니다. 시작 시 다른 작업의
|
|
4
|
+
미커밋 변경이 존재했으며 이를 보존했습니다. 아래는 주요 실행 경로에 대한
|
|
5
|
+
소스·로컬 회귀 테스트 점검이지, 전체 코드 감사나 성능·SOTA 인증이 아닙니다.
|
|
6
|
+
이번 변경은 작업 트리 상태이며 배포·릴리스된 기능으로 간주하지 않습니다.
|
|
7
|
+
|
|
8
|
+
## 이번에 수정한 항목
|
|
9
|
+
|
|
10
|
+
| 우선순위 | 관찰한 문제 | 수정과 증거 |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| P0 | WPL의 `shouldSubmit`이 BLOCKED 여부만 확인해 preview·증거 부족·검증기 오류도 제출 가능으로 표시 | `b2c-mapper.ts`에서 적용 가능 + non-preview + run ID + `CONFIRMED`를 모두 요구. `submission-gates.test.ts`로 실패·누락·성공 대조 |
|
|
13
|
+
| P0 | deep runner의 음수·비정수·실패 종료 코드와 공백 증거가 완료로 인정됨 | `deep-wall.ts`에서 비어 있지 않은 digest/command와 종료 코드 `0` 요구. `deep-wall-gates.test.ts` |
|
|
14
|
+
| P0 | 완료된 deep check가 기존 BLOCKED/INCONCLUSIVE의 사람 검토 요구를 삭제 | `evaluate-correctness-wall.ts`가 기존 검토 요구를 유지하고, 요청한 deep check가 불가능하면 제출을 보류 |
|
|
15
|
+
| P1 | 같은 테스트가 패키지 디렉터리에서는 통과하지만 저장소 루트에서는 오래된 WPL `dist`를 읽어 실패 | 루트 Vitest 프로젝트 설정과 coding-agent의 WPL 소스 alias 추가. 루트 실행에서 7개 실패를 재현한 뒤 같은 테스트 통과 |
|
|
16
|
+
| P1 | WPL 사용자용 웹 가입·상담 접점과 키 없는 CLI 안내가 없음 | `getAdaptOrchLinks()`와 `omk doctor adaptorch --links [--json]` 추가. 고정 URL·UTM만 제공하며 정책 판정과 분리 |
|
|
17
|
+
|
|
18
|
+
WPL의 `canApply`와 기존 shadow/soft/hard 적용 정책은 바꾸지 않았습니다.
|
|
19
|
+
증거 요건을 충족한 `shouldSubmit=true`도 사람의 커밋·병합·배포 승인을 대신하지 않습니다.
|
|
20
|
+
CTA를 verdict, 서명 receipt, 모델 프롬프트 또는 tool 실행 게이트에 끼워 넣지 않았습니다.
|
|
21
|
+
|
|
22
|
+
## 다음 개선 순서
|
|
23
|
+
|
|
24
|
+
| 우선순위 | 영역 / 현재 근거 | 후속 작업과 완료 기준 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| P0 | 전체 정적 검사: 아래 기존 파일의 Biome 오류 4개와 module-size 초과 5개 | 해당 변경 소유자가 수정한 뒤 `npm run check` 전체를 다시 통과시킬 것. 이번 작업 밖의 diff나 크기 baseline을 임의 수정하지 않음 |
|
|
27
|
+
| P1 | 완료·취소·재시도: `prompt-settlement.ts`, `session-termination.ts`, `tool-timeout-settlement.ts` | 중간 `agent_end`와 최종 완료를 계속 분리. timeout 후 계속 쓰는 도구, 큐 취소, 중단 복원 조합을 실제 세션 경계 회귀에 추가 |
|
|
28
|
+
| P1 | 컨텍스트·스킬: Context Budget V2와 Grok의 요청별 skill 선택은 별도 경로 | 공급자별 컨텍스트 비용·캐시 적중·compaction 후 명시 규칙 보존을 같은 작업으로 비교. 일반 공급자로 확장하기 전에 explicit-only 권한과 토큰 상한 회귀 확보 |
|
|
29
|
+
| P1 | 공급자·도구 계약: `tool-schema`와 종료 원인 분류 테스트 | 인증/모델 미지원/환경 실패를 후보 코드 실패와 계속 구분. JSON schema 정규화와 tool pair 수선 후 공급자별 키 없는 cassette 회귀를 일관된 진입점에서 실행 |
|
|
30
|
+
| P2 | 자원·스케줄링: DAG scheduler, resource admission의 현재 테스트 | `observe` 데이터를 먼저 수집하고 p95 지연·메모리·중복 도구 실행을 측정. adaptive 기본값 변경이나 자동 fan-out은 별도 승인·비교 실험 이후 |
|
|
31
|
+
| P2 | 구조: 큰 session/interactive 모듈과 버전이 다른 런타임 설명 | 동작 변경과 파일 이동을 분리하고 역할별 모듈 크기·import-cycle 기준을 유지. 오래된 문서는 실제 소비자·기본값·revision에 묶어 갱신 |
|
|
32
|
+
| P2 | CRM: 이번 변경은 링크 전달까지만 구현 | 사이트 측 동의 기반 UTM 보존 → 가입/상담 제출 → 첫 사용 이벤트를 연결하고, 로컬 평가와 호스티드 사용을 분리 집계. 링크 출력은 전환이 아님 |
|
|
33
|
+
|
|
34
|
+
측정은 [Turn metrics](metrics.md)의 동일 모델·공급자·작업·예산 비교 계약을 따릅니다.
|
|
35
|
+
회귀 테스트 통과만으로 더 빠르다거나 정확도가 높아졌다고 주장하지 않습니다.
|
|
36
|
+
AdaptOrch 브리지는 계속 기본 비활성·advisory이며, WPL은 기본 CLI에서
|
|
37
|
+
자동 dispatch/polling 루프가 되지 않습니다.
|
|
38
|
+
|
|
39
|
+
## 검증 기록
|
|
40
|
+
|
|
41
|
+
- 제출/deep-check 신규 회귀: 수정 전 **25개 중 17개 실패**, 수정 후 모두 통과.
|
|
42
|
+
- CRM 안내 신규 회귀: 수정 전 **8개 중 7개 실패**, 수정 후 모두 통과.
|
|
43
|
+
- WPL 관련 **9개 파일 / 68개 테스트 통과**. 변경한 mapper, deep wall, evaluator,
|
|
44
|
+
service links 네 모듈의 V8 커버리지: **lines 98.74%, branches 94.7%, functions 100%**.
|
|
45
|
+
`service-links.ts`는 모든 지표 100%.
|
|
46
|
+
- coding-agent 하네스/컨텍스트/자원/브리지/벽 회귀 **13개 파일 / 154개 통과**.
|
|
47
|
+
- 기존 doctor + 신규 offline handoff **2개 파일 / 20개 통과**.
|
|
48
|
+
- 실제 소스 CLI 진입점 3개 시나리오와 agent scheduler/timeout/harness,
|
|
49
|
+
AI tool schema를 루트에서 함께 실행: **5개 파일 / 48개 통과**.
|
|
50
|
+
- 최종 루트 통합 실행: 위의 **29개 파일 / 290개 테스트 모두 통과**, 종료 코드 `0`.
|
|
51
|
+
- 루트 `node_modules/.bin/tsgo --noEmit`: 종료 코드 `0`. 변경 TypeScript 13개 파일의 LSP 오류 없음.
|
|
52
|
+
- 변경 소스·테스트 Biome 검사와 범위 지정 `git diff --check`: 종료 코드 `0`.
|
|
53
|
+
- `check:doc-links`, `check:feature-claims`, `check:private-home`, `check:import-cycles`:
|
|
54
|
+
각각 별도 실행에서 종료 코드 `0`. private-home 검사는 추적 중인 파일 범위입니다.
|
|
55
|
+
- `npm run check`: 종료 코드 `1`, 아래 기존 파일의 import 정렬/포맷 오류 4개에서 중단.
|
|
56
|
+
이후 연결된 전체 게이트가 실행됐다고 간주하지 않습니다.
|
|
57
|
+
- 별도 `npm run check:module-size`: 종료 코드 `1`, 이번에 수정하지 않은 아래 5개 모듈이
|
|
58
|
+
기존 baseline을 초과. 새 baseline을 등록해 오류를 숨기지 않았습니다.
|
|
59
|
+
|
|
60
|
+
전체 검사를 막은 이번 작업 밖의 파일:
|
|
61
|
+
|
|
62
|
+
- `packages/ai/src/utils/oauth/meta.ts`
|
|
63
|
+
- `packages/ai/test/openai-responses-codex-turn-metadata.test.ts`
|
|
64
|
+
- `packages/coding-agent/test/mcp/tools.test.ts`
|
|
65
|
+
- `packages/coding-agent/test/session-termination.test.ts`
|
|
66
|
+
|
|
67
|
+
Module-size 초과 파일 (현재 pure LOC / baseline):
|
|
68
|
+
|
|
69
|
+
- `packages/agent/src/harness/reverse-skill.ts`: 905 / 792
|
|
70
|
+
- `packages/ai/src/types.ts`: 362 / 361
|
|
71
|
+
- `packages/coding-agent/src/core/model-registry.ts`: 886 / 885
|
|
72
|
+
- `packages/coding-agent/src/core/provider-usage.ts`: 996 / 994
|
|
73
|
+
- `packages/coding-agent/src/modes/interactive/interactive-mode.ts`: 5574 / 5473
|
|
74
|
+
|
|
75
|
+
주요 신규 계약 재실행:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
LIVE_E2E=0 node node_modules/vitest/dist/cli.js --run \
|
|
79
|
+
packages/adaptorch-wpl/test/submission-gates.test.ts \
|
|
80
|
+
packages/adaptorch-wpl/test/deep-wall-gates.test.ts \
|
|
81
|
+
packages/adaptorch-wpl/test/service-links.test.ts \
|
|
82
|
+
packages/coding-agent/test/adaptorch-onboarding.test.ts \
|
|
83
|
+
packages/coding-agent/test/adaptorch-doctor-cli.test.ts \
|
|
84
|
+
packages/coding-agent/test/adaptorch-links-cli.test.ts
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
명시적으로 미검증: 실제 Docker runner, 실제 인증 API 요청, 사이트 가입·상담
|
|
88
|
+
저장, 클릭/전환 집계, 유료 provider 실행, 전체 e2e, 설치된 배포본/TUI 반영.
|
|
89
|
+
벤치마크·AdaptOrch 실행·배포·커밋은 수행하지 않았습니다.
|
|
90
|
+
CRM 사용법과 개인정보 경계는 [AdaptOrch 안내](adaptorch-onboarding.md)를 참조하세요.
|
package/docs/json.md
CHANGED
|
@@ -75,6 +75,25 @@ Followed by events as they occur:
|
|
|
75
75
|
{"type":"agent_end","messages":[...]}
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
+
## Completion and exit status
|
|
79
|
+
|
|
80
|
+
`agent_end` closes an attempt, not necessarily the whole prompt: retries and
|
|
81
|
+
continuations may still run. Use `prompt_settled` for the final prompt outcome
|
|
82
|
+
(`completed`, `failed`, or `aborted`). Neither event proves task correctness.
|
|
83
|
+
|
|
84
|
+
Print mode returns exit code **1** for a final failed or aborted prompt in both
|
|
85
|
+
text and JSON output. If several CLI prompts were supplied, it stops at the first
|
|
86
|
+
failed prompt instead of hiding it with a later success. An internally recovered
|
|
87
|
+
attempt followed by a completed prompt still exits successfully. No prompt is an
|
|
88
|
+
argument error (exit code **2**).
|
|
89
|
+
|
|
90
|
+
Keep `pipefail` when filtering events, or the filter can hide OMK's nonzero status:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
set -o pipefail
|
|
94
|
+
omk --mode json "List files" | jq -c 'select(.type == "prompt_settled")'
|
|
95
|
+
```
|
|
96
|
+
|
|
78
97
|
## Example
|
|
79
98
|
|
|
80
99
|
```bash
|
package/docs/keybindings.md
CHANGED
|
@@ -87,7 +87,7 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `ctrl+1
|
|
|
87
87
|
| `app.exit` | `ctrl+d` | Exit (when editor empty) |
|
|
88
88
|
| `app.suspend` | `ctrl+z` (none on Windows) | Suspend to background |
|
|
89
89
|
| `app.editor.external` | `ctrl+g` | Open in external editor (`$VISUAL` or `$EDITOR`) |
|
|
90
|
-
| `app.clipboard.pasteImage` | `ctrl+v
|
|
90
|
+
| `app.clipboard.pasteImage` | `ctrl+v`, `alt+v` | Paste image from clipboard; use `alt+v` when Windows Terminal consumes `ctrl+v` |
|
|
91
91
|
|
|
92
92
|
### Sessions
|
|
93
93
|
|
package/docs/mcp.md
CHANGED
|
@@ -49,8 +49,9 @@ Servers are read from three files, later wins on a name collision:
|
|
|
49
49
|
|
|
50
50
|
The `omk` CLI calls `attachMcpServers()` for every session it creates —
|
|
51
51
|
interactive, `-p`, and RPC, including `/new`, `/resume`, and forks — so a
|
|
52
|
-
configured server's tools reach the model without further setup.
|
|
53
|
-
fails to start is reported as a startup warning and the session
|
|
52
|
+
configured server's tools reach the model without further setup. An enabled
|
|
53
|
+
server that fails to start is reported as a startup warning and the session
|
|
54
|
+
continues. Intentionally disabled entries are skipped without a startup warning.
|
|
54
55
|
`--help` and `--list-models` never spawn servers.
|
|
55
56
|
|
|
56
57
|
SDK callers attach explicitly:
|
|
@@ -95,6 +96,25 @@ OMK_MCP_SMOKE_HANDSHAKE_MS=120000 node scripts/mcp-smoke.mjs # override slow h
|
|
|
95
96
|
The script prints server state, tool counts, and versions. It never prints env
|
|
96
97
|
values.
|
|
97
98
|
|
|
99
|
+
### Package and credential errors
|
|
100
|
+
|
|
101
|
+
An npm `E404` happens before the MCP handshake: the configured npm package could
|
|
102
|
+
not be resolved. A longer `startup_timeout_sec` does not fix a wrong package name.
|
|
103
|
+
The server's configuration key is not necessarily its package name:
|
|
104
|
+
|
|
105
|
+
- [Context7](https://github.com/upstash/context7): `npx -y @upstash/context7-mcp`,
|
|
106
|
+
not `npx -y context7-mcp`.
|
|
107
|
+
- [Fetch](https://github.com/modelcontextprotocol/servers/tree/main/src/fetch):
|
|
108
|
+
`uvx mcp-server-fetch`, not `npx -y @modelcontextprotocol/server-fetch`.
|
|
109
|
+
|
|
110
|
+
Check all three configuration paths above: a project entry overrides a user entry
|
|
111
|
+
with the same server name. Recreate the session after correcting a command.
|
|
112
|
+
|
|
113
|
+
A `No API key` error is different: the executable started but lacks credentials.
|
|
114
|
+
For Resend, supply `RESEND_API_KEY` securely to the server process, or explicitly
|
|
115
|
+
set `disabled: true` if you do not need it. Do not paste keys into diagnostic
|
|
116
|
+
output. Missing-key and other genuine startup failures remain warnings.
|
|
117
|
+
|
|
98
118
|
## Scope
|
|
99
119
|
|
|
100
120
|
Implemented: `initialize`, `notifications/initialized`, `tools/list`,
|
package/docs/metrics.md
CHANGED
|
@@ -119,31 +119,40 @@ Counts, durations, ids, and error *classes*:
|
|
|
119
119
|
|
|
120
120
|
```json
|
|
121
121
|
{
|
|
122
|
-
"schemaVersion": "omk-turn-metrics-
|
|
122
|
+
"schemaVersion": "omk-turn-metrics-2",
|
|
123
123
|
"sessionId": "…", "turnIndex": 12,
|
|
124
124
|
"provider": "anthropic", "model": "claude-sonnet-4-5",
|
|
125
125
|
"startedAtEpochMs": 1, "endedAtEpochMs": 2, "durationMs": 1,
|
|
126
126
|
"usage": { "input": 100, "output": 20, "cacheRead": 900, "cacheWrite": 10, "costUsd": 0.0125 },
|
|
127
127
|
"stopReason": "toolUse",
|
|
128
|
-
"toolCalls": [{ "name": "bash", "durationMs": 120, "ok": false, "
|
|
128
|
+
"toolCalls": [{ "name": "bash", "durationMs": 120, "ok": false, "errorClass": "unknown" }],
|
|
129
129
|
"toolCallCount": 1, "toolFailureCount": 1
|
|
130
130
|
}
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
New records project an explicit field allowlist. Prompt, argument, output, environment,
|
|
134
|
+
and unknown nested fields are not copied into the record; caller-supplied `toJSON`
|
|
135
|
+
properties are not retained. Raw tool errors are classified as `timeout`, `aborted`,
|
|
136
|
+
`permission`, `not_found`, `invalid_input`, or `unknown` and then discarded.
|
|
137
|
+
Length truncation alone was not redaction. Identifiers are still metadata, not anonymized
|
|
138
|
+
identities: callers must not put secrets or task content in ID/name fields.
|
|
137
139
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
The reader validates required fields, finite nonnegative quantities, counters, and
|
|
141
|
+
nested tool/usage/cache shapes before aggregation. Invalid records count as malformed.
|
|
142
|
+
Valid v1 records remain readable, but existing files are **not rewritten or scrubbed**;
|
|
143
|
+
review old files separately before sharing them.
|
|
144
|
+
|
|
145
|
+
Metrics remain advisory. Invalid input, an oversized record, or a failed write is
|
|
146
|
+
counted and dropped rather than failing the agent. Single records cannot exceed the
|
|
147
|
+
configured file bound. Rotation is still best-effort and does not provide a transactional
|
|
148
|
+
multi-writer size guarantee.
|
|
140
149
|
|
|
141
150
|
## Capability baseline
|
|
142
151
|
|
|
143
152
|
Runtime metrics tell you what a session cost, not whether the harness can solve
|
|
144
153
|
tasks. For that, `scripts/tb-mini-suite.mjs` selects a deterministic,
|
|
145
|
-
difficulty-
|
|
146
|
-
|
|
154
|
+
difficulty-stratified Terminal-Bench 2.1 subset. Score comparisons still require
|
|
155
|
+
the controlled comparison contract above:
|
|
147
156
|
|
|
148
157
|
```bash
|
|
149
158
|
node scripts/tb-mini-suite.mjs # human-readable selection
|
|
@@ -151,9 +160,50 @@ node scripts/tb-mini-suite.mjs --json # feed a runner
|
|
|
151
160
|
node scripts/tb-mini-suite.mjs --seed 7 # a different fixed subset
|
|
152
161
|
```
|
|
153
162
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
With identical task metadata, seed, size, and collation, selection is repeatable.
|
|
164
|
+
The default 15-task subset oversamples easy tasks and prioritizes shorter expert
|
|
165
|
+
time estimates; it is a regression signal, not a population-representative score
|
|
166
|
+
or an agent runtime bound. Selection alone is not a capability result. Scoring
|
|
167
|
+
requires Docker, `harbor`, and model spend, and is not wired into `npm run check`.
|
|
168
|
+
|
|
169
|
+
`--size` must be a positive safe integer no larger than the available task
|
|
170
|
+
population. Missing difficulty quotas are filled from unselected tasks using the
|
|
171
|
+
same ordering, so a valid request returns exactly that many distinct tasks.
|
|
172
|
+
`--seed` accepts integers from `0` through `4294967295`. Invalid or missing option
|
|
173
|
+
values and oversized requests exit with code `2`; absent, empty, or non-directory
|
|
174
|
+
task paths exit with code `1`. The existing default subset remains unchanged.
|
|
175
|
+
|
|
176
|
+
Run the offline CLI regression tests without downloading tasks or calling models:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
node --test scripts/test/tb-mini-suite.test.mjs
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
See [the harness roadmap](../../../ROADMAP.md) for the dated OMK versus Terminus-2
|
|
183
|
+
baseline, statistical limitations, implementation boundaries, and staged acceptance
|
|
184
|
+
criteria. Planned runtime improvements are not measured benchmark gains.
|
|
185
|
+
|
|
186
|
+
### Audit recorded TB 2.1 results
|
|
187
|
+
|
|
188
|
+
The checkout-only `scripts/tb21-audit.mjs` audits explicitly selected Harbor jobs
|
|
189
|
+
against a caller-pinned manifest digest. It rejects duplicate tasks/trials, missing
|
|
190
|
+
results or costs, mismatched task checksums or configured model labels, and
|
|
191
|
+
contradictory success records. It never starts a model, picks the latest job, joins
|
|
192
|
+
requests by timestamp, or rewrites evidence. See [TB 2.1 offline audit](tb21-audit.md)
|
|
193
|
+
for the schema, invocation, error codes, and limitations.
|
|
194
|
+
|
|
195
|
+
A complete audit means recorded outcomes passed these checks, not that every
|
|
196
|
+
provider request obeyed a single-model contract. Wire provenance, actual billing,
|
|
197
|
+
repeated-trial analysis, and statistical superiority need separate evidence.
|
|
198
|
+
|
|
199
|
+
### Explicit output-limit validation
|
|
200
|
+
|
|
201
|
+
For callers that supply `AgentLoopConfig.modelContract`, both the contract's
|
|
202
|
+
`maxOutputTokens` and an explicitly supplied request `maxTokens` must be positive
|
|
203
|
+
safe integers. Invalid explicit values are refused before `provider_request` and
|
|
204
|
+
before calling the provider stream function; they are not treated as absent.
|
|
205
|
+
|
|
206
|
+
An omitted request limit still leaves provider defaults unchecked by this
|
|
207
|
+
predicate. This change does not activate a contract in the CLI or impose an
|
|
208
|
+
effective cap on compaction and other provider paths. Full run-wide enforcement
|
|
209
|
+
remains a roadmap item.
|
|
@@ -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).
|