open-multi-agent-kit 0.98.4 → 0.98.5

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.
Files changed (252) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -2
  3. package/dist/commands/run-command.d.ts +2 -1
  4. package/dist/commands/run-command.d.ts.map +1 -1
  5. package/dist/commands/run-command.js +9 -1
  6. package/dist/commands/run-command.js.map +1 -1
  7. package/dist/commands/verified-run-cli.d.ts +6 -0
  8. package/dist/commands/verified-run-cli.d.ts.map +1 -0
  9. package/dist/commands/verified-run-cli.js +190 -0
  10. package/dist/commands/verified-run-cli.js.map +1 -0
  11. package/dist/core/agent-session-services.d.ts +8 -1
  12. package/dist/core/agent-session-services.d.ts.map +1 -1
  13. package/dist/core/agent-session-services.js +41 -0
  14. package/dist/core/agent-session-services.js.map +1 -1
  15. package/dist/core/agent-session.d.ts +7 -8
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +61 -41
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/prompt-settlement.d.ts +4 -3
  20. package/dist/core/prompt-settlement.d.ts.map +1 -1
  21. package/dist/core/prompt-settlement.js.map +1 -1
  22. package/dist/core/run-budget-policy.d.ts +18 -0
  23. package/dist/core/run-budget-policy.d.ts.map +1 -0
  24. package/dist/core/run-budget-policy.js +52 -0
  25. package/dist/core/run-budget-policy.js.map +1 -0
  26. package/dist/core/run-budget.d.ts +33 -0
  27. package/dist/core/run-budget.d.ts.map +1 -0
  28. package/dist/core/run-budget.js +89 -0
  29. package/dist/core/run-budget.js.map +1 -0
  30. package/dist/core/run-execution-api.d.ts +15 -0
  31. package/dist/core/run-execution-api.d.ts.map +1 -0
  32. package/dist/core/run-execution-api.js +7 -0
  33. package/dist/core/run-execution-api.js.map +1 -0
  34. package/dist/core/run-journal.d.ts.map +1 -1
  35. package/dist/core/run-journal.js +30 -208
  36. package/dist/core/run-journal.js.map +1 -1
  37. package/dist/core/session-bash-service.d.ts +2 -2
  38. package/dist/core/session-bash-service.d.ts.map +1 -1
  39. package/dist/core/session-bash-service.js +21 -9
  40. package/dist/core/session-bash-service.js.map +1 -1
  41. package/dist/core/session-failure-cause.d.ts.map +1 -1
  42. package/dist/core/session-failure-cause.js +5 -0
  43. package/dist/core/session-failure-cause.js.map +1 -1
  44. package/dist/core/session-prompt-lifecycle.d.ts +25 -0
  45. package/dist/core/session-prompt-lifecycle.d.ts.map +1 -0
  46. package/dist/core/session-prompt-lifecycle.js +87 -0
  47. package/dist/core/session-prompt-lifecycle.js.map +1 -0
  48. package/dist/core/session-run-budget.d.ts +28 -0
  49. package/dist/core/session-run-budget.d.ts.map +1 -0
  50. package/dist/core/session-run-budget.js +127 -0
  51. package/dist/core/session-run-budget.js.map +1 -0
  52. package/dist/core/session-run-termination.d.ts.map +1 -1
  53. package/dist/core/session-run-termination.js +14 -3
  54. package/dist/core/session-run-termination.js.map +1 -1
  55. package/dist/core/session-termination-types.d.ts +97 -0
  56. package/dist/core/session-termination-types.d.ts.map +1 -0
  57. package/dist/core/session-termination-types.js +26 -0
  58. package/dist/core/session-termination-types.js.map +1 -0
  59. package/dist/core/session-termination.d.ts +3 -97
  60. package/dist/core/session-termination.d.ts.map +1 -1
  61. package/dist/core/session-termination.js +24 -28
  62. package/dist/core/session-termination.js.map +1 -1
  63. package/dist/core/slash-commands.d.ts.map +1 -1
  64. package/dist/core/slash-commands.js +1 -0
  65. package/dist/core/slash-commands.js.map +1 -1
  66. package/dist/core/subagent-lane-launcher.d.ts +3 -2
  67. package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
  68. package/dist/core/subagent-lane-launcher.js +24 -13
  69. package/dist/core/subagent-lane-launcher.js.map +1 -1
  70. package/dist/core/verified-run/broker.d.ts +26 -0
  71. package/dist/core/verified-run/broker.d.ts.map +1 -0
  72. package/dist/core/verified-run/broker.js +210 -0
  73. package/dist/core/verified-run/broker.js.map +1 -0
  74. package/dist/core/verified-run/candidate.d.ts +24 -0
  75. package/dist/core/verified-run/candidate.d.ts.map +1 -0
  76. package/dist/core/verified-run/candidate.js +167 -0
  77. package/dist/core/verified-run/candidate.js.map +1 -0
  78. package/dist/core/verified-run/check-receipt.d.ts +18 -0
  79. package/dist/core/verified-run/check-receipt.d.ts.map +1 -0
  80. package/dist/core/verified-run/check-receipt.js +92 -0
  81. package/dist/core/verified-run/check-receipt.js.map +1 -0
  82. package/dist/core/verified-run/coordinator.d.ts +39 -0
  83. package/dist/core/verified-run/coordinator.d.ts.map +1 -0
  84. package/dist/core/verified-run/coordinator.js +190 -0
  85. package/dist/core/verified-run/coordinator.js.map +1 -0
  86. package/dist/core/verified-run/dag-candidates.d.ts +8 -0
  87. package/dist/core/verified-run/dag-candidates.d.ts.map +1 -0
  88. package/dist/core/verified-run/dag-candidates.js +65 -0
  89. package/dist/core/verified-run/dag-candidates.js.map +1 -0
  90. package/dist/core/verified-run/dag-phase.d.ts +7 -0
  91. package/dist/core/verified-run/dag-phase.d.ts.map +1 -0
  92. package/dist/core/verified-run/dag-phase.js +92 -0
  93. package/dist/core/verified-run/dag-phase.js.map +1 -0
  94. package/dist/core/verified-run/dag-projection.d.ts +7 -0
  95. package/dist/core/verified-run/dag-projection.d.ts.map +1 -0
  96. package/dist/core/verified-run/dag-projection.js +90 -0
  97. package/dist/core/verified-run/dag-projection.js.map +1 -0
  98. package/dist/core/verified-run/dag-recovery.d.ts +13 -0
  99. package/dist/core/verified-run/dag-recovery.d.ts.map +1 -0
  100. package/dist/core/verified-run/dag-recovery.js +98 -0
  101. package/dist/core/verified-run/dag-recovery.js.map +1 -0
  102. package/dist/core/verified-run/dag-retry-projection.d.ts +9 -0
  103. package/dist/core/verified-run/dag-retry-projection.d.ts.map +1 -0
  104. package/dist/core/verified-run/dag-retry-projection.js +43 -0
  105. package/dist/core/verified-run/dag-retry-projection.js.map +1 -0
  106. package/dist/core/verified-run/dag-types.d.ts +47 -0
  107. package/dist/core/verified-run/dag-types.d.ts.map +1 -0
  108. package/dist/core/verified-run/dag-types.js +2 -0
  109. package/dist/core/verified-run/dag-types.js.map +1 -0
  110. package/dist/core/verified-run/event-parser.d.ts +3 -0
  111. package/dist/core/verified-run/event-parser.d.ts.map +1 -0
  112. package/dist/core/verified-run/event-parser.js +153 -0
  113. package/dist/core/verified-run/event-parser.js.map +1 -0
  114. package/dist/core/verified-run/events.d.ts +4 -0
  115. package/dist/core/verified-run/events.d.ts.map +1 -0
  116. package/dist/core/verified-run/events.js +3 -0
  117. package/dist/core/verified-run/events.js.map +1 -0
  118. package/dist/core/verified-run/evidence-binding.d.ts +18 -0
  119. package/dist/core/verified-run/evidence-binding.d.ts.map +1 -0
  120. package/dist/core/verified-run/evidence-binding.js +81 -0
  121. package/dist/core/verified-run/evidence-binding.js.map +1 -0
  122. package/dist/core/verified-run/evidence.d.ts +27 -0
  123. package/dist/core/verified-run/evidence.d.ts.map +1 -0
  124. package/dist/core/verified-run/evidence.js +100 -0
  125. package/dist/core/verified-run/evidence.js.map +1 -0
  126. package/dist/core/verified-run/journal.d.ts +32 -0
  127. package/dist/core/verified-run/journal.d.ts.map +1 -0
  128. package/dist/core/verified-run/journal.js +103 -0
  129. package/dist/core/verified-run/journal.js.map +1 -0
  130. package/dist/core/verified-run/namespace-identity.d.ts +11 -0
  131. package/dist/core/verified-run/namespace-identity.d.ts.map +1 -0
  132. package/dist/core/verified-run/namespace-identity.js +77 -0
  133. package/dist/core/verified-run/namespace-identity.js.map +1 -0
  134. package/dist/core/verified-run/owned-execution.d.ts +21 -0
  135. package/dist/core/verified-run/owned-execution.d.ts.map +1 -0
  136. package/dist/core/verified-run/owned-execution.js +43 -0
  137. package/dist/core/verified-run/owned-execution.js.map +1 -0
  138. package/dist/core/verified-run/phase-context.d.ts +9 -0
  139. package/dist/core/verified-run/phase-context.d.ts.map +1 -0
  140. package/dist/core/verified-run/phase-context.js +2 -0
  141. package/dist/core/verified-run/phase-context.js.map +1 -0
  142. package/dist/core/verified-run/process-gate.d.ts +5 -0
  143. package/dist/core/verified-run/process-gate.d.ts.map +1 -0
  144. package/dist/core/verified-run/process-gate.js +31 -0
  145. package/dist/core/verified-run/process-gate.js.map +1 -0
  146. package/dist/core/verified-run/projection.d.ts +4 -0
  147. package/dist/core/verified-run/projection.d.ts.map +1 -0
  148. package/dist/core/verified-run/projection.js +219 -0
  149. package/dist/core/verified-run/projection.js.map +1 -0
  150. package/dist/core/verified-run/recovery-clock.d.ts +19 -0
  151. package/dist/core/verified-run/recovery-clock.d.ts.map +1 -0
  152. package/dist/core/verified-run/recovery-clock.js +69 -0
  153. package/dist/core/verified-run/recovery-clock.js.map +1 -0
  154. package/dist/core/verified-run/recovery-command.d.ts +11 -0
  155. package/dist/core/verified-run/recovery-command.d.ts.map +1 -0
  156. package/dist/core/verified-run/recovery-command.js +73 -0
  157. package/dist/core/verified-run/recovery-command.js.map +1 -0
  158. package/dist/core/verified-run/recovery-projection.d.ts +12 -0
  159. package/dist/core/verified-run/recovery-projection.d.ts.map +1 -0
  160. package/dist/core/verified-run/recovery-projection.js +88 -0
  161. package/dist/core/verified-run/recovery-projection.js.map +1 -0
  162. package/dist/core/verified-run/recovery.d.ts +12 -0
  163. package/dist/core/verified-run/recovery.d.ts.map +1 -0
  164. package/dist/core/verified-run/recovery.js +115 -0
  165. package/dist/core/verified-run/recovery.js.map +1 -0
  166. package/dist/core/verified-run/run-types.d.ts +103 -0
  167. package/dist/core/verified-run/run-types.d.ts.map +1 -0
  168. package/dist/core/verified-run/run-types.js +2 -0
  169. package/dist/core/verified-run/run-types.js.map +1 -0
  170. package/dist/core/verified-run/scripted-writer.d.ts +15 -0
  171. package/dist/core/verified-run/scripted-writer.d.ts.map +1 -0
  172. package/dist/core/verified-run/scripted-writer.js +94 -0
  173. package/dist/core/verified-run/scripted-writer.js.map +1 -0
  174. package/dist/core/verified-run/session-port.d.ts +27 -0
  175. package/dist/core/verified-run/session-port.d.ts.map +1 -0
  176. package/dist/core/verified-run/session-port.js +2 -0
  177. package/dist/core/verified-run/session-port.js.map +1 -0
  178. package/dist/core/verified-run/storage.d.ts +15 -0
  179. package/dist/core/verified-run/storage.d.ts.map +1 -0
  180. package/dist/core/verified-run/storage.js +96 -0
  181. package/dist/core/verified-run/storage.js.map +1 -0
  182. package/dist/core/verified-run/verification-phase.d.ts +5 -0
  183. package/dist/core/verified-run/verification-phase.d.ts.map +1 -0
  184. package/dist/core/verified-run/verification-phase.js +56 -0
  185. package/dist/core/verified-run/verification-phase.js.map +1 -0
  186. package/dist/core/verified-run/work-recovery.d.ts +8 -0
  187. package/dist/core/verified-run/work-recovery.d.ts.map +1 -0
  188. package/dist/core/verified-run/work-recovery.js +44 -0
  189. package/dist/core/verified-run/work-recovery.js.map +1 -0
  190. package/dist/core/verified-run/writer-completion.d.ts +4 -0
  191. package/dist/core/verified-run/writer-completion.d.ts.map +1 -0
  192. package/dist/core/verified-run/writer-completion.js +27 -0
  193. package/dist/core/verified-run/writer-completion.js.map +1 -0
  194. package/dist/core/verified-run/writer-phase.d.ts +8 -0
  195. package/dist/core/verified-run/writer-phase.d.ts.map +1 -0
  196. package/dist/core/verified-run/writer-phase.js +76 -0
  197. package/dist/core/verified-run/writer-phase.js.map +1 -0
  198. package/dist/core/verified-run/writer-projection.d.ts +11 -0
  199. package/dist/core/verified-run/writer-projection.d.ts.map +1 -0
  200. package/dist/core/verified-run/writer-projection.js +70 -0
  201. package/dist/core/verified-run/writer-projection.js.map +1 -0
  202. package/dist/core/verified-run/writer-recovery.d.ts +16 -0
  203. package/dist/core/verified-run/writer-recovery.d.ts.map +1 -0
  204. package/dist/core/verified-run/writer-recovery.js +107 -0
  205. package/dist/core/verified-run/writer-recovery.js.map +1 -0
  206. package/dist/core/workload-permit-pool.d.ts +1 -3
  207. package/dist/core/workload-permit-pool.d.ts.map +1 -1
  208. package/dist/core/workload-permit-pool.js +11 -11
  209. package/dist/core/workload-permit-pool.js.map +1 -1
  210. package/dist/index.d.ts +3 -2
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +2 -2
  213. package/dist/index.js.map +1 -1
  214. package/dist/main.d.ts.map +1 -1
  215. package/dist/main.js +2 -8
  216. package/dist/main.js.map +1 -1
  217. package/dist/modes/interactive/components/session-failure.d.ts +13 -0
  218. package/dist/modes/interactive/components/session-failure.d.ts.map +1 -0
  219. package/dist/modes/interactive/components/session-failure.js +81 -0
  220. package/dist/modes/interactive/components/session-failure.js.map +1 -0
  221. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  222. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  223. package/dist/modes/interactive/interactive-mode.js +45 -31
  224. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  225. package/dist/modes/interactive/tui-diagnostics.d.ts +36 -0
  226. package/dist/modes/interactive/tui-diagnostics.d.ts.map +1 -0
  227. package/dist/modes/interactive/tui-diagnostics.js +105 -0
  228. package/dist/modes/interactive/tui-diagnostics.js.map +1 -0
  229. package/dist/modes/interactive/tui-runtime-info.d.ts +20 -0
  230. package/dist/modes/interactive/tui-runtime-info.d.ts.map +1 -0
  231. package/dist/modes/interactive/tui-runtime-info.js +76 -0
  232. package/dist/modes/interactive/tui-runtime-info.js.map +1 -0
  233. package/docs/development.md +10 -0
  234. package/docs/keybindings.md +1 -1
  235. package/docs/release-audit-0.98.5.md +84 -0
  236. package/docs/run-protocol.md +33 -1
  237. package/docs/runtime-algorithms.md +26 -0
  238. package/docs/sdk.md +193 -0
  239. package/docs/usage.md +54 -0
  240. package/docs/verified-run-testing.md +417 -0
  241. package/docs/verified-run.md +388 -0
  242. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  243. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  244. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  245. package/examples/extensions/gondolin/package-lock.json +2 -2
  246. package/examples/extensions/gondolin/package.json +1 -1
  247. package/examples/extensions/sandbox/package-lock.json +2 -2
  248. package/examples/extensions/sandbox/package.json +1 -1
  249. package/examples/extensions/with-deps/package-lock.json +2 -2
  250. package/examples/extensions/with-deps/package.json +1 -1
  251. package/npm-shrinkwrap.json +18 -18
  252. package/package.json +6 -6
