oh-my-copilot 4.11.8 → 4.11.9

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 (44) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/bridge/cli.cjs +189 -53
  4. package/bridge/runtime-cli.cjs +12 -2
  5. package/bridge/team-bridge.cjs +1 -1
  6. package/bridge/team.js +13 -3
  7. package/dist/__tests__/bedrock-lm-suffix-hook.test.js +29 -6
  8. package/dist/__tests__/bedrock-lm-suffix-hook.test.js.map +1 -1
  9. package/dist/__tests__/bedrock-model-routing.test.js +1 -1
  10. package/dist/__tests__/cli-config-stop-callback.test.js +23 -5
  11. package/dist/__tests__/cli-config-stop-callback.test.js.map +1 -1
  12. package/dist/__tests__/cli-notify-profile.test.js +20 -4
  13. package/dist/__tests__/cli-notify-profile.test.js.map +1 -1
  14. package/dist/__tests__/hud/model.test.js +9 -9
  15. package/dist/__tests__/job-management.test.js +27 -8
  16. package/dist/__tests__/job-management.test.js.map +1 -1
  17. package/dist/__tests__/pre-tool-enforcer.test.js +169 -4
  18. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  19. package/dist/__tests__/types.test.js +4 -4
  20. package/dist/cli/__tests__/ask.test.js +19 -3
  21. package/dist/cli/__tests__/ask.test.js.map +1 -1
  22. package/dist/config/models.js +1 -1
  23. package/dist/features/auto-update.d.ts.map +1 -1
  24. package/dist/features/auto-update.js +3 -51
  25. package/dist/features/auto-update.js.map +1 -1
  26. package/dist/hooks/recovery/types.d.ts +1 -1
  27. package/dist/hooks/think-mode/__tests__/index.test.js +2 -2
  28. package/dist/installer/index.d.ts +10 -0
  29. package/dist/installer/index.d.ts.map +1 -1
  30. package/dist/installer/index.js +181 -0
  31. package/dist/installer/index.js.map +1 -1
  32. package/dist/installer/mcp-registry.d.ts +1 -0
  33. package/dist/installer/mcp-registry.d.ts.map +1 -1
  34. package/dist/installer/mcp-registry.js +12 -0
  35. package/dist/installer/mcp-registry.js.map +1 -1
  36. package/dist/utils/omc-cli-rendering.d.ts.map +1 -1
  37. package/dist/utils/omc-cli-rendering.js +15 -1
  38. package/dist/utils/omc-cli-rendering.js.map +1 -1
  39. package/docs/agent-templates/tier-instructions.md +1 -1
  40. package/docs/copilot-instructions.md +1 -1
  41. package/package.json +1 -1
  42. package/scripts/pre-tool-enforcer.mjs +49 -26
  43. package/skills/hud/SKILL.md +2 -2
  44. package/templates/hooks/keyword-detector.mjs +12 -0
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "oh-my-copilot",
12
12
  "description": "Copilot CLI native multi-agent orchestration with intelligent model routing, 18 agent variants, and 32 powerful skills. Zero learning curve. Maximum power.",
13
- "version": "4.11.8",
13
+ "version": "4.11.9",
14
14
  "author": {
15
15
  "name": "Robin Norberg",
16
16
  "email": "github@platypus.se"
@@ -27,5 +27,5 @@
27
27
  ]
28
28
  }
29
29
  ],
30
- "version": "4.11.8"
30
+ "version": "4.11.9"
31
31
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-copilot",
3
- "version": "4.11.8",
3
+ "version": "4.11.9",
4
4
  "description": "Multi-agent orchestration system for Copilot CLI",
