open-multi-agent-kit 0.96.1 → 0.97.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +14 -2
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +1 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/commands/resource-doctor-cli.d.ts +22 -0
  7. package/dist/commands/resource-doctor-cli.d.ts.map +1 -0
  8. package/dist/commands/resource-doctor-cli.js +98 -0
  9. package/dist/commands/resource-doctor-cli.js.map +1 -0
  10. package/dist/core/agent-session.d.ts +46 -2
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +373 -12
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/attachment-store.d.ts +39 -0
  15. package/dist/core/attachment-store.d.ts.map +1 -0
  16. package/dist/core/attachment-store.js +81 -0
  17. package/dist/core/attachment-store.js.map +1 -0
  18. package/dist/core/command-safety.d.ts +8 -0
  19. package/dist/core/command-safety.d.ts.map +1 -1
  20. package/dist/core/command-safety.js +140 -14
  21. package/dist/core/command-safety.js.map +1 -1
  22. package/dist/core/compaction/compaction.d.ts +6 -1
  23. package/dist/core/compaction/compaction.d.ts.map +1 -1
  24. package/dist/core/compaction/compaction.js +35 -1
  25. package/dist/core/compaction/compaction.js.map +1 -1
  26. package/dist/core/completion-sound.d.ts +109 -0
  27. package/dist/core/completion-sound.d.ts.map +1 -0
  28. package/dist/core/completion-sound.js +165 -0
  29. package/dist/core/completion-sound.js.map +1 -0
  30. package/dist/core/context-budget-governor-v2.d.ts +1 -1
  31. package/dist/core/context-budget-governor-v2.d.ts.map +1 -1
  32. package/dist/core/context-budget-governor-v2.js +1 -1
  33. package/dist/core/context-budget-governor-v2.js.map +1 -1
  34. package/dist/core/context-budget-system-prompt-items.d.ts.map +1 -1
  35. package/dist/core/context-budget-system-prompt-items.js +2 -2
  36. package/dist/core/context-budget-system-prompt-items.js.map +1 -1
  37. package/dist/core/context-budget-v2-cache-keys.d.ts +3 -0
  38. package/dist/core/context-budget-v2-cache-keys.d.ts.map +1 -1
  39. package/dist/core/context-budget-v2-cache-keys.js +2 -0
  40. package/dist/core/context-budget-v2-cache-keys.js.map +1 -1
  41. package/dist/core/context-budget-v2-plan-cache-keys.d.ts.map +1 -1
  42. package/dist/core/context-budget-v2-plan-cache-keys.js +3 -0
  43. package/dist/core/context-budget-v2-plan-cache-keys.js.map +1 -1
  44. package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
  45. package/dist/core/context-budget-v2-planner.js +2 -1
  46. package/dist/core/context-budget-v2-planner.js.map +1 -1
  47. package/dist/core/context-budget-v2-scoring.d.ts +17 -0
  48. package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
  49. package/dist/core/context-budget-v2-scoring.js +25 -8
  50. package/dist/core/context-budget-v2-scoring.js.map +1 -1
  51. package/dist/core/context-budget-v2-selection.d.ts +2 -2
  52. package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
  53. package/dist/core/context-budget-v2-selection.js +18 -1
  54. package/dist/core/context-budget-v2-selection.js.map +1 -1
  55. package/dist/core/context-budget-v2-types.d.ts +17 -0
  56. package/dist/core/context-budget-v2-types.d.ts.map +1 -1
  57. package/dist/core/context-budget-v2-types.js +15 -0
  58. package/dist/core/context-budget-v2-types.js.map +1 -1
  59. package/dist/core/extensions/builtin/command-safety-gate.d.ts +3 -1
  60. package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/command-safety-gate.js +7 -0
  62. package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -1
  63. package/dist/core/extensions/types.d.ts +12 -1
  64. package/dist/core/extensions/types.d.ts.map +1 -1
  65. package/dist/core/extensions/types.js.map +1 -1
  66. package/dist/core/host-resource-probe.d.ts +63 -0
  67. package/dist/core/host-resource-probe.d.ts.map +1 -0
  68. package/dist/core/host-resource-probe.js +126 -0
  69. package/dist/core/host-resource-probe.js.map +1 -0
  70. package/dist/core/host-resource-snapshot.d.ts +54 -0
  71. package/dist/core/host-resource-snapshot.d.ts.map +1 -0
  72. package/dist/core/host-resource-snapshot.js +139 -0
  73. package/dist/core/host-resource-snapshot.js.map +1 -0
  74. package/dist/core/model-registry.d.ts +8 -3
  75. package/dist/core/model-registry.d.ts.map +1 -1
  76. package/dist/core/model-registry.js +71 -1
  77. package/dist/core/model-registry.js.map +1 -1
  78. package/dist/core/package-doctor-source-scan.d.ts +9 -0
  79. package/dist/core/package-doctor-source-scan.d.ts.map +1 -1
  80. package/dist/core/package-doctor-source-scan.js +77 -4
  81. package/dist/core/package-doctor-source-scan.js.map +1 -1
  82. package/dist/core/prompt-attachment.d.ts +51 -0
  83. package/dist/core/prompt-attachment.d.ts.map +1 -0
  84. package/dist/core/prompt-attachment.js +186 -0
  85. package/dist/core/prompt-attachment.js.map +1 -0
  86. package/dist/core/prompt-settlement.d.ts +81 -0
  87. package/dist/core/prompt-settlement.d.ts.map +1 -0
  88. package/dist/core/prompt-settlement.js +84 -0
  89. package/dist/core/prompt-settlement.js.map +1 -0
  90. package/dist/core/provider-resilience.d.ts +28 -0
  91. package/dist/core/provider-resilience.d.ts.map +1 -1
  92. package/dist/core/provider-resilience.js +51 -1
  93. package/dist/core/provider-resilience.js.map +1 -1
  94. package/dist/core/provider-retry.d.ts +7 -0
  95. package/dist/core/provider-retry.d.ts.map +1 -1
  96. package/dist/core/provider-retry.js +24 -0
  97. package/dist/core/provider-retry.js.map +1 -1
  98. package/dist/core/provider-usage.d.ts +15 -2
  99. package/dist/core/provider-usage.d.ts.map +1 -1
  100. package/dist/core/provider-usage.js +176 -2
  101. package/dist/core/provider-usage.js.map +1 -1
  102. package/dist/core/reasoning-router-promotion.d.ts +84 -0
  103. package/dist/core/reasoning-router-promotion.d.ts.map +1 -0
  104. package/dist/core/reasoning-router-promotion.js +92 -0
  105. package/dist/core/reasoning-router-promotion.js.map +1 -0
  106. package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
  107. package/dist/core/reasoning-router-resolver.js +1 -1
  108. package/dist/core/reasoning-router-resolver.js.map +1 -1
  109. package/dist/core/resource-admission-config.d.ts +55 -0
  110. package/dist/core/resource-admission-config.d.ts.map +1 -0
  111. package/dist/core/resource-admission-config.js +97 -0
  112. package/dist/core/resource-admission-config.js.map +1 -0
  113. package/dist/core/resource-admission.d.ts +81 -0
  114. package/dist/core/resource-admission.d.ts.map +1 -0
  115. package/dist/core/resource-admission.js +128 -0
  116. package/dist/core/resource-admission.js.map +1 -0
  117. package/dist/core/resource-governor-format.d.ts +50 -0
  118. package/dist/core/resource-governor-format.d.ts.map +1 -0
  119. package/dist/core/resource-governor-format.js +113 -0
  120. package/dist/core/resource-governor-format.js.map +1 -0
  121. package/dist/core/resource-governor-settings.d.ts +56 -0
  122. package/dist/core/resource-governor-settings.d.ts.map +1 -0
  123. package/dist/core/resource-governor-settings.js +89 -0
  124. package/dist/core/resource-governor-settings.js.map +1 -0
  125. package/dist/core/resource-observation-journal.d.ts +74 -0
  126. package/dist/core/resource-observation-journal.d.ts.map +1 -0
  127. package/dist/core/resource-observation-journal.js +198 -0
  128. package/dist/core/resource-observation-journal.js.map +1 -0
  129. package/dist/core/resource-safety-gate.d.ts +54 -0
  130. package/dist/core/resource-safety-gate.d.ts.map +1 -0
  131. package/dist/core/resource-safety-gate.js +51 -0
  132. package/dist/core/resource-safety-gate.js.map +1 -0
  133. package/dist/core/run-journal.d.ts.map +1 -1
  134. package/dist/core/run-journal.js +13 -1
  135. package/dist/core/run-journal.js.map +1 -1
  136. package/dist/core/run-resource-lease.d.ts +73 -0
  137. package/dist/core/run-resource-lease.d.ts.map +1 -0
  138. package/dist/core/run-resource-lease.js +78 -0
  139. package/dist/core/run-resource-lease.js.map +1 -0
  140. package/dist/core/session-bash-service.d.ts +12 -0
  141. package/dist/core/session-bash-service.d.ts.map +1 -1
  142. package/dist/core/session-bash-service.js +18 -3
  143. package/dist/core/session-bash-service.js.map +1 -1
  144. package/dist/core/session-system-prompt.d.ts +2 -0
  145. package/dist/core/session-system-prompt.d.ts.map +1 -1
  146. package/dist/core/session-system-prompt.js +2 -0
  147. package/dist/core/session-system-prompt.js.map +1 -1
  148. package/dist/core/session-termination.d.ts +8 -3
  149. package/dist/core/session-termination.d.ts.map +1 -1
  150. package/dist/core/session-termination.js +40 -3
  151. package/dist/core/session-termination.js.map +1 -1
  152. package/dist/core/settings-manager.d.ts +12 -0
  153. package/dist/core/settings-manager.d.ts.map +1 -1
  154. package/dist/core/settings-manager.js +36 -0
  155. package/dist/core/settings-manager.js.map +1 -1
  156. package/dist/core/slash-commands.d.ts.map +1 -1
  157. package/dist/core/slash-commands.js +1 -0
  158. package/dist/core/slash-commands.js.map +1 -1
  159. package/dist/core/subagent-lane-launcher.d.ts +64 -0
  160. package/dist/core/subagent-lane-launcher.d.ts.map +1 -0
  161. package/dist/core/subagent-lane-launcher.js +107 -0
  162. package/dist/core/subagent-lane-launcher.js.map +1 -0
  163. package/dist/core/system-cpu-sampler.d.ts +45 -0
  164. package/dist/core/system-cpu-sampler.d.ts.map +1 -0
  165. package/dist/core/system-cpu-sampler.js +95 -0
  166. package/dist/core/system-cpu-sampler.js.map +1 -0
  167. package/dist/core/system-prompt.d.ts.map +1 -1
  168. package/dist/core/system-prompt.js +5 -8
  169. package/dist/core/system-prompt.js.map +1 -1
  170. package/dist/core/tools/bash.d.ts.map +1 -1
  171. package/dist/core/tools/bash.js +3 -7
  172. package/dist/core/tools/bash.js.map +1 -1
  173. package/dist/core/tools/grep.d.ts.map +1 -1
  174. package/dist/core/tools/grep.js +13 -48
  175. package/dist/core/tools/grep.js.map +1 -1
  176. package/dist/core/tools/read.d.ts.map +1 -1
  177. package/dist/core/tools/read.js +1 -34
  178. package/dist/core/tools/read.js.map +1 -1
  179. package/dist/core/workload-classifier.d.ts +32 -0
  180. package/dist/core/workload-classifier.d.ts.map +1 -0
  181. package/dist/core/workload-classifier.js +66 -0
  182. package/dist/core/workload-classifier.js.map +1 -0
  183. package/dist/core/workload-family-matcher.d.ts +3 -0
  184. package/dist/core/workload-family-matcher.d.ts.map +1 -0
  185. package/dist/core/workload-family-matcher.js +126 -0
  186. package/dist/core/workload-family-matcher.js.map +1 -0
  187. package/dist/core/workload-permit-pool.d.ts +78 -0
  188. package/dist/core/workload-permit-pool.d.ts.map +1 -0
  189. package/dist/core/workload-permit-pool.js +138 -0
  190. package/dist/core/workload-permit-pool.js.map +1 -0
  191. package/dist/core/workload-shard-executor.d.ts +68 -0
  192. package/dist/core/workload-shard-executor.d.ts.map +1 -0
  193. package/dist/core/workload-shard-executor.js +156 -0
  194. package/dist/core/workload-shard-executor.js.map +1 -0
  195. package/dist/core/workload-shard-plan.d.ts +81 -0
  196. package/dist/core/workload-shard-plan.d.ts.map +1 -0
  197. package/dist/core/workload-shard-plan.js +183 -0
  198. package/dist/core/workload-shard-plan.js.map +1 -0
  199. package/dist/core/workload-shard-runner.d.ts +11 -0
  200. package/dist/core/workload-shard-runner.d.ts.map +1 -0
  201. package/dist/core/workload-shard-runner.js +98 -0
  202. package/dist/core/workload-shard-runner.js.map +1 -0
  203. package/dist/core/workload-shard-store.d.ts +44 -0
  204. package/dist/core/workload-shard-store.d.ts.map +1 -0
  205. package/dist/core/workload-shard-store.js +189 -0
  206. package/dist/core/workload-shard-store.js.map +1 -0
  207. package/dist/core/workload-sharders.d.ts +47 -0
  208. package/dist/core/workload-sharders.d.ts.map +1 -0
  209. package/dist/core/workload-sharders.js +162 -0
  210. package/dist/core/workload-sharders.js.map +1 -0
  211. package/dist/core/workload-shell-scan.d.ts +12 -0
  212. package/dist/core/workload-shell-scan.d.ts.map +1 -0
  213. package/dist/core/workload-shell-scan.js +79 -0
  214. package/dist/core/workload-shell-scan.js.map +1 -0
  215. package/dist/index.d.ts +1 -1
  216. package/dist/index.d.ts.map +1 -1
  217. package/dist/index.js +1 -1
  218. package/dist/index.js.map +1 -1
  219. package/dist/main.d.ts.map +1 -1
  220. package/dist/main.js +6 -0
  221. package/dist/main.js.map +1 -1
  222. package/dist/modes/interactive/components/attachment-strip.d.ts +21 -0
  223. package/dist/modes/interactive/components/attachment-strip.d.ts.map +1 -0
  224. package/dist/modes/interactive/components/attachment-strip.js +136 -0
  225. package/dist/modes/interactive/components/attachment-strip.js.map +1 -0
  226. package/dist/modes/interactive/components/footer.d.ts +6 -0
  227. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/footer.js +26 -1
  229. package/dist/modes/interactive/components/footer.js.map +1 -1
  230. package/dist/modes/interactive/components/status-sidebar.d.ts.map +1 -1
  231. package/dist/modes/interactive/components/status-sidebar.js +12 -1
  232. package/dist/modes/interactive/components/status-sidebar.js.map +1 -1
  233. package/dist/modes/interactive/interactive-mode.d.ts +27 -4
  234. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  235. package/dist/modes/interactive/interactive-mode.js +255 -53
  236. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  237. package/docs/compaction.md +1 -1
  238. package/docs/extensions.md +12 -3
  239. package/docs/index.md +4 -1
  240. package/docs/metrics.md +74 -2
  241. package/docs/provider-resilience.md +11 -0
  242. package/docs/providers.md +1 -1
  243. package/docs/sdk.md +4 -0
  244. package/docs/settings.md +64 -2
  245. package/docs/skills.md +16 -0
  246. package/docs/usage.md +1 -1
  247. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  248. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  249. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  250. package/examples/extensions/gondolin/package-lock.json +2 -2
  251. package/examples/extensions/gondolin/package.json +1 -1
  252. package/examples/extensions/sandbox/package-lock.json +2 -2
  253. package/examples/extensions/sandbox/package.json +1 -1
  254. package/examples/extensions/subagent/agent-capability-router.test.ts +7 -0
  255. package/examples/extensions/subagent/domain-profiles.ts +0 -1
  256. package/examples/extensions/with-deps/package-lock.json +2 -2
  257. package/examples/extensions/with-deps/package.json +1 -1
  258. package/npm-shrinkwrap.json +18 -18
  259. package/package.json +8 -10
  260. package/dist/core/tools/omp-pure-seams.d.ts +0 -41
  261. package/dist/core/tools/omp-pure-seams.d.ts.map +0 -1
  262. package/dist/core/tools/omp-pure-seams.js +0 -142
  263. package/dist/core/tools/omp-pure-seams.js.map +0 -1
  264. package/dist/core/tools/omp-seam-runtime.d.ts +0 -100
  265. package/dist/core/tools/omp-seam-runtime.d.ts.map +0 -1
  266. package/dist/core/tools/omp-seam-runtime.js +0 -40
  267. package/dist/core/tools/omp-seam-runtime.js.map +0 -1
