@cnwenf/occ 2.1.302 → 2.1.304

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 (2) hide show
  1. package/dist/cli.js +88 -51
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bun
2
- globalThis.MACRO={"VERSION":"2.1.302","BINARY_NAME":"occ","BUILD_TIME":"2026-08-15T18:40:50.843Z","FEEDBACK_CHANNEL":"","ISSUES_EXPLAINER":"","NATIVE_PACKAGE_URL":"","PACKAGE_URL":"@cnwenf/occ","VERSION_CHANGELOG":""};
2
+ globalThis.MACRO={"VERSION":"2.1.304","BINARY_NAME":"occ","BUILD_TIME":"2026-08-17T18:57:33.931Z","FEEDBACK_CHANNEL":"","ISSUES_EXPLAINER":"","NATIVE_PACKAGE_URL":"","PACKAGE_URL":"@cnwenf/occ","VERSION_CHANGELOG":""};
3
3
  // @bun
4
4
  var __create = Object.create;
5
5
  var __getProtoOf = Object.getPrototypeOf;
@@ -59632,7 +59632,7 @@ var init_types2 = __esm(() => {
59632
59632
  externalEditorContext: exports_external.boolean().optional().describe("Show the last assistant response as commented context above the prompt when opening the external editor (Ctrl+G)."),
59633
59633
  prUrlTemplate: exports_external.string().optional().describe('URL template for the footer PR badge (e.g. "https://internal-review.example.com/pr/{number}"). Uses {number} as the PR number placeholder. Defaults to github.com.'),
59634
59634
  alwaysThinkingEnabled: exports_external.boolean().optional().describe("When false, thinking is disabled. When absent or true, thinking is " + "enabled automatically for supported models."),
59635
- effortLevel: exports_external.enum(process.env.USER_TYPE === "ant" ? ["low", "medium", "high", "max"] : ["low", "medium", "high"]).optional().catch(undefined).describe("Persisted effort level for supported models."),
59635
+ effortLevel: exports_external.enum(["low", "medium", "high", "xhigh"]).optional().catch(undefined).describe("Persisted effort level for supported models."),
59636
59636
  dynamicWorkflowSize: exports_external.enum(["small", "medium", "large"]).optional().catch(undefined).describe("Advisory guideline for how large Claude makes dynamic workflows (small/medium/large agent counts). Not an enforced cap."),
59637
59637
  advisorModel: exports_external.string().optional().describe("Advisor model for the server-side advisor tool."),
59638
59638
  fastMode: exports_external.boolean().optional().describe("When true, fast mode is enabled. When absent or false, fast mode is off."),
@@ -140004,6 +140004,9 @@ function getModelMaxOutputTokens(model) {
140004
140004
  if (m4.includes("opus-4-6")) {
140005
140005
  defaultTokens = 64000;
140006
140006
  upperLimit = 128000;
140007
+ } else if (m4.includes("opus-4-7") || m4.includes("opus-4-8") || m4.includes("opus-5") || m4.includes("sonnet-5") || m4.includes("fable-5")) {
140008
+ defaultTokens = 64000;
140009
+ upperLimit = 128000;
140007
140010
  } else if (m4.includes("sonnet-4-6")) {
140008
140011
  defaultTokens = 32000;
140009
140012
  upperLimit = 128000;
@@ -203622,7 +203625,7 @@ function modelSupportsAdaptiveThinking(model) {
203622
203625
  return supported3P;
203623
203626
  }
203624
203627
  const canonical = getCanonicalName(model);
203625
- if (canonical.includes("opus-4-6") || canonical.includes("sonnet-4-6") || canonical.includes("opus-5")) {
203628
+ if (canonical.includes("opus-4-6") || canonical.includes("opus-4-7") || canonical.includes("opus-4-8") || canonical.includes("opus-5") || canonical.includes("sonnet-4-6") || canonical.includes("sonnet-5")) {
203626
203629
  return true;
203627
203630
  }
203628
203631
  if (canonical.includes("opus") || canonical.includes("sonnet") || canonical.includes("haiku")) {
@@ -203680,7 +203683,7 @@ function modelSupportsEffort(model) {
203680
203683
  if (supported3P !== undefined) {
203681
203684
  return supported3P;
203682
203685
  }
203683
- if (m5.includes("opus-4-6") || m5.includes("sonnet-4-6") || m5.includes("opus-5")) {
203686
+ if (m5.includes("opus-4-6") || m5.includes("opus-4-7") || m5.includes("opus-4-8") || m5.includes("opus-5") || m5.includes("sonnet-4-6") || m5.includes("sonnet-5") || m5.includes("fable-5")) {
203684
203687
  return true;
203685
203688
  }
203686
203689
  if (m5.includes("haiku") || m5.includes("sonnet") || m5.includes("opus")) {
@@ -203693,7 +203696,8 @@ function modelSupportsMaxEffort(model) {
203693
203696
  if (supported3P !== undefined) {
203694
203697
  return supported3P;
203695
203698
  }
203696
- if (model.toLowerCase().includes("opus-4-6") || model.toLowerCase().includes("opus-5")) {
203699
+ const m5 = model.toLowerCase();
203700
+ if (m5.includes("opus-4-6") || m5.includes("opus-4-7") || m5.includes("opus-4-8") || m5.includes("opus-5") || m5.includes("sonnet-4-6") || m5.includes("sonnet-5") || m5.includes("fable-5")) {
203697
203701
  return true;
203698
203702
  }
203699
203703
  if (process.env.USER_TYPE === "ant" && resolveAntModel(model)) {
@@ -203707,7 +203711,7 @@ function modelSupportsXhighEffort(model) {
203707
203711
  return supported3P;
203708
203712
  }
203709
203713
  const lower = model.toLowerCase();
203710
- if (lower.includes("opus-4-7") || lower.includes("opus-4-8") || lower.includes("opus-5")) {
203714
+ if (lower.includes("opus-4-7") || lower.includes("opus-4-8") || lower.includes("opus-5") || lower.includes("sonnet-5") || lower.includes("fable-5")) {
203711
203715
  return true;
203712
203716
  }
203713
203717
  if (process.env.USER_TYPE === "ant" && resolveAntModel(model)) {
@@ -203736,7 +203740,7 @@ function parseEffortValue(value) {
203736
203740
  return;
203737
203741
  }
203738
203742
  function toPersistableEffort(value) {
203739
- if (value === "low" || value === "medium" || value === "high") {
203743
+ if (value === "low" || value === "medium" || value === "high" || value === "xhigh") {
203740
203744
  return value;
203741
203745
  }
203742
203746
  if (value === "max" && process.env.USER_TYPE === "ant") {
@@ -203769,17 +203773,24 @@ function resolveAppliedEffort(model, appStateEffortValue) {
203769
203773
  }
203770
203774
  return resolved;
203771
203775
  }
203776
+ function resolveConfiguredEffort(model, appStateEffortValue) {
203777
+ const envOverride = getEffortEnvOverride();
203778
+ if (envOverride === null) {
203779
+ return;
203780
+ }
203781
+ return envOverride ?? appStateEffortValue ?? getDefaultEffortForModel(model);
203782
+ }
203772
203783
  function getDisplayedEffortLevel(model, appStateEffort) {
203773
- const resolved = resolveAppliedEffort(model, appStateEffort) ?? "high";
203774
- return convertEffortValueToLevel(resolved);
203784
+ const configured = resolveConfiguredEffort(model, appStateEffort) ?? "high";
203785
+ return convertEffortValueToLevel(configured);
203775
203786
  }
203776
203787
  function getEffortSuffix(model, effortValue) {
203777
203788
  if (effortValue === undefined)
203778
203789
  return "";
203779
- const resolved = resolveAppliedEffort(model, effortValue);
203780
- if (resolved === undefined)
203790
+ const configured = resolveConfiguredEffort(model, effortValue);
203791
+ if (configured === undefined)
203781
203792
  return "";
203782
- return ` with ${convertEffortValueToLevel(resolved)} effort`;
203793
+ return ` with ${convertEffortValueToLevel(configured)} effort`;
203783
203794
  }
203784
203795
  function isValidNumericEffort(value) {
203785
203796
  return Number.isInteger(value);
@@ -203807,8 +203818,10 @@ function getEffortLevelDescription(level) {
203807
203818
  return "Balanced approach with standard implementation and testing";
203808
203819
  case "high":
203809
203820
  return "Comprehensive implementation with extensive testing and documentation";
203821
+ case "xhigh":
203822
+ return "Deeper reasoning than high, just below maximum (Fable 5, Opus 4.7+, Sonnet 5)";
203810
203823
  case "max":
203811
- return "Maximum capability with deepest reasoning (Opus 4.6 only)";
203824
+ return "Maximum capability with deepest reasoning. May use excessive tokens resulting in long response times or overthinking. Use sparingly for the hardest tasks.";
203812
203825
  }
203813
203826
  }
203814
203827
  function getEffortValueDescription(value) {
@@ -203853,6 +203866,9 @@ function getDefaultEffortForModel(model) {
203853
203866
  return "medium";
203854
203867
  }
203855
203868
  }
203869
+ if (model.toLowerCase().includes("opus-4-7")) {
203870
+ return "xhigh";
203871
+ }
203856
203872
  if (isUltrathinkEnabled() && modelSupportsEffort(model)) {
203857
203873
  return "medium";
203858
203874
  }
@@ -230980,7 +230996,7 @@ function substituteUserConfigVariables(value, userConfig) {
230980
230996
  return String(configValue);
230981
230997
  });
230982
230998
  }
230983
- function substituteUserConfigInContent(content, options, schema) {
230999
+ function substituteUserConfigInContent(content, options, schema, valueTransform) {
230984
231000
  return content.replace(/\$\{user_config\.([^}]+)\}/g, (match, key2) => {
230985
231001
  if (schema[key2]?.sensitive === true) {
230986
231002
  return `[sensitive option '${key2}' not available in skill content]`;
@@ -230989,7 +231005,7 @@ function substituteUserConfigInContent(content, options, schema) {
230989
231005
  if (value === undefined) {
230990
231006
  return match;
230991
231007
  }
230992
- return String(value);
231008
+ return valueTransform ? valueTransform(String(value)) : String(value);
230993
231009
  });
230994
231010
  }
230995
231011
  var loadPluginOptions;
@@ -453612,7 +453628,7 @@ var init_coreSchemas = __esm(() => {
453612
453628
  displayName: exports_external.string().describe("Human-readable display name"),
453613
453629
  description: exports_external.string().describe("Description of the model's capabilities"),
453614
453630
  supportsEffort: exports_external.boolean().optional().describe("Whether this model supports effort levels"),
453615
- supportedEffortLevels: exports_external.array(exports_external.enum(["low", "medium", "high", "max"])).optional().describe("Available effort levels for this model"),
453631
+ supportedEffortLevels: exports_external.array(exports_external.enum(["low", "medium", "high", "xhigh", "max"])).optional().describe("Available effort levels for this model"),
453616
453632
  supportsAdaptiveThinking: exports_external.boolean().optional().describe("Whether this model supports adaptive thinking (Claude decides when and how much to think)"),
453617
453633
  supportsFastMode: exports_external.boolean().optional().describe("Whether this model supports fast mode"),
453618
453634
  supportsAutoMode: exports_external.boolean().optional().describe("Whether this model supports auto mode")
@@ -453642,7 +453658,10 @@ var init_coreSchemas = __esm(() => {
453642
453658
  maxTurns: exports_external.number().int().positive().optional().describe("Maximum number of agentic turns (API round-trips) before stopping"),
453643
453659
  background: exports_external.boolean().optional().describe("Run this agent as a background task (non-blocking, fire-and-forget) when invoked"),
453644
453660
  memory: exports_external.enum(["user", "project", "local"]).optional().describe("Scope for auto-loading agent memory files. 'user' - ~/.claude/agent-memory/<agentType>/, 'project' - .claude/agent-memory/<agentType>/, 'local' - .claude/agent-memory-local/<agentType>/"),
453645
- effort: exports_external.union([exports_external.enum(["low", "medium", "high", "max"]), exports_external.number().int()]).optional().describe("Reasoning effort level for this agent. Either a named level or an integer"),
453661
+ effort: exports_external.union([
453662
+ exports_external.enum(["low", "medium", "high", "xhigh", "max"]),
453663
+ exports_external.number().int()
453664
+ ]).optional().describe("Reasoning effort level for this agent. Either a named level or an integer"),
453646
453665
  permissionMode: PermissionModeSchema().optional().describe("Permission mode controlling how tool executions are handled")
453647
453666
  }).describe("Definition for a custom subagent that can be invoked via the Agent tool."));
453648
453667
  SettingSourceSchema = lazySchema(() => exports_external.enum(["user", "project", "local"]).describe("Source for loading filesystem-based settings. " + "'user' - Global user settings (~/.claude/settings.json). " + "'project' - Project settings (.claude/settings.json). " + "'local' - Local settings (.claude/settings.local.json)."));
@@ -607154,14 +607173,15 @@ function generateProgressiveArgumentHint(argNames, typedArgs) {
607154
607173
  return;
607155
607174
  return remaining.map((name3) => `[${name3}]`).join(" ");
607156
607175
  }
607157
- function substituteArguments(content, args, appendIfNoPlaceholder = true, argumentNames = []) {
607176
+ function substituteArguments(content, args, appendIfNoPlaceholder = true, argumentNames = [], valueTransform) {
607158
607177
  if (args === undefined || args === null) {
607159
607178
  return content;
607160
607179
  }
607161
607180
  let work = content.replaceAll(SHIELDED_DOLLAR, SENTINEL_REPLACEMENT).replaceAll(VALUE_BOUNDARY, SENTINEL_REPLACEMENT);
607162
607181
  const insertValue = (value) => {
607163
607182
  const sanitized = (value ?? "").replaceAll(SHIELDED_DOLLAR, SENTINEL_REPLACEMENT).replaceAll(VALUE_BOUNDARY, SENTINEL_REPLACEMENT);
607164
- return VALUE_BOUNDARY + sanitized.replaceAll("$", SHIELDED_DOLLAR) + VALUE_BOUNDARY;
607183
+ const transformed = valueTransform ? valueTransform(sanitized) : sanitized;
607184
+ return VALUE_BOUNDARY + transformed.replaceAll("$", SHIELDED_DOLLAR) + VALUE_BOUNDARY;
607165
607185
  };
607166
607186
  const parsedArgs = parseArguments2(args);
607167
607187
  const namedArgs = argumentNames.map((name3, index2) => ({ name: name3, index: index2 })).filter((entry) => Boolean(entry.name)).sort((left2, right2) => right2.name.length - left2.name.length);
@@ -607212,6 +607232,15 @@ var init_argumentSubstitution = __esm(() => {
607212
607232
 
607213
607233
  // src/utils/promptShellExecution.ts
607214
607234
  import { randomUUID as randomUUID30 } from "crypto";
607235
+ function escapeShellExecutionMarkers(value) {
607236
+ return value.replace(/`!/g, "` !").replace(/!`/g, "! `").replace(/(^|\s)!/gm, "$1\\!");
607237
+ }
607238
+ function escapeAngleBrackets(value) {
607239
+ return value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
607240
+ }
607241
+ function sanitizeUsername(value) {
607242
+ return value.replace(/[^a-zA-Z0-9._-]/g, "");
607243
+ }
607215
607244
  function isSkillShellExecutionDisabled() {
607216
607245
  if (getSettingsForSource("policySettings")?.disableSkillShellExecution === true) {
607217
607246
  return true;
@@ -607543,7 +607572,7 @@ function createSkillCommand({
607543
607572
  let finalContent = baseDir ? `Base directory for this skill: ${baseDir}
607544
607573
 
607545
607574
  ${markdownContent}` : markdownContent;
607546
- finalContent = substituteArguments(finalContent, args, true, argumentNames);
607575
+ finalContent = substituteArguments(finalContent, args, true, argumentNames, loadedFrom === "mcp" ? (value) => escapeAngleBrackets(escapeShellExecutionMarkers(value)) : escapeShellExecutionMarkers);
607547
607576
  if (baseDir) {
607548
607577
  const skillDir = process.platform === "win32" ? baseDir.replace(/\\/g, "/") : baseDir;
607549
607578
  finalContent = finalContent.replace(/\$\{CLAUDE_SKILL_DIR\}/g, skillDir);
@@ -608299,13 +608328,13 @@ function createPluginCommand(commandName, file2, sourceName, pluginManifest, plu
608299
608328
  let finalContent = config7.isSkillMode ? `Base directory for this skill: ${dirname51(file2.filePath)}
608300
608329
 
608301
608330
  ${content}` : content;
608302
- finalContent = substituteArguments(finalContent, args, true, argumentNames);
608331
+ finalContent = substituteArguments(finalContent, args, true, argumentNames, escapeShellExecutionMarkers);
608303
608332
  finalContent = substitutePluginVariables(finalContent, {
608304
608333
  path: pluginPath,
608305
608334
  source: sourceName
608306
608335
  });
608307
608336
  if (pluginManifest.userConfig) {
608308
- finalContent = substituteUserConfigInContent(finalContent, loadPluginOptions(sourceName), pluginManifest.userConfig);
608337
+ finalContent = substituteUserConfigInContent(finalContent, loadPluginOptions(sourceName), pluginManifest.userConfig, escapeShellExecutionMarkers);
608309
608338
  }
608310
608339
  if (config7.isSkillMode) {
608311
608340
  const rawSkillDir = dirname51(file2.filePath);
@@ -644881,7 +644910,8 @@ var init_color3 = __esm(() => {
644881
644910
 
644882
644911
  // src/commands/commit.ts
644883
644912
  function getPromptContent() {
644884
- const { commit: commitAttribution } = getAttributionTexts();
644913
+ const { commit: rawCommitAttribution } = getAttributionTexts();
644914
+ const commitAttribution = escapeShellExecutionMarkers(rawCommitAttribution);
644885
644915
  let prefix = "";
644886
644916
  if (process.env.USER_TYPE === "ant" && isUndercover()) {
644887
644917
  prefix = getUndercoverInstructions() + `
@@ -645881,10 +645911,11 @@ var init_desktop2 = __esm(() => {
645881
645911
 
645882
645912
  // src/commands/commit-push-pr.ts
645883
645913
  function getPromptContent2(defaultBranch, prAttribution) {
645884
- const { commit: commitAttribution, pr: defaultPrAttribution } = getAttributionTexts();
645885
- const effectivePrAttribution = prAttribution ?? defaultPrAttribution;
645886
- const safeUser = process.env.SAFEUSER || "";
645887
- const username = process.env.USER || "";
645914
+ const { commit: rawCommitAttribution, pr: defaultPrAttribution } = getAttributionTexts();
645915
+ const commitAttribution = escapeShellExecutionMarkers(rawCommitAttribution);
645916
+ const effectivePrAttribution = escapeShellExecutionMarkers(prAttribution ?? defaultPrAttribution);
645917
+ const safeUser = sanitizeUsername(process.env.SAFEUSER || "");
645918
+ const username = sanitizeUsername(process.env.USER || "");
645888
645919
  let prefix = "";
645889
645920
  let reviewerArg = " and `--reviewer anthropics/claude-code`";
645890
645921
  let addReviewerArg = " (and add `--add-reviewer anthropics/claude-code`)";
@@ -646002,7 +646033,7 @@ var init_commit_push_pr = __esm(() => {
646002
646033
 
646003
646034
  ## Additional instructions from user
646004
646035
 
646005
- ${trimmedArgs}`;
646036
+ ${escapeShellExecutionMarkers(trimmedArgs)}`;
646006
646037
  }
646007
646038
  const finalContent = await executeShellCommandsInPrompt(promptContent, {
646008
646039
  ...context7,
@@ -647760,7 +647791,7 @@ var init_EffortIndicator = __esm(() => {
647760
647791
 
647761
647792
  // src/components/ModelPicker.tsx
647762
647793
  function ModelPicker(t0) {
647763
- const $4 = import_compiler_runtime134.c(82);
647794
+ const $4 = import_compiler_runtime134.c(84);
647764
647795
  const {
647765
647796
  initial,
647766
647797
  sessionModel,
@@ -647869,16 +647900,20 @@ function ModelPicker(t0) {
647869
647900
  }
647870
647901
  const focusedModelName = t7;
647871
647902
  let focusedSupportsEffort;
647903
+ let focusedSupportsXhigh;
647872
647904
  let t8;
647873
647905
  if ($4[20] !== focusedValue) {
647874
647906
  const focusedModel = resolveOptionModel(focusedValue);
647875
647907
  focusedSupportsEffort = focusedModel ? modelSupportsEffort(focusedModel) : false;
647908
+ focusedSupportsXhigh = focusedModel ? modelSupportsXhighEffort(focusedModel) : false;
647876
647909
  t8 = focusedModel ? modelSupportsMaxEffort(focusedModel) : false;
647877
647910
  $4[20] = focusedValue;
647878
647911
  $4[21] = focusedSupportsEffort;
647879
647912
  $4[22] = t8;
647913
+ $4[82] = focusedSupportsXhigh;
647880
647914
  } else {
647881
647915
  focusedSupportsEffort = $4[21];
647916
+ focusedSupportsXhigh = $4[82];
647882
647917
  t8 = $4[22];
647883
647918
  }
647884
647919
  const focusedSupportsMax = t8;
@@ -647891,7 +647926,7 @@ function ModelPicker(t0) {
647891
647926
  t9 = $4[24];
647892
647927
  }
647893
647928
  const focusedDefaultEffort = t9;
647894
- const displayEffort = effort === "max" && !focusedSupportsMax ? "high" : effort;
647929
+ const displayEffort = effort === "max" && !focusedSupportsMax || effort === "xhigh" && !focusedSupportsXhigh ? "high" : effort;
647895
647930
  let t10;
647896
647931
  if ($4[25] !== effortValue || $4[26] !== hasToggledEffort) {
647897
647932
  t10 = (value) => {
@@ -647908,18 +647943,19 @@ function ModelPicker(t0) {
647908
647943
  }
647909
647944
  const handleFocus = t10;
647910
647945
  let t11;
647911
- if ($4[28] !== focusedDefaultEffort || $4[29] !== focusedSupportsEffort || $4[30] !== focusedSupportsMax) {
647946
+ if ($4[28] !== focusedDefaultEffort || $4[29] !== focusedSupportsEffort || $4[30] !== focusedSupportsMax || $4[83] !== focusedSupportsXhigh) {
647912
647947
  t11 = (direction) => {
647913
647948
  if (!focusedSupportsEffort) {
647914
647949
  return;
647915
647950
  }
647916
- setEffort((prev) => cycleEffortLevel(prev ?? focusedDefaultEffort, direction, focusedSupportsMax));
647951
+ setEffort((prev) => cycleEffortLevel(prev ?? focusedDefaultEffort, direction, focusedSupportsMax, focusedSupportsXhigh));
647917
647952
  setHasToggledEffort(true);
647918
647953
  };
647919
647954
  $4[28] = focusedDefaultEffort;
647920
647955
  $4[29] = focusedSupportsEffort;
647921
647956
  $4[30] = focusedSupportsMax;
647922
647957
  $4[31] = t11;
647958
+ $4[83] = focusedSupportsXhigh;
647923
647959
  } else {
647924
647960
  t11 = $4[31];
647925
647961
  }
@@ -648329,10 +648365,11 @@ function EffortLevelIndicator(t0) {
648329
648365
  }
648330
648366
  return t4;
648331
648367
  }
648332
- function cycleEffortLevel(current, direction, includeMax) {
648333
- const levels = includeMax ? ["low", "medium", "high", "max"] : ["low", "medium", "high"];
648334
- const idx = levels.indexOf(current);
648335
- const currentIndex = idx !== -1 ? idx : levels.indexOf("high");
648368
+ function cycleEffortLevel(current, direction, includeMax, includeXhigh) {
648369
+ const levels = ["low", "medium", "high", "xhigh", "max"].filter((level) => (level !== "max" || includeMax) && (level !== "xhigh" || includeXhigh));
648370
+ const clamped = current === "max" && !includeMax || current === "xhigh" && !includeXhigh ? "high" : current;
648371
+ const idx = levels.indexOf(clamped);
648372
+ const currentIndex = idx !== -1 ? idx : levels.length - 1;
648336
648373
  if (direction === "right") {
648337
648374
  return levels[(currentIndex + 1) % levels.length];
648338
648375
  } else {
@@ -714718,7 +714755,7 @@ function setEffortValue(effortValue) {
714718
714755
  };
714719
714756
  }
714720
714757
  const description = getEffortValueDescription(effortValue);
714721
- const suffix2 = persistable !== undefined ? "" : " (this session only)";
714758
+ const suffix2 = persistable !== undefined ? " (saved as your default for new sessions)" : " (this session only)";
714722
714759
  return {
714723
714760
  message: `Set effort level to ${effortValue}${suffix2}: ${description}`,
714724
714761
  effortUpdate: {
@@ -714782,7 +714819,8 @@ function enableUltracode() {
714782
714819
  };
714783
714820
  }
714784
714821
  function executeEffort(args) {
714785
- const normalized = args.toLowerCase();
714822
+ const normalizedAlias = { med: "medium" };
714823
+ const normalized = normalizedAlias[args.trim().toLowerCase()] ?? args.trim().toLowerCase();
714786
714824
  if (normalized === "auto" || normalized === "unset") {
714787
714825
  if (isUltracodeEnabled()) {
714788
714826
  disableUltracodeForSession();
@@ -714794,7 +714832,7 @@ function executeEffort(args) {
714794
714832
  }
714795
714833
  if (!isEffortLevel(normalized)) {
714796
714834
  return {
714797
- message: `Invalid argument: ${args}. Valid options are: low, medium, high, max, ultracode, auto`
714835
+ message: `Invalid argument: ${args}. Valid options are: low, medium, high, xhigh, max, ultracode, auto`
714798
714836
  };
714799
714837
  }
714800
714838
  if (isUltracodeEnabled()) {
@@ -714857,15 +714895,14 @@ function ApplyEffortAndClose(t0) {
714857
714895
  async function call82(onDone, _context, args) {
714858
714896
  args = args?.trim() || "";
714859
714897
  if (COMMON_HELP_ARGS2.includes(args)) {
714860
- onDone(`Usage: /effort [low|medium|high|max|ultracode|auto]
714861
-
714862
- Effort levels:
714863
- - low: Quick, straightforward implementation
714864
- - medium: Balanced approach with standard testing
714865
- - high: Comprehensive implementation with extensive testing
714866
- - max: Maximum capability with deepest reasoning (Opus 4.6 only)
714867
- - ultracode: ` + ULTRACODE_EFFORT_DESCRIPTION + `
714868
- - auto: Use the default effort level for your model`);
714898
+ onDone(`Usage: /effort [low|medium|high|xhigh|max|ultracode|auto]
714899
+ ` + `- low: Quick, straightforward implementation
714900
+ ` + `- medium: Balanced approach with standard testing
714901
+ ` + `- high: Comprehensive implementation with extensive testing
714902
+ ` + `- xhigh: Extended reasoning with thorough analysis (Fable 5, Opus 4.7+, Sonnet 5)
714903
+ ` + `- max: Maximum capability with deepest reasoning (Fable 5, Opus 4.6+, Sonnet 4.6+)
714904
+ ` + `- ultracode: xhigh + dynamic workflow orchestration (this session only)
714905
+ ` + "- auto: Use the default effort level for your model");
714869
714906
  return;
714870
714907
  }
714871
714908
  if (!args || args === "current" || args === "status") {
@@ -714901,7 +714938,7 @@ var init_effort3 = __esm(() => {
714901
714938
  type: "local-jsx",
714902
714939
  name: "effort",
714903
714940
  description: "Set effort level for model usage",
714904
- argumentHint: "[low|medium|high|max|ultracode|auto]",
714941
+ argumentHint: "[low|medium|high|xhigh|max|ultracode|auto]",
714905
714942
  get immediate() {
714906
714943
  return shouldInferenceConfigCommandBeImmediate();
714907
714944
  },
@@ -794704,7 +794741,7 @@ var init_controlSchemas = __esm(() => {
794704
794741
  })).describe("Ordered low-to-high priority \u2014 later entries override earlier ones."),
794705
794742
  applied: exports_external.object({
794706
794743
  model: exports_external.string(),
794707
- effort: exports_external.enum(["low", "medium", "high", "max"]).nullable()
794744
+ effort: exports_external.enum(["low", "medium", "high", "xhigh", "max"]).nullable()
794708
794745
  }).optional().describe("Runtime-resolved values after env overrides, session state, and model-specific defaults are applied. Unlike `effective` (disk merge), these reflect what will actually be sent to the API.")
794709
794746
  }).describe("Effective merged settings plus raw per-source settings in merge order."));
794710
794747
  SDKControlElicitationRequestSchema = lazySchema(() => exports_external.object({
@@ -827450,7 +827487,7 @@ Omit sessionId to discover and pick from available sessions.
827450
827487
  process.exit(1);
827451
827488
  });
827452
827489
  }
827453
- program3.command("doctor").description("Check the health of your Claude Code auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
827490
+ program3.command("doctor").description("Check the health of your Claude Code installation. Reads settings files in the current directory without a trust prompt. For a full checkup that can also fix issues, run /doctor in a session.").action(async () => {
827454
827491
  const [{
827455
827492
  doctorHandler: doctorHandler2
827456
827493
  }, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cnwenf/occ",
3
- "version": "2.1.302",
3
+ "version": "2.1.304",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "bin": {