@mutmutco/cli 3.72.0 → 3.73.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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The command-line engine for MMI Future org tooling. It delivers the org-managed `.gitignore` block, reads and claims GitHub Project work, and exposes the model-agnostic commands used by the MMI plugin and non-Claude agents. (Personal agent guides — `AGENTS.md` / `CLAUDE.md` — are developer-owned and gitignored; the CLI does not deliver, overwrite, or fan them out — the whole-spine fanout is retired.)
4
4
 
5
- This package is published from [mutmutco/MMI-Hub](https://github.com/mutmutco/MMI-Hub) and its version matches the MMI Hub Claude Code plugin distribution version (Claude-only since #2741; the release train bumps both in lockstep).
5
+ This package is published from [mutmutco/MMI-Hub](https://github.com/mutmutco/MMI-Hub) and its version matches the MMI Hub plugin distribution version — the release train bumps the CLI and the Claude, Codex, and Kimi plugin manifests in lockstep.
6
6
 
7
7
  The CLI carries the org **Hub endpoint** intrinsically (override with the `MMI_HUB_URL` env var), so a product repo needs **no committed control-plane config** to reach the Hub — board coords, deploy coordinates, OAuth, and the secrets layout are all discovered from the Hub registry at runtime.
8
8
 
package/dist/main.cjs CHANGED
@@ -21802,6 +21802,9 @@ function detectSurface(env) {
21802
21802
  if (env.MMI_AGENT_SURFACE === "codex" || has("CODEX_HOME") || (env.CLAUDE_PLUGIN_ROOT ?? "").includes(".codex")) {
21803
21803
  return "codex";
21804
21804
  }
21805
+ if (env.MMI_AGENT_SURFACE === "kimi" || has("KIMI_PLUGIN_ROOT") || has("KIMI_CODE_HOME")) {
21806
+ return "kimi";
21807
+ }
21805
21808
  if (env.MMI_AGENT_SURFACE === "cursor" || has("CURSOR_TRACE_ID") || has("CURSOR_USER") || has("CURSOR_SESSION_ID") || env.CURSOR_AGENT === "1" || has("CURSOR_EXTENSION_HOST_ROLE")) {
21806
21809
  return "cursor";
21807
21810
  }
@@ -21819,6 +21822,8 @@ function surfaceToken(surface) {
21819
21822
  return "claude";
21820
21823
  case "codex":
21821
21824
  return "codex";
21825
+ case "kimi":
21826
+ return "kimi";
21822
21827
  case "cursor":
21823
21828
  return "cursor";
21824
21829
  case "opencode":
@@ -21834,6 +21839,8 @@ function reloadAction(surface) {
21834
21839
  return "restart VS Code";
21835
21840
  case "codex":
21836
21841
  return "restart Codex";
21842
+ case "kimi":
21843
+ return "run /reload (or start a new session) in Kimi Code";
21837
21844
  case "opencode":
21838
21845
  return "restart OpenCode";
21839
21846
  case "cursor":
@@ -21864,7 +21871,10 @@ function nonClaudeSurfaceHealMessage(surface) {
21864
21871
  if (surface === "codex") {
21865
21872
  return "Codex ships an MMI plugin (#3563). Install or repair it with:\n codex plugin marketplace add mutmutco/MMI-Hub && codex plugin add mmi@mutmutco\n Then run /hooks and TRUST the MMI hooks \u2014 bundled hooks are skipped until reviewed.\n Update the CLI too: npm i -g @mutmutco/cli";
21866
21873
  }
21867
- return "No Hub-shipped MMI plugin on this host \u2014 the Hub ships plugins for Claude and Codex only.\n Update the CLI instead: npm i -g @mutmutco/cli (org rules ride an AGENTS.md authored outside the Hub)";
21874
+ if (surface === "kimi") {
21875
+ return "Kimi Code CLI ships an MMI plugin (kimi-k3). Install or repair it from the Kimi TUI with:\n /plugins install https://github.com/mutmutco/MMI-Hub\n Then run /reload (plugin hooks start only after a reload), and TRUST the install when prompted.\n Update the CLI too: npm i -g @mutmutco/cli";
21876
+ }
21877
+ return "No Hub-shipped MMI plugin on this host \u2014 the Hub ships plugins for Claude, Codex, and Kimi only.\n Update the CLI instead: npm i -g @mutmutco/cli (org rules ride an AGENTS.md authored outside the Hub)";
21868
21878
  }
21869
21879
  function healStepAborts(step, ok) {
21870
21880
  return !ok && step.gated;
@@ -21903,9 +21913,13 @@ var NPM_VIEW_TIMEOUT_MS = 15e3;
21903
21913
  function runHostBin(bin, args, opts) {
21904
21914
  return isWin ? execFileP2("cmd.exe", ["/c", bin, ...args], opts) : execFileP2(bin, args, opts);
21905
21915
  }
21916
+ function surfaceHomeDir(surface) {
21917
+ if (surface === "codex") return ".codex";
21918
+ if (surface === "kimi") return ".kimi-code";
21919
+ return ".claude";
21920
+ }
21906
21921
  var installedPluginsPath2 = (surface = detectSurface(process.env)) => {
21907
- const homeDir = surface === "codex" ? ".codex" : ".claude";
21908
- return (0, import_node_path24.join)((0, import_node_os6.homedir)(), homeDir, "plugins", "installed_plugins.json");
21922
+ return (0, import_node_path24.join)((0, import_node_os6.homedir)(), surfaceHomeDir(surface), "plugins", "installed_plugins.json");
21909
21923
  };
21910
21924
  function readInstalledPlugins(surface = detectSurface(process.env)) {
21911
21925
  try {
@@ -21921,6 +21935,7 @@ function marketplaceCloneCandidates(surface, home) {
21921
21935
  (0, import_node_path24.join)(home, ".codex", "plugins", "marketplaces", "mutmutco")
21922
21936
  ];
21923
21937
  }
21938
+ if (surface === "kimi") return [];
21924
21939
  return [(0, import_node_path24.join)(home, ".claude", "plugins", "marketplaces", "mutmutco")];
21925
21940
  }
21926
21941
  function marketplaceClonePresent(surface, home, exists = import_node_fs25.existsSync) {
@@ -21945,13 +21960,14 @@ async function npmSelfUpdateCli(target) {
21945
21960
  }
21946
21961
  }
21947
21962
  function snapshotPluginGuardInput(surface = detectSurface(process.env), isOrgRepo = false) {
21948
- const homeDir = surface === "codex" ? ".codex" : ".claude";
21963
+ const homeDir = surfaceHomeDir(surface);
21949
21964
  const installed = readInstalledPlugins(surface);
21950
21965
  return {
21951
21966
  isOrgRepo,
21952
21967
  installRecordPresent: hasUserInstallRecord(installed, MMI_PLUGIN_ID) || hasProjectInstallRecord(installed, MMI_PLUGIN_ID, process.cwd()),
21953
21968
  marketplaceClonePresent: marketplaceClonePresent(surface, (0, import_node_os6.homedir)()),
21954
- pluginCachePresent: (0, import_node_fs25.existsSync)((0, import_node_path24.join)((0, import_node_os6.homedir)(), homeDir, "plugins", "cache", "mutmutco", "mmi"))
21969
+ // Kimi keeps no plugin cache dir — installs are copied to plugins/managed/<id> and run from there.
21970
+ pluginCachePresent: surface === "kimi" ? (0, import_node_fs25.existsSync)((0, import_node_path24.join)((0, import_node_os6.homedir)(), homeDir, "plugins", "managed", "mmi")) : (0, import_node_fs25.existsSync)((0, import_node_path24.join)((0, import_node_os6.homedir)(), homeDir, "plugins", "cache", "mutmutco", "mmi"))
21955
21971
  };
21956
21972
  }
21957
21973
  function claudePluginGuardState(isOrgRepo) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "3.72.0",
4
- "description": "MMI Future CLI — the org dev toolbox (board, registry, keyless secrets, release train, bootstrap, doctor) and the cross-IDE engine the plugin's session-start hook drives.",
3
+ "version": "3.73.0",
4
+ "description": "MMI Future CLI — the org dev toolbox (board, registry, keyless secrets, release train, bootstrap, doctor) and the cross-IDE engine the MMI plugin's skills and gates drive on Claude, Codex, and Kimi.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
7
7
  "author": {