@@ -95,7 +95,7 @@ By default, compaction uses the active session model. Set `compaction.model` to
95
95
 
96
96
  Every compaction and branch-summary LLM call flows through one choke point (`completeSummarization`):
97
97
 
98
- - **Retries**: transient stream drops (`terminated`, socket close, 5xx, DNS/transport errors) follow the configured `retry` settings (`enabled`, `maxRetries`, `baseDelayMs`) with exponential backoff instead of failing the whole operation on the first attempt. Quota/billing errors fail fast, and aborts are never retried. Retry progress is emitted as `summarization_retry_scheduled` / `summarization_retry_attempt_start` / `summarization_retry_finished` session events (surfaced in the TUI and RPC stream).
98
+ - **Retries**: transient stream drops (`terminated`, socket close, 5xx, DNS/transport errors) follow the configured `retry` settings (`enabled`, `maxRetries`, `baseDelayMs`) with exponential backoff instead of failing the whole operation on the first attempt. Quota/billing exhaustion on the summarization model triggers one pass through the resilience failover chain ([provider-resilience.md](provider-resilience.md)); only when every candidate is also quota-blocked does the run fail with a non-retryable `compaction.quota_exhausted` termination cause whose guidance suggests `/model`, setting `compaction.model`, or waiting for reset. Aborts are never retried. Retry progress is emitted as `summarization_retry_scheduled` / `summarization_retry_attempt_start` / `summarization_retry_finished` session events (surfaced in the TUI and RPC stream).
99
99
  - **Isolation**: each summarization request runs with prompt caching disabled (`cacheRetention: "none"`) and a fresh routing `sessionId`, so summaries never write unusable provider cache entries or inherit interactive session affinity.
