open-multi-agent-kit 0.92.0 → 0.94.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 (173) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/README.md +2 -2
  3. package/dist/core/agent-session.d.ts +36 -14
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +155 -357
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/compaction/branch-summarization.d.ts +5 -1
  8. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  9. package/dist/core/compaction/branch-summarization.js +5 -7
  10. package/dist/core/compaction/branch-summarization.js.map +1 -1
  11. package/dist/core/compaction/compaction.d.ts +12 -3
  12. package/dist/core/compaction/compaction.d.ts.map +1 -1
  13. package/dist/core/compaction/compaction.js +28 -15
  14. package/dist/core/compaction/compaction.js.map +1 -1
  15. package/dist/core/extensions/builtin/command-safety-gate.d.ts +8 -0
  16. package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -1
  17. package/dist/core/extensions/builtin/command-safety-gate.js +23 -0
  18. package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -1
  19. package/dist/core/extensions/runner.d.ts.map +1 -1
  20. package/dist/core/extensions/runner.js +4 -0
  21. package/dist/core/extensions/runner.js.map +1 -1
  22. package/dist/core/extensions/types.d.ts +2 -0
  23. package/dist/core/extensions/types.d.ts.map +1 -1
  24. package/dist/core/extensions/types.js.map +1 -1
  25. package/dist/core/keybindings.d.ts +5 -0
  26. package/dist/core/keybindings.d.ts.map +1 -1
  27. package/dist/core/keybindings.js +5 -0
  28. package/dist/core/keybindings.js.map +1 -1
  29. package/dist/core/model-resolver.d.ts +41 -3
  30. package/dist/core/model-resolver.d.ts.map +1 -1
  31. package/dist/core/model-resolver.js +17 -9
  32. package/dist/core/model-resolver.js.map +1 -1
  33. package/dist/core/package-manager.d.ts.map +1 -1
  34. package/dist/core/package-manager.js +11 -1
  35. package/dist/core/package-manager.js.map +1 -1
  36. package/dist/core/provider-resilience.d.ts.map +1 -1
  37. package/dist/core/provider-resilience.js +3 -1
  38. package/dist/core/provider-resilience.js.map +1 -1
  39. package/dist/core/reasoning-router-v4-weights.d.ts.map +1 -1
  40. package/dist/core/reasoning-router-v4-weights.js +9 -3
  41. package/dist/core/reasoning-router-v4-weights.js.map +1 -1
  42. package/dist/core/reasoning-router-v4.d.ts.map +1 -1
  43. package/dist/core/reasoning-router-v4.js +94 -24
  44. package/dist/core/reasoning-router-v4.js.map +1 -1
  45. package/dist/core/resource-loader.d.ts.map +1 -1
  46. package/dist/core/resource-loader.js +11 -5
  47. package/dist/core/resource-loader.js.map +1 -1
  48. package/dist/core/sandbox/default-policy.d.ts +14 -0
  49. package/dist/core/sandbox/default-policy.d.ts.map +1 -0
  50. package/dist/core/sandbox/default-policy.js +58 -0
  51. package/dist/core/sandbox/default-policy.js.map +1 -0
  52. package/dist/core/sdk.d.ts.map +1 -1
  53. package/dist/core/sdk.js +1 -1
  54. package/dist/core/sdk.js.map +1 -1
  55. package/dist/core/session-bash-runtime.d.ts +62 -0
  56. package/dist/core/session-bash-runtime.d.ts.map +1 -0
  57. package/dist/core/session-bash-runtime.js +167 -0
  58. package/dist/core/session-bash-runtime.js.map +1 -0
  59. package/dist/core/session-bash-service.d.ts +61 -0
  60. package/dist/core/session-bash-service.d.ts.map +1 -0
  61. package/dist/core/session-bash-service.js +155 -0
  62. package/dist/core/session-bash-service.js.map +1 -0
  63. package/dist/core/session-compaction-service.d.ts +48 -0
  64. package/dist/core/session-compaction-service.d.ts.map +1 -0
  65. package/dist/core/session-compaction-service.js +250 -0
  66. package/dist/core/session-compaction-service.js.map +1 -0
  67. package/dist/core/session-file-compaction.d.ts.map +1 -1
  68. package/dist/core/session-file-compaction.js +39 -5
  69. package/dist/core/session-file-compaction.js.map +1 -1
  70. package/dist/core/session-termination.d.ts.map +1 -1
  71. package/dist/core/session-termination.js +1 -1
  72. package/dist/core/session-termination.js.map +1 -1
  73. package/dist/core/settings-manager.d.ts +3 -0
  74. package/dist/core/settings-manager.d.ts.map +1 -1
  75. package/dist/core/settings-manager.js +8 -0
  76. package/dist/core/settings-manager.js.map +1 -1
  77. package/dist/core/skills-catalog-cache.d.ts +25 -0
  78. package/dist/core/skills-catalog-cache.d.ts.map +1 -0
  79. package/dist/core/skills-catalog-cache.js +123 -0
  80. package/dist/core/skills-catalog-cache.js.map +1 -0
  81. package/dist/core/skills.d.ts +6 -0
  82. package/dist/core/skills.d.ts.map +1 -1
  83. package/dist/core/skills.js +25 -4
  84. package/dist/core/skills.js.map +1 -1
  85. package/dist/core/system-prompt.d.ts.map +1 -1
  86. package/dist/core/system-prompt.js +2 -2
  87. package/dist/core/system-prompt.js.map +1 -1
  88. package/dist/core/tools/bash.d.ts +5 -0
  89. package/dist/core/tools/bash.d.ts.map +1 -1
  90. package/dist/core/tools/bash.js +41 -13
  91. package/dist/core/tools/bash.js.map +1 -1
  92. package/dist/core/tools/diagnostics.d.ts +29 -0
  93. package/dist/core/tools/diagnostics.d.ts.map +1 -0
  94. package/dist/core/tools/diagnostics.js +325 -0
  95. package/dist/core/tools/diagnostics.js.map +1 -0
  96. package/dist/core/tools/index.d.ts +2 -1
  97. package/dist/core/tools/index.d.ts.map +1 -1
  98. package/dist/core/tools/index.js +18 -1
  99. package/dist/core/tools/index.js.map +1 -1
  100. package/dist/core/verified-bash-adapter.d.ts +18 -1
  101. package/dist/core/verified-bash-adapter.d.ts.map +1 -1
  102. package/dist/core/verified-bash-adapter.js +38 -1
  103. package/dist/core/verified-bash-adapter.js.map +1 -1
  104. package/dist/core/verified-bash-runtime.d.ts +13 -0
  105. package/dist/core/verified-bash-runtime.d.ts.map +1 -0
  106. package/dist/core/verified-bash-runtime.js +81 -0
  107. package/dist/core/verified-bash-runtime.js.map +1 -0
  108. package/dist/index.d.ts +4 -2
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +4 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/modes/interactive/components/control-panel-box.d.ts +27 -0
  113. package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -1
  114. package/dist/modes/interactive/components/control-panel-box.js +60 -8
  115. package/dist/modes/interactive/components/control-panel-box.js.map +1 -1
  116. package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -1
  117. package/dist/modes/interactive/components/control-panel-layout.js +100 -45
  118. package/dist/modes/interactive/components/control-panel-layout.js.map +1 -1
  119. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +9 -0
  120. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/control-panel-runtime-status.js +10 -8
  122. package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -1
  123. package/dist/modes/interactive/components/control-panel-sparkles.d.ts +5 -0
  124. package/dist/modes/interactive/components/control-panel-sparkles.d.ts.map +1 -1
  125. package/dist/modes/interactive/components/control-panel-sparkles.js +14 -9
  126. package/dist/modes/interactive/components/control-panel-sparkles.js.map +1 -1
  127. package/dist/modes/interactive/components/footer.d.ts +10 -0
  128. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  129. package/dist/modes/interactive/components/footer.js +3 -3
  130. package/dist/modes/interactive/components/footer.js.map +1 -1
  131. package/dist/modes/interactive/components/status-sidebar.d.ts +49 -0
  132. package/dist/modes/interactive/components/status-sidebar.d.ts.map +1 -0
  133. package/dist/modes/interactive/components/status-sidebar.js +253 -0
  134. package/dist/modes/interactive/components/status-sidebar.js.map +1 -0
  135. package/dist/modes/interactive/interactive-mode.d.ts +9 -0
  136. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  137. package/dist/modes/interactive/interactive-mode.js +94 -20
  138. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  139. package/dist/modes/interactive/theme/omk-neon-control.json +13 -13
  140. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  141. package/dist/modes/rpc/rpc-mode.js +1 -0
  142. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  143. package/dist/types/evidence.d.ts +1 -1
  144. package/dist/types/evidence.d.ts.map +1 -1
  145. package/dist/types/evidence.js.map +1 -1
  146. package/dist/utils/clipboard.d.ts.map +1 -1
  147. package/dist/utils/clipboard.js +19 -8
  148. package/dist/utils/clipboard.js.map +1 -1
  149. package/dist/utils/frontmatter.d.ts.map +1 -1
  150. package/dist/utils/frontmatter.js +31 -5
  151. package/dist/utils/frontmatter.js.map +1 -1
  152. package/docs/compaction.md +7 -0
  153. package/docs/docs.json +4 -0
  154. package/docs/environment-variables.md +94 -0
  155. package/docs/index.md +1 -0
  156. package/docs/rpc.md +5 -2
  157. package/docs/sdk.md +10 -4
  158. package/docs/settings.md +1 -0
  159. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  160. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  161. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  162. package/examples/extensions/gondolin/package-lock.json +2 -2
  163. package/examples/extensions/gondolin/package.json +1 -1
  164. package/examples/extensions/sandbox/package-lock.json +2 -2
  165. package/examples/extensions/sandbox/package.json +1 -1
  166. package/examples/extensions/subagent/agents.test.ts +86 -0
  167. package/examples/extensions/subagent/agents.ts +18 -4
  168. package/examples/extensions/subagent/capabilities.ts +15 -1
  169. package/examples/extensions/subagent/domain-profiles.ts +272 -0
  170. package/examples/extensions/with-deps/package-lock.json +2 -2
  171. package/examples/extensions/with-deps/package.json +1 -1
  172. package/npm-shrinkwrap.json +15 -15
  173. package/package.json +10 -7
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Unit tests for `parseEnforceFlag` coercion in agents discovery.
3
+ *
4
+ * Regression: 2026-07-26 — YAML boolean `enforceCapabilities: true` was
5
+ * silently ignored because the parser only accepted the string "true". These
6
+ * tests pin coercion behavior for boolean/number/string/garbage inputs via
7
+ * real `discoverAgents` against a temp agents dir (no I/O mocks, no LLM).
8
+ */
9
+ import * as fs from "node:fs";
10
+ import * as os from "node:os";
11
+ import * as path from "node:path";
12
+ import { afterEach, describe, expect, it } from "vitest";
13
+ import { discoverAgents } from "./agents.ts";
14
+
15
+ const tmpDirs: string[] = [];
16
+
17
+ function agent(name: string, fm: string): string {
18
+ return `---\nname: ${name}\ndescription: test agent\ntools: read\n${fm}\n---\nbody\n`;
19
+ }
20
+
21
+ // discoverAgents(cwd, scope) resolves the user dir from OMK_CODING_AGENT_DIR.
22
+ // Point it at our temp dir via env so no real agent tree is touched.
23
+ function withAgentDir(dir: string, fn: () => ReturnType<typeof discoverAgents>) {
24
+ const prev = process.env.OMK_CODING_AGENT_DIR;
25
+ process.env.OMK_CODING_AGENT_DIR = path.dirname(dir); // parent contains "agents"
26
+ try {
27
+ return fn();
28
+ } finally {
29
+ if (prev === undefined) delete process.env.OMK_CODING_AGENT_DIR;
30
+ else process.env.OMK_CODING_AGENT_DIR = prev;
31
+ }
32
+ }
33
+
34
+ afterEach(() => {
35
+ for (const dir of tmpDirs.splice(0)) fs.rmSync(dir, { recursive: true, force: true });
36
+ });
37
+
38
+ describe("parseEnforceFlag coercion (via discoverAgents)", () => {
39
+ const cases: Array<[string, string, boolean | undefined]> = [
40
+ ["yaml-bool-true", "enforceCapabilities: true", true],
41
+ ["yaml-bool-false", "enforceCapabilities: false", false],
42
+ ["num-1", "enforceCapabilities: 1", true],
43
+ ["num-0", "enforceCapabilities: 0", false],
44
+ ["str-yes", "enforceCapabilities: yes", true],
45
+ ["str-on", "enforceCapabilities: on", true],
46
+ ["str-no", "enforceCapabilities: no", false],
47
+ ["str-off", "enforceCapabilities: off", false],
48
+ ["str-quoted-true", 'enforceCapabilities: "true"', true],
49
+ ["str-quoted-false", 'enforceCapabilities: "false"', false],
50
+ ["str-True-spaced", "enforceCapabilities: ' True '", true],
51
+ ["garbage-num-2", "enforceCapabilities: 2", undefined],
52
+ ["garbage-word", "enforceCapabilities: treu", undefined],
53
+ ["garbage-empty", 'enforceCapabilities: ""', undefined],
54
+ ["absent-key", "", undefined],
55
+ ];
56
+
57
+ for (const [id, fm, expected] of cases) {
58
+ it(`${id} → ${String(expected)}`, () => {
59
+ const parent = fs.mkdtempSync(path.join(os.tmpdir(), "omk-agent-dir-"));
60
+ tmpDirs.push(parent);
61
+ const agentsDir = path.join(parent, "agents");
62
+ fs.mkdirSync(agentsDir);
63
+ fs.writeFileSync(path.join(agentsDir, `${id}.md`), agent(id, fm), "utf-8");
64
+
65
+ const result = withAgentDir(agentsDir, () => discoverAgents(process.cwd(), "user"));
66
+ const found = result.agents.find((a) => a.name === id);
67
+ expect(found, `agent ${id} discovered`).toBeDefined();
68
+ expect(found?.enforceCapabilities).toBe(expected);
69
+ });
70
+ }
71
+
72
+ it("fail-closed: garbage input never enables enforcement", () => {
73
+ const parent = fs.mkdtempSync(path.join(os.tmpdir(), "omk-agent-dir-"));
74
+ tmpDirs.push(parent);
75
+ const agentsDir = path.join(parent, "agents");
76
+ fs.mkdirSync(agentsDir);
77
+ for (const bad of ["treu", "2", '" "', "[true]", "~"]) {
78
+ const name = `bad-${bad.replace(/[^a-z0-9]/gi, "")}`;
79
+ fs.writeFileSync(path.join(agentsDir, `${name}.md`), agent(name, `enforceCapabilities: ${bad}`), "utf-8");
80
+ }
81
+ const result = withAgentDir(agentsDir, () => discoverAgents(process.cwd(), "user"));
82
+ for (const a of result.agents) {
83
+ expect(a.enforceCapabilities, `${a.name} must not enable on garbage`).not.toBe(true);
84
+ }
85
+ });
86
+ });
@@ -29,6 +29,23 @@ export interface AgentDiscoveryResult {
29
29
  projectAgentsDir: string | null;
30
30
  }