@@ -0,0 +1,388 @@
1
+ # Verified Run: 명령형·오프라인 AgentSession·정적 DAG
2
+
3
+ 세 opt-in profile을 제공합니다. `linux-command-v1`은 승인된 명령 하나를,
4
+ `linux-scripted-agent-v1`은 실제 `AgentSession`과 내장 Faux adapter로 승인된 단계를,
5
+ `linux-command-dag-v1`은 입력 의존성이 있는 명령 작업들을 직렬로 실행합니다. 명령은 격리된 복사본에서 실행하고, 고정한 산출물을 외부 검사로 확인한
6
+ 뒤 회수합니다. 일반 세션과 기존 bash receipt의 동작은 바꾸지 않습니다.
7
+
8
+ **S90 전체 구현이나 M1–M4 완료를 의미하지 않습니다.** M1의 무과금 reference
9
+ 경로와 native EvidenceReceipt v3 연결에 이어, M2의 **고정 candidate 이후 복구**를
10
+ 지원합니다. 불변 입력이 저장된 새 run은 중단된 writer도 명시적으로 재시작할 수 있습니다.
11
+ M3의 정적 DAG·부분 재시도 경로도 제공합니다. 병렬 frontier·계획 변경,
12
+ 실서비스 모델 adapter, TUI/RPC, 적용 승인은 아직 없습니다.
13
+
14
+ ## 실행 경로
15
+
16
+ ```text
17
+ 계약 parser → 명시적 host 승인 → 단일 owner + v2 원장
18
+ → 격리 writer → 실제 process close → candidate manifest + blobs
19
+ → 읽기 전용 candidate에서 검사 → supervisor의 stdout 비교
20
+ → native v3 receipt → Claim Closure → HMAC attestation → durable 수락 → 산출물 회수
21
+ ```
22
+
23
+ Coordinator는 기존 durable file I/O·mutation lock·session owner lease를 재사용합니다.
24
+ 판정에는 `omk-protocol`의 `evaluateProofClosure()`를 사용합니다. 새 모델 엔진,
25
+ 외부 서비스, 의존 패키지는 추가하지 않습니다.
26
+
27
+ ## 지원 범위
28
+
29
+ - Linux, `/usr/bin/bwrap`, 사용 가능한 user/PID/network namespace가 필요합니다.
30
+ `start`는 실제 sandbox probe에 실패하면 실행을 거부합니다. 자동 fallback은 없습니다.
31
+ - 실행 파일은 `/bin/` 또는 `/usr/bin/` 아래에서 `/usr/`로 해석되는 파일입니다.
32
+ `/usr`는 신뢰하는 host toolchain이며 읽기 전용으로 마운트합니다. 다른 runtime
33
+ 경로와 외부 dependency mount는 지원하지 않습니다.
34
+ - writer는 입력 복사본 전체를 수정할 수 있습니다. `writablePaths`는 **수락할 변경
35
+ 범위**입니다. 범위 밖 변경이 있으면 candidate를 수락하지 않습니다. 원본 프로젝트는
36
+ 마운트하지 않으며 수정하지 않습니다.
37
+ - verifier command도 불신 프로세스입니다. 별도 namespace에서 candidate를 읽기 전용으로
38
+ 받아 실행합니다. 승인된 각 검사의 exit code가 0이고 stdout 바이트가 계약과 같아야 합니다.
39
+ 비교 코드·기대값·원장·issuer key는 supervisor에만 있습니다.
40
+ - regular file의 바이트·경로·mode, 빈 디렉터리·삭제를 binding합니다. 디렉터리는 mode
41
+ `0755`만 지원합니다. root 디렉터리 mode는 실행 기반 시설로 취급합니다.
42
+ symlink, hardlink, 특수 파일, set-ID mode, 잘못된 UTF-8 이름은 거부합니다.
43
+ - root `.git`과 `.omk`는 이 profile의 입력에서 명시적으로 제외합니다. 그 밖의
44
+ dotfile·untracked file은 포함합니다. Git submodule과 mutable dependency cache는
45
+ 지원하지 않습니다. 작은 입력 디렉터리부터 사용하십시오.
46
+ - network, host home, 상속 환경 변수, provider credential을 worker에게 주지 않습니다.
47
+ 신뢰 가정은 operator·host/kernel·supervisor 설치물입니다. 같은 UID의 악성 host
48
+ 프로세스나 악성 kernel을 방어하는 경계는 아닙니다.
49
+
50
+ `verified`는 **이 profile의 명시한 stdout 검사들에 대해 이 candidate가 통과했다**는
51
+ 뜻입니다. 검사 품질·일반적인 의미적 정확성·S90 점수·배포 승인을 증명하지 않습니다.
52
+
53
+ ## 계약
54
+
55
+ `contract.json` 예시입니다. `root`를 실제 절대 경로로 바꾸십시오.
56
+ `baseDigest`에는 먼저 64개의 `0`을 넣고 `plan` 결과의 실제 값을 채울 수 있습니다.
57
+
58
+ ```json
59
+ {
60
+ "schemaVersion": "omk.verified-run.v1",
61
+ "profile": "linux-command-v1",
62
+ "runId": "greeting-1",
63
+ "goal": "greeting.txt에 hello 생성",
64
+ "workspace": {
65
+ "root": "/absolute/path/to/input",
66
+ "baseDigest": "0000000000000000000000000000000000000000000000000000000000000000"
67
+ },
68
+ "writablePaths": ["greeting.txt"],
69
+ "writer": ["/bin/sh", "-c", "printf hello > greeting.txt"],
70
+ "checks": [
71
+ {"claimId": "greeting", "argv": ["/bin/cat", "greeting.txt"], "stdout": "hello"}
72
+ ],
73
+ "budget": {
74
+ "workMs": 5000, "verifyMs": 5000, "cleanupMs": 1000,
75
+ "maxOutputBytes": 4096, "maxFiles": 100, "maxBytes": 65536
76
+ },
77
+ "apply": "artifact-only"
78
+ }
79
+ ```
80
+
81
+ 검사는 1–32개, 수정 경로는 1–128개이며 ID는 중복될 수 없습니다. 0·음수·무한
82
+ budget, 상대 executable, 경로 traversal, 알 수 없는 필드는 거부합니다.
83
+ `approved`, `trusted`, `actorRole`, `verified` 같은 JSON 필드는 승인이 아닙니다.
84
+ parser는 입력을 복사하고 중첩 배열·객체를 고정합니다.
85
+
86
+ 계약·명령 인수·입력 파일에 credential을 넣지 마십시오. 계약 원문은 private 원장에
87
+ 보존됩니다. 이 profile은 일반적인 secret scanner나 DLP를 제공하지 않습니다.
88
+
89
+ ## 오프라인 AgentSession profile
90
+
91
+ 위 계약의 `profile`과 `writer`만 다음으로 바꿀 수 있습니다. 다른 필드는 그대로
92
+ 필요하며, 바뀐 계약 digest에 새 승인을 받아야 합니다.
93
+
94
+ ```json
95
+ {
96
+ "profile": "linux-scripted-agent-v1",
97
+ "writer": {
98
+ "kind": "scripted-agent",
99
+ "steps": [
100
+ ["/bin/sh", "-c", "printf hello > greeting.txt"],
101
+ ["/bin/cat", "greeting.txt"]
102
+ ],
103
+ "maxRequests": 3
104
+ }
105
+ }
106
+ ```
107
+
108
+ 이 모델 응답은 이미 승인된 step index를 순서대로 선택하는 합성 응답입니다.
109
+ 실제 코딩 능력·일반적인 자연어 작업 생성을 평가하는 모델이 아닙니다. 원격 provider,
110
+ OAuth, API key, 과금은 사용하지 않습니다. step은 1–16개, 전체 논리 요청은 1–32개로
111
+ 제한합니다. 위 예시는 두 tool turn과 마지막 종료 응답에 3개 요청을 씁니다.
112
+
113
+ 신뢰하는 host에서 기존 `AgentSession`을 메모리 세션으로 조립합니다. 프로젝트·사용자
114
+ 리소스를 reload/discover하지 않고, 허용 tool은 `verified_step` 하나뿐입니다. 이 tool은
115
+ 계약의 정확한 다음 명령만 broker에 요청할 수 있습니다. **AgentSession 프로세스 자체를
116
+ OS sandbox에 넣은 것은 아니며, 불신 명령의 process가 각각 격리됩니다.** custom runtime
117
+ port를 주입하는 SDK host는 같은 신뢰 경계를 책임집니다.
118
+
119
+ 원장의 `writer_opened → model_request / dispatch / exited → writer_closed`가 producer와
120
+ 자식 실행을 구분합니다. 자식이 끝나도 producer가 열려 있으면 settled가 아니며 candidate를
121
+ 고정할 수 없습니다. 중복 요청·cap 초과·닫힌 producer 재개를 거부합니다. 명령 실패는
122
+ 마지막 모델 문구로 덮을 수 없습니다. `modelRequests`는 논리 요청 수이지 HTTP/과금 수가 아닙니다.
123
+
124
+ ## 정적 명령 DAG와 선택적 재시도
125
+
126
+ `linux-command-dag-v1`은 1–16개 작업을 **한 번에 하나씩** 실행합니다. 계약의 `writer`는
127
+ `kind: "command-dag"`와 `tasks`를 가집니다. 각 작업은 `id`, `dependsOn`, `writablePaths`,
128
+ `attempts`를 명시합니다. `attempts`는 미리 승인한 명령 1–2개이며 자동 생성되는 수리 명령이
129
+ 아닙니다. 알려진 실패 후의 다음 시도는 명시적 `retry-tasks` 승인으로만 실행합니다.
130
+
131
+ 위 계약의 아래 필드를 교체하는 예시입니다. workspace·budget·apply 필드는 그대로 필요합니다.
132
+
133
+ ```json
134
+ {
135
+ "runId": "dag-1",
136
+ "goal": "두 작업의 출력을 합치기",
137
+ "profile": "linux-command-dag-v1",
138
+ "writablePaths": ["left.txt", "right.txt", "joined.txt"],
139
+ "writer": {
140
+ "kind": "command-dag",
141
+ "tasks": [
142
+ {"id": "left", "dependsOn": [], "writablePaths": ["left.txt"],
143
+ "attempts": [["/bin/sh", "-c", "printf left > left.txt"]]},
144
+ {"id": "right", "dependsOn": [], "writablePaths": ["right.txt"],
145
+ "attempts": [["/bin/false"], ["/bin/sh", "-c", "printf right > right.txt"]]},
146
+ {"id": "join", "dependsOn": ["left", "right"], "writablePaths": ["joined.txt"],
147
+ "attempts": [["/bin/sh", "-c", "cat left.txt right.txt > joined.txt"]]}
148
+ ]
149
+ },
150
+ "checks": [{"claimId": "joined", "argv": ["/bin/cat", "joined.txt"], "stdout": "leftright"}]
151
+ }
152
+ ```
153
+
154
+ 다시 `plan`하고 변경된 계약 digest를 승인한 후 `start`합니다. 이 예시의 첫 실행은
155
+ `right`가 실패하므로 `execution: "paused"`, `candidateDigest: null`로 반환합니다.
156
+ 성공한 `left`는 보존하고 `join`은 실행하지 않습니다. 실패와 무관한 ready 작업은 진행합니다.
157
+
158
+ ```bash
159
+ omk run inspect dag-1 --task-recovery --state-dir /private/operator-state/verified-runs
160
+ omk run retry-tasks dag-1 --execute --tasks right --approve CONTRACT_DIGEST \
161
+ --base INPUT_DIGEST --revision REVISION --generation GENERATION --command-id retry-1 \
162
+ --state-dir /private/operator-state/verified-runs
163
+ ```
164
+
165
+ - 그래프는 승인 후 불변입니다. 순환·미등록/중복 의존성·ID, 전역 허용 범위 밖의 쓰기 범위,
166
+ 작업 간 겹치는 쓰기 범위는 parser가 거부합니다. 상위/하위 작업 사이의 겹침도 지원하지 않습니다.
167
+ - 작업 입력은 최초 input checkpoint와 **모든 조상 작업의 승인 범위 내 출력**으로 합성합니다.
168
+ 다른 형제의 새 출력이나 변경된 원본·이전 작업 디렉터리를 읽지 않습니다. 최초 입력 전체는
169
+ 여전히 보이므로 이것이 원본 파일별 read allowlist라는 뜻은 아닙니다.
170
+ - 각 작업의 실제 process close 후 입력·출력 digest를 기록합니다. 삭제·빈 디렉터리·file mode도
171
+ 병합하며, 전역 쓰기 허용만으로 형제 작업의 범위를 수정할 수는 없습니다.
172
+ - SDK의 `retryTasks(command, approval)`는 `kind: "retry_tasks"`, `baseDigest`, `taskIds`와
173
+ 기존 contract/revision/generation/command ID 필드를 받습니다. 실패·중단 작업만 선택할 수 있고,
174
+ 살아 있거나 identity가 없는 namespace는 재실행하지 않습니다. 성공 작업의 재실행 요청은 거부합니다.
175
+ - `tasks_retried.adopted`는 보존하는 성공 checkpoint의 task/attempt/이전 generation/input/output을
176
+ 명시합니다. 실제 입력·출력 blob, 전체 ancestor 입력, 계약·환경을 다시 확인한 뒤 새 세대로
177
+ 수락합니다. checkpoint는 검증 receipt가 아니며, 최종 통합 candidate의 모든 검사는 새로 실행합니다.
178
+ - 작업별 시도 수, run의 총 generation 상한 3, 최초 work/verify/cleanup 기한은 유지됩니다.
179
+ DAG 명령형 profile의 `modelRequests`는 0입니다. 실패·중단한 시도도 환급하지 않습니다.
180
+ - `taskIds: []` 또는 CLI `--tasks -`는 중단 뒤 아직 pending인 작업만 계속하거나, 모든 작업이
181
+ 고정된 뒤 통합 candidate를 만드는 경계에서 사용합니다. 실패한 작업을 생략해 완료시키는 명령이 아닙니다.
182
+ - `inspectTaskRecovery()`는 읽기 전용으로 `readiness`, `reason`, `retryableTaskIds`, 잔여 시간을
183
+ 보여줍니다. `ready`도 실행 승인이나 lease 획득이 아닙니다. 세 recovery 조회 flag는 동시에 쓸 수 없습니다.
184
+
185
+ candidate가 이미 고정됐다면 `retry-tasks`가 아니라 기존 `resume`으로 동일 candidate만
186
+ 재검증합니다. 새 DAG를 `restart-writer`로 통째로 초기화하지 않습니다. terminal 취소·실패,
187
+ 깨진 checkpoint·원장·key, 예산 만료·reboot는 기존 fail-closed 경계를 유지합니다.
188
+ 일부 작업 명령의 실패(`paused`)와 run의 terminal 실패(`failed`)는 서로 다릅니다.
189
+
190
+ 이 단계는 command-only·직렬·artifact 의존성 경로입니다. eager 병렬 frontier,
191
+ `after_verification` edge, 실서비스 모델, arbitrary repair, 계획 amendment/adoption은 지원하지 않습니다.
192
+ 동일한 계약의 성공 출력 재사용을 일반적인 계획 변경 후 재사용으로 해석하지 마십시오.
193
+
194
+ ## CLI
195
+
196
+ ```bash
197
+ omk run plan --contract contract.json --json
198
+ # baseDigest를 계약에 반영한 뒤 다시 plan하고 계약·검사·변경 범위를 검토합니다.
199
+ omk run start --contract contract.json --approve CONTRACT_DIGEST \
200
+ --command-id start-1 --state-dir /private/operator-state/verified-runs
201
+ omk run inspect greeting-1 --state-dir /private/operator-state/verified-runs --json
202
+ omk run evidence greeting-1 --state-dir /private/operator-state/verified-runs
203
+ omk run artifact greeting-1 --candidate CANDIDATE_DIGEST --path greeting.txt \
204
+ --state-dir /private/operator-state/verified-runs
205
+ ```
206
+
207
+ 기본 state 경로는 agent directory 아래 `verified-runs/`입니다. state와 workspace가
208
+ 포함 관계이면 거부합니다. 계약 파일도 입력 디렉터리 밖에 두어 base digest의
209
+ 자기참조를 피하십시오. `plan`은 파일을 읽고 hash만 계산하며 process를 시작하거나
210
+ state를 작성하지 않습니다.
211
+
212
+ 출력은 JSON입니다. `artifact`는 manifest에 있는 정확한 상대 경로만 받아 base64로
213
+ 반환합니다. 다른 candidate·절대 경로·traversal을 허용하지 않습니다. 기존 파일에
214
+ 적용하거나 Git ref를 갱신하는 명령은 없습니다.
215
+
216
+ 종료 코드: 정상 조회·candidate_ready는 `0`, 실패·미수락·무결성 오류는 `1`, 잘못된
217
+ 명령·계약은 `2`입니다. 실행 중 SIGINT/SIGTERM은 해당 자식에 취소를 전달합니다.
218
+ `run resume`는 아래의 제한된 복구만 지원합니다. `run cancel` 원격 제어와 `run apply`는
219
+ 아직 지원하지 않습니다.
220
+ 소스 체크아웃에서는 root에서 `node --import tsx packages/coding-agent/src/cli.ts run ...`로
221
+ 동일 경로를 사용할 수 있습니다. 이 변경만으로 설치된 TUI가 갱신되지는 않습니다.
222
+
223
+ ## SDK
224
+
225
+ ```typescript
226
+ import { createRunCoordinator, planVerifiedRun } from "open-multi-agent-kit";
227
+ import { parseRunContract, VERIFIED_COMMAND_VERSION } from "omk-protocol";
228
+
229
+ const contract = parseRunContract(decodedJson);
230
+ const plan = planVerifiedRun(contract);
231
+ const coordinator = createRunCoordinator(operatorStateRoot);
232
+ // host가 사용자 승인을 확보한 후에만 호출합니다. plan 결과 자체는 승인이 아닙니다.
233
+ const state = await coordinator.start(contract, {
234
+ schemaVersion: VERIFIED_COMMAND_VERSION,
235
+ kind: "start", runId: contract.runId, commandId: "start-1",
236
+ expectedRevision: 0, expectedGeneration: 0,
237
+ contractDigest: approvedDigest
238
+ }, { approvedContractDigest: approvedDigest, signal });
239
+ ```
240
+
241
+ `inspect(runId)`, `evidence(runId)`, `artifact(runId, candidateDigest, path)`는 실행을
242
+ 재시작하지 않습니다. SDK 호출자는 신뢰하는 host이고 승인 채널 인증을 책임집니다.
243
+ 이 API를 worker나 불신 plugin에 직접 노출하지 마십시오. `createRunCoordinator()`는
244
+ 표준 session adapter를 주입합니다. 저수준 `new RunCoordinator(root)`는 단일 명령·명령 DAG를 실행할 수 있으며,
245
+ adapter 없이 scripted profile을 실행하면 `writer_backend_missing`으로 실패합니다.
246
+
247
+ ## 고정 candidate 이후 복구
248
+
249
+ 새 실행은 `budget_anchored`에 Linux boot ID와 boot-relative 시작·work/verify/cleanup
250
+ 기한을 기록합니다. `candidate` 사건은 실제 검증 기한도 고정합니다. 프로세스가 끝나도
251
+ 기한을 새로 주지 않으며, 중단·재시작에 걸린 시간도 소비됩니다.
252
+
253
+ ```bash
254
+ omk run inspect greeting-1 --recovery --state-dir /private/operator-state/verified-runs
255
+ omk run resume greeting-1 --execute --approve CONTRACT_DIGEST \
256
+ --candidate CANDIDATE_DIGEST --revision REVISION --generation GENERATION \
257
+ --command-id resume-1 --state-dir /private/operator-state/verified-runs
258
+ ```
259
+
260
+ `inspect --recovery`는 읽기 전용입니다. `readiness: "ready"`도 실행 권한이나 lease
261
+ 획득을 뜻하지 않으며 `ownership: "lease_required"`로 표시합니다. `resume`은 `--execute`와
262
+ 정확한 contract/candidate/revision/generation을 요구합니다. 오래된 참조, 다른 candidate,
263
+ 명령 ID 충돌, 살아 있는 owner의 lease는 거부합니다.
264
+
265
+ SDK도 같은 경계를 사용합니다.
266
+
267
+ ```typescript
268
+ const recovery = coordinator.inspectRecovery(runId);
269
+ const state = recovery.state;
270
+ const resumed = await coordinator.resume({
271
+ schemaVersion: VERIFIED_COMMAND_VERSION, kind: "resume",
272
+ runId, commandId: "resume-1",
273
+ expectedRevision: state.revision, expectedGeneration: state.generation,
274
+ contractDigest: approvedDigest, candidateDigest: selectedCandidateDigest
275
+ }, { approvedContractDigest: approvedDigest, signal });
276
+ ```
277
+
278
+ 실제 재개는 다음 순서입니다.
279
+
280
+ 1. 원장 무결성과 명령 binding을 검사하고 단일 owner lease를 획득합니다.
281
+ 2. 같은 boot·줄어들지 않은 단조 clock·기존 검증 기한을 확인합니다.
282
+ 3. 이전 verifier가 남아 있으면 기록된 namespace init의 종료를 확인합니다.
283
+ 4. key·candidate blobs·검사 환경이 그대로인지 확인합니다.
284
+ 5. `resumed`를 append/fsync하여 generation을 올린 뒤 새 복사본에서 모든 검사를 실행합니다.
285
+ 6. 같은 candidate와 새 generation의 실행·v3 receipt로 새 attestation을 수락합니다.
286
+
287
+ writer·AgentSession은 재실행하지 않습니다. 이전 model 요청 수, candidate digest, key,
288
+ 검증 기한을 보존합니다. 이전 부분 receipt는 파일로 남지만 새 generation의 성공 증거로
289
+ 자동 재사용하거나 다시 서명하지 않습니다. 총 generation은 3까지, 즉 재개는 최대 두 번입니다.
290
+ 동일 resume 명령은 저장된 진행 상태를 조회할 뿐 다시 실행하지 않습니다. append 결과가
291
+ 불확실한 경우에도 같은 ID로 맹목 재실행하지 않습니다.
292
+
293
+ 새 broker는 명령 실행 전에 bwrap의 private `--info-fd`에서 PID namespace init을 확인하고
294
+ `process_ready`를 내구성 있게 기록한 다음 stdin gate를 엽니다. boot ID·PID·시작 tick·namespace
295
+ identity를 함께 사용합니다. PID만 보고 다른 프로세스를 종료하지 않습니다. gate 대기 중
296
+ 취소되거나 기록에 실패하면 늦은 callback이 명령을 실행할 수 없습니다.
297
+
298
+ **`resume`으로 복구하지 않는 경우:** candidate 고정 전 중단, 열린 writer, 알려진 terminal 실패,
299
+ namespace가 살아 있거나 상태를 알 수 없는 경우, `process_ready`가 없는 dispatch, 원장 손상,
300
+ key/blob/환경 변경, budget 만료, reboot/clock 불명, 예전 clock 정보 없는 원장입니다.
301
+ 이때 기록과 미정산 ID를 보존합니다. 재개 가능성을 추측해 원장을 수리하거나 예산을 늘리지
302
+ 않습니다. writer는 아래 별도 명령의 조건을 충족해야 하며, 그 외에는 reconciliation 또는
303
+ 새로 승인한 run이 필요합니다. 모든 crash window를 처리하는 M2 전체 구현은 아닙니다.
304
+
305
+ ## 불변 입력에서 writer 재시작
306
+
307
+ 새 `start`는 원본 입력의 blob·manifest를 저장하고 `input_checkpoint`를 append/fsync한
308
+ 뒤에만 writer나 모델 요청을 시작합니다. `inputDigest`는 승인한 `workspace.baseDigest`와
309
+ 같아야 합니다. 이미 진행 중인 예전 run에는 이 정보를 추측해서 덧붙이지 않습니다.
310
+
311
+ ```bash
312
+ omk run inspect greeting-1 --writer-recovery --state-dir /private/operator-state/verified-runs
313
+ omk run restart-writer greeting-1 --execute --approve CONTRACT_DIGEST \
314
+ --base INPUT_DIGEST --revision REVISION --generation GENERATION \
315
+ --command-id restart-1 --state-dir /private/operator-state/verified-runs
316
+ ```
317
+
318
+ SDK는 `inspectWriterRecovery(runId)`와 `restartWriter(command, approval)`를 제공합니다.
319
+ command는 `kind: "restart_writer"`, `baseDigest`, 기존 contract/ref/command ID 필드를
320
+ 사용합니다. `--recovery`와 `--writer-recovery`는 서로 다른 조회이며 같이 지정할 수 없습니다.
321
+
322
+ 이 작업은 **중단된 명령을 이어 실행하는 것이 아니라**, 승인된 writer 전체를 새
323
+ `writer-N` 디렉터리에서 재실행합니다. 변경된 원본 프로젝트나 예전 부분 출력은 입력으로
324
+ 쓰지 않습니다. 이전 디렉터리·관측·receipt는 보존하며 새 결과를 다시 고정·검증합니다.
325
+
326
+ - 이 명령은 단일 명령·scripted profile의 격리된 로컬 작업만 대상입니다. 원격/opaque 부작용의 재실행 보장이 아닙니다.
327
+ - writer namespace의 종료를 확인하고 단일 owner lease와 새 generation을 획득합니다.
328
+ - 원래 work/verify/cleanup 기한을 유지합니다. 기다린 시간과 이전 `modelRequests`는 환급하지 않습니다.
329
+ - scripted writer는 남은 요청 수가 모든 step과 종료 응답에 충분해야 합니다. 새 시도의 완료 판정에
330
+ 과거 요청을 끌어다 쓰지 않습니다. 같은 명령 ID의 재요청은 조회이며 추가 writer를 만들지 않습니다.
331
+ - generation 상한 3은 `resume`과 `restart-writer`가 공유합니다.
332
+ - input checkpoint 누락·손상, live/unknown namespace, stale ref, 부족한 시간/요청, 환경·key 변경,
333
+ 알려진 terminal 실패는 거부합니다. candidate가 이미 고정됐다면 writer 재시작 대신 `resume`을 씁니다.
334
+
335
+ `ready`는 필요한 조건을 관측했다는 뜻일 뿐이며 실제 lease 획득을 보장하지 않습니다.
336
+ input pin 이전 또는 process identity 기록 이전의 crash window는 여전히 자동 복구하지 않습니다.
337
+
338
+ ## 내구성·예산·복구 한계
339
+
340
+ - 원장 `version: 2`는 기존 v1 transcript journal과 별도입니다. 순서·hash chain·상태
341
+ 전이를 검증하고 append/fsync 성공 후에만 메모리 상태를 갱신합니다. write 실패는
342
+ 해당 store를 폐쇄합니다. 읽기 중 torn tail·중간 손상을 자동 수리하지 않습니다.
343
+ - generation은 명시적인 `resume`, `restart-writer`, `retry-tasks`에서만 증가하며 기존 원장을 다시 쓰지 않습니다.
344
+ 기존 v1/v2 attestation과 clock 없는 원장은 읽을 수 있지만 복구용 clock·세대를 추측해
345
+ 채우지 않습니다. clock 없는 미완료 실행의 resume은 `legacy`로 차단합니다.
346
+ - 작업 시간에는 preflight·원장·snapshot 시간이 포함됩니다. dispatch 의도 기록 뒤
347
+ 기한을 재확인합니다. verify에는 별도 시간 한도를 적용하고 cleanup 예약을 작업이나
348
+ 검사에 빌려주지 않습니다. 동기 filesystem 작업까지 강제 중단하는 wall-clock SLA는 아닙니다.
349
+ - process kill 요청과 실제 close를 구분합니다. cleanup 시간 뒤에도 close가 없으면
350
+ `quarantined`와 active ID를 유지합니다. 원장 재생만으로 이를 settled로 바꾸지 않습니다.
351
+ - output byte cap은 process별 합산 stdout/stderr에 적용합니다. 파일 수·바이트 cap은
352
+ snapshot 수락 한도이며 실행 중 disk·RAM·PID의 OS 강제 한도가 아닙니다. cgroup,
353
+ 실 provider의 HTTP attempt/과금 집계, run 간 전역 budget은 미구현입니다.
354
+ - manifest·blob·native v3 receipt·attestation을 먼저 내구성 있게 보존하고 마지막에 수락
355
+ event를 씁니다. orphan artifact가 남을 수 있으며 GC는 없습니다. 새 attestation v3는 각
356
+ native receipt의 core digest와 현재 generation/run/candidate/contract/검사/환경을 묶습니다. 두 번째
357
+ authoritative replay ledger는 만들지 않습니다.
358
+ - `evidence()`는 `receiptFormat: "v3"`와 검증된 `receipts`를 반환합니다. native core의
359
+ `status: "passed"`는 process exit 0을 뜻하며 stdout assertion 통과와 다릅니다. 예전
360
+ attestation v1은 `receiptFormat: "legacy"`, 빈 `receipts`로 읽고 자동 재서명·승격하지 않습니다.
361
+ v3 material 누락·손상이나 주입된 mutable envelope의 ledger/authority 필드는 거부합니다.
362
+ - native receipt 출력은 강제 credential redaction 뒤 stdout/stderr별 최대 앞 32 KiB의
363
+ digest만 보존합니다. 정확한 stdout assertion에는 별도로 인증된 원본 byte digest를
364
+ 사용합니다. 이 broker의 receipt 시간은 시작 wall reference와 단조 경과시간으로 종료
365
+ 시각을 투영합니다. 별도로 다시 읽은 wall clock이 뒤로 가도 시간 순서가 뒤집히지 않습니다.
366
+ 재개 권한·예산 판정은 이 wall 표시가 아니라 저장된 boot-relative 기한을 사용합니다.
367
+ 기존 v3 schema와 일반 bash receipt는 바꾸지 않습니다.
368
+ - issuer key는 worker 밖 `0600` 파일입니다. 재조회는 저장된 key와 MAC을 검사합니다.
369
+ key를 잃으면 과거 receipt를 다시 서명하지 않습니다. candidate/toolchain/receipt/blob
370
+ 변조는 수락 조회를 막습니다. 환경 hash는 kernel·sandbox argv·직접 executable을
371
+ binding하며 `/usr`의 모든 shared library를 pin한 image digest는 아닙니다.
372
+
373
+ ## 구현·검증 상태
374
+
375
+ | 항목 | 현재 상태 |
376
+ | --- | --- |
377
+ | M1의 명령형 CLI/SDK 경로 | 실제 Linux sandbox·candidate·외부 검사·회수 연결 |
378
+ | M1의 AgentSession reference + v3 bridge | 실제 CLI/SDK 연결. 합성 model adapter만 지원 |
379
+ | 실서비스 모델·완전한 toolchain image pin | 미구현 |
380
+ | M2: 고정 candidate 이후 검증 재개 | 실제 SIGKILL→CLI resume 검사 통과. 원래 예산·세대 fencing 적용 |
381
+ | M2: 불변 입력 기반 writer 재시작 | 실제 SIGKILL→CLI restart 검사 통과. 이전 요청 수·기한·부분 출력 보존 |
382
+ | M2: 모든 crash window 복구 | 미완료. input/process pin 없는 상태는 자동 복구 차단 |
383
+ | M3 정적 command DAG·선택 retry | CLI/SDK 연결. 성공 checkpoint 보존, 실제 SIGKILL·세대/시도/예산 경계 검사 |
384
+ | M3 병렬 frontier·계획 amendment·변경 후 adoption | 미구현. 직렬·동일 계약 안의 출력 재사용만 제공 |
385
+ | M4 TUI/RPC·MCP·GC·적용 승인/CAS | 미구현. CLI/SDK 조회·개별 artifact 회수 제공 |
386
+ | S90 전체 G01–G20·성능/정상 회귀 하한 | 미측정. 부분 테스트로 점수를 부여하지 않음 |
387
+
388
+ 직접 검증 기록과 제한은 [TDD 증거](verified-run-testing.md)에 있습니다.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-custom-provider-anthropic",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-custom-provider-anthropic",
9
- "version": "0.98.4",
9
+ "version": "0.98.5",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omk-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.98.4",
4
+ "version": "0.98.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omk-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.98.4",
4
+ "version": "0.98.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-gondolin",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-gondolin",
9
- "version": "0.98.4",
9
+ "version": "0.98.5",
10
10
  "dependencies": {
11
11
  "@earendil-works/gondolin": "0.12.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omk-extension-gondolin",
3
3
  "private": true,
4
- "version": "0.98.4",
4
+ "version": "0.98.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-sandbox",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-sandbox",
9
- "version": "0.98.4",
9
+ "version": "0.98.5",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omk-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.98.4",
4
+ "version": "0.98.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-with-deps",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-with-deps",
9
- "version": "0.98.4",
9
+ "version": "0.98.5",
10
10
  "dependencies": {
11
11
  "ms": "2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omk-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.98.4",
4
+ "version": "0.98.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "open-multi-agent-kit",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "open-multi-agent-kit",
9
- "version": "0.98.4",
9
+ "version": "0.98.5",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "omk-agent-core": "^0.98.4",
13
- "omk-ai": "^0.98.4",
14
- "omk-tui": "^0.98.4",
12
+ "omk-agent-core": "^0.98.5",
13
+ "omk-ai": "^0.98.5",
14
+ "omk-tui": "^0.98.5",
15
15
  "@silvia-odwyer/photon-node": "0.3.4",
16
16
  "canonicalize": "4.0.0",
17
17
  "chalk": "5.6.2",
@@ -27,8 +27,8 @@
27
27
  "typebox": "1.3.11",
28
28
  "undici": "8.10.0",
29
29
  "yaml": "2.9.0",
30
- "omk-adaptorch-wpl": "^0.98.4",
31
- "omk-protocol": "^0.98.4"
30
+ "omk-adaptorch-wpl": "^0.98.5",
31
+ "omk-protocol": "^0.98.5"
32
32
  },
33
33
  "optionalDependencies": {
34
34
  "@mariozechner/clipboard": "0.3.9"
@@ -1285,19 +1285,19 @@
1285
1285
  }
1286
1286
  },