100
100
 
101
101
  ### How It Works
@@ -505,15 +505,24 @@ The `systemPromptOptions` field gives extensions access to the same structured d
505
505
 
506
506
  Inside `before_agent_start`, `event.systemPrompt` and `ctx.getSystemPrompt()` both reflect the chained system prompt as of the current handler. Later `before_agent_start` handlers can still modify it again.
507
507
 
508
- #### agent_start / agent_end
508
+ #### agent_start / agent_end / agent_settled
509
509
 
510
- Fired once per user prompt.
510
+ `agent_start` and `agent_end` fire once per agent-loop attempt. When the session
511
+ retries a transient provider failure, the prompt produces several `agent_end`
512
+ events, so `agent_end` alone does not mark the end of the work.
513
+
514
+ `agent_settled` fires once, immediately after the `agent_end` that no retry
515
+ follows. Use it to release per-run state exactly once.
511
516
 
512
517
  ```typescript
513
518
  omk.on("agent_start", async (_event, ctx) => {});
514
519
 
515
520
  omk.on("agent_end", async (event, ctx) => {
516
- // event.messages - messages from this prompt
521
+ // event.messages - messages from this attempt; a retry may still follow
522
+ });
523
+
524
+ omk.on("agent_settled", async (event, ctx) => {
525
+ // No retry follows. Safe to clear activity, finalize queues, or release locks.
517
526
  });
518
527
  ```