31
31
 
32
+ /** Coerce frontmatter enforceCapabilities (boolean | string | unknown) to boolean|undefined. */
33
+ function parseEnforceFlag(value: unknown): boolean | undefined {
34
+ if (typeof value === "boolean") return value;
35
+ if (typeof value === "number") {
36
+ if (value === 1) return true;
37
+ if (value === 0) return false;
38
+ return undefined;
39
+ }
40
+ if (typeof value === "string") {
41
+ const v = value.trim().toLowerCase();
42
+ if (v === "true" || v === "1" || v === "yes" || v === "on") return true;
43
+ if (v === "false" || v === "0" || v === "no" || v === "off") return false;
44
+ return undefined;
45
+ }
46
+ return undefined;
47
+ }
48
+
32
49
  function loadAgentsFromDir(dir: string, source: "user" | "project"): AgentConfig[] {
33
50
  const agents: AgentConfig[] = [];
34
51
 
@@ -67,10 +84,7 @@ function loadAgentsFromDir(dir: string, source: "user" | "project"): AgentConfig
67
84
  .filter(Boolean);
68
85
 
69
86
  const capabilities = parseCapabilities(frontmatter);
70
- const enforceCapabilities =
71
- typeof frontmatter.enforceCapabilities === "string"
72
- ? frontmatter.enforceCapabilities.trim().toLowerCase() === "true"
73
- : undefined;
87
+ const enforceCapabilities = parseEnforceFlag(frontmatter.enforceCapabilities);
74
88
 
75
89
  agents.push({
76
90
  name: frontmatter.name,
@@ -69,16 +69,19 @@ export const VALID_HOOKS: readonly string[] = [
69
69
  ];
70
70
 
71
71
  /**
72
- * Compiled-in MCP server set — the 18 configured servers sourced from the MCP
72
+ * Compiled-in MCP server set — live OMK MCP ids (mcp.json + known optional servers) sourced from the MCP
73
73
  * configuration. This list MUST be updated if the runtime MCP set changes.
74
74
  */
75
75
  export const VALID_MCP: readonly string[] = [
76
76
  "adaptorch",
77
+ "adaptorch-mcp",
78
+ "blender-mcp",
77
79
  "chrome-devtools",
78
80
  "context7",
79
81
  "fetch",
80
82
  "filesystem",
81
83
  "firecrawl",
84
+ "ghidra",
82
85
  "github",
83
86
  "lean-ctx",
84
87
  "memory",
@@ -88,6 +91,7 @@ export const VALID_MCP: readonly string[] = [
88
91
  "serena",
89
92
  "supermemory",
90
93
  "understand-anything",
94
+ "unity-mcp",
91
95
  "zai-reader",
92
96
  "zai-vision",
93
97
  "zai-zread",
@@ -180,6 +184,16 @@ function addSkillsFromRoot(root: string, skills: Map<string, string>): void {
180
184
  entries.sort();
181
185
  for (const rel of entries) {
182
186
  if (path.basename(rel) !== SKILL_FILE_NAME) continue;
187
+ // Skip archived/corpus trees — they collide with real skill names (e.g. code-review).
188
+ const relPosix = rel.split(path.sep).join("/");
189
+ if (
190
+ relPosix.includes("system-prompts-leaks/") ||
191
+ relPosix.includes("/corpus/") ||
192
+ relPosix.includes("node_modules/") ||
193
+ relPosix.includes("/.git/")
194
+ ) {
195
+ continue;
196
+ }
183
197
  const abs = path.resolve(root, rel);
184
198
  let stat: fs.Stats;
185
199
  try {
@@ -23,6 +23,278 @@ export interface DomainProfile {
23
23
 
24
24
  /** All domain profiles, ordered so that more specific domains precede general ones. */
25
25
  export const DOMAIN_PROFILES: readonly DomainProfile[] = [
26
+ // ── OMK-native elite domains (prepended — name-weighted, high specificity) ──
27
+
28
+ {
29
+ id: "omk-core-eng",
30
+ label: "OMK Core Engineering Lanes",
31
+ keywords: [
32
+ /omk-?coder/i,
33
+ /omk-?explorer/i,
34
+ /omk-?reviewer/i,
35
+ /omk-?tester/i,
36
+ /omk-?architect/i,
37
+ /omk-?qa\b/i,
38
+ /omk-?diffsurgeon/i,
39
+ /omk-?vision-?debugger/i,
40
+ /diff.?surgeon/i,
41
+ /vision.?debugger/i,
42
+ /\bcodemod\b/i,
43
+ /\btypecheck\b/i,
44
+ ],
45
+ skillPool: [
46
+ "programming",
47
+ "debugging",
48
+ "ponytail",
49
+ "ast-grep",
50
+ "lsp",
51
+ "refactor",
52
+ "review-work",
53
+ "code-review",
54
+ "tdd-workflow",
55
+ "git-master",
56
+ "gstack",
57
+ "remove-ai-slops",
58
+ "ponytail-review",
59
+ "ponytail-audit",
60
+ "visual-qa",
61
+ "frontend",
62
+ "understand-anything",
63
+ "headroom",
64
+ "ulw-plan",
65
+ "python-testing",
66
+ "golang-testing",
67
+ "rust-testing",
68
+ ],
69
+ defaultMcp: [
70
+ "filesystem",
71
+ "context7",
72
+ "memory",
73
+ "understand-anything",
74
+ "lean-ctx",
75
+ "chrome-devtools",
76
+ "playwright",
77
+ "zai-vision",
78
+ ],
79
+ defaultHooks: [
80
+ "session-context",
81
+ "post-format",
82
+ "typecheck-after-edit",
83
+ "eslint-after-edit",
84
+ "stop-verify",
85
+ "branch-diff-snapshot",
86
+ ],
87
+ },
88
+
89
+ {
90
+ id: "omk-orchestration",
91
+ label: "OMK Orchestration & Lanes",
92
+ keywords: [
93
+ /omk-?conductor/i,
94
+ /omk-?router/i,
95
+ /omk-?planner/i,
96
+ /omk-?aggregator/i,
97
+ /omk-?integrator/i,
98
+ /omk-?loopback/i,
99
+ /omk-?worktree/i,
100
+ /\bconductor\b/i,
101
+ /\blane.?grant/i,
102
+ /omk-?ontology/i,
103
+ /\bsubagent/i,
104
+ /\borchestrat/i,
105
+ ],
106
+ skillPool: [
107
+ "adaptorch-route",
108
+ "adaptorch",
109
+ "omk-plan",
110
+ "ulw-plan",
111
+ "understand-anything",
112
+ "headroom",
113
+ "omk-loop",
114
+ "omk-agent-ops",
115
+ "omk-engineering",
116
+ "gstack",
117
+ "git-master",
118
+ ],
119
+ defaultMcp: ["adaptorch", "memory", "understand-anything"],
120
+ defaultHooks: ["session-context", "precompact-checkpoint", "subagent-stop-audit"],
121
+ },
122
+ {
123
+ id: "omk-godmode-research",
124
+ label: "OMK Max-Capability Research",
125
+ keywords: [
126
+ /omk-?godmode/i,
127
+ /omk-?godmod/i,
128
+ /\bgodmode\b/i,
129
+ /offensive-?jailbreak/i,
130
+ /full.?spectrum/i,
131
+ /max-?capability/i,
132
+ ],
133
+ skillPool: [
134
+ "omk-godmod",
135
+ "offensive-jailbreak",
136
+ "reverse-skill",
137
+ "programming",
138
+ "insane-search",
139
+ "debugging",
140
+ "security-review",
141
+ "omk-crawling",
142
+ ],
143
+ defaultMcp: ["filesystem", "memory", "fetch", "firecrawl", "ghidra", "playwright"],
144
+ defaultHooks: ["session-context", "subagent-stop-audit"],
145
+ },
146
+ {
147
+ id: "omk-reverse",
148
+ label: "OMK Reverse Engineering",
149
+ keywords: [
150
+ /omk-?re\b/i,
151
+ /reverse-?skill/i,
152
+ /reverse.?engineer/i,
153
+ /\bdecompile/i,
154
+ /\bghidra\b/i,
155
+ /\bjadx\b/i,
156
+ /\bctf\b/i,
157
+ /\bapk\b/i,
158
+ ],
159
+ skillPool: ["reverse-skill", "security-review", "programming", "insane-search", "debugging", "omk-crawling"],
160
+ defaultMcp: ["filesystem", "memory", "ghidra", "chrome-devtools", "playwright"],
161
+ defaultHooks: ["session-context", "subagent-stop-audit"],
162
+ },
163
+ {
164
+ id: "omk-crawl-search",
165
+ label: "OMK Crawl & Hard-Web Fetch",
166
+ keywords: [
167
+ /omk-?crawler/i,
168
+ /omk-?crawling/i,
169
+ /insane-?search/i,
170
+ /\bwaf\b/i,
171
+ /blocked.?url/i,
172
+ /web.?fetch/i,
173
+ /hard.?web/i,
174
+ ],
175
+ skillPool: ["insane-search", "omk-crawling", "adaptorch", "headroom", "gstack"],
176
+ defaultMcp: ["fetch", "firecrawl", "playwright", "chrome-devtools", "memory"],
177
+ defaultHooks: ["session-context"],
178
+ },
179
+ {
180
+ id: "omk-minimalism",
181
+ label: "OMK Ponytail Minimalism",
182
+ keywords: [
183
+ /omk-?ponytail/i,
184
+ /\bponytail\b/i,
185
+ /\byagni\b/i,
186
+ /over-?engineer/i,
187
+ /slopcutter/i,
188
+ /remove-?ai-?slop/i,
189
+ /\bminimalism\b/i,
190
+ ],
191
+ skillPool: [
192
+ "ponytail",
193
+ "ponytail-review",
194
+ "ponytail-audit",
195
+ "remove-ai-slops",
196
+ "refactor",
197
+ "programming",
198
+ "docs-write-concisely",
199
+ "polish",
200
+ ],
201
+ defaultMcp: ["filesystem", "context7", "memory"],
202
+ defaultHooks: ["post-format", "typecheck-after-edit"],
203
+ },
204
+ {
205
+ id: "omk-debug-perf",
206
+ label: "OMK Debug & Performance",
207
+ keywords: [
208
+ /omk-?debugger/i,
209
+ /omk-?perf/i,
210
+ /omk-?tdd/i,
211
+ /omk-?sre/i,
212
+ /root-?cause/i,
213
+ /\bheisenbug\b/i,
214
+ /\bflaky\b/i,
215
+ /\bincident\b/i,
216
+ /\bbenchmark\b/i,
217
+ /\bhotspot\b/i,
218
+ ],
219
+ skillPool: [
220
+ "debugging",
221
+ "tdd-workflow",
222
+ "programming",
223
+ "ast-grep",
224
+ "lsp",
225
+ "python-testing",
226
+ "golang-testing",
227
+ "rust-testing",
228
+ "refactor",
229
+ "ponytail",
230
+ "omk-loop",
231
+ "omk-agent-ops",
232
+ "gstack",
233
+ ],
234
+ defaultMcp: ["filesystem", "context7", "memory", "github"],
235
+ defaultHooks: ["typecheck-after-edit", "post-format", "session-context"],
236
+ },
237
+ {
238
+ id: "omk-ship",
239
+ label: "OMK Release & Gstack Ship",
240
+ keywords: [
241
+ /omk-?release/i,
242
+ /omk-?gstack/i,
243
+ /\bgstack\b/i,
244
+ /\bchangelog\b/i,
245
+ /\bsemver\b/i,
246
+ /\bcut.?release\b/i,
247
+ /\bland.?pr\b/i,
248
+ /worktree/i,
249
+ ],
250
+ skillPool: [
251
+ "gstack",
252
+ "git-master",
253
+ "review-work",
254
+ "programming",
255
+ "omk-agent-ops",
256
+ "docs-update-docs",
257
+ "omk-loop",
258
+ ],
259
+ defaultMcp: ["filesystem", "memory", "github"],
260
+ defaultHooks: [
261
+ "release-check-before-stop",
262
+ "npm-audit-summary",
263
+ "branch-diff-snapshot",
264
+ "protect-secrets",
265
+ "stop-verify",
266
+ "worktree-create-guard",
267
+ ],
268
+ },
269
+ {
270
+ id: "omk-docs-ui",
271
+ label: "OMK Docs & Frontend",
272
+ keywords: [
273
+ /omk-?docs/i,
274
+ /omk-?frontend/i,
275
+ /docs-write-concisely/i,
276
+ /docs-update-docs/i,
277
+ /\breadme\b/i,
278
+ /tech.?writing/i,
279
+ /visual-?qa/i,
280
+ /\ba11y\b/i,
281
+ ],
282
+ skillPool: [
283
+ "docs-write-concisely",
284
+ "docs-update-docs",
285
+ "remove-ai-slops",
286
+ "polish",
287
+ "frontend",
288
+ "frontend-patterns",
289
+ "visual-qa",
290
+ "programming",
291
+ "ponytail",
292
+ "headroom",
293
+ ],
294
+ defaultMcp: ["filesystem", "memory", "context7", "chrome-devtools", "playwright", "zai-vision"],
295
+ defaultHooks: ["post-format", "typecheck-after-edit", "eslint-after-edit", "session-context"],
296
+ },
297
+
26
298
  {
27
299
  id: "frontend-web",
28
300
  label: "Frontend & Web",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omk-extension-with-deps",
3
- "version": "0.92.0",
3
+ "version": "0.94.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omk-extension-with-deps",
9
- "version": "0.92.0",
9
+ "version": "0.94.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.92.0",
4
+ "version": "0.94.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.92.0",
3
+ "version": "0.94.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "open-multi-agent-kit",
9
- "version": "0.92.0",
9
+ "version": "0.94.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "omk-agent-core": "^0.92.0",
13
- "omk-ai": "^0.92.0",
14
- "omk-tui": "^0.92.0",
12
+ "omk-agent-core": "^0.94.0",
13
+ "omk-ai": "^0.94.0",
14
+ "omk-tui": "^0.94.0",
15
15
  "@silvia-odwyer/photon-node": "0.3.4",
16
16
  "chalk": "5.6.2",
17
17
  "cross-spawn": "7.0.6",
@@ -26,7 +26,7 @@
26
26
  "typebox": "1.1.38",
27
27
  "undici": "8.5.0",
28
28
  "yaml": "2.9.0",
29
- "omk-adaptorch-wpl": "^0.92.0"
29
+ "omk-adaptorch-wpl": "^0.94.0"
30
30
  },
31
31
  "optionalDependencies": {
32
32
  "@mariozechner/clipboard": "0.3.9"
@@ -1424,19 +1424,19 @@
1424
1424
  }
1425
1425
  },
1426
1426
  "node_modules/omk-adaptorch-wpl": {
1427
- "version": "0.92.0",
1428
- "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.92.0.tgz",
1427
+ "version": "0.94.0",
1428
+ "resolved": "https://registry.npmjs.org/omk-adaptorch-wpl/-/omk-adaptorch-wpl-0.94.0.tgz",
1429
1429
  "license": "MIT",
1430
1430
  "engines": {
1431
1431
  "node": ">=22.19.0"
1432
1432
  }
1433
1433
  },
1434
1434
  "node_modules/omk-agent-core": {
1435
- "version": "0.92.0",
1436
- "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.92.0.tgz",
1435
+ "version": "0.94.0",
1436
+ "resolved": "https://registry.npmjs.org/omk-agent-core/-/omk-agent-core-0.94.0.tgz",
1437
1437
  "license": "MIT",
1438
1438
  "dependencies": {
1439
- "omk-ai": "^0.92.0",
1439
+ "omk-ai": "^0.94.0",
1440
1440
  "ignore": "7.0.5",
1441
1441
  "typebox": "1.1.38",
1442
1442
  "yaml": "2.9.0"
@@ -1446,8 +1446,8 @@
1446
1446
  }
1447
1447
  },
1448
1448
  "node_modules/omk-ai": {
1449
- "version": "0.92.0",
1450
- "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.92.0.tgz",
1449
+ "version": "0.94.0",
1450
+ "resolved": "https://registry.npmjs.org/omk-ai/-/omk-ai-0.94.0.tgz",
1451
1451
  "license": "MIT",
1452
1452
  "dependencies": {
1453
1453
  "@anthropic-ai/sdk": "0.91.1",
@@ -1469,8 +1469,8 @@
1469
1469
  }
1470
1470
  },
1471
1471
  "node_modules/omk-tui": {
1472
- "version": "0.92.0",
1473
- "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.92.0.tgz",
1472
+ "version": "0.94.0",
1473
+ "resolved": "https://registry.npmjs.org/omk-tui/-/omk-tui-0.94.0.tgz",
1474
1474
  "license": "MIT",
1475
1475
  "dependencies": {
1476
1476
  "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.92.0",
3
+ "version": "0.94.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,18 +32,21 @@
32
32
  ],
33
33
  "scripts": {
34
34
  "clean": "shx rm -rf dist",
35
- "build": "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 && 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
- "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
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
45
  },
43
46
  "dependencies": {
44
- "omk-agent-core": "^0.92.0",
45
- "omk-ai": "^0.92.0",
46
- "omk-tui": "^0.92.0",
47
+ "omk-agent-core": "^0.94.0",
48
+ "omk-ai": "^0.94.0",
49
+ "omk-tui": "^0.94.0",
47
50
  "@silvia-odwyer/photon-node": "0.3.4",
48
51
  "chalk": "5.6.2",
49
52
  "cross-spawn": "7.0.6",
@@ -58,7 +61,7 @@
58
61
  "typebox": "1.1.38",
59
62
  "undici": "8.5.0",
60
63
  "yaml": "2.9.0",
61
- "omk-adaptorch-wpl": "^0.92.0"
64
+ "omk-adaptorch-wpl": "^0.94.0"
62
65
  },
63
66
  "overrides": {
64
67
  "rimraf": "6.1.2",