1287
1287
  "node_modules/omk-adaptorch-wpl": {
1288
- "version": "0.98.4",
1289
- "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.98.4.tgz",
1288
+ "version": "0.98.5",
1289
+ "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.98.5.tgz",
1290
1290
  "license": "MIT",
1291
1291
  "engines": {
1292
1292
  "node": ">=22.19.0"
1293
1293
  }
1294
1294
  },
1295
1295
  "node_modules/omk-agent-core": {
1296
- "version": "0.98.4",
1297
- "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.98.4.tgz",
1296
+ "version": "0.98.5",
1297
+ "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.98.5.tgz",
1298
1298
  "license": "MIT",
1299
1299
  "dependencies": {
1300
- "omk-ai": "^0.98.4",
1300
+ "omk-ai": "^0.98.5",
1301
1301
  "ignore": "7.0.6",
1302
1302
  "typebox": "1.3.11",
1303
1303
  "yaml": "2.9.0"
@@ -1307,8 +1307,8 @@
1307
1307
  }
1308
1308
  },
1309
1309
  "node_modules/omk-ai": {
1310
- "version": "0.98.4",
1311
- "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.98.4.tgz",
1310
+ "version": "0.98.5",
1311
+ "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.98.5.tgz",
1312
1312
  "license": "MIT",
1313
1313
  "dependencies": {
1314
1314
  "@anthropic-ai/sdk": "0.91.1",
@@ -1330,16 +1330,16 @@
1330
1330
  }
1331
1331
  },