519
528
 
package/docs/index.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # OMK Documentation
2
2
 
3
- OMK is a provider-neutral coding agent with multi-agent orchestration, durable harness controls, replayable sessions, SDK/RPC integration, and evidence-backed verification. Its core stays small while extensions, skills, prompts, themes, and packages add workflows.
3
+ OMK is a provider-neutral coding agent with multi-agent orchestration, durable harness controls, replayable sessions, SDK/RPC integration, and evidence-backed verification. Extensions, skills, prompts, themes, and packages add workflows without changing the run contract.
4
+
5
+ OMK targets state-of-the-art quality as a CLI coding-agent harness. That target is not a claim of current leadership; see [Turn metrics and harness evaluation](metrics.md) for the qualification rules and current status.
4
6
 
5
7
  ## Quick start
6
8
 
@@ -59,6 +61,7 @@ For the full first-run flow, see [Quickstart](quickstart.md).
59
61
 
60
62
  - [SDK and Session Control](sdk.md) - embed omk, reuse policy helpers, or inspect stored sessions from scripts.
61
63
  - [Run Protocol and Durable Goals](run-protocol.md) - canonical run contracts and the durable-goal lifecycle.
64
+ - [Turn metrics and harness evaluation](metrics.md) - cost, latency, tool reliability, capability baselines, and comparative-claim rules.
62
65
  - [RPC mode](rpc.md) - integrate over stdin/stdout JSONL.
63
66
  - [JSON event stream mode](json.md) - print mode with structured events.
64
67
  - [TUI components](tui.md) - build custom terminal UI for extensions.
package/docs/metrics.md CHANGED
@@ -3,6 +3,76 @@
3
3
  OMK records one JSON line per agent turn so harness changes can be measured
4
4
  instead of guessed.
5
5
 
