@cnwenf/occ 2.1.317 → 2.1.319

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 +74 -11
  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.317","BINARY_NAME":"occ","BUILD_TIME":"2026-08-30T19:03:20.438Z","FEEDBACK_CHANNEL":"","ISSUES_EXPLAINER":"","NATIVE_PACKAGE_URL":"","PACKAGE_URL":"@cnwenf/occ","VERSION_CHANGELOG":""};
2
+ globalThis.MACRO={"VERSION":"2.1.319","BINARY_NAME":"occ","BUILD_TIME":"2026-09-01T21:40:58.418Z","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;
@@ -58105,11 +58105,12 @@ var init_figures2 = __esm(() => {
58105
58105
  // src/types/permissions.ts
58106
58106
  var exports_permissions = {};
58107
58107
  __export(exports_permissions, {
58108
+ PERMISSION_MODES_CLI_CHOICES: () => PERMISSION_MODES_CLI_CHOICES,
58108
58109
  PERMISSION_MODES: () => PERMISSION_MODES,
58109
58110
  INTERNAL_PERMISSION_MODES: () => INTERNAL_PERMISSION_MODES,
58110
58111
  EXTERNAL_PERMISSION_MODES: () => EXTERNAL_PERMISSION_MODES
58111
58112
  });
58112
- var EXTERNAL_PERMISSION_MODES, INTERNAL_PERMISSION_MODES, PERMISSION_MODES;
58113
+ var EXTERNAL_PERMISSION_MODES, INTERNAL_PERMISSION_MODES, PERMISSION_MODES, PERMISSION_MODES_CLI_CHOICES;
58113
58114
  var init_permissions = __esm(() => {
58114
58115
  EXTERNAL_PERMISSION_MODES = [
58115
58116
  "acceptEdits",
@@ -58123,6 +58124,7 @@ var init_permissions = __esm(() => {
58123
58124
  ...EXTERNAL_PERMISSION_MODES
58124
58125
  ];
58125
58126
  PERMISSION_MODES = INTERNAL_PERMISSION_MODES;
58127
+ PERMISSION_MODES_CLI_CHOICES = PERMISSION_MODES.map((mode) => mode === "default" ? "manual" : mode);
58126
58128
  });
58127
58129
 
58128
58130
  // src/utils/permissions/PermissionMode.ts
@@ -380447,7 +380449,8 @@ function createPathChecker(command4, operationTypeOverride) {
380447
380449
  });
380448
380450
  }
380449
380451
  }
380450
- if (operationType === "write" || operationType === "create") {
380452
+ const planFromElevatedPrePlanMode = context4.mode === "plan" && (context4.prePlanMode === "auto" || context4.prePlanMode === "bypassPermissions" || context4.prePlanMode === "acceptEdits" || context4.prePlanMode === "dontAsk");
380453
+ if ((operationType === "write" || operationType === "create") && (context4.mode === "default" || context4.mode === "plan") && !planFromElevatedPrePlanMode) {
380451
380454
  suggestions.push({
380452
380455
  type: "setMode",
380453
380456
  mode: "acceptEdits",
@@ -617908,6 +617911,55 @@ function objectGroupBy(items, keySelector) {
617908
617911
  return result;
617909
617912
  }
617910
617913
 
617914
+ // src/utils/truncateMiddle.ts
617915
+ function truncationMarker(chars) {
617916
+ return `
617917
+
617918
+ ... [${chars} characters truncated] ...
617919
+
617920
+ `;
617921
+ }
617922
+ function sliceHead(value, length) {
617923
+ if (length <= 0)
617924
+ return "";
617925
+ if (value.length <= length)
617926
+ return value;
617927
+ const head = value.slice(0, length);
617928
+ const lastUnit = head.charCodeAt(length - 1);
617929
+ return lastUnit >= 55296 && lastUnit <= 56319 ? head.slice(0, -1) : head;
617930
+ }
617931
+ function sliceTail(value, length) {
617932
+ if (length <= 0)
617933
+ return "";
617934
+ if (value.length <= length)
617935
+ return value;
617936
+ const tail = value.slice(-length);
617937
+ const firstUnit = tail.charCodeAt(0);
617938
+ return firstUnit >= 56320 && firstUnit <= 57343 ? tail.slice(1) : tail;
617939
+ }
617940
+ function truncateMiddleWithMarker(value, cap) {
617941
+ if (value.length <= cap + TRUNCATION_SLACK) {
617942
+ return value;
617943
+ }
617944
+ const headLength = Math.floor(cap / 2);
617945
+ const tailLength = cap - headLength;
617946
+ const head = sliceHead(value, headLength);
617947
+ const tail = sliceTail(value, tailLength);
617948
+ const removedMiddle = value.slice(headLength, value.length - tailLength);
617949
+ let removedChars = value.length - head.length - tail.length;
617950
+ for (const match of removedMiddle.matchAll(NESTED_MARKER_PATTERN)) {
617951
+ const claimed = match[1].length <= 15 ? Number(match[1]) : Number.NaN;
617952
+ if (Number.isSafeInteger(claimed) && claimed >= match[0].length) {
617953
+ removedChars += claimed - match[0].length;
617954
+ }
617955
+ }
617956
+ return `${head}${truncationMarker(removedChars)}${tail}`;
617957
+ }
617958
+ var TRUNCATION_SLACK = 1024, TASK_NOTIFICATION_CHAR_CAP = 1e5, NESTED_MARKER_PATTERN;
617959
+ var init_truncateMiddle = __esm(() => {
617960
+ NESTED_MARKER_PATTERN = /\n\n\.\.\. \[(\d+) characters truncated\] \.\.\.\n\n/g;
617961
+ });
617962
+
617911
617963
  // src/utils/messageQueueManager.ts
617912
617964
  function logOperation(operation, content) {
617913
617965
  const sessionId = getSessionId();
@@ -617942,9 +617994,17 @@ function enqueue(command5) {
617942
617994
  logOperation("enqueue", typeof command5.value === "string" ? command5.value : undefined);
617943
617995
  }
617944
617996
  function enqueuePendingNotification(command5) {
617945
- commandQueue.push({ ...command5, priority: command5.priority ?? "later" });
617997
+ let toQueue = command5;
617998
+ if (command5.mode === "task-notification" && typeof command5.value === "string") {
617999
+ const cappedValue = truncateMiddleWithMarker(command5.value, TASK_NOTIFICATION_CHAR_CAP);
618000
+ if (cappedValue !== command5.value) {
618001
+ logForDebugging(`enqueuePendingNotification: task-notification capped from ${command5.value.length} to ${cappedValue.length} chars`, { level: "warn" });
618002
+ toQueue = { ...command5, value: cappedValue };
618003
+ }
618004
+ }
618005
+ commandQueue.push({ ...toQueue, priority: toQueue.priority ?? "later" });
617946
618006
  notifySubscribers();
617947
- logOperation("enqueue", typeof command5.value === "string" ? command5.value : undefined);
618007
+ logOperation("enqueue", typeof toQueue.value === "string" ? toQueue.value : undefined);
617948
618008
  }
617949
618009
  function dequeue(filter3) {
617950
618010
  if (commandQueue.length === 0) {
@@ -618130,8 +618190,10 @@ var commandQueue, snapshot, queueChanged, subscribeToCommandQueue, PRIORITY_ORDE
618130
618190
  var init_messageQueueManager = __esm(() => {
618131
618191
  init_featureFlags();
618132
618192
  init_state();
618193
+ init_debug();
618133
618194
  init_messages3();
618134
618195
  init_sessionStorage();
618196
+ init_truncateMiddle();
618135
618197
  commandQueue = [];
618136
618198
  snapshot = Object.freeze([]);
618137
618199
  queueChanged = createSignal();
@@ -754770,7 +754832,8 @@ function BashPermissionRequestInner({
754770
754832
  }
754771
754833
  case "yes-apply-suggestions": {
754772
754834
  logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "accept");
754773
- const permissionUpdates_0 = "suggestions" in toolUseConfirm.permissionResult ? toolUseConfirm.permissionResult.suggestions || [] : [];
754835
+ const rawSuggestions = "suggestions" in toolUseConfirm.permissionResult ? toolUseConfirm.permissionResult.suggestions || [] : [];
754836
+ const permissionUpdates_0 = rawSuggestions.filter((update_0) => update_0.type === "addRules" || update_0.type === "addDirectories");
754774
754837
  toolUseConfirm.onAllow(toolUseConfirm.input, permissionUpdates_0);
754775
754838
  onDone();
754776
754839
  break;
@@ -826859,7 +826922,7 @@ async function run() {
826859
826922
  });
826860
826923
  program3.name(CLI_BINARY_NAME).description(`Claude Code - starts an interactive session by default, use -p/--print for non-interactive output`).argument("[prompt]", "Your prompt", String).helpOption("-h, --help", "Display help for command").option("-d, --debug [filter]", 'Enable debug mode with optional category filtering (e.g., "api,hooks" or "!1p,!file")', (_value) => {
826861
826924
  return true;
826862
- }).addOption(new Option("--debug-to-stderr", "Enable debug mode (to stderr)").argParser(Boolean).hideHelp()).option("--debug-file <path>", "Write debug logs to a specific file path (implicitly enables debug mode)", () => true).option("--verbose", "Override verbose mode setting from config", () => true).option("-p, --print", "Print response and exit (useful for pipes). Note: The workspace trust dialog is skipped when Claude is run with the -p mode. Only use this flag in directories you trust.", () => true).option("--bare", "Minimal mode: skip hooks, LSP, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and CLAUDE.md auto-discovery. Sets CLAUDE_CODE_SIMPLE=1. Anthropic auth is strictly ANTHROPIC_API_KEY or apiKeyHelper via --settings (OAuth and keychain are never read). 3P providers (Bedrock/Vertex/Foundry) use their own credentials. Skills still resolve via /skill-name. Explicitly provide context via: --system-prompt[-file], --append-system-prompt[-file], --add-dir (CLAUDE.md dirs), --mcp-config, --settings, --agents, --plugin-dir.", () => true).option("--safe-mode", 'Start in safe mode: disable all plugins, bundled skills, and hooks. Used for troubleshooting ("is a plugin/hook causing my problem?").', () => true).option("--ax-screen-reader", "Render screen-reader friendly output (flat text, no decorative borders or animations). Overridden by the CLAUDE_AX_SCREEN_READER env var and the axScreenReader setting.", () => true).addOption(new Option("--init", "Run Setup hooks with init trigger, then continue").hideHelp()).addOption(new Option("--init-only", "Run Setup and SessionStart:startup hooks, then exit").hideHelp()).addOption(new Option("--maintenance", "Run Setup hooks with maintenance trigger, then continue").hideHelp()).addOption(new Option("--output-format <format>", 'Output format (only works with --print): "text" (default), "json" (single result), or "stream-json" (realtime streaming)').choices(["text", "json", "stream-json"])).addOption(new Option("--json-schema <schema>", 'JSON Schema for structured output validation. Example: {"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}').argParser(String)).option("--include-hook-events", "Include all hook lifecycle events in the output stream (only works with --output-format=stream-json)", () => true).option("--include-partial-messages", "Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)", () => true).option("--forward-subagent-text", "Forward subagent text and thinking blocks as assistant/user messages with parent_tool_use_id set (only works with --print and --output-format=stream-json)", () => true).addOption(new Option("--input-format <format>", 'Input format (only works with --print): "text" (default), or "stream-json" (realtime streaming input)').choices(["text", "stream-json"])).option("--mcp-debug", "[DEPRECATED. Use --debug instead] Enable MCP debug mode (shows MCP server errors)", () => true).option("--dangerously-skip-permissions", "Bypass all permission checks. Recommended only for sandboxes with no internet access.", () => true).option("--allow-dangerously-skip-permissions", "Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.", () => true).option("--dangerously-skip-protected-paths", "Skip permission prompts for writes to protected paths (.claude/, .git/, .vscode/, shell configs). These paths are protected because editing them can execute code or alter tool behavior. Use with caution.", () => true).addOption(new Option("--thinking <mode>", "Thinking mode: enabled (equivalent to adaptive), disabled").choices(["enabled", "adaptive", "disabled"]).hideHelp()).addOption(new Option("--max-thinking-tokens <tokens>", "[DEPRECATED. Use --thinking instead for newer models] Maximum number of thinking tokens (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-turns <turns>", "Maximum number of agentic turns in non-interactive mode. This will early exit the conversation after the specified number of turns. (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-budget-usd <amount>", "Maximum dollar amount to spend on API calls (only works with --print)").argParser((value) => {
826925
+ }).addOption(new Option("--debug-to-stderr", "Enable debug mode (to stderr)").argParser(Boolean).hideHelp()).option("--debug-file <path>", "Write debug logs to a specific file path (implicitly enables debug mode)", () => true).option("--verbose", "Override verbose mode setting from config", () => true).option("-p, --print", "Print response and exit (useful for pipes). Note: The workspace trust dialog is skipped when Claude is run in non-interactive mode (via -p, or when stdout is not a TTY, e.g. piped or redirected output). Only use this in directories you trust. Settings files that fail validation are silently ignored in this mode (no error dialog is shown).", () => true).option("--bare", "Minimal mode: skip hooks, LSP, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and CLAUDE.md auto-discovery. Sets CLAUDE_CODE_SIMPLE=1. Anthropic auth is strictly ANTHROPIC_API_KEY or apiKeyHelper via --settings (OAuth and keychain are never read). 3P providers (Bedrock/Vertex/Foundry) use their own credentials. Skills still resolve via /skill-name. Explicitly provide context via: --system-prompt[-file], --append-system-prompt[-file], --add-dir (CLAUDE.md dirs), --mcp-config, --settings, --agents, --plugin-dir.", () => true).option("--safe-mode", 'Start in safe mode: disable all plugins, bundled skills, and hooks. Used for troubleshooting ("is a plugin/hook causing my problem?").', () => true).option("--ax-screen-reader", "Render screen-reader friendly output (flat text, no decorative borders or animations).", () => true).addOption(new Option("--init", "Run Setup hooks with init trigger, then continue").hideHelp()).addOption(new Option("--init-only", "Run Setup and SessionStart:startup hooks, then exit").hideHelp()).addOption(new Option("--maintenance", "Run Setup hooks with maintenance trigger, then continue").hideHelp()).addOption(new Option("--output-format <format>", 'Output format (only works with --print): "text" (default), "json" (single result), or "stream-json" (realtime streaming)').choices(["text", "json", "stream-json"])).addOption(new Option("--json-schema <schema>", 'JSON Schema for structured output validation. Example: {"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}').argParser(String)).option("--include-hook-events", "Include all hook lifecycle events in the output stream (only works with --output-format=stream-json)", () => true).option("--include-partial-messages", "Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)", () => true).option("--forward-subagent-text", "Forward subagent text and thinking blocks as assistant/user messages with parent_tool_use_id set (only works with --print and --output-format=stream-json)", () => true).addOption(new Option("--input-format <format>", 'Input format (only works with --print): "text" (default), or "stream-json" (realtime streaming input)').choices(["text", "stream-json"])).option("--dangerously-skip-permissions", "Bypass all permission checks. Recommended only for sandboxes with no internet access.", () => true).option("--allow-dangerously-skip-permissions", "Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.", () => true).option("--dangerously-skip-protected-paths", "Skip permission prompts for writes to protected paths (.claude/, .git/, .vscode/, shell configs). These paths are protected because editing them can execute code or alter tool behavior. Use with caution.", () => true).addOption(new Option("--thinking <mode>", "Thinking mode: enabled (equivalent to adaptive), disabled").choices(["enabled", "adaptive", "disabled"]).hideHelp()).addOption(new Option("--max-thinking-tokens <tokens>", "[DEPRECATED. Use --thinking instead for newer models] Maximum number of thinking tokens (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-turns <turns>", "Maximum number of agentic turns in non-interactive mode. This will early exit the conversation after the specified number of turns. (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-budget-usd <amount>", "Maximum dollar amount to spend on API calls (only works with --print)").argParser((value) => {
826863
826926
  const amount = Number(value);
826864
826927
  if (isNaN(amount) || amount <= 0) {
826865
826928
  throw new Error("--max-budget-usd must be a positive number greater than 0");
@@ -826871,10 +826934,10 @@ async function run() {
826871
826934
  throw new Error("--task-budget must be a positive integer");
826872
826935
  }
826873
826936
  return tokens;
826874
- }).hideHelp()).option("--replay-user-messages", "Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)", () => true).addOption(new Option("--enable-auth-status", "Enable auth status messages in SDK mode").default(false).hideHelp()).option("--allowedTools, --allowed-tools <tools...>", 'Comma or space-separated list of tool names to allow (e.g. "Bash(git:*) Edit")').option("--tools <tools...>", 'Specify the list of available tools from the built-in set. Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read").').option("--disallowedTools, --disallowed-tools <tools...>", 'Comma or space-separated list of tool names to deny (e.g. "Bash(git:*) Edit")').option("--mcp-config <configs...>", "Load MCP servers from JSON files or strings (space-separated)").addOption(new Option("--permission-prompt-tool <tool>", "MCP tool to use for permission prompts (only works with --print)").argParser(String).hideHelp()).addOption(new Option("--system-prompt <prompt>", "System prompt to use for the session").argParser(String)).addOption(new Option("--system-prompt-file <file>", "Read system prompt from a file").argParser(String).hideHelp()).addOption(new Option("--append-system-prompt <prompt>", "Append a system prompt to the default system prompt").argParser(String)).addOption(new Option("--append-system-prompt-file <file>", "Read system prompt from a file and append to the default system prompt").argParser(String).hideHelp()).addOption(new Option("--permission-mode <mode>", "Permission mode to use for the session").choices(PERMISSION_MODES).argParser((raw) => {
826937
+ }).hideHelp()).option("--replay-user-messages", "Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)", () => true).addOption(new Option("--enable-auth-status", "Enable auth status messages in SDK mode").default(false).hideHelp()).option("--allowedTools, --allowed-tools <tools...>", 'Comma or space-separated list of tool names to allow (e.g. "Bash(git *) Edit")').option("--tools <tools...>", 'Specify the list of available tools from the built-in set. Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read").').option("--disallowedTools, --disallowed-tools <tools...>", 'Comma or space-separated list of tool names to deny (e.g. "Bash(git *) Edit")').option("--mcp-config <configs...>", "Load MCP servers from JSON files or strings (space-separated)").addOption(new Option("--permission-prompt-tool <tool>", "MCP tool to use for permission prompts (only works with --print)").argParser(String).hideHelp()).addOption(new Option("--system-prompt <prompt>", "System prompt to use for the session").argParser(String)).addOption(new Option("--system-prompt-file <file>", "Read system prompt from a file").argParser(String).hideHelp()).addOption(new Option("--append-system-prompt <prompt>", "Append a system prompt to the default system prompt").argParser(String)).addOption(new Option("--append-system-prompt-file <file>", "Read system prompt from a file and append to the default system prompt").argParser(String).hideHelp()).addOption(new Option("--permission-mode <mode>", "Permission mode to use for the session").choices(PERMISSION_MODES_CLI_CHOICES).argParser((raw) => {
826875
826938
  const normalized = normalizePermissionModeInput(raw);
826876
826939
  if (!PERMISSION_MODES.includes(normalized)) {
826877
- throw new InvalidArgumentError(`Allowed choices are ${PERMISSION_MODES.join(", ")}.`);
826940
+ throw new InvalidArgumentError(`Allowed choices are ${PERMISSION_MODES_CLI_CHOICES.join(", ")}.`);
826878
826941
  }
826879
826942
  return normalized;
826880
826943
  })).option("-c, --continue", "Continue the most recent conversation in the current directory", () => true).option("-r, --resume [value]", "Resume a conversation by session ID, or open interactive picker with optional search term", (value) => value || true).option("--fork-session", "When resuming, create a new session ID instead of reusing the original (use with --resume or --continue)", () => true).addOption(new Option("--prefill <text>", "Pre-fill the prompt input with text without submitting it").hideHelp()).addOption(new Option("--deep-link-origin", "Signal that this session was launched from a deep link").hideHelp()).addOption(new Option("--deep-link-repo <slug>", "Repo slug the deep link ?repo= parameter resolved to the current cwd").hideHelp()).addOption(new Option("--deep-link-last-fetch <ms>", "FETCH_HEAD mtime in epoch ms, precomputed by the deep link trampoline").argParser((v6) => {
@@ -826886,7 +826949,7 @@ async function run() {
826886
826949
  throw new InvalidArgumentError(`It must be one of: ${EFFORT_LEVELS.join(", ")}`);
826887
826950
  }
826888
826951
  return value;
826889
- })).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model(s) when the default model is overloaded or not available. Accepts a comma-separated list to try each in order. Re-tries the primary at the start of each user turn. (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").addOption(new Option("--prompt-suggestions [value]", "Enable prompt suggestions. In print/SDK mode, emits a prompt_suggestion message after each turn with a predicted next user prompt").choices(["true", "false", "1", "0", "yes", "no", "on", "off"]).preset("true").argParser((raw) => {
826952
+ })).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model(s) when the default model is overloaded or not available. Accepts a comma-separated list to try each in order. Re-tries the primary at the start of each user turn. (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in the prompt box, /resume picker, and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").addOption(new Option("--prompt-suggestions [value]", "Enable prompt suggestions. In print/SDK mode, emits a prompt_suggestion message after each turn with a predicted next user prompt").choices(["true", "false", "1", "0", "yes", "no", "on", "off"]).preset("true").argParser((raw) => {
826890
826953
  const allowed = ["true", "false", "1", "0", "yes", "no", "on", "off"];
826891
826954
  if (!allowed.includes(raw)) {
826892
826955
  throw new InvalidArgumentError("Allowed choices are true, false, 1, 0, yes, no, on, off.");
@@ -829293,7 +829356,7 @@ Runs OCC on a remote Linux host. You don't need to install
829293
829356
  const { daemonSubcommand: daemonSubcommand2 } = await Promise.resolve().then(() => (init_daemon3(), exports_daemon2));
829294
829357
  await daemonSubcommand2("hub", []);
829295
829358
  });
829296
- program3.command("stop <id>").description("Stop a background session").action(async (id) => {
829359
+ program3.command("stop <id>").alias("kill").description("Stop a background session").action(async (id) => {
829297
829360
  const { stopHandler: stopHandler2 } = await Promise.resolve().then(() => (init_daemon3(), exports_daemon2));
829298
829361
  await stopHandler2(id);
829299
829362
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cnwenf/occ",
3
- "version": "2.1.317",
3
+ "version": "2.1.319",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "bin": {