1332
1332
  "node_modules/omk-protocol": {
1333
- "version": "0.98.4",
1334
- "resolved": "https://registry.npmjs.org/omk-protocol/-/omk-protocol-0.98.4.tgz",
1333
+ "version": "0.98.5",
1334
+ "resolved": "https://registry.npmjs.org/omk-protocol/-/omk-protocol-0.98.5.tgz",
1335
1335
  "license": "MIT",
1336
1336
  "engines": {
1337
1337
  "node": ">=22.19.0"
1338
1338
  }
1339
1339
  },
1340
1340
  "node_modules/omk-tui": {
1341
- "version": "0.98.4",
1342
- "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.98.4.tgz",
1341
+ "version": "0.98.5",
1342
+ "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.98.5.tgz",
1343
1343
  "license": "MIT",
1344
1344
  "dependencies": {
1345
1345
  "get-east-asian-width": "1.6.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-multi-agent-kit",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "description": "OMK (Open Multi-Agent Kit) coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "omkConfig": {
@@ -42,9 +42,9 @@
42
42
  "link-workspace-deps": "node ./scripts/link-workspace-deps.mjs"
43
43
  },
44
44
  "dependencies": {
45
- "omk-agent-core": "^0.98.4",
46
- "omk-ai": "^0.98.4",
47
- "omk-tui": "^0.98.4",
45
+ "omk-agent-core": "^0.98.5",
46
+ "omk-ai": "^0.98.5",
47
+ "omk-tui": "^0.98.5",
48
48
  "@silvia-odwyer/photon-node": "0.3.4",
49
49
  "canonicalize": "4.0.0",
50
50
  "chalk": "5.6.2",
@@ -60,8 +60,8 @@
60
60
  "typebox": "1.3.11",
61
61
  "undici": "8.10.0",
62
62
  "yaml": "2.9.0",
63
- "omk-adaptorch-wpl": "^0.98.4",
64
- "omk-protocol": "^0.98.4"
63
+ "omk-adaptorch-wpl": "^0.98.5",
64
+ "omk-protocol": "^0.98.5"
65
65
  },
66
66
  "overrides": {
67
67
  "rimraf": "6.1.2",