grok-bot-cli 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29873,13 +29873,13 @@ const collectDoctorHost = (value, previous)=>[
29873
29873
  const registerLifecycleCommands = (program, options)=>{
29874
29874
  const { from: pinned, lifecycle, machine, setExitCode, show } = options;
29875
29875
  const fromOption = (command, help, defaultToCwd = false)=>void 0 === pinned ? command.option('--from <bundle-dir>', help, defaultToCwd ? process.cwd() : void 0) : command;
29876
- const installCommand = fromOption(program.command('install').description('Install a built bundle into a supported host').argument('<host>', 'Destination host: amp, claude, codex, or cursor', installHost), 'Target bundle directory or artifact root', true).option('--scope <scope>', 'Host install scope', installScope, 'user').option('--replace', "Replace an existing agent-bundle install of this plugin even when its version differs; same-version content drift is replaced automatically and foreign installs are always refused").option('--mode <mode>', 'Cursor delivery mode: local (default) or marketplace', installMode).option('--json', 'Write one machine-readable JSON document');
29876
+ const installCommand = fromOption(program.command('install').description('Install a built bundle into a supported host').argument('<host>', 'Destination host: amp, claude, codex, or cursor', installHost), 'Target bundle directory or artifact root', true).option('--scope <scope>', 'Host install scope', installScope, 'user').option('--replace', "Replace an existing agent-bundle install of this plugin even when its version differs; same-version content drift is replaced automatically and foreign installs are always refused").option('--force', 'Alias for --replace').option('--mode <mode>', 'Cursor delivery mode: local (default) or marketplace', installMode).option('--json', 'Write one machine-readable JSON document');
29877
29877
  installCommand.action(async (host, commandOptions)=>{
29878
29878
  const { installBundle: install } = await lifecycle();
29879
29879
  const result = await install({
29880
29880
  from: pinned ?? commandOptions.from ?? process.cwd(),
29881
29881
  host,
29882
- replace: true === commandOptions.replace,
29882
+ replace: true === commandOptions.replace || true === commandOptions.force,
29883
29883
  ...void 0 === commandOptions.mode ? {} : {
29884
29884
  mode: commandOptions.mode
29885
29885
  },
@@ -39391,8 +39391,13 @@ const installPublicCli = async (options, identity, host, scope)=>{
39391
39391
  previousContentHash = installed?.hash ?? previousReceipt?.contentHash;
39392
39392
  }
39393
39393
  }
39394
+ if (replaced && 'codex' === host && entry?.enabled !== true) {
39395
+ const reason = entry?.enabled === false ? 'plugin list reports enabled: false' : 'plugin list omits enabled';
39396
+ throw identity_failure('AB7004', `Cannot replace the Codex install of ${id}: ${reason}. The native plugin CLI has no qualified settings-preserving update API, and native \`plugin add\` resets plugin-level enabled to true. Enable the plugin in Codex before replacing, or leave this install unchanged.`, host);
39397
+ }
39394
39398
  const recorded = await receiptIdentity();
39395
- if (replaced) await runHostCommand(runner, identity, host, publicHostUninstallArguments(host, id, scope), 'removal');
39399
+ const replaceRemovesPlugin = replaced && 'codex' !== host;
39400
+ if (replaceRemovesPlugin) await runHostCommand(runner, identity, host, publicHostUninstallArguments(host, id, scope), 'removal');
39396
39401
  await runHostCommand(runner, identity, host, [
39397
39402
  'plugin',
39398
39403
  'marketplace',
@@ -39438,7 +39443,7 @@ const installPublicCli = async (options, identity, host, scope)=>{
39438
39443
  } catch (error) {
39439
39444
  if (void 0 !== stateRollback) await stateRollback();
39440
39445
  const rollbacks = [
39441
- ...pluginInstalled ? [
39446
+ ...pluginInstalled && !('codex' === host && replaced) ? [
39442
39447
  publicHostUninstallArguments(host, id, scope)
39443
39448
  ] : [],
39444
39449
  ...createdMarketplace ? [
@@ -41647,7 +41652,7 @@ const doctor_readPublicHostInventory = (host, identity, listing, environment, ho
41647
41652
  marketplace: identity.marketplace ?? '',
41648
41653
  plugin: identity.plugin
41649
41654
  });
41650
- const publicHostReplaceRecipe = (host, scopeArguments = '')=>'claude' === host ? `Rerun \`agent-bundle install claude --from <bundle-dir>${scopeArguments}\`; same-version content drift is replaced through \`claude plugin uninstall --keep-data\` + \`claude plugin install\` because Claude\'s \`plugin update\` is version-gated.` : "Rerun `agent-bundle install codex --from <bundle-dir>`; same-version content drift is replaced through `codex plugin remove` + `codex plugin add`.";
41655
+ const publicHostReplaceRecipe = (host, scopeArguments = '')=>'claude' === host ? `Rerun \`agent-bundle install claude --from <bundle-dir>${scopeArguments}\`; same-version content drift is replaced through \`claude plugin uninstall --keep-data\` + \`claude plugin install\` because Claude\'s \`plugin update\` is version-gated.` : "Rerun `agent-bundle install codex --from <bundle-dir>`; same-version content drift is replaced through `codex plugin add` so plugin settings and nested MCP overrides in config.toml survive. Replacement is refused (`AB7004`) when plugin list reports `enabled: false` or omits `enabled`, because the native plugin CLI has no qualified settings-preserving update API.";
41651
41656
  const hostLoadFailureDiagnostic = (host, copy, errors, replaceHint = '')=>doctor_diagnostic('AB7325', `${host} refused to load ${copy}: ${errors.join(' | ')}`, `Fix the artifact so \`${host} plugin list --json\` reports no \`errors\` for it, rebuild, and rerun \`agent-bundle install ${host} --from <bundle-dir>${replaceHint} --replace\`.`, 'error', host);
41652
41657
  const disabledInstallDiagnostic = (identity, version, installPath, scope)=>doctor_diagnostic('AB7327', `claude lists ${identity.plugin}@${version} at ${installPath}${void 0 === scope ? '' : ` (scope ${scope})`} as disabled (\`enabled: false\`): the copy is installed but none of it loads in a session.`, `Run \`claude plugin enable ${identity.plugin}${void 0 === identity.marketplace ? '' : `@${identity.marketplace}`}${void 0 === scope ? '' : ` --scope ${scope}`}\` (or \`/plugin\` in a session), then rerun Doctor; reinstalling does not enable a disabled plugin.`, 'warning', 'claude');
41653
41658
  const publicHostInstallComparison = async (host, identity, artifact, inventory)=>{