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,195 @@
|
|
|
1
|
+
# 재현 번들 검토 후 적용한 경계 개선
|
|
2
|
+
|
|
3
|
+
후속 상태는 [0.98.4 릴리스 감사](release-audit-0.98.4.md)를 기준으로 본다.
|
|
4
|
+
아래는 준비 단계의 역사적 기록이며, 커밋 ID도 비공개 문서의 이력 정리 전 로컬 ID다.
|
|
5
|
+
현재의 이력 정리·검증 결과와 혼동하지 않는다.
|
|
6
|
+
|
|
7
|
+
대상 자료: `OMK_Review_Reproduction_Bundle_2026-09-09.zip`.
|
|
8
|
+
ZIP SHA-256: `aa90e09d04b5802ca2e8343f2666887822eca7e3ab474309835117e85bcd63d8`.
|
|
9
|
+
14개 member의 경로·크기·링크 여부와 제공된 checksum 13개를 확인했다.
|
|
10
|
+
이 해시는 자료 식별자이며 제삼자 서명이나 안전성 인증은 아니다.
|
|
11
|
+
|
|
12
|
+
번들 기준은 `dc413cd9bc59be0fcb0267a2442b2d5461b14031`(0.98.3), 현재 작업 시작
|
|
13
|
+
HEAD는 `29624c3962d00cc8355191265e7827d9fdf0f3ad`다. 현재 미커밋 변경도 있으므로
|
|
14
|
+
리뷰 문구를 현재 구현의 사실로 그대로 승격하지 않았다. 확인된 결함부터 별도 회귀로
|
|
15
|
+
고정했고, 번들의 계획을 실행 권한으로 취급하지 않았다.
|
|
16
|
+
|
|
17
|
+
## 2026-09-10 재검증·커밋 상태
|
|
18
|
+
|
|
19
|
+
이 절이 아래 9월9일 검사 기록보다 최신이다. 설정·선택 모델·벤치마크는 그대로 두고
|
|
20
|
+
구현을 재검증했다. 공식 문서로 DeepSeek V4.1 Flash의 native DeepSeek,
|
|
21
|
+
OpenCode Go, OpenRouter, Vercel 경로를 확인해 생성기에 반영했다.
|
|
22
|
+
자세한 ID와 가격·wire 한계는 [카탈로그 기록](model-catalog-refresh.md)에 있다.
|
|
23
|
+
|
|
24
|
+
| 단위 | 재검증 | 구현 커밋 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| 기존 모듈 크기6건 해소 | 선언·함수 AST 이동 전후 일치, 직접 회귀195개, LSP16파일 clean | `0ae2b3b29c` |
|
|
27
|
+
| 브라우저 Node 의존성 제거 | 새 bundle 회귀 RED→GREEN, 기존 metadata14개, browser smoke 종료0 | `15059ff28a` |
|
|
28
|
+
| 모델 계약·이미지 투영·종료 | core227개, CLI/SDK43개, Agent/Harness41개 통과 | `e8f27e3d9f` |
|
|
29
|
+
| 모델 목록·thinking | 164개 통과/라이브 등5개 제외, 전체1333모델 중복·상한·가격 불변식 통과 | `267c1f909a` |
|
|
30
|
+
| metrics v2 | 42개 통과 | `bc3b43b5a4` |
|
|
31
|
+
| gate·sandbox 정책 | 56개 통과 | `63fb682fc0` |
|
|
32
|
+
| 공유 DAG·증인 정책 | 24개 통과, 내부 oracle60그래프 | `6e1ccb2e64` |
|
|
33
|
+
| 최신성 상수 명칭 | 정렬 회귀4개 통과, 계산식 불변 | `b9109a91ae` |
|
|
34
|
+
| 기존 서식3건 | 직접 회귀40개 통과 | `bccf660ab0` |
|
|
35
|
+
|
|
36
|
+
위 표는 겹치는 검사들이 있으므로 합산 테스트 수가 아니다. 각 커밋은 명시한 경로/hunk만
|
|
37
|
+
stage했고, pre-commit 검사를 우회하지 않았다. 훅이 파일 전체를 다시 stage하는 경우
|
|
38
|
+
이번 단위 밖 hunk를 일시 격리한 뒤 복원했으며, 커밋 tree가 검토한 index와 같은지 확인했다.
|
|
39
|
+
이전 retry·Codex SSE timeout·TB 선택기/감사 변경은 미커밋 상태로 보존했다.
|
|
40
|
+
|
|
41
|
+
최종 `npm run build`, `npm run check`, `git diff --check`는 종료0이다.
|
|
42
|
+
빌드한 카탈로그에서도 네 Flash 경로와 off/low/high/max를 확인했다.
|
|
43
|
+
`lens_diagnostics(mode=all)`의 error 결과는 0이다. 수동 TUI 재시작·실제 추론·과금과
|
|
44
|
+
전체 라이브 suite는 실행하지 않았다. 검증용 CLI의 버전은 아직 **0.98.1**이다.
|
|
45
|
+
|
|
46
|
+
### 배포 보류: 이력 통합과 범위 확인 필요
|
|
47
|
+
|
|
48
|
+
GitHub 최신 release와 npm 일곱 package의 latest는 모두 **0.98.3**이다.
|
|
49
|
+
하지만 해당 tag는 이 로컬 HEAD의 조상이 아니며, 작업 시작 시 로컬/원격 main이
|
|
50
|
+
26/11커밋으로 갈라져 있었다. 읽기 전용 merge 미리보기에서 문서·changelog·spec
|
|
51
|
+
7개 경로의 충돌도 확인했다. 기존 release를 덮어쓰거나 force-push하지 않는다.
|
|
52
|
+
|
|
53
|
+
따라서 `node scripts/check-release-consistency.mjs --release`는 종료1이다.
|
|
54
|
+
일반 check 통과를 release 승인으로 해석하지 않는다. 기존0.98.3 이력을 통합하고
|
|
55
|
+
배포에 포함할 로컬 커밋 범위를 확인한 뒤 **0.98.4**로 patch bump해야 한다.
|
|
56
|
+
병합·origin/main 및 v0.98.4 push·태그 게시 범위 확인을 요청했으며, 현재는 버전 변경,
|
|
57
|
+
태그 생성, push, GitHub Release, npm publish를 실행하지 않았다.
|
|
58
|
+
|
|
59
|
+
## 1. 적용한 변경
|
|
60
|
+
|
|
61
|
+
| 지적 | 현재 코드에서 확인한 결과 | 적용 |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| F01/F02/F03 | 공유 DAG에서 지역 최소 cut을 합치면 전역 최소도 포함 최소도 아님 | bounded antichain 설명, 명시적 optimality, 복잡도 설명 교정 |
|
|
64
|
+
| 4.7의 추가 위험 | 부모 자체 반례가 있어도 child만 수리 대상으로 반환 | local/children 원인을 구분하고 부모 의무도 설명에 보존 |
|
|
65
|
+
| F07 | `exp(-age/h)`의 h를 half-life라고 명명 | e-folding time constant로만 개명. 수치·점수·선택 정책은 그대로 |
|
|
66
|
+
| F09 | 다른 observation ID만으로 독립 증인 수 증가 | 선택형 `explicit-groups` 정책과 결과의 정책 표시 |
|
|
67
|
+
| F10/F11 | 오류를 200자로 자르고 입력을 spread해 원문·추가 필드·toJSON이 저장될 수 있음 | metrics v2 허용 목록, 오류 분류만 저장, 전체 중첩 값·파생 counter 검증 |
|
|
68
|
+
| F12 | 빈·희소 gate 배열 또는 호출자 배열 변경 뒤 `open` | 생성자 거부·배열 snapshot. 빈 결과 결합도 거부 |
|
|
69
|
+
| F20 | 명시적 허용 없이 enforce→audit/off 또는 filesystem root 확대 | 더 약한 mode·더 넓은 root를 채택하지 않음. 명시적 allowBroaden 경로 유지 |
|
|
70
|
+
|
|
71
|
+
추가로 `TaskContractBuilder.fromJSON()`의 문법 오류가 입력 일부를 메시지에 넣는
|
|
72
|
+
동작을 재현했다. 잘못된 JSON은 계속 `SyntaxError`로 거부하되 원문을 포함하지 않는다.
|
|
73
|
+
오류를 삼키거나 잘못된 계약을 허용하는 수정은 아니다.
|
|
74
|
+
|
|
75
|
+
## 2. Claim Graph: 설명과 진실 판정을 분리
|
|
76
|
+
|
|
77
|
+
현재 `claim-blocking-cut.ts`의 수정 전 Git blob은 번들의 추출본과 같은
|
|
78
|
+
`1d5d1a1f229b7439ff940fc3d1abbe0c988e3fa4`였다. 검토한 Node 재현 스크립트로
|
|
79
|
+
다음을 실제 확인했다.
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
all(any(a,z), any(b,z)): 기존 [a,b], 최소 [z]
|
|
83
|
+
all(any(a,z), z): 기존 [a,z], 최소 [z]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
새 `explainBlockingCut()`은 비지배 수리 집합을 유지해 공유 노드를 고려한다.
|
|
87
|
+
완주하면 `optimality: minimum`, 후보 family 128개 또는 탐색 operation 65,536개
|
|
88
|
+
상한에 걸리면 deterministic greedy와 `optimality: not-proven`, `truncated: true`를
|
|
89
|
+
반환한다. 상한은 탐색 규모 제한이지 절대 wall-clock 제한이 아니다. fallback은
|
|
90
|
+
cardinality minimum이나 inclusion minimum을 보장하지 않는다.
|
|
91
|
+
|
|
92
|
+
이 결과는 현재 평가 snapshot의 **수리 의무 모델**에서의 설명이다. 실제 수정 후의
|
|
93
|
+
정확성, 비용 최적성, 승인·merge 권한이 아니다. `minimalBlockingCut` 배열은 호환용으로
|
|
94
|
+
유지하고, 최소성이 필요한 소비자는 `blockingCut` metadata를 사용한다.
|
|
95
|
+
부모 자체 위반·scope 의무는 `localClaimIds`에 나타난다. unresolved effect와 전체
|
|
96
|
+
workspace completeness는 기존 verdict 경계에 남는다.
|
|
97
|
+
|
|
98
|
+
새 strict witness 정책은 `witnessIndependence: "explicit-groups"`로 선택한다.
|
|
99
|
+
`requiredWitnesses > 1`에서는 nonempty `independenceGroup`만 집계한다. 독립성이
|
|
100
|
+
불명인 관측이 하나의 named group을 보충하거나, ID만 바꿔 quorum을 채우지 못한다.
|
|
101
|
+
기본값은 기존 `legacy-observation-id`이며 결과에 사용한 정책이 기록된다.
|
|
102
|
+
그룹이 정말 독립인지는 실행·영수증 경계에서 인증해야 한다. 이 함수가 임의 문자열을
|
|
103
|
+
실제 독립 실행의 증명으로 만들어 주는 것은 아니다.
|
|
104
|
+
|
|
105
|
+
자세한 공개 계약은 [protocol README](../../protocol/README.md)에 있다.
|
|
106
|
+
|
|
107
|
+
## 3. Metrics v2와 호환성
|
|
108
|
+
|
|
109
|
+
`turn-metrics-record.ts`가 입력/파일 검증과 명시적 projection을 소유한다.
|
|
110
|
+
`turn-metrics.ts`는 sink와 집계만 담당한다. 새 기록은 root/usage/tool/cache의 알려진
|
|
111
|
+
필드만 구성하고 raw error 대신 `timeout/aborted/permission/not_found/invalid_input/unknown`
|
|
112
|
+
분류를 저장한다. 오류 분류는 진단 metadata이지 재시도나 권한 결정 신호가 아니다.
|
|
113
|
+
|
|
114
|
+
기존 v1 기록은 검증해서 집계하며, 원래 파일은 수정하거나 삭제하지 않는다.
|
|
115
|
+
기존 파일에 이미 들어간 민감값은 별도 검토 대상이다. 식별자 자체도 익명화하지 않는다.
|
|
116
|
+
잘못된 수치·중첩 값·파생 counter는 malformed로 집계한다. 새 입력이 잘못됐거나
|
|
117
|
+
한 record가 파일 상한보다 크면 sink는 dropped counter를 올리고 false를 반환한다.
|
|
118
|
+
agent 실행은 metrics 실패 때문에 중단하지 않는다.
|
|
119
|
+
|
|
120
|
+
전체 파일 읽기·동시 writer·rotation 경쟁까지 해결한 것은 아니다. 원장의 세그먼트화나
|
|
121
|
+
비동기 writer는 실제 병목과 crash matrix를 확보한 다음 단위다.
|
|
122
|
+
[metrics 계약](metrics.md)을 함께 참조한다.
|
|
123
|
+
|
|
124
|
+
## 4. 나머지 지적의 현재 처리
|
|
125
|
+
|
|
126
|
+
| 지적 | 상태와 다음 수용 기준 |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| F04/F05, level/chunk barrier | 보류. 최종 인수 재계획·충돌 잠금·취소·결과 순서를 보존하는 replay와 실제 critical-path 측정이 선행 |
|
|
129
|
+
| F06, 표현 비용과 효용 | 보류. F07 이름만 수정했으며 선택 점수는 바꾸지 않음. 표현별 작은 exhaustive oracle과 문맥 손실 평가 필요 |
|
|
130
|
+
| F08, flat 관측의 존재 의미 | 현재 `evaluateCondition`에서 존재 양화를 확인. v1 의미를 조용히 최종 상태 의미로 바꾸지 않음. snapshot-bound adapter를 별도 설계해야 함 |
|
|
131
|
+
| F09의 원천 인증 | 부분 적용. strict grouping은 구현했지만 receipt/run에서 그룹을 인증·파생하는 adapter는 미구현 |
|
|
132
|
+
| F13/F14, 원장 전체 재검사·동기 대기 | 이번 미재현·미변경. append/lock 시간·fsync 비용을 측정한 뒤 보장 유지 여부로 판단 |
|
|
133
|
+
| F15, lane child cancellation | 이번 미재현·미변경. child 시작/종료·abort·permit 반환 통합 검사를 통과하기 전 기본 활성화하지 않음 |
|
|
134
|
+
| F16/F17, WPL timeout·실패 재발 | 이번 미재현·미변경. 상위 deadline과 실제 underlying 취소, 같은 failure signature 이력의 회귀 필요 |
|
|
135
|
+
| F18, 중복 settlement | 이번 미재현·미변경. delta counter를 바로 교체하지 않고 ID 기반 등록/종료와 모든 생산자 연결 검사 필요 |
|
|
136
|
+
| F19, 제공자 오류 의미 | 이전 작업에서 core model-contract 거부를 configuration으로 분리. 전체 제공자 typed-error 전환이나 정책 변경을 완료한 것은 아님 |
|
|
137
|
+
| F20의 전체 권한 집합 | mode/root 반례를 수정. 모든 도메인·프로파일·OS enforcement 조합의 보편적 안전성 증명은 아님 |
|
|
138
|
+
|
|
139
|
+
검토 문서의 18개 PR 제안을 모두 구현했다는 뜻이 아니다. 새 오케스트레이터·학습형
|
|
140
|
+
라우터·기본 다중 agent·새 DB를 추가하지 않았다. 설정·모델·WSL을 바꾸거나 유료 모델,
|
|
141
|
+
벤치마크, 배포를 실행하지도 않았다.
|
|
142
|
+
|
|
143
|
+
## 5. 검증 증거
|
|
144
|
+
|
|
145
|
+
- 번들 원본 재현 스크립트: Node 24에서 종료0, 원본의 잘못된 두 결과 확인.
|
|
146
|
+
번들 Python 참조 알고리즘은 실행하거나 제품 코드로 복사하지 않았다.
|
|
147
|
+
- 기존 범위 baseline 58개 통과 후, gate/sandbox 7개·metrics 17개·claim 4개 요구를
|
|
148
|
+
RED로 재현했다. 독립성 정책 2개, JSON 오류 노출 1개, record 크기 1개도 별도 RED 후 수정했다.
|
|
149
|
+
- claim exhaustive oracle는 독립 Boolean evaluator로 60개 작은 공유 DAG를 비교했다.
|
|
150
|
+
처음 oracle에서 빠졌던 미참조 required root를 바로잡은 뒤 유효한 RED를 다시 확인했다.
|
|
151
|
+
- bounded fallback, graph/child permutation, 부모 자체 반례, strict/legacy witness 정책,
|
|
152
|
+
v1/v2 metrics, 실제 파일 sink, 실제 gate receipt와 sandbox spawn 경로를 표적 검사했다.
|
|
153
|
+
- 성능·해결률 향상, 전체 저장소 무결성, 운영 사고 부재를 이 검사로 주장하지 않는다.
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# packages/protocol
|
|
157
|
+
node ../../node_modules/vitest/dist/cli.js --run test/claim-cut-review.test.ts test/claims.test.ts --maxWorkers=1 --no-file-parallelism
|
|
158
|
+
# packages/coding-agent
|
|
159
|
+
node ../../node_modules/vitest/dist/cli.js --run test/turn-metrics-boundary.test.ts test/turn-metrics.test.ts test/review-policy-boundaries.test.ts test/evidence-system.test.ts test/evidence-gate-binding.test.ts test/sandbox-default-policy.test.ts test/context-budget-v2-knapsack-order.test.ts --maxWorkers=1 --no-file-parallelism
|
|
160
|
+
# root
|
|
161
|
+
node_modules/.bin/tsgo --noEmit --pretty false
|
|
162
|
+
npm run check
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 2026-09-09 검사 상태 (당시 기록)
|
|
166
|
+
|
|
167
|
+
| 검사 | 결과 |
|
|
168
|
+
| --- | --- |
|
|
169
|
+
| Protocol 회귀 | 24개 통과 |
|
|
170
|
+
| Metrics·gate·sandbox·문맥 정렬 회귀 | 102개 통과 |
|
|
171
|
+
| 기존 서식 3건 정리 후 직접 회귀 | 추가 40개 통과. 반복한 11개는 중복 합산하지 않음 |
|
|
172
|
+
| 합계 | 166개, 공급자 없는 표적 검사. 내부 생성 graph 수는 별도 테스트 수로 세지 않음 |
|
|
173
|
+
| 전체 `tsgo --noEmit --pretty false` | 종료0 |
|
|
174
|
+
| 주 LSP | 17파일 요청, 15파일 clean, 2파일 확인 불가, 보고된 오류0. compiler 통과와 구분 |
|
|
175
|
+
| import-cycle·private-home·diff 검사 | 종료0 |
|
|
176
|
+
| `npm run check` | Biome·pinned deps·vendoring·TS imports·dependency tree·import cycles 단계 통과 후 기존 module-size 초과6건에서 종료1 |
|
|
177
|
+
| 문서 링크 검사 | 이전 작업의 미추적 model-contract/model-catalog-refresh 문서 링크5건으로 종료1 |
|
|
178
|
+
|
|
179
|
+
모듈 크기 차단은 기존 `harness/reverse-skill.ts`, AI `types.ts`, coding-agent의
|
|
180
|
+
`compaction.ts`, `model-registry.ts`, `provider-usage.ts`, `interactive-mode.ts`다.
|
|
181
|
+
이번 단위가 추가했던 evidence-system 크기 증가와 sandbox 타입 순환은 책임·타입 분리로
|
|
182
|
+
해소했으며 baseline을 늘리지 않았다. 전체 저장소 gate 통과나 배포 가능 상태를 주장하지 않는다.
|
|
183
|
+
|
|
184
|
+
## 6. 커밋 체크포인트
|
|
185
|
+
|
|
186
|
+
| 단위 | 파일 범위 | 제안 메시지 |
|
|
187
|
+
| --- | --- | --- |
|
|
188
|
+
| Metrics 개인정보·입력 경계 | `core/turn-metrics*.ts`, 직접 metrics 테스트, metrics 문서 | `fix: metrics 원문 누출 차단과 v2 입력 검증` |
|
|
189
|
+
| 검증·sandbox 구성 | `guardrails/evidence-system.ts`, `merge-gate-result.ts`, `core/sandbox/policy*.ts`, 직접 경계 검사 | `fix: 빈 gate와 sandbox 정책 확대를 거부` |
|
|
190
|
+
| Claim 설명·strict witness | protocol claims/index와 직접 회귀, protocol README | `fix: 공유 DAG repair 설명과 증인 독립성 계약 보정` |
|
|
191
|
+
| 명칭 정정 | `context-budget-v2-scoring.ts`의 상수·지역 변수 이름 | `refactor: 최신성 계수의 time-constant 의미 명시` |
|
|
192
|
+
| 기존 서식 정리 | AI `utils/oauth/meta.ts`의 named import 순서, `test/mcp/tools.test.ts`와 `test/session-termination.test.ts`의 줄바꿈 | `style: 통합 검사를 막던 기존 서식 오류 정리` |
|
|
193
|
+
|
|
194
|
+
9월9일에는 구현과 직접 테스트·문서를 위 단위로 제안하고 stage/commit하지 않았다.
|
|
195
|
+
9월10일 승인 후 수행한 실제 커밋·검사와 배포 보류 조건은 이 문서 위쪽 표에 기록한다.
|
|
@@ -128,6 +128,17 @@ Evidence:
|
|
|
128
128
|
- `packages/coding-agent/test/context-budget-selection-policy-version.test.ts`
|
|
129
129
|
- `packages/coding-agent/test/context-budget-cache-disk.test.ts`
|
|
130
130
|
|
|
131
|
+
**Working tree:** non-queued native `xai` requests started through `AgentSession.prompt()` now derive a bounded automatic skill grant from live discovered descriptions after ordinary prompt-template expansion. The selector scores task text separately from camelCase-aware path-to-skill-name signals, excludes explicit-only skills, caps automatic matches at three, and adds `headroom` only under lexical or measured context pressure. `AgentSession.prompt()` merges the result with settings/SDK/bang selections only for that request. Queued steering/follow-up messages reuse the active run's system prompt and do not trigger another selection pass.
|
|
132
|
+
|
|
133
|
+
Evidence:
|
|
134
|
+
|
|
135
|
+
- `packages/coding-agent/src/core/active-skill-state.ts`
|
|
136
|
+
- `packages/coding-agent/src/core/skill-selector.ts`
|
|
137
|
+
- `packages/coding-agent/src/core/grok-harness.ts`
|
|
138
|
+
- `packages/coding-agent/src/core/agent-session.ts`
|
|
139
|
+
- `packages/coding-agent/test/grok-active-skills.test.ts`
|
|
140
|
+
- `packages/coding-agent/test/skill-selector.property.test.ts`
|
|
141
|
+
|
|
131
142
|
**Working tree:** context files now treat their global/local relevance baseline
|
|
132
143
|
as a floor. Lexical overlap can raise that score but cannot demote standing
|
|
133
144
|
instructions below the no-query baseline. Skills remain topic-scored because
|
|
@@ -272,6 +283,14 @@ Evidence:
|
|
|
272
283
|
- `packages/coding-agent/src/core/advisory-judge.ts`
|
|
273
284
|
- `packages/coding-agent/test/advisory-judge.test.ts`
|
|
274
285
|
|
|
286
|
+
**Working tree (2026-09-05):** the first-party `createModelAdvisoryJudge()` adapter rejects non-normal
|
|
287
|
+
or missing completion metadata. Custom judges still supply raw score JSON and own that metadata
|
|
288
|
+
boundary. The chooser checks cancellation around asynchronous work, reports top-score ties as
|
|
289
|
+
caller-rank decisions, and retains submitted/eligible/excluded counts with comparison availability.
|
|
290
|
+
This adds no completion calls or retries, automatic AgentSession/TUI call, or semantic-verdict authority.
|
|
291
|
+
Details: [Advisory selection integrity](advisory-selection.md); governing spec:
|
|
292
|
+
`specs/021-advisory-selection-integrity/spec.md`.
|
|
293
|
+
|
|
275
294
|
See [Run Protocol and Durable Goals](run-protocol.md),
|
|
276
295
|
[Sessions](sessions.md), [Provider Resilience](provider-resilience.md), and
|
|
277
296
|
[Turn Metrics](metrics.md).
|
package/docs/sdk.md
CHANGED
|
@@ -147,6 +147,15 @@ interface AgentSession {
|
|
|
147
147
|
|
|
148
148
|
Session replacement APIs such as new-session, resume, fork, and import live on `AgentSessionRuntime`, not on `AgentSession`.
|
|
149
149
|
|
|
150
|
+
### Model dispatch policy
|
|
151
|
+
|
|
152
|
+
Pass `modelContract` to `createAgentSession()` or `createAgentSessionFromServices()`
|
|
153
|
+
to restrict logical model/provider, reasoning, and output-limit choices. The SDK
|
|
154
|
+
stream also checks first-party summaries using `session.agent.streamFn`.
|
|
155
|
+
The CLI equivalent is `--model-contract <file>`. This is opt-in dispatch control,
|
|
156
|
+
not final-wire or billing attestation. See [Model dispatch contracts](model-contract.md)
|
|
157
|
+
for the JSON shape, events, hook restrictions, and uncovered paths.
|
|
158
|
+
|
|
150
159
|
### AgentSession policy seams
|
|
151
160
|
|
|
152
161
|
The package root exports focused policy helpers for custom runtimes and tests:
|
|
@@ -261,7 +270,7 @@ interface PromptOptions {
|
|
|
261
270
|
}
|
|
262
271
|
```
|
|
263
272
|
|
|
264
|
-
`activeSkillNames` marks additional discovered skills active for this turn; `activeSkillSource` labels their provenance. They merge with global `defaultActiveSkills`, prioritize matching inventory entries, and do not expand authorization or inline full skill instructions.
|
|
273
|
+
`activeSkillNames` marks additional discovered skills active for this turn; `activeSkillSource` labels their provenance. They merge with global `defaultActiveSkills`, prioritize matching inventory entries, and do not expand authorization or inline full skill instructions. When the active provider is native `xai` and `OMK_GROK_HARNESS` is enabled, each non-queued `AgentSession.prompt()` request also derives up to three request-scoped matches from the live skill inventory after ordinary prompt-template expansion. Explicit-only skills are excluded from automatic selection, while explicit SDK/settings/bang selections remain authoritative additions. Queued steering and follow-up messages reuse the active run's system prompt and therefore do not perform another automatic skill-selection pass.
|
|
265
274
|
|
|
266
275
|
`preflightResult` is called once per `prompt()` invocation:
|
|
267
276
|
|
|
@@ -1307,7 +1316,7 @@ const decision = await chooseWithAdvisoryJudge({
|
|
|
1307
1316
|
});
|
|
1308
1317
|
```
|
|
1309
1318
|
|
|
1310
|
-
The sidecar makes no call when zero or one candidate passes. For multiple passing candidates it sends only bounded, forced-redacted material through a tool-free request and requires a complete 0–4 score matrix. Invalid output or provider failure returns `status: "fallback"` with the deterministic first candidate and a sanitized reason. It never persists model prose. Re-run fresh deterministic gates after applying the selected result.
|
|
1319
|
+
The sidecar makes no call when zero or one candidate passes. For multiple passing candidates it sends only bounded, forced-redacted material through a tool-free request and requires a complete 0–4 score matrix. Invalid output or provider failure returns `status: "fallback"` with the deterministic first eligible candidate and a sanitized reason. It never persists model prose. Re-run fresh deterministic gates after applying the selected result.
|
|
1311
1320
|
|
|
1312
1321
|
**Since v0.98.3:** the first-party `createModelAdvisoryJudge()` adapter requires an explicit normal `stop`; valid JSON from truncated, aborted or missing completion metadata cannot supply scores. The chooser checks cancellation before and after judge work. Top-score ties retain the caller's deterministic rank but report `judge-tied` / `deterministic`. Additive `diagnostics` preserve submitted/eligible/excluded counts and distinguish unmeasured comparisons from scored ties. See [Advisory selection integrity](advisory-selection.md).
|
|
1313
1322
|
|
package/docs/sessions.md
CHANGED
|
@@ -34,7 +34,7 @@ For the JSONL file format and SessionManager API, see [Session Format](session-f
|
|
|
34
34
|
|
|
35
35
|
Each provider attempt writes its own `run_started`/`run_finished` journal pair and emits `session_termination`. A retryable termination is attempt-level when `auto_retry_start` follows it; consumers should not treat that event alone as the end of the outer `prompt()` call.
|
|
36
36
|
|
|
37
|
-
If a retry or failover succeeds, the later attempt emits `completed` and becomes `session.lastTermination`. If retry budget is exhausted, the last provider failure remains final. Quota
|
|
37
|
+
If a retry or failover succeeds, the later attempt emits `completed` and becomes `session.lastTermination`. If retry budget is exhausted, the last provider failure remains final. Quota, billing-cycle exhaustion, and provider-capacity waits (`at capacity`, Anthropic `overloaded_error`) are classified as `provider.rate_limit` and can switch through the configured provider-resilience chain before retrying. A Codex ChatGPT-account unsupported-model 400 or Anthropic `claude_code_version_too_old` is `configuration.invalid`: `/new session` will not grant access; switch with `/model`. See [Provider Resilience](provider-resilience.md).
|
|
38
38
|
|
|
39
39
|
## Session Commands
|
|
40
40
|
|
package/docs/settings.md
CHANGED
|
@@ -139,15 +139,31 @@ All numeric token reserves must be non-negative safe integers. Ratios must be fi
|
|
|
139
139
|
| Setting | Type | Default | Description |
|
|
140
140
|
|---------|------|---------|-------------|
|
|
141
141
|
| `contextBudget.enabled` | boolean | `false` | Globally enable prompt resource budgeting; representation entries persist per workspace by default while plan entries stay in session memory |
|
|
142
|
+
| `contextBudget.openwiki` | boolean | `false` | Offer the workspace's `openwiki/` pages as budget candidates, ranked against each turn's query. Requires `contextBudget.enabled` |
|
|
142
143
|
|
|
143
144
|
```json
|
|
144
145
|
{
|
|
145
|
-
"contextBudget": { "enabled": true }
|
|
146
|
+
"contextBudget": { "enabled": true, "openwiki": true }
|
|
146
147
|
}
|
|
147
148
|
```
|
|
148
149
|
|
|
149
150
|
This setting is global-only: `.omk/settings.json` cannot enable or disable it. Use `OMK_CONTEXT_GOVERNOR=1` to force it on for one process or `OMK_CONTEXT_GOVERNOR=0` to force it off for a baseline run. When enabled, content-addressed representation and negative-result entries persist under `.omk/cache/context-budget-v2`; plan entries stay in session memory. Set `OMK_CONTEXT_GOVERNOR_CACHE=memory` to keep every entry in session memory or `OMK_CONTEXT_GOVERNOR_CACHE_DIR` to relocate the representation snapshot.
|
|
150
151
|
|
|
152
|
+
#### Repository wiki retrieval
|
|
153
|
+
|
|
154
|
+
`contextBudget.openwiki` lets a generated [`openwiki/`](https://github.com/dmae97/omk/blob/main/README.md#repository-understanding) corpus take part in prompt budgeting. The corpus is loaded once per session and never enters the prompt directly: each page becomes a low-priority `evidence` candidate that the governor ranks against the turn's query, so pages compete for leftover budget and can never displace instructions or skills.
|
|
155
|
+
|
|
156
|
+
A corpus is admitted only on the same terms `scripts/check-openwiki.mjs` applies, because generated prose about a repository is exactly the kind of content that is expensive to be wrong about:
|
|
157
|
+
|
|
158
|
+
| Generator state | Result |
|
|
159
|
+
|---|---|
|
|
160
|
+
| `complete`, generated at the current `HEAD` | Page titles, declared symbols, and bounded page text are all offered |
|
|
161
|
+
| `complete`, but `HEAD` has moved | Titles and symbols only. Page text is withheld, and entries are marked stale |
|
|
162
|
+
| `interrupted`, with `openwiki/.manual-review.json` bound to the exact corpus digest | Treated as complete |
|
|
163
|
+
| `interrupted` without that review, unknown status, missing `gitHead`, or unreadable state | Refused; no page reaches the prompt |
|
|
164
|
+
|
|
165
|
+
A corpus over 200 pages or 4 MiB is refused rather than truncated, so the runtime and the gate always agree on the digest of the same directory. Symlinked pages are skipped. Source code and tests stay authoritative over every page; the pages are leads to verify, not claims to repeat.
|
|
166
|
+
|
|
151
167
|
### Agent Tool Execution
|
|
152
168
|
|
|
153
169
|
| Setting | Type | Default | Description |
|
package/docs/skills.md
CHANGED
|
@@ -93,6 +93,8 @@ OMK adds a compact active-skills marker containing names and, for explicit-only
|
|
|
93
93
|
|
|
94
94
|
This file is an explicit operator choice, so it may activate a skill whose frontmatter otherwise requires direct invocation. Active skills do not expand authorization and apply only when relevant. Keep the list focused because overlapping language or workflow instructions can conflict.
|
|
95
95
|
|
|
96
|
+
When the native `xai` Grok harness is enabled, OMK may additionally mark up to three matching, non-explicit-only skills active for a non-queued top-level `prompt()` request. It scores the live discovered descriptions and does not persist those automatic selections into the next turn; operator and bang selections still merge normally.
|
|
97
|
+
|
|
96
98
|
## Skill Commands
|
|
97
99
|
|
|
98
100
|
Skills register as `/skill:name` commands and interactive `!` launcher entries:
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# TB 2.1 오프라인 결과 감사
|
|
2
|
+
|
|
3
|
+
`scripts/tb21-audit.mjs`는 명시한 두 Harbor job의 **기록된 결과**를 검증한다.
|
|
4
|
+
모델·Harbor를 실행하지 않으며 입력 파일이나 기존 요약을 수정하지 않는다.
|
|
5
|
+
저장소 checkout과 Node.js 22.19 이상이 필요하다. 공개 npm CLI의 하위 명령은 아니다.
|
|
6
|
+
|
|
7
|
+
## 사용
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node scripts/tb21-audit.mjs \
|
|
11
|
+
--manifest /path/to/evidence/manifest.json \
|
|
12
|
+
--expect-manifest-sha256 <사전에-고정한-64자리-SHA256>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
두 옵션 모두 필수다. 알 수 없는 옵션·중복 옵션·위치 인수는 거부한다.
|
|
16
|
+
manifest의 **원본 바이트**를 해싱하므로 줄바꿈이나 공백 변경도 digest를 바꾼다.
|
|
17
|
+
불일치를 없애려고 변경된 manifest의 해시를 자동으로 다시 승인하지 않는다.
|
|
18
|
+
해시 고정은 내용 식별 수단이지 서명, 실행 승인, 사전 등록의 증명이 아니다.
|
|
19
|
+
|
|
20
|
+
성공하면 JSON을 stdout에 출력한다. 실패하면 stdout은 비우고 stderr에
|
|
21
|
+
`{"status":"incomplete","code":"missing_cost"}` 같은 진단만 출력한다.
|
|
22
|
+
경로·JSON 파서의 원문·provider 오류 메시지는 진단에 복사하지 않는다.
|
|
23
|
+
|
|
24
|
+
| 종료 코드 | 의미 |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| 0 | 모든 입력 결과가 아래 계약을 충족함. 실제 전송·비교 조건 검증은 아님 |
|
|
27
|
+
| 1 | 파일·digest·결과 무결성 오류 또는 예기치 않은 내부 오류 |
|
|
28
|
+
| 2 | 옵션 오류 또는 manifest 스키마 오류 |
|
|
29
|
+
|
|
30
|
+
## Manifest v1
|
|
31
|
+
|
|
32
|
+
다음은 **합성 예시**다. 반복 문자 해시를 실제 평가의 provenance로 쓰지 않는다.
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"schemaVersion": "omk-tb21-manifest-1",
|
|
37
|
+
"runId": "example-run",
|
|
38
|
+
"datasetRevision": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
39
|
+
"conditionsSha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
40
|
+
"tasks": [
|
|
41
|
+
{
|
|
42
|
+
"id": "example-task",
|
|
43
|
+
"checksum": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"arms": {
|
|
47
|
+
"A": {
|
|
48
|
+
"job": "arm-a",
|
|
49
|
+
"modelName": "gateway/model-one",
|
|
50
|
+
"harnessSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
51
|
+
"adapterSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
52
|
+
},
|
|
53
|
+
"B": {
|
|
54
|
+
"job": "arm-b",
|
|
55
|
+
"modelName": "compatible/model-one",
|
|
56
|
+
"harnessSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
57
|
+
"adapterSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- `tasks`는 1~1000개이며 중복 ID를 허용하지 않는다. ID는 영문·숫자로 시작하는
|
|
64
|
+
128자 이하의 영문·숫자·`.`·`_`·`-` 문자열이다.
|
|
65
|
+
- `datasetRevision`은 전체 40자리 소문자 Git SHA, 나머지 해시는 64자리 소문자 SHA-256이다.
|
|
66
|
+
- `job`은 manifest 디렉터리 아래의 상대 경로다. 절대 경로, `..`, 역슬래시,
|
|
67
|
+
빈 경로 조각, 동일한 두 job 경로와 심볼릭 링크를 거부한다.
|
|
68
|
+
- `modelName`은 각 arm의 Harbor `config.agent.model_name`과 정확히 비교한다.
|
|
69
|
+
호환 공급자 이름이 다를 수 있으므로 두 라벨의 동일성이 실제 모델 동일성을 뜻하지 않는다.
|
|
70
|
+
- manifest의 모든 객체는 지정된 필드만 허용한다. 자격증명·환경 값·프롬프트를 넣지 않는다.
|
|
71
|
+
- `conditionsSha256`, `harnessSha256`, `adapterSha256`, `datasetRevision`은 **선언값**이다.
|
|
72
|
+
이 도구가 조건 파일·실행 바이너리·컨테이너·데이터셋 저장소를 열어 대조하는 것은 아니다.
|
|
73
|
+
|
|
74
|
+
## 읽는 파일과 검증 규칙
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
manifest.json
|
|
78
|
+
arm-a/
|
|
79
|
+
trial-a/result.json
|
|
80
|
+
arm-b/
|
|
81
|
+
trial-b/result.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
각 job의 바로 아래 디렉터리는 모두 trial로 간주한다. 별도 산출물 디렉터리는
|
|
85
|
+
job 바깥에 둔다. job 루트의 일반 파일(예: `config.json`, 전체 `result.json`)은
|
|
86
|
+
개별 trial 집계에 사용하지 않는다. 최신 job 검색이나 시간창 기반 원장 귀속은 없다.
|
|
87
|
+
|
|
88
|
+
각 task는 각 arm에 정확히 한 번 있어야 한다. v1은 재시도·다회 반복 집계를 지원하지
|
|
89
|
+
않으므로 추가 attempt를 거부한다. 마지막 결과로 덮어쓰거나 가장 좋은 시행을 고르지 않는다.
|
|
90
|
+
`trial_name`은 디렉터리 이름과 일치해야 하며 `id`는 두 arm 전체에서 유일해야 한다.
|
|
91
|
+
Harbor가 절대 task 경로를 기록한 경우 마지막 경로 조각을 manifest ID와 비교하고,
|
|
92
|
+
`task_checksum`도 고정된 task checksum과 대조한다.
|
|
93
|
+
|
|
94
|
+
`verifier_result.rewards.reward`는 숫자 0 또는 1이어야 한다. 값이 없거나 null이면
|
|
95
|
+
명시적인 `exception_info.exception_type`이 있을 때만 미해결로 집계한다.
|
|
96
|
+
성공 보상 1과 예외가 함께 있으면 모순으로 거부한다. `exception_info` 필드 자체가
|
|
97
|
+
없으면 예외 여부를 추측하지 않는다. timeout도 분모에 남는다.
|
|
98
|
+
|
|
99
|
+
`agent_result.cost_usd`는 0 이상의 유한한 숫자여야 한다. 누락·null은 **0이 아니라
|
|
100
|
+
미확인**이며 요약을 거부한다. 합산 overflow도 거부한다. 해결 task가 0개이면
|
|
101
|
+
`costPerSolved`는 null이다. 비용 단가·캐시 할인·실제 청구서 정합성은 별도 확인 대상이다.
|
|
102
|
+
|
|
103
|
+
manifest는 최대 256 KiB, 개별 결과는 최대 8 MiB까지 읽는다. 파일 읽기는 크기를
|
|
104
|
+
제한하고 일반 파일만 허용한다. 실행이 끝나고 쓰기가 멈춘 자료를 입력해야 한다.
|
|
105
|
+
이 검사는 같은 호스트의 동시 경로 교체를 격리하는 OS sandbox가 아니다.
|
|
106
|
+
|
|
107
|
+
## 보고서의 주장 범위
|
|
108
|
+
|
|
109
|
+
출력에는 arm별 task·해결·예외 수, 비용 합계·해결당 비용, 쌍대 성공표와 차이(pp),
|
|
110
|
+
manifest와 결과 파일의 해시가 포함된다. 원본 trial ID·task 절대 경로·kwargs·예외
|
|
111
|
+
메시지는 내보내지 않는다. 출력의 run/task ID는 manifest에서 승인한 식별자를 사용한다.
|
|
112
|
+
|
|
113
|
+
항상 `modelVerification: "configuration-only"`, `costSource: "harbor-agent-result"`를
|
|
114
|
+
표시한다. 설정이 같다는 사실로 실제 모든 provider 전송이 같았다고 추론하지 않는다.
|
|
115
|
+
Gateway 원장으로만 비용을 알 수 있는 과거 trial은 비용을 지어내지 않고 `missing_cost`로
|
|
116
|
+
거부한다. 신뢰할 수 있는 request ID별 원장 결합은 로드맵 R3의 후속 작업이다.
|
|
117
|
+
|
|
118
|
+
이 도구는 실제 실행을 증명하는 attestator나 통계적 우열 검정기가 아니다. 공개하기 전
|
|
119
|
+
식별자·가격·자료 보유 권한을 검토하고 [비교 계약](metrics.md)을 적용한다.
|
|
120
|
+
|
|
121
|
+
## 검사
|
|
122
|
+
|
|
123
|
+
저장소 루트에서 공급자·다운로드 없이 실행한다.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
node --test --test-concurrency=1 scripts/test/tb21-audit.test.mjs scripts/test/tb21-audit-inputs.test.mjs
|
|
127
|
+
node node_modules/typescript/bin/tsc --noEmit --allowJs --checkJs --strict --target ES2022 --module NodeNext --skipLibCheck --types node scripts/tb21-audit.mjs scripts/lib/tb21-input.mjs scripts/lib/tb21-audit.mjs
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
프로젝트 Biome 설정은 기본적으로 `.mjs`를 포함하지 않는다. 실제 파일이 검사됐는지
|
|
131
|
+
확인하며, 빈 검사 결과를 통과 증거로 쓰지 않는다.
|
package/docs/terminal-setup.md
CHANGED
|
@@ -94,6 +94,26 @@ Add to `settings.json` (Ctrl+Shift+, or Settings → Open JSON file) to forward
|
|
|
94
94
|
|
|
95
95
|
If you already have an `actions` array, add the objects to it. If the old fullscreen behavior persists, fully close and reopen Windows Terminal.
|
|
96
96
|
|
|
97
|
+
### Windows screenshots into a WSL prompt
|
|
98
|
+
|
|
99
|
+
Capture with **Win+Shift+S**, return to OMK, and press **Alt+V**. The image is added
|
|
100
|
+
to the prompt attachment strip; submit the prompt when ready. **Ctrl+V** also works
|
|
101
|
+
when the terminal forwards that key to OMK. Windows Terminal normally handles Ctrl+V
|
|
102
|
+
itself and pastes text, so an image-only clipboard may appear to do nothing.
|
|
103
|
+
|
|
104
|
+
To deliberately forward Ctrl+V instead, add this action to Windows Terminal's
|
|
105
|
+
existing settings (this changes Ctrl+V behavior for that terminal):
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{ "command": { "action": "sendInput", "input": "\u0016" }, "keys": "ctrl+v" }
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Use the terminal's normal text-paste shortcut, commonly Ctrl+Shift+V, for clipboard
|
|
112
|
+
text after this opt-in. OMK does not change terminal settings automatically.
|
|
113
|
+
See [Windows setup](windows.md#windows-screenshot-paste) for clipboard prerequisites
|
|
114
|
+
and error behavior. Inline image rendering is terminal-dependent; an attachment
|
|
115
|
+
chip does not require the terminal to display image pixels.
|
|
116
|
+
|
|
97
117
|
## xfce4-terminal, terminator
|
|
98
118
|
|
|
99
119
|
These terminals have limited escape sequence support. Modified Enter keys like `Ctrl+Enter` and `Shift+Enter` cannot be distinguished from plain `Enter`, preventing custom keybindings such as `submit: ["ctrl+enter"]` from working.
|
package/docs/usage.md
CHANGED
|
@@ -73,13 +73,35 @@ Use `/goal <objective>` to create or update the durable goal for the current wor
|
|
|
73
73
|
| --- | --- | --- |
|
|
74
74
|
| Identical-loop guard | Warns from the third consecutive identical tool call and blocks the sixth | `OMK_IDENTICAL_LOOP=0` |
|
|
75
75
|
| Tool-pair repair | Removes unmatched tool-use and tool-result blocks from outbound context | `OMK_TOOL_PAIR_REPAIR=0` |
|
|
76
|
-
| Model prompt presets | Adds model-specific execution guidance for supported Claude, Kimi, GLM, and Grok models | `OMK_PROMPT_PRESET=0` |
|
|
76
|
+
| Model prompt presets | Adds model-specific execution guidance for GPT-6 Astra and supported Claude, Kimi, GLM, and Grok models | `OMK_PROMPT_PRESET=0` |
|
|
77
77
|
| Goal controller | Registers `/goal` and continues active goals within their round limit | `OMK_GOAL_CONTROLLER=0` |
|
|
78
78
|
|
|
79
79
|
These built-ins remain active with `--no-extensions`. A custom `ResourceLoader` owns its own extension set and does not receive them automatically.
|
|
80
80
|
|
|
81
81
|
Claude models use a clean prompt context by default: OMK keeps tools, skills, and the Claude preset but omits discovered `AGENTS.md` and `CLAUDE.md` files. This avoids provider false positives caused by unrelated instruction text. Set `OMK_CLAUDE_CONTEXT_FILES=1` to restore those files for Claude.
|
|
82
82
|
|
|
83
|
+
### GPT-6 Astra
|
|
84
|
+
|
|
85
|
+
When the resolved model ID is exactly `gpt-6-astra`, the built-in preset appends
|
|
86
|
+
`<model_preset id="gpt-6-astra">` at `before_agent_start`. Provider-qualified IDs
|
|
87
|
+
such as `openai/gpt-6-astra` and `openrouter/openai/gpt-6-astra` match the same
|
|
88
|
+
model. Similar names, dated variants, and other GPT models do not select this
|
|
89
|
+
preset. Select the configured model through `/model`; the preset does not add
|
|
90
|
+
model availability to an account.
|
|
91
|
+
|
|
92
|
+
The Astra guidance encourages completing authorized work, asking only material
|
|
93
|
+
clarifying questions, explaining any skill instruction that blocks progress,
|
|
94
|
+
writing concise prose, delegating independent work when permitted, and using
|
|
95
|
+
focused verification without unnecessary repeat runs. Explicit user requests
|
|
96
|
+
outrank advisory skill guidance within higher-priority instructions and runtime
|
|
97
|
+
permissions. Pending tool results must be accounted for before claiming completion.
|
|
98
|
+
|
|
99
|
+
Each new request selects guidance from its current model and fresh base prompt;
|
|
100
|
+
switching models does not carry the Astra preset into the next request.
|
|
101
|
+
`OMK_PROMPT_PRESET=0` disables the existing model-preset built-in, including Astra.
|
|
102
|
+
API parameters and transport capabilities remain controlled by the provider/runtime
|
|
103
|
+
configuration.
|
|
104
|
+
|
|
83
105
|
## Automatic Thinking Level Routing
|
|
84
106
|
|
|
85
107
|
`/think <level>` sets the thinking level manually. Manual levels always win: choosing a concrete level leaves auto routing, so no auto router runs.
|
package/docs/windows.md
CHANGED
|
@@ -15,3 +15,51 @@ For most users, [Git for Windows](https://git-scm.com/download/win) is sufficien
|
|
|
15
15
|
"shellPath": "C:\\cygwin64\\bin\\bash.exe"
|
|
16
16
|
}
|
|
17
17
|
```
|
|
18
|
+
|
|
19
|
+
## Open reports and screenshots from WSL
|
|
20
|
+
|
|
21
|
+
In Windows Terminal, hold **Ctrl** and left-click a rendered file link. OMK resolves
|
|
22
|
+
relative report/image links against the active session's project directory, not the
|
|
23
|
+
OMK installation directory. For example, `docs/reviews/mobile-after.png` points into
|
|
24
|
+
that project even when the session was resumed from another checkout.
|
|
25
|
+
|
|
26
|
+
On WSL with `WSL_DISTRO_NAME`, Linux files use Windows-openable
|
|
27
|
+
`file://wsl.localhost/<distribution>/...` URLs. Files under the default `/mnt/c/`
|
|
28
|
+
style Windows drive mounts use `file:///C:/...`. Native Linux/macOS file links keep
|
|
29
|
+
their native paths; SSH sessions do not rewrite paths into the local WSL namespace.
|
|
30
|
+
Custom drive mount locations remain accessible through the WSL UNC URL.
|
|
31
|
+
|
|
32
|
+
Markdown links, image references, existing inline-code file paths, and built-in tool
|
|
33
|
+
path headers support this behavior. Ordinary code is not treated as a file. Terminals
|
|
34
|
+
without OSC 8 support show the resolved URL in Markdown instead of a hidden target.
|
|
35
|
+
The terminal and Windows file associations decide which application opens the file.
|
|
36
|
+
A missing artifact must still be created or its path corrected; URL conversion does
|
|
37
|
+
not copy files or start a web server.
|
|
38
|
+
|
|
39
|
+
## Windows screenshot paste
|
|
40
|
+
|
|
41
|
+
Image paste is already part of the Pi/OMK interactive editor; no separate Pi install
|
|
42
|
+
or extra extension is required. In WSL, use **Win+Shift+S → Alt+V** in the OMK prompt.
|
|
43
|
+
A validated image appears in the attachment strip and is sent only when you submit.
|
|
44
|
+
Ctrl+V is an alternative when forwarded by your terminal; see
|
|
45
|
+
[Terminal setup](terminal-setup.md#windows-screenshots-into-a-wsl-prompt).
|
|
46
|
+
|
|
47
|
+
OMK reads the Windows clipboard first on WSL using an asynchronous, five-second
|
|
48
|
+
PowerShell request (`-NoProfile -NonInteractive -STA`). It tries the normal Windows
|
|
49
|
+
PowerShell location under `/mnt/c/Windows/` and falls back to `powershell.exe` on PATH
|
|
50
|
+
only if that executable location is missing. Windows interop must be enabled.
|
|
51
|
+
|
|
52
|
+
PNG bytes travel through a bounded in-memory stream: no screenshot temp file, WSL
|
|
53
|
+
UNC write, execution-policy override, or Photon BMP conversion is needed. The reader
|
|
54
|
+
limits images to the existing prompt size/pixel limits. It never changes clipboard
|
|
55
|
+
contents or forwards provider-key environment variables to its child process.
|
|
56
|
+
|
|
57
|
+
An empty Windows clipboard does not fall through to a stale Linux image. If Windows
|
|
58
|
+
interop fails, Linux readers remain fallback sources; if none works, the editor
|
|
59
|
+
reports a clipboard failure. Empty-image and successful-attachment states also have
|
|
60
|
+
visible messages instead of silent no-ops. Native Linux/macOS/Windows readers remain
|
|
61
|
+
unchanged. External/custom editors must forward the configured image-paste action.
|
|
62
|
+
|
|
63
|
+
If a screenshot still does not attach, first confirm that an image is on the Windows
|
|
64
|
+
clipboard and try Alt+V. Check WSL interop/PowerShell if OMK reports acquisition failure,
|
|
65
|
+
or save the screenshot and drag its file into the prompt as an alternative.
|
package/examples/README.md
CHANGED
|
@@ -4,6 +4,10 @@ Example code for open-multi-agent-kit SDK and extensions.
|
|
|
4
4
|
|
|
5
5
|
## Directories
|
|
6
6
|
|
|
7
|
+
### [context/](context/)
|
|
8
|
+
Portable `AGENTS.md`, `INTERNET.md`, and `CLAUDE.md` templates used by
|
|
9
|
+
`omk init --global`. See [User context setup](../docs/context-files.md).
|
|
10
|
+
|
|
7
11
|
### [sdk/](sdk/)
|
|
8
12
|
Programmatic usage via `createAgentSession()`. Shows how to customize models, prompts, tools, extensions, and session management.
|
|
9
13
|
|