6
+ ## CLI harness SOTA target
7
+
8
+ OMK targets state-of-the-art quality as a CLI coding-agent harness. **SOTA is
9
+ not verified.** This is a product target, not a statement that the current
10
+ release leads a benchmark or a named competitor cohort.
11
+
12
+ The target covers the harness layer:
13
+
14
+ | Dimension | Primary measure |
15
+ | --- | --- |
16
+ | Task success | solved tasks and pass rate |
17
+ | Cost efficiency | model cost and tokens per solved task |
18
+ | Latency | wall-clock p50/p95 per solved task |
19
+ | Context efficiency | input, cache, compaction, and tool-output tokens per solved task |
20
+ | Tool reliability | failure, retry, refusal, and intervention rates |
21
+ | Orchestration | critical-path time, useful concurrency, and duplicate work |
22
+ | Recovery | interrupted-run resume accuracy and repeated-run variance |
23
+ | Safety | policy violations, unauthorized effects, and false-positive blocks |
24
+ | Maintainability | complexity, module-size debt, and regression-gate health |
25
+
26
+ No single feature count or self-score establishes leadership. OMK reports a
27
+ dimension-specific result unless a preregistered aggregation defines an overall
28
+ score.
29
+
30
+ ### Controlled comparison contract
31
+
32
+ A comparative harness run MUST hold the **same model**, **same provider** and
33
+ model configuration, **same task** and revision, **same budget**, equivalent
34
+ tool permissions, and comparable container, hardware, region, and concurrency
35
+ constant. The harness is the treatment variable. If a factor cannot be held
36
+ constant, the report must label the result non-comparative.
37
+
38
+ Every comparative report must include:
39
+
40
+ - the date, harness versions, and **named comparison cohort**, with its inclusion rule frozen before execution;
41
+ - immutable model, provider, container, environment, and configuration identities;
42
+ - the task manifest, seeds, public prompt or sanitized prompt digest, budgets, run order, and stop policy;
43
+ - sanitized per-task outcomes plus cost, token, latency, retry, and intervention data;
44
+ - the confidence interval, significance threshold, minimum effect, and statistical test chosen before inspecting the result;
45
+ - the exact commands and immutable manifests needed for **reproducible evidence**.
46
+
47
+ Use paired A/B measurements. Randomize or interleave pair order when provider or
48
+ machine drift can bias one side. Do not combine values produced by different
49
+ methods, working directories, task revisions, or warm/cold conditions. A
50
+ roadmap projection remains a hypothesis even when its inputs are measured.
51
+
52
+ ### Evidence privacy
53
+
54
+ Benchmark evidence is private by default. Public artifacts may contain public
55
+ or synthetic task identifiers, version and image digests, allowlisted runtime
56
+ metadata, sanitized outcomes, and aggregate statistics. They must not contain
57
+ credentials, private prompts, proprietary source, raw tool arguments or output,
58
+ environment values, personal data, or absolute user paths.
59
+
60
+ Keep restricted raw evidence local or in an access-controlled store with an
61
+ explicit owner and retention period. Normalize paths, redact content, scan for
62
+ secrets and PII, and obtain human approval before publication. Digests and
63
+ public task manifests preserve reproducibility without disclosing restricted
64
+ content.
65
+
66
+ A public “SOTA,” “best,” “leading,” or “#1” claim requires a dated controlled
67
+ comparison that places OMK on the relevant quality/cost/latency frontier without
68
+ violating declared safety and regression floors. Until then, use “targets
69
+ state-of-the-art quality.”
70
+
71
+ [Harbor's Terminal-Bench runner](https://www.harborframework.com/docs/tutorials/running-terminal-bench)
72
+ and the [SWE-bench containerized harness](https://www.swebench.com/SWE-bench/api/harness/)
73
+ are reference evaluation surfaces. Their presence or a selected task list is
74
+ infrastructure, not a benchmark result.
75
+
6
76
  This is separate from the two things that already existed:
7
77
 
8
78
  | Surface | Purpose |
@@ -83,5 +153,7 @@ node scripts/tb-mini-suite.mjs --seed 7 # a different fixed subset
83
153
 
84
154
  Selection is a pure function of (tasks directory, seed, size): the same inputs
85
155
  always produce the same task list, which is the whole point of using it as a
86
- regression gate. The scoring run itself requires Docker, `harbor`, and real
87
- model spend — it is deliberately not wired into `npm run check`.
156
+ regression gate. Selection alone is not a capability result. The scoring run
157
+ itself requires Docker, `harbor`, and real model spend — it is deliberately not
158
+ wired into `npm run check`. Any comparison produced from it must follow the
159
+ controlled comparison contract above.
@@ -6,6 +6,7 @@ OMK can recover an agent turn from provider failures that are unlikely to succee
6
6
  - billing-cycle or quota exhaustion
7
7
  - orphaned `tool_call_id` protocol errors
8
8
  - transient transport and server failures
9
+ - gateway/upstream availability failures (5xx passthroughs, streams that end without a finish reason)
9
10
 
10
11
  This is availability behavior, not a safety bypass. Provider safety policy and the user's configured model access remain authoritative.
11
12
 
@@ -53,6 +54,8 @@ A content/safety stop gets at most one automatic retry, including a retry that s
53
54
 
54
55
  Recognized quota shapes include billing-cycle usage limits, `insufficient_quota`, exhausted balances, `GoUsageLimitError`, `FreeUsageLimitError`, and out-of-budget responses. These are classified as `provider.rate_limit`, even when a provider wraps them in HTTP 403.
55
56
 
57
+ Gateway/upstream availability failures — "503 Upstream request failed", "Endpoint is unavailable", or a stream that ended without a finish reason — are classified as `provider.network`: transport problems that heal by retry or model switch, never by transcript sanitization.
58
+
56
59
  The default candidate order is:
57
60
 
58
61
  1. `kimi-coding/k3`
@@ -63,6 +66,14 @@ The default candidate order is:
63
66
  6. `modelstudio-maas/deepseek-v4-pro`
64
67
  7. `kimi-coding/kimi-for-coding`
65
68
 
69
+ ## Same-model route rotation
70
+
71
+ The same underlying model is often served by several provider routes (for example `openrouter/stealth/ox-alpha` and `opencode-go/ox-alpha-free`). When the active route fails with an upstream availability error, OMK rotates to another authenticated route of the same model family before touching the cross-model failover chain, so the retry lands on a live endpoint instead of hammering the dead one.
72
+
73
+ Routes already visited this turn and routes without configured authentication are excluded from rotation. Route rotation runs inside the normal retry budget; when no sibling route remains, the standard failover behavior applies.
74
+
75
+ Compaction summarization reuses the same chain: when the summarization model hits quota/billing exhaustion, the configured failover candidates are tried once each before the run fails with a non-retryable `compaction.quota_exhausted` termination cause. See [Compaction](compaction.md).
76
+
66
77
  ## Retry and termination events
67
78
 
68
79
  Each provider attempt is journaled separately and emits `session_termination`. A retryable failure is attempt-level when an `auto_retry_start` event follows it. A recovered retry later emits a `completed` termination; an exhausted retry budget leaves the last provider failure as the final termination.
package/docs/providers.md CHANGED
@@ -28,7 +28,7 @@ When the status sidebar is pinned, its **USAGE** section lists every configured
28
28
 
29
29
  Codex streaming passively merges `x-codex-primary-*`, `x-codex-secondary-*`, and `codex.rate_limits` signals through the non-blocking `StreamOptions.onRateLimit` observer. These signals supplement missing polling windows only when the Codex service returns them; OMK does not infer a missing 5-hour value from a 7-day value.
30
30
 
31
- Alibaba Model Studio Token Plan is recognized as **QWEN TOKEN PLAN** but shows `console-only quota`. Its [official usage page](https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=plan&commonbuy=1&orderType=buy#/efm/subscription/token-plan) obtains `per5HourPercentage`, `per5HourResetTime`, `per1WeekPercentage`, and `per1WeekResetTime` through an authenticated Alibaba Cloud console gateway. The plan-specific `sk-sp-*` key does not authorize that console endpoint, and compatible-mode model responses expose token counts but no quota headers. OMK therefore does not copy browser cookies or estimate quota from token counts. Qwen OAuth remains explicit `quota API unavailable`.
31
+ Alibaba Model Studio Token Plan is recognized as **QWEN TOKEN PLAN** and reads its 7-day window through the official [QwenCloud management CLI](https://docs.qwencloud.com/api-reference/preparation/cli): when `qwencloud` is installed and logged in (`npm i -g @qwencloud/qwencloud-cli && qwencloud auth login`), OMK runs `qwencloud usage summary --format json` (override the binary with `QWENCLOUD_CLI`) and shows `token_plan.usedPct` plus the reset countdown. The CLI holds its own OAuth management credential; OMK never sends the plan's `sk-*` inference key anywhere for quota. Without the CLI the entry shows a `connect:` hint instead the [console usage page](https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=plan#/efm/subscription/token-plan/personal) requires an Alibaba Cloud console session that OMK deliberately does not scrape, and OMK still never copies browser cookies or estimates quota from token counts. Qwen OAuth remains explicit `quota API unavailable`.
32
32
 
33
33
  With a stored native `xai` OAuth credential, OMK reads `GET https://cli-chat-proxy.grok.com/v1/billing?format=credits` and shows the weekly SuperGrok pool from `config.creditUsagePercent` plus its reset from `config.currentPeriod.end`. `XAI_API_KEY` is a separate API-billing credential and does not authorize this subscription endpoint.
34
34
 
package/docs/sdk.md CHANGED
@@ -255,10 +255,14 @@ interface PromptOptions {
255
255
  images?: ImageContent[];
256
256
  streamingBehavior?: "steer" | "followUp";
257
257
  source?: InputSource;
258
+ activeSkillNames?: readonly string[];
259
+ activeSkillSource?: string;
258
260
  preflightResult?: (success: boolean) => void;
259
261
  }
260
262
  ```
261
263
 
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.
265
+
262
266
  `preflightResult` is called once per `prompt()` invocation:
263
267
 
264
268
  - `true` when the prompt was accepted, queued, or handled immediately
package/docs/settings.md CHANGED
@@ -180,6 +180,67 @@ Built-in defaults are 30 seconds for `read`, `grep`, `find`, and `ls`; 60 second
180
180
 
181
181
  The DAG preserves source-order result artifacts. `bash`, unknown tools, and extension tools without explicit resource claims remain exclusive. Tool timeout is logical cancellation: OMK closes the tool call and signals cancellation, but arbitrary JavaScript or external side effects may continue if the tool ignores that signal.
182
182
 
183
+ ### Resource Governor
184
+
185
+ The governor probes host capacity (memory, workspace disk, V8 heap, system CPU) and evaluates a resource admission decision, surfaced through `/resource [probe|policy]` in the TUI and `omk doctor resources [--json]` headless. In `observe` mode (default) it records decisions without changing behavior; in `adaptive`/`strict` modes each top-level prompt runs a bounded preflight probe and throttles the effective tool concurrency for that run (never above `agent.maxToolConcurrency`), restoring it when the run settles. Heavy-process caps are enforced at the governed bash boundary; the internal subagent-lane launcher is not wired into live child dispatch. Absent settings keep prior behavior unchanged.
186
+
187
+ | Setting | Type | Default | Description |
188
+ | --------- | ------ | --------- | ------------- |
189
+ | `resourceGovernor.enabled` | boolean | `true` | `false` forces mode `off` |
190
+ | `resourceGovernor.mode` | string | `"observe"` | `off` (disabled), `observe` (record only), `adaptive`/`strict` (throttle per-run tool concurrency under pressure) |
191
+ | `resourceGovernor.maxProbeMs` | number | `300` | Async probe deadline in ms; valid `50..5000` |
192
+ | `resourceGovernor.cpuSampleMs` | number | `180` | CPU two-sample interval in ms; valid `150..250` |
193
+ | `resourceGovernor.constrainedAvailableMemoryMiB` | number | `1536` | Below this effective available memory the host is `constrained` |
194
+ | `resourceGovernor.criticalAvailableMemoryMiB` | number | `512` | Below this it is `critical`; must be `<=` the constrained threshold |
195
+ | `resourceGovernor.constrainedDiskFreeMiB` | number | `4096` | Workspace free-disk threshold for `constrained` |
196
+ | `resourceGovernor.criticalDiskFreeMiB` | number | `1024` | Workspace free-disk threshold for `critical` |
197
+ | `resourceGovernor.constrainedHeapRatio` | number | `0.75` | V8 heap used/limit ratio for `constrained` |
198
+ | `resourceGovernor.criticalHeapRatio` | number | `0.85` | V8 heap ratio for `critical` |
199
+ | `resourceGovernor.busyCpuPercent` | number | `85` | System CPU percent that throttles; CPU alone never reports `critical` |
200
+ | `resourceGovernor.normalMaxToolConcurrency` | number | `4` | Admission tool cap at `normal` pressure |
201
+ | `resourceGovernor.constrainedMaxToolConcurrency` | number | `2` | Admission tool cap at `constrained` pressure |
202
+ | `resourceGovernor.criticalMaxToolConcurrency` | number | `1` | Admission tool cap at `critical` pressure |
203
+ | `resourceGovernor.normalMaxParallelLanes` | number | `4` | Subagent lane cap at `normal` |
204
+ | `resourceGovernor.constrainedMaxParallelLanes` | number | `2` | Subagent lane cap at `constrained` |
205
+ | `resourceGovernor.criticalMaxParallelLanes` | number | `1` | Subagent lane cap at `critical` |
206
+ | `resourceGovernor.normalMaxHeavyProcesses` | number | `2` | Heavy process cap at `normal` |
207
+ | `resourceGovernor.constrainedMaxHeavyProcesses` | number | `1` | Heavy process cap at `constrained` |
208
+ | `resourceGovernor.criticalMaxHeavyProcesses` | number | `1` | Heavy process cap at `critical` |
209
+
210
+ Validation is explicit and fail-closed: invalid values are reported (in `/resource policy` and `omk doctor resources --json` under `settingsErrors`) and the defaults apply for the failed area. Caps must satisfy `normal >= constrained >= critical` and stay within `1..64`; critical thresholds must not exceed constrained ones. Admission caps never raise user-configured caps (`agent.maxToolConcurrency` keeps precedence; `0` "unlimited" is limited to the admission cap in `adaptive` and `strict` modes).
211
+
212
+ `OMK_RESOURCE_GOVERNOR=off|observe|adaptive|strict` overrides the mode for one process, e.g. `OMK_RESOURCE_GOVERNOR=off omk` as a rollback switch.
213
+
214
+ ### Completion Sound
215
+
216
+ Plays a short system sound when a long prompt finally settles (all retries and continuations drained), only in the interactive TUI on a real TTY — never in RPC, JSON, print mode, or CI. Default off. Backends use fixed executables with fixed arguments (macOS `afplay`, Windows/WSL PowerShell system sound, Linux `canberra-gtk-play`/`paplay`/`aplay`), falling back to the terminal bell. Sound failures are diagnostics only and never affect the prompt outcome.
217
+
218
+ | Setting | Type | Default | Description |
219
+ | --------- | ------ | --------- | ------------- |
220
+ | `notifications.completionSound.enabled` | boolean | `false` | Master switch; env `OMK_COMPLETION_SOUND` set to `0` or `1` overrides per process |
221
+ | `notifications.completionSound.minDurationMs` | number | `5000` | Only chime for prompts that ran at least this long |
222
+ | `notifications.completionSound.onSuccess` | boolean | `true` | Chime on completed prompts |
223
+ | `notifications.completionSound.onFailure` | boolean | `true` | Chime on failed prompts (user aborts never chime) |
224
+ | `notifications.completionSound.terminalBellFallback` | boolean | `true` | Fall back to the terminal BEL when no sound backend works |
225
+
226
+ ```json
227
+ {
228
+ "notifications": {
229
+ "completionSound": { "enabled": true, "minDurationMs": 10000 }
230
+ }
231
+ }
232
+ ```
233
+
234
+ ```json
235
+ {
236
+ "resourceGovernor": {
237
+ "mode": "observe",
238
+ "constrainedAvailableMemoryMiB": 2048,
239
+ "criticalAvailableMemoryMiB": 512
240
+ }
241
+ }
242
+ ```
243
+
183
244
  ### Branch Summary
184
245
 
185
246
  | Setting | Type | Default | Description |
@@ -296,11 +357,12 @@ Paths in `~/.omk/agent/settings.json` resolve relative to `~/.omk/agent`. Paths
296
357
  | `packages` | array | `[]` | npm/git packages to load resources from |
297
358
  | `extensions` | string[] | `[]` | Local extension file paths or directories |
298
359
  | `skills` | string[] | `[]` | Local skill file paths or directories |
360
+ | `defaultActiveSkills` | string[] | `[]` | Global-only list of up to 64 exact user-scoped skill names marked active in every prompt; full instructions remain on-demand |
299
361
  | `prompts` | string[] | `[]` | Local prompt template paths or directories |
300
362
  | `themes` | string[] | `[]` | Local theme file paths or directories |
301
363
  | `enableSkillCommands` | boolean | `true` | Register skills as `/skill:name` commands |
302
364
 
303
- Arrays support glob patterns and exclusions. Use `!pattern` to exclude. Use `+path` to force-include an exact path and `-path` to force-exclude an exact path.
365
+ Resource path arrays (`extensions`, `skills`, `prompts`, and `themes`) support glob patterns and exclusions. Use `!pattern` to exclude, `+path` to force-include an exact path, and `-path` to force-exclude one. `defaultActiveSkills` accepts exact names only.
304
366
 
305
367
  #### packages
306
368
 
@@ -356,7 +418,7 @@ See [packages.md](packages.md) for package management details.
356
418
 
357
419
  ## Project Overrides
358
420
 
359
- Project settings (`.omk/settings.json`) override global settings. Nested objects are merged. `contextBudget` is the exception: it is read from global settings only.
421
+ Project settings (`.omk/settings.json`) override global settings. Nested objects are merged. Settings marked global-only, including `contextBudget` and `defaultActiveSkills`, are read from global settings only.
360
422
 
361
423
  ```json
362
424
  // ~/.omk/agent/settings.json (global)
package/docs/skills.md CHANGED
@@ -77,6 +77,22 @@ For project-level Claude Code skills, add to `.omk/settings.json`:
77
77
 
78
78
  This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
79
79
 
80
+ ### Default active skills
81
+
82
+ Set `defaultActiveSkills` in global settings to mark selected discovered skills active in every prompt without repeating `!skill:` invocations:
83
+
84
+ ```json
85
+ {
86
+ "defaultActiveSkills": ["programming", "review-work", "security-review"]
87
+ }
88
+ ```
89
+
90
+ The global-only setting accepts up to 64 exact skill names, not paths or patterns. Only user-scoped discovered skills can satisfy it; a project skill with the same name is not promoted. Project settings cannot replace or clear the list.
91
+
92
+ OMK adds a compact active-skills marker containing names and, for explicit-only skills hidden from the normal inventory, the location needed to read them. It does not concatenate every `SKILL.md`; descriptions remain in the normal inventory and full instructions stay on-demand. With context budgeting enabled, active inventory entries receive hard priority. `!skill:` and SDK `activeSkillNames` selections merge for that turn; `/skill:` continues to expand the selected skill directly. Unknown or unavailable names have no prompt effect.
93
+
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
+
80
96
  ## Skill Commands
81
97
 
82
98
  Skills register as `/skill:name` commands and interactive `!` launcher entries:
package/docs/usage.md CHANGED
@@ -22,7 +22,7 @@ The editor can be replaced temporarily by built-in UI such as `/settings` or by
22
22
  | File reference | Type `@` to fuzzy-search project files |
23
23
  | Path completion | Press Tab to complete paths |
24
24
  | Multi-line input | Shift+Enter, or Ctrl+Enter on Windows Terminal |
25
- | Images | Paste with Ctrl+V, Alt+V on Windows, or drag into the terminal |
25
+ | Images | Paste with Ctrl+V (Alt+V on Windows) or drag into the terminal; pastes attach as preview chips above the editor and send with your next prompt |
26
26
  | Skill/bash launcher | `!` opens skill completion; `!skill:name prompt` invokes a skill; `!omk <role-or-request>` routes through OMK role hubs |
27
27
  | Shell command | `! command` runs and sends output to the model |
28
28
  | Hidden shell command | `!! command` runs without sending output to the model |
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-custom-provider-anthropic",
3
- "version": "0.96.1",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-custom-provider-anthropic",
9
- "version": "0.96.1",
9
+ "version": "0.97.0",
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.96.1",
4
+ "version": "0.97.0",
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.96.1",
4
+ "version": "0.97.0",
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.96.1",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-gondolin",
9
- "version": "0.96.1",
9
+ "version": "0.97.0",
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.96.1",
4
+ "version": "0.97.0",
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.96.1",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-sandbox",
9
- "version": "0.96.1",
9
+ "version": "0.97.0",
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.96.1",
4
+ "version": "0.97.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -9,6 +9,7 @@
9
9
  import { describe, expect, it } from "vitest";
10
10
  import { auditCapabilities, classifyAgent, deriveCapabilities } from "./agent-capability-router.ts";
11
11
  import { buildCapabilityCatalog } from "./capabilities.ts";
12
+ import { DOMAIN_PROFILES } from "./domain-profiles.ts";
12
13
 
13
14
  // Built once at module scope from the live skill tree under the agent
14
15
  // directory. This is populated during local verification but empty in CI (the
@@ -18,6 +19,12 @@ import { buildCapabilityCatalog } from "./capabilities.ts";
18
19
  const catalog = buildCapabilityCatalog({ agentDir: `${process.env.HOME ?? "/home/yu"}/.omk/agent` });
19
20
  const hasSkillCatalog = catalog.skills.size > 0;
20
21
 
22
+ describe("domain profile safety", () => {
23
+ it("does not route agents to offensive jailbreak skills", () => {
24
+ expect(DOMAIN_PROFILES.flatMap((profile) => profile.skillPool)).not.toContain("offensive-jailbreak");
25
+ });
26
+ });
27
+
21
28
  describe("classifyAgent", () => {
22
29
  it("classifies by name token: seo-specialist → marketing-content", () => {
23
30
  expect(classifyAgent("seo-specialist", "x")?.id).toBe("marketing-content");
@@ -132,7 +132,6 @@ export const DOMAIN_PROFILES: readonly DomainProfile[] = [
132
132
  ],
133
133
  skillPool: [
134
134
  "omk-godmod",
135
- "offensive-jailbreak",
136
135
  "reverse-skill",
137
136
  "programming",
138
137
  "insane-search",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-with-deps",
3
- "version": "0.96.1",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-with-deps",
9
- "version": "0.96.1",
9
+ "version": "0.97.0",
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.96.1",
4
+ "version": "0.97.0",
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.96.1",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "open-multi-agent-kit",
9
- "version": "0.96.1",
9
+ "version": "0.97.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "omk-agent-core": "^0.96.1",
13
- "omk-ai": "^0.96.1",
14
- "omk-tui": "^0.96.1",
12
+ "omk-agent-core": "^0.97.0",
13
+ "omk-ai": "^0.97.0",
14
+ "omk-tui": "^0.97.0",
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.96.1",
31
- "omk-protocol": "^0.96.1"
30
+ "omk-adaptorch-wpl": "^0.97.0",
31
+ "omk-protocol": "^0.97.0"
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.96.1",
1289
- "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.96.1.tgz",
1288
+ "version": "0.97.0",
1289
+ "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.97.0.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.96.1",
1297
- "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.96.1.tgz",
1296
+ "version": "0.97.0",
1297
+ "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.97.0.tgz",
1298
1298
  "license": "MIT",
1299
1299
  "dependencies": {
1300
- "omk-ai": "^0.96.1",
1300
+ "omk-ai": "^0.97.0",
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.96.1",
1311
- "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.96.1.tgz",
1310
+ "version": "0.97.0",
1311
+ "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.97.0.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.96.1",
1334
- "resolved": "https://registry.npmjs.org/omk-protocol/-/omk-protocol-0.96.1.tgz",
1333
+ "version": "0.97.0",
1334
+ "resolved": "https://registry.npmjs.org/omk-protocol/-/omk-protocol-0.97.0.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.96.1",
1342
- "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.96.1.tgz",
1341
+ "version": "0.97.0",
1342
+ "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.97.0.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.96.1",
3
+ "version": "0.97.0",
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": {
@@ -32,21 +32,19 @@
32
32
  ],
33
33
  "scripts": {
34
34
  "clean": "shx rm -rf dist",
35
- "build": "node ./scripts/link-workspace-deps.mjs && tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets",
35
+ "build": "node ./scripts/link-workspace-deps.mjs && tsgo -p tsconfig.build.json && node ../../scripts/prune-dist-orphans.mjs . && shx chmod +x dist/cli.js && npm run copy-assets",
36
36
  "build:binary": "npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/omk && npm run copy-binary-assets",
37
37
  "copy-assets": "shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/ && shx mkdir -p dist/core/export-html/vendor && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/core/export-html/ && shx cp src/core/export-html/vendor/*.js dist/core/export-html/vendor/",
38
38
  "copy-binary-assets": "shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/",
39
39
  "test": "vitest --run",
40
40
  "shrinkwrap": "node ../../scripts/generate-coding-agent-shrinkwrap.mjs",
41
41
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap",
42
- "link-workspace-deps": "node ./scripts/link-workspace-deps.mjs",
43
- "prepare": "node ./scripts/link-workspace-deps.mjs",
44
- "postinstall": "node ./scripts/link-workspace-deps.mjs"
42
+ "link-workspace-deps": "node ./scripts/link-workspace-deps.mjs"
45
43
  },
46
44
  "dependencies": {
47
- "omk-agent-core": "^0.96.1",
48
- "omk-ai": "^0.96.1",
49
- "omk-tui": "^0.96.1",
45
+ "omk-agent-core": "^0.97.0",
46
+ "omk-ai": "^0.97.0",
47
+ "omk-tui": "^0.97.0",
50
48
  "@silvia-odwyer/photon-node": "0.3.4",
51
49
  "canonicalize": "4.0.0",
52
50
  "chalk": "5.6.2",
@@ -62,8 +60,8 @@
62
60
  "typebox": "1.3.11",
63
61
  "undici": "8.10.0",
64
62
  "yaml": "2.9.0",
65
- "omk-adaptorch-wpl": "^0.96.1",
66
- "omk-protocol": "^0.96.1"
63
+ "omk-adaptorch-wpl": "^0.97.0",
64
+ "omk-protocol": "^0.97.0"
67
65
  },
68
66
  "overrides": {
69
67
  "rimraf": "6.1.2",