5
5
  "author": {
6
6
  "name": "Robin Norberg and oh-my-copilot contributors"
package/bridge/cli.cjs CHANGED
@@ -3352,7 +3352,7 @@ var init_models = __esm({
3352
3352
  COPILOT_FAMILY_DEFAULTS = {
3353
3353
  HAIKU: "claude-haiku-4-5",
3354
3354
  SONNET: "claude-sonnet-4-6",
3355
- OPUS: "claude-opus-4-6"
3355
+ OPUS: "claude-opus-4-7"
3356
3356
  };
3357
3357
  BUILTIN_TIER_MODEL_DEFAULTS = {
3358
3358
  LOW: COPILOT_FAMILY_DEFAULTS.HAIKU,
@@ -14170,6 +14170,7 @@ function normalizeRegistryEntry(value) {
14170
14170
  const raw = value;
14171
14171
  const command = typeof raw.command === "string" && raw.command.trim().length > 0 ? raw.command.trim() : void 0;
14172
14172
  const url2 = typeof raw.url === "string" && raw.url.trim().length > 0 ? raw.url.trim() : void 0;
14173
+ const type = typeof raw.type === "string" && raw.type.trim().length > 0 ? raw.type.trim() : void 0;
14173
14174
  if (!command && !url2) {
14174
14175
  return null;
14175
14176
  }
@@ -14182,6 +14183,7 @@ function normalizeRegistryEntry(value) {
14182
14183
  ...args.length > 0 ? { args } : {},
14183
14184
  ...env2 && Object.keys(env2).length > 0 ? { env: env2 } : {},
14184
14185
  ...url2 ? { url: url2 } : {},
14186
+ ...type ? { type } : {},
14185
14187
  ...effectiveTimeout ? { timeout: effectiveTimeout } : {}
14186
14188
  };
14187
14189
  }
@@ -14320,6 +14322,9 @@ function renderCodexServerBlock(name, entry) {
14320
14322
  if (entry.url) {
14321
14323
  lines.push(`url = ${renderTomlString(entry.url)}`);
14322
14324
  }
14325
+ if (entry.type) {
14326
+ lines.push(`type = ${renderTomlString(entry.type)}`);
14327
+ }
14323
14328
  if (entry.env && Object.keys(entry.env).length > 0) {
14324
14329
  lines.push(`env = ${renderTomlEnvTable(entry.env)}`);
14325
14330
  }
@@ -14998,6 +15003,138 @@ function getInstalledOmcPluginRoots() {
14998
15003
  }
14999
15004
  return Array.from(pluginRoots);
15000
15005
  }
15006
+ function countPluginSyncPayloadEntries(root) {
15007
+ let score = 0;
15008
+ for (const entry of PLUGIN_SYNC_PAYLOAD) {
15009
+ if ((0, import_fs29.existsSync)((0, import_path38.join)(root, entry))) {
15010
+ score += 1;
15011
+ }
15012
+ }
15013
+ return score;
15014
+ }
15015
+ function getKnownMarketplaceInstallRoots() {
15016
+ const knownMarketplacesPath = (0, import_path38.join)(COPILOT_CONFIG_DIR, "plugins", "known_marketplaces.json");
15017
+ if (!(0, import_fs29.existsSync)(knownMarketplacesPath)) {
15018
+ return [];
15019
+ }
15020
+ try {
15021
+ const raw = JSON.parse((0, import_fs29.readFileSync)(knownMarketplacesPath, "utf-8"));
15022
+ const roots = /* @__PURE__ */ new Set();
15023
+ for (const [marketplaceId, entry] of Object.entries(raw)) {
15024
+ const lower = marketplaceId.toLowerCase();
15025
+ const isOmcMarketplace = lower.includes("omc") || lower.includes("oh-my-copilot");
15026
+ if (!isOmcMarketplace) {
15027
+ continue;
15028
+ }
15029
+ if (typeof entry?.installLocation === "string" && entry.installLocation.trim().length > 0) {
15030
+ roots.add(entry.installLocation.trim());
15031
+ }
15032
+ if (typeof entry?.source?.path === "string" && entry.source.path.trim().length > 0) {
15033
+ roots.add(entry.source.path.trim());
15034
+ }
15035
+ }
15036
+ return Array.from(roots);
15037
+ } catch {
15038
+ return [];
15039
+ }
15040
+ }
15041
+ function getGlobalInstalledPackageRoot() {
15042
+ try {
15043
+ const npmRoot = String((0, import_child_process11.execSync)("npm root -g", {
15044
+ encoding: "utf-8",
15045
+ stdio: "pipe",
15046
+ timeout: 1e4,
15047
+ ...process.platform === "win32" ? { windowsHide: true } : {}
15048
+ }) ?? "").trim();
15049
+ if (!npmRoot) {
15050
+ return null;
15051
+ }
15052
+ const globalPackageRoot = (0, import_path38.join)(npmRoot, "oh-my-copilot");
15053
+ return (0, import_fs29.existsSync)(globalPackageRoot) ? globalPackageRoot : null;
15054
+ } catch {
15055
+ return null;
15056
+ }
15057
+ }
15058
+ function isCacheInstalledPluginRoot(root) {
15059
+ const normalizedRoot = normalizePath2(root);
15060
+ const cacheBase = normalizePath2((0, import_path38.join)(COPILOT_CONFIG_DIR, "plugins", "cache"));
15061
+ return normalizedRoot === cacheBase || normalizedRoot.startsWith(`${cacheBase}/`);
15062
+ }
15063
+ function resolveBestPluginSyncSource(targetRoots) {
15064
+ const excludedRoots = new Set(targetRoots.map(normalizePath2));
15065
+ const seen = /* @__PURE__ */ new Set();
15066
+ const globalPackageRoot = getGlobalInstalledPackageRoot();
15067
+ const candidates = [
15068
+ ...getKnownMarketplaceInstallRoots(),
15069
+ ...globalPackageRoot ? [globalPackageRoot] : [],
15070
+ getRuntimePackageRoot()
15071
+ ];
15072
+ let bestRoot = null;
15073
+ let bestScore = -1;
15074
+ let bestOrder = Number.POSITIVE_INFINITY;
15075
+ for (const [order, candidate] of candidates.entries()) {
15076
+ const normalizedCandidate = normalizePath2(candidate);
15077
+ if (seen.has(normalizedCandidate) || excludedRoots.has(normalizedCandidate) || !(0, import_fs29.existsSync)(candidate)) {
15078
+ continue;
15079
+ }
15080
+ seen.add(normalizedCandidate);
15081
+ const score = countPluginSyncPayloadEntries(candidate);
15082
+ if (score === 0) {
15083
+ continue;
15084
+ }
15085
+ if (score > bestScore || score === bestScore && order < bestOrder) {
15086
+ bestRoot = candidate;
15087
+ bestScore = score;
15088
+ bestOrder = order;
15089
+ }
15090
+ }
15091
+ return bestRoot;
15092
+ }
15093
+ function copyPluginSyncPayload(sourceRoot, targetRoots) {
15094
+ if (targetRoots.length === 0) {
15095
+ return { synced: false, errors: [] };
15096
+ }
15097
+ let synced = false;
15098
+ const errors = [];
15099
+ for (const targetRoot of targetRoots) {
15100
+ let copiedToTarget = false;
15101
+ for (const entry of PLUGIN_SYNC_PAYLOAD) {
15102
+ const sourcePath = (0, import_path38.join)(sourceRoot, entry);
15103
+ if (!(0, import_fs29.existsSync)(sourcePath)) {
15104
+ continue;
15105
+ }
15106
+ try {
15107
+ (0, import_fs29.cpSync)(sourcePath, (0, import_path38.join)(targetRoot, entry), {
15108
+ recursive: true,
15109
+ force: true
15110
+ });
15111
+ copiedToTarget = true;
15112
+ } catch (error48) {
15113
+ const message = error48 instanceof Error ? error48.message : String(error48);
15114
+ errors.push(`Failed to sync ${entry} to ${targetRoot}: ${message}`);
15115
+ }
15116
+ }
15117
+ synced = synced || copiedToTarget;
15118
+ }
15119
+ return { synced, errors };
15120
+ }
15121
+ function syncInstalledPluginPayload() {
15122
+ const targetRoots = getInstalledOmcPluginRoots().filter((root) => (0, import_fs29.existsSync)(root) && isCacheInstalledPluginRoot(root));
15123
+ if (targetRoots.length === 0) {
15124
+ return { synced: false, errors: [], sourceRoot: null, targetRoots: [] };
15125
+ }
15126
+ const sourceRoot = resolveBestPluginSyncSource(targetRoots);
15127
+ if (!sourceRoot) {
15128
+ return {
15129
+ synced: false,
15130
+ errors: ["Unable to find a complete OMC package source to repair installed plugin roots"],
15131
+ sourceRoot: null,
15132
+ targetRoots
15133
+ };
15134
+ }
15135
+ const result = copyPluginSyncPayload(sourceRoot, targetRoots);
15136
+ return { ...result, sourceRoot, targetRoots };
15137
+ }
15001
15138
  function hasPluginProvidedAgentFiles() {
15002
15139
  return getInstalledOmcPluginRoots().some(
15003
15140
  (pluginRoot) => directoryHasMarkdownFiles((0, import_path38.join)(pluginRoot, "agents"))
@@ -15301,6 +15438,17 @@ function install(options = {}) {
15301
15438
  log3(`Platform: ${process.platform} (Node.js hooks)`);
15302
15439
  const runningAsPlugin = isRunningAsPlugin();
15303
15440
  const projectScoped = isProjectScopedPlugin();
15441
+ const pluginPayloadSync = syncInstalledPluginPayload();
15442
+ if (pluginPayloadSync.errors.length > 0) {
15443
+ for (const error48 of pluginPayloadSync.errors) {
15444
+ log3(`Plugin cache sync warning: ${error48}`);
15445
+ }
15446
+ }
15447
+ if (pluginPayloadSync.synced) {
15448
+ const targetSummary = pluginPayloadSync.targetRoots.length > 0 ? pluginPayloadSync.targetRoots.join(", ") : "installed plugin roots";
15449
+ const sourceSummary = pluginPayloadSync.sourceRoot ?? "unknown source";
15450
+ log3(`Repaired installed OMC plugin payload from ${sourceSummary} -> ${targetSummary}`);
15451
+ }
15304
15452
  const pluginProvidesAgentFiles = hasPluginProvidedAgentFiles();
15305
15453
  const pluginProvidesSkillFiles = hasPluginProvidedSkillFiles();
15306
15454
  const pluginProvidesHookFiles = hasPluginProvidedHookFiles();
@@ -15473,6 +15621,16 @@ function install(options = {}) {
15473
15621
  (0, import_fs29.chmodSync)(hudScriptPath, 493);
15474
15622
  }
15475
15623
  log3(" Installed omcp-hud.mjs");
15624
+ for (const legacyName of ["omc-hud.mjs", "omc-hud.js"]) {
15625
+ const legacyPath = (0, import_path38.join)(HUD_DIR, legacyName);
15626
+ if ((0, import_fs29.existsSync)(legacyPath)) {
15627
+ try {
15628
+ (0, import_fs29.unlinkSync)(legacyPath);
15629
+ log3(` Removed legacy HUD wrapper: ${legacyName}`);
15630
+ } catch {
15631
+ }
15632
+ }
15633
+ }
15476
15634
  } catch (_e) {
15477
15635
  log3(" Warning: Could not install HUD statusline script (non-fatal)");
15478
15636
  hudScriptPath = null;
@@ -15585,7 +15743,7 @@ function getInstallInfo() {
15585
15743
  return null;
15586
15744
  }
15587
15745
  }
15588
- var import_fs29, import_path38, import_url7, import_os10, import_child_process11, COPILOT_CONFIG_DIR, AGENTS_DIR, COMMANDS_DIR, SKILLS_DIR, HOOKS_DIR, HUD_DIR, SETTINGS_FILE, VERSION_FILE, OMC_MANAGED_SKILL_MARKER, CORE_COMMANDS, VERSION, OMC_VERSION_MARKER_PATTERN, CC_NATIVE_COMMANDS, SKININTHEGAMEBROS_ONLY_SKILLS, OMC_HOOK_FILENAMES, STANDALONE_HOOK_TEMPLATE_FILES;
15746
+ var import_fs29, import_path38, import_url7, import_os10, import_child_process11, COPILOT_CONFIG_DIR, AGENTS_DIR, COMMANDS_DIR, SKILLS_DIR, HOOKS_DIR, HUD_DIR, SETTINGS_FILE, VERSION_FILE, OMC_MANAGED_SKILL_MARKER, CORE_COMMANDS, VERSION, OMC_VERSION_MARKER_PATTERN, CC_NATIVE_COMMANDS, SKININTHEGAMEBROS_ONLY_SKILLS, OMC_HOOK_FILENAMES, STANDALONE_HOOK_TEMPLATE_FILES, PLUGIN_SYNC_PAYLOAD;
15589
15747
  var init_installer = __esm({
15590
15748
  "src/installer/index.ts"() {
15591
15749
  "use strict";
@@ -15652,6 +15810,21 @@ var init_installer = __esm({
15652
15810
  "persistent-mode.mjs",
15653
15811
  "code-simplifier.mjs"
15654
15812
  ];
15813
+ PLUGIN_SYNC_PAYLOAD = [
15814
+ "dist",
15815
+ "bridge",
15816
+ "hooks",
15817
+ "scripts",
15818
+ "skills",
15819
+ "agents",
15820
+ "templates",
15821
+ "docs",
15822
+ ".claude-plugin",
15823
+ ".mcp.json",
15824
+ "README.md",
15825
+ "LICENSE",
15826
+ "package.json"
15827
+ ];
15655
15828
  }
15656
15829
  });
15657
15830
 
@@ -15716,40 +15889,8 @@ function syncMarketplaceClone(verbose = false) {
15716
15889
  }
15717
15890
  return { ok: true, message: "Marketplace clone updated" };
15718
15891
  }
15719
- function copyPluginSyncPayload(sourceRoot, targetRoots) {
15720
- if (targetRoots.length === 0) {
15721
- return { synced: false, errors: [] };
15722
- }
15723
- let synced = false;
15724
- const errors = [];
15725
- for (const targetRoot of targetRoots) {
15726
- let copiedToTarget = false;
15727
- for (const entry of PLUGIN_SYNC_PAYLOAD) {
15728
- const sourcePath = (0, import_path39.join)(sourceRoot, entry);
15729
- if (!(0, import_fs30.existsSync)(sourcePath)) {
15730
- continue;
15731
- }
15732
- try {
15733
- (0, import_fs30.cpSync)(sourcePath, (0, import_path39.join)(targetRoot, entry), {
15734
- recursive: true,
15735
- force: true
15736
- });
15737
- copiedToTarget = true;
15738
- } catch (error48) {
15739
- const message = error48 instanceof Error ? error48.message : String(error48);
15740
- errors.push(`Failed to sync ${entry} to ${targetRoot}: ${message}`);
15741
- }
15742
- }
15743
- synced = synced || copiedToTarget;
15744
- }
15745
- return { synced, errors };
15746
- }
15747
15892
  function syncActivePluginCache() {
15748
- const activeRoots = getInstalledOmcPluginRoots().filter((root) => (0, import_fs30.existsSync)(root));
15749
- if (activeRoots.length === 0) {
15750
- return { synced: false, errors: [] };
15751
- }
15752
- const result = copyPluginSyncPayload(getRuntimePackageRoot(), activeRoots);
15893
+ const result = syncInstalledPluginPayload();
15753
15894
  if (result.synced) {
15754
15895
  console.log("[omc update] Synced plugin cache");
15755
15896
  }
@@ -16331,7 +16472,7 @@ function initSilentAutoUpdate(config2 = {}) {
16331
16472
  silentAutoUpdate(config2).catch(() => {
16332
16473
  });
16333
16474
  }
16334
- var import_fs30, import_path39, import_child_process12, REPO_OWNER, REPO_NAME, GITHUB_API_URL, GITHUB_RAW_URL, PLUGIN_SYNC_PAYLOAD, COPILOT_CONFIG_DIR2, VERSION_FILE2, CONFIG_FILE, SILENT_UPDATE_STATE_FILE;
16475
+ var import_fs30, import_path39, import_child_process12, REPO_OWNER, REPO_NAME, GITHUB_API_URL, GITHUB_RAW_URL, COPILOT_CONFIG_DIR2, VERSION_FILE2, CONFIG_FILE, SILENT_UPDATE_STATE_FILE;
16335
16476
  var init_auto_update = __esm({
16336
16477
  "src/features/auto-update.ts"() {
16337
16478
  "use strict";
@@ -16346,21 +16487,6 @@ var init_auto_update = __esm({
16346
16487
  REPO_NAME = "oh-my-copilot";
16347
16488
  GITHUB_API_URL = `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}`;
16348
16489
  GITHUB_RAW_URL = `https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}`;
16349
- PLUGIN_SYNC_PAYLOAD = [
16350
- "dist",
16351
- "bridge",
16352
- "hooks",
16353
- "scripts",
16354
- "skills",
16355
- "agents",
16356
- "templates",
16357
- "docs",
16358
- ".claude-plugin",
16359
- ".mcp.json",
16360
- "README.md",
16361
- "LICENSE",
16362
- "package.json"
16363
- ];
16364
16490
  COPILOT_CONFIG_DIR2 = getConfigDir();
16365
16491
  VERSION_FILE2 = (0, import_path39.join)(COPILOT_CONFIG_DIR2, ".omc-version.json");
16366
16492
  CONFIG_FILE = (0, import_path39.join)(COPILOT_CONFIG_DIR2, ".omc-config.json");
@@ -17800,12 +17926,21 @@ function isClaudeSession(env2) {
17800
17926
  );
17801
17927
  }
17802
17928
  function commandExists2(command, env2) {
17929
+ const pathValue = env2.PATH ?? env2.Path ?? "";
17930
+ const pathExt = env2.PATHEXT ?? "";
17931
+ const cacheKey = `${command}\0${pathValue}\0${pathExt}`;
17932
+ const cached2 = commandExistsCache.get(cacheKey);
17933
+ if (cached2 !== void 0) {
17934
+ return cached2;
17935
+ }
17803
17936
  const lookupCommand = process.platform === "win32" ? "where" : "which";
17804
17937
  const result = (0, import_child_process14.spawnSync)(lookupCommand, [command], {
17805
17938
  stdio: "ignore",
17806
17939
  env: env2
17807
17940
  });
17808
- return result.status === 0;
17941
+ const found = result.status === 0;
17942
+ commandExistsCache.set(cacheKey, found);
17943
+ return found;
17809
17944
  }
17810
17945
  function resolveOmcCliPrefix(options = {}) {
17811
17946
  const env2 = options.env ?? process.env;
@@ -17843,13 +17978,14 @@ function rewriteOmcCliInvocations(text, options = {}) {
17843
17978
  return `${lineStart}${leader}${prefix} ${suffix}`;
17844
17979
  });
17845
17980
  }
17846
- var import_child_process14, OMC_CLI_BINARY, OMC_PLUGIN_BRIDGE_PREFIX;
17981
+ var import_child_process14, OMC_CLI_BINARY, OMC_PLUGIN_BRIDGE_PREFIX, commandExistsCache;
17847
17982
  var init_omc_cli_rendering = __esm({
17848
17983
  "src/utils/omc-cli-rendering.ts"() {
17849
17984
  "use strict";
17850
17985
  import_child_process14 = require("child_process");
17851
17986
  OMC_CLI_BINARY = "omcp";
17852
17987
  OMC_PLUGIN_BRIDGE_PREFIX = 'node "$CLAUDE_PLUGIN_ROOT"/bridge/cli.cjs';
17988
+ commandExistsCache = /* @__PURE__ */ new Map();
17853
17989
  }
17854
17990
  });
17855
17991
 
@@ -1255,7 +1255,7 @@ var TIER_ENV_KEYS = {
1255
1255
  var COPILOT_FAMILY_DEFAULTS = {
1256
1256
  HAIKU: "claude-haiku-4-5",
1257
1257
  SONNET: "claude-sonnet-4-6",
1258
- OPUS: "claude-opus-4-6"
1258
+ OPUS: "claude-opus-4-7"
1259
1259
  };
1260
1260
  var BUILTIN_TIER_MODEL_DEFAULTS = {
1261
1261
  LOW: COPILOT_FAMILY_DEFAULTS.HAIKU,
@@ -1852,13 +1852,23 @@ function isClaudeSession(env) {
1852
1852
  env.CLAUDECODE?.trim() || env.CLAUDE_SESSION_ID?.trim() || env.CLAUDECODE_SESSION_ID?.trim()
1853
1853
  );
1854
1854
  }
1855
+ var commandExistsCache = /* @__PURE__ */ new Map();
1855
1856
  function commandExists(command, env) {
1857
+ const pathValue = env.PATH ?? env.Path ?? "";
1858
+ const pathExt = env.PATHEXT ?? "";
1859
+ const cacheKey = `${command}\0${pathValue}\0${pathExt}`;
1860
+ const cached = commandExistsCache.get(cacheKey);
1861
+ if (cached !== void 0) {
1862
+ return cached;
1863
+ }
1856
1864
  const lookupCommand = process.platform === "win32" ? "where" : "which";
1857
1865
  const result = (0, import_child_process3.spawnSync)(lookupCommand, [command], {
1858
1866
  stdio: "ignore",
1859
1867
  env
1860
1868
  });
1861
- return result.status === 0;
1869
+ const found = result.status === 0;
1870
+ commandExistsCache.set(cacheKey, found);
1871
+ return found;
1862
1872
  }
1863
1873
  function resolveOmcCliPrefix(options = {}) {
1864
1874
  const env = options.env ?? process.env;
@@ -1109,7 +1109,7 @@ function findPermissionViolations(changedPaths, permissions, cwd) {
1109
1109
  var COPILOT_FAMILY_DEFAULTS = {
1110
1110
  HAIKU: "claude-haiku-4-5",
1111
1111
  SONNET: "claude-sonnet-4-6",
1112
- OPUS: "claude-opus-4-6"
1112
+ OPUS: "claude-opus-4-7"
1113
1113
  };
1114
1114
  var BUILTIN_TIER_MODEL_DEFAULTS = {
1115
1115
  LOW: COPILOT_FAMILY_DEFAULTS.HAIKU,
package/bridge/team.js CHANGED
@@ -1668,12 +1668,21 @@ function isClaudeSession(env) {
1668
1668
  );
1669
1669
  }
1670
1670
  function commandExists(command, env) {
1671
+ const pathValue = env.PATH ?? env.Path ?? "";
1672
+ const pathExt = env.PATHEXT ?? "";
1673
+ const cacheKey = `${command}\0${pathValue}\0${pathExt}`;
1674
+ const cached = commandExistsCache.get(cacheKey);
1675
+ if (cached !== void 0) {
1676
+ return cached;
1677
+ }
1671
1678
  const lookupCommand = process.platform === "win32" ? "where" : "which";
1672
1679
  const result = spawnSync2(lookupCommand, [command], {
1673
1680
  stdio: "ignore",
1674
1681
  env
1675
1682
  });
1676
- return result.status === 0;
1683
+ const found = result.status === 0;
1684
+ commandExistsCache.set(cacheKey, found);
1685
+ return found;
1677
1686
  }
1678
1687
  function resolveOmcCliPrefix(options = {}) {
1679
1688
  const env = options.env ?? process.env;
@@ -1699,12 +1708,13 @@ function formatOmcCliInvocation(commandSuffix, options = {}) {
1699
1708
  const suffix = commandSuffix.trim().replace(/^omc\s+/, "");
1700
1709
  return `${resolveInvocationPrefix(suffix, options)} ${suffix}`.trim();
1701
1710
  }
1702
- var OMC_CLI_BINARY, OMC_PLUGIN_BRIDGE_PREFIX;
1711
+ var OMC_CLI_BINARY, OMC_PLUGIN_BRIDGE_PREFIX, commandExistsCache;
1703
1712
  var init_omc_cli_rendering = __esm({
1704
1713
  "src/utils/omc-cli-rendering.ts"() {
1705
1714
  "use strict";
1706
1715
  OMC_CLI_BINARY = "omcp";
1707
1716
  OMC_PLUGIN_BRIDGE_PREFIX = 'node "$CLAUDE_PLUGIN_ROOT"/bridge/cli.cjs';
1717
+ commandExistsCache = /* @__PURE__ */ new Map();
1708
1718
  }
1709
1719
  });
1710
1720
 
@@ -1905,7 +1915,7 @@ var init_models = __esm({
1905
1915
  COPILOT_FAMILY_DEFAULTS = {
1906
1916
  HAIKU: "claude-haiku-4-5",
1907
1917
  SONNET: "claude-sonnet-4-6",
1908
- OPUS: "claude-opus-4-6"
1918
+ OPUS: "claude-opus-4-7"
1909
1919
  };
1910
1920
  BUILTIN_TIER_MODEL_DEFAULTS = {
1911
1921
  LOW: COPILOT_FAMILY_DEFAULTS.HAIKU,
@@ -161,7 +161,22 @@ function runHook(toolInput, env) {
161
161
  const result = spawnSync('node', [HOOK_PATH], {
162
162
  input: stdin,
163
163
  encoding: 'utf8',
164
- env: { ...process.env, ...env, OMC_ROUTING_FORCE_INHERIT: 'true' },
164
+ env: {
165
+ ...process.env,
166
+ // Reset tier-resolution chain so host env doesn't leak into tests.
167
+ OMC_SUBAGENT_MODEL: '',
168
+ OMC_MODEL_LOW: '',
169
+ OMC_MODEL_MEDIUM: '',
170
+ OMC_MODEL_HIGH: '',
171
+ CLAUDE_CODE_BEDROCK_HAIKU_MODEL: '',
172
+ CLAUDE_CODE_BEDROCK_SONNET_MODEL: '',
173
+ CLAUDE_CODE_BEDROCK_OPUS_MODEL: '',
174
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: '',
175
+ ANTHROPIC_DEFAULT_SONNET_MODEL: '',
176
+ ANTHROPIC_DEFAULT_OPUS_MODEL: '',
177
+ ...env,
178
+ OMC_ROUTING_FORCE_INHERIT: 'true',
179
+ },
165
180
  timeout: 10000,
166
181
  });
167
182
  const lines = (result.stdout || '').split('\n').filter(Boolean);
@@ -197,13 +212,21 @@ describe('hook integration — force-inherit + [1m] scenarios', () => {
197
212
  expect(result.reason).toMatch(/model="sonnet"/);
198
213
  expect(result.reason).toMatch(/global\.anthropic\.claude-sonnet-4-6\[1m\]/);
199
214
  });
200
- it('derives tier alias from OMC_SUBAGENT_MODEL when set', () => {
215
+ it('derives tier alias from session model when ANTHROPIC_DEFAULT_SONNET_MODEL is set', () => {
216
+ const result = runHook({}, {
217
+ ANTHROPIC_MODEL: 'global.anthropic.claude-sonnet-4-6[1m]',
218
+ ANTHROPIC_DEFAULT_SONNET_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
219
+ });
220
+ expect(result.denied).toBe(true);
221
+ // normalizeToCcAlias(sessionModel) → 'sonnet'; resolvedSafe is truthy
222
+ expect(result.reason).toMatch(/model="sonnet"/);
223
+ });
224
+ it('derives tier alias from OMC_SUBAGENT_MODEL when set (backward compat)', () => {
201
225
  const result = runHook({}, {
202
226
  ANTHROPIC_MODEL: 'global.anthropic.claude-sonnet-4-6[1m]',
203
227
  OMC_SUBAGENT_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
204
228
  });
205
229
  expect(result.denied).toBe(true);
206
- // normalizeToCcAlias('us.anthropic.claude-sonnet-4-5-...') → 'sonnet'
207
230
  expect(result.reason).toMatch(/model="sonnet"/);
208
231
  });
209
232
  it('denies no-model call when only ANTHROPIC_MODEL has [1m] suffix (any [1m] triggers deny)', () => {
@@ -223,13 +246,13 @@ describe('hook integration — force-inherit + [1m] scenarios', () => {
223
246
  expect(result.reason).toMatch(/model="sonnet"/);
224
247
  expect(result.reason).toMatch(/claude-sonnet-4-6\[1m\]/);
225
248
  });
226
- it('derives tier alias from OMC_SUBAGENT_MODEL for guidance in [1m] deny', () => {
227
- // normalizeToCcAlias('us.anthropic.claude-sonnet-4-5-20250929-v1:0') → 'sonnet'
249
+ it('derives tier alias from ANTHROPIC_DEFAULT_SONNET_MODEL for guidance in [1m] deny', () => {
228
250
  const result = runHook({}, {
229
251
  ANTHROPIC_MODEL: 'claude-sonnet-4-6[1m]',
230
- OMC_SUBAGENT_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
252
+ ANTHROPIC_DEFAULT_SONNET_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
231
253
  });
232
254
  expect(result.denied).toBe(true);
255
+ // normalizeToCcAlias('claude-sonnet-4-6[1m]') → 'sonnet'; resolvedSafe is truthy
233
256
  expect(result.reason).toMatch(/model="sonnet"/);
234
257
  });
235
258
  it('denies no-model call when CLAUDE_MODEL is provider-specific[1m] but ANTHROPIC_MODEL is bare[1m]', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"bedrock-lm-suffix-hook.test.js","sourceRoot":"","sources":["../../src/__tests__/bedrock-lm-suffix-hook.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bedrock-lm-suffix-hook.test.js","sourceRoot":"","sources":["../../src/__tests__/bedrock-lm-suffix-hook.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,iBAAiB,EAAE,cAAc,EAAE,2BAA2B,EAAE,oBAAoB,CAAU,CAAC;AAEjH,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAC9E,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACvE,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,qBAAqB,CAAC,yCAAyC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,qBAAqB,CAAC,8CAA8C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,qBAAqB,CAAC,qCAAqC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,qBAAqB,CAC1B,gGAAgG,CACjG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,qBAAqB,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAC9E,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,qBAAqB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,qBAAqB,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAC9E,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACvE,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,wBAAwB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,wBAAwB,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,wBAAwB,CAAC,yCAAyC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,6EAA6E;QAC7E,MAAM,CAAC,wBAAwB,CAAC,qCAAqC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,gFAAgF;QAChF,MAAM,CAAC,wBAAwB,CAAC,iDAAiD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,QAAQ,CAAC,6EAA6E,EAAE,GAAG,EAAE;IAC3F,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,yBAAyB,CAAC,8CAA8C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,uFAAuF;QACvF,MAAM,CAAC,yBAAyB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,gEAAgE;QAChE,MAAM,CAAC,qBAAqB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,IAAI,KAAyC,CAAC;IAE9C,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAC9B,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QACxD,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAE9D,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,wCAAwC,CAAC;QACvE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,wCAAwC,CAAC;QACpE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,gFAAgF;QAChF,mEAAmE;QACnE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,yCAAyC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,wCAAwC,CAAC;QACvE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,qCAAqC,CAAC;QACpE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,SAAS,OAAO,CACd,SAAkC,EAClC,GAA2B;IAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,SAAS,EAAE,OAAO;QAClB,SAAS;QACT,GAAG,EAAE,MAAM;QACX,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;QAC5C,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,mEAAmE;YACnE,kBAAkB,EAAE,EAAE;YACtB,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,EAAE;YACpB,cAAc,EAAE,EAAE;YAClB,+BAA+B,EAAE,EAAE;YACnC,gCAAgC,EAAE,EAAE;YACpC,8BAA8B,EAAE,EAAE;YAClC,6BAA6B,EAAE,EAAE;YACjC,8BAA8B,EAAE,EAAE;YAClC,4BAA4B,EAAE,EAAE;YAChC,GAAG,GAAG;YACN,yBAAyB,EAAE,MAAM;SAClC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,KAAK,MAAM,EAAE,CAAC;gBAC9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,CAAC;YACtF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,KAAK,EAAE,wCAAwC,EAAE,EACnD,EAAE,eAAe,EAAE,wCAAwC,EAAE,CAC9D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,KAAK,EAAE,8CAA8C,EAAE,EACzD,EAAE,eAAe,EAAE,wCAAwC,EAAE,CAC9D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF,EAAE,eAAe,EAAE,wCAAwC,EAAE,CAC9D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,kFAAkF;QAClF,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF;YACE,eAAe,EAAE,wCAAwC;YACzD,8BAA8B,EAAE,8CAA8C;SAC/E,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,sEAAsE;QACtE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF;YACE,eAAe,EAAE,wCAAwC;YACzD,kBAAkB,EAAE,8CAA8C;SACnE,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QACjG,2FAA2F;QAC3F,4FAA4F;QAC5F,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF;YACE,YAAY,EAAE,yCAAyC;YACvD,eAAe,EAAE,wCAAwC;SAC1D,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,2EAA2E;QAC3E,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF,EAAE,eAAe,EAAE,uBAAuB,EAAE,CAC7C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF;YACE,eAAe,EAAE,uBAAuB;YACxC,8BAA8B,EAAE,8CAA8C;SAC/E,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,iFAAiF;QACjF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;QACzG,6FAA6F;QAC7F,yFAAyF;QACzF,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,EACF;YACE,YAAY,EAAE,wCAAwC;YACtD,eAAe,EAAE,uBAAuB;SACzC,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -118,7 +118,7 @@ describe('Bedrock model routing repro', () => {
118
118
  const defs = getAgentDefinitions({ config });
119
119
  expect(defs['executor'].model).toBe('claude-sonnet-4-6');
120
120
  expect(defs['explore'].model).toBe('claude-haiku-4-5');
121
- expect(defs['architect'].model).toBe('claude-opus-4-6');
121
+ expect(defs['architect'].model).toBe('claude-opus-4-7');
122
122
  // 4. enforceModel normalizes to bare CC-supported aliases (FIX)
123
123
  const { enforceModel } = await import('../features/delegation-enforcer.js');
124
124
  // 4a. executor → 'sonnet' (normalized from config's full model ID)
@@ -1,14 +1,32 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { mkdtempSync, writeFileSync, readFileSync, mkdirSync } from 'fs';
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import { mkdtempSync, writeFileSync, readFileSync, mkdirSync, existsSync } from 'fs';
3
3
  import { join, dirname } from 'path';
4
4
  import { tmpdir } from 'os';
5
5
  import { spawnSync } from 'child_process';
6
6
  import { fileURLToPath } from 'url';
7
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
8
  const REPO_ROOT = join(__dirname, '..', '..');
9
- const CLI_ENTRY = join(REPO_ROOT, 'src', 'cli', 'index.ts');
9
+ const BUNDLED_CLI_ENTRY = join(REPO_ROOT, 'bridge', 'cli.cjs');
10
+ const DIST_CLI_ENTRY = join(REPO_ROOT, 'dist', 'cli', 'index.js');
11
+ const SRC_CLI_ENTRY = join(REPO_ROOT, 'src', 'cli', 'index.ts');
12
+ // Spawning `node --import tsx src/cli/index.ts` cold-compiles the full CLI
13
+ // module graph on every call (~10-15s each on Windows). Prefer the bundled
14
+ // single-file `bridge/cli.cjs` (~1s cold) when present, then the unbundled
15
+ // `dist/cli/index.js` (~2.8s cold), and finally fall back to tsx for dev.
16
+ let cliMode = 'tsx';
17
+ beforeAll(() => {
18
+ if (existsSync(BUNDLED_CLI_ENTRY))
19
+ cliMode = 'bundle';
20
+ else if (existsSync(DIST_CLI_ENTRY))
21
+ cliMode = 'dist';
22
+ });
10
23
  function runCli(args, homeDir) {
11
- const result = spawnSync(process.execPath, ['--import', 'tsx', CLI_ENTRY, ...args], {
24
+ const spawnArgs = cliMode === 'bundle'
25
+ ? [BUNDLED_CLI_ENTRY, ...args]
26
+ : cliMode === 'dist'
27
+ ? [DIST_CLI_ENTRY, ...args]
28
+ : ['--import', 'tsx', SRC_CLI_ENTRY, ...args];
29
+ const result = spawnSync(process.execPath, spawnArgs, {
12
30
  cwd: REPO_ROOT,
13
31
  env: {
14
32
  ...process.env,
@@ -26,7 +44,7 @@ function runCli(args, homeDir) {
26
44
  function readConfig(configPath) {
27
45
  return JSON.parse(readFileSync(configPath, 'utf-8'));
28
46
  }
29
- describe('omc config-stop-callback tag options', { timeout: 120_000 }, () => {
47
+ describe('omc config-stop-callback tag options', () => {
30
48
  it('updates telegram tagList options and preserves existing config fields', () => {
31
49
  const homeDir = mkdtempSync(join(tmpdir(), 'omc-cli-stop-callback-home-'));
32
50
  const configPath = join(homeDir, '.copilot', '.omc-config.json');