coding-friend-cli 1.38.4 → 1.39.1

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 (40) hide show
  1. package/dist/{chunk-32UAW3NX.js → chunk-2EY7VVFT.js} +1 -1
  2. package/dist/{chunk-RCE4OWNX.js → chunk-463QKRBN.js} +1 -1
  3. package/dist/{chunk-ETTZRJ55.js → chunk-4CPUWHIN.js} +1 -1
  4. package/dist/{chunk-6NXZKAOV.js → chunk-7JQZRMOG.js} +37 -4
  5. package/dist/{chunk-5KHZQCZB.js → chunk-FQUIO5BW.js} +1 -1
  6. package/dist/chunk-GTOEIGDM.js +510 -0
  7. package/dist/{chunk-PLSJW7QJ.js → chunk-IV5OPG34.js} +47 -1
  8. package/dist/{chunk-I2DQYPKT.js → chunk-MO4SUPZN.js} +176 -17
  9. package/dist/{chunk-S4ENKXXC.js → chunk-ODW27NAC.js} +8 -8
  10. package/dist/chunk-OFEC6OVI.js +99 -0
  11. package/dist/{chunk-5QCGEPQO.js → chunk-RL3DCID7.js} +11 -1
  12. package/dist/{chunk-GIH6E7GJ.js → chunk-VMODQCSL.js} +4 -53
  13. package/dist/{chunk-VHUU3QDC.js → chunk-YPW67OGP.js} +1 -1
  14. package/dist/{chunk-BXSCYGWE.js → chunk-ZGIUKUL2.js} +51 -6
  15. package/dist/chunk-ZZNTNIM4.js +63 -0
  16. package/dist/{clean-MSRZSOSO.js → clean-LPWEBJJ5.js} +2 -2
  17. package/dist/{config-EX3B3HWO.js → config-VNSC2NAY.js} +15 -13
  18. package/dist/{dev-PTBNMKZT.js → dev-NRTDUQAR.js} +3 -3
  19. package/dist/{disable-MO7AXYYF.js → disable-6L352DMD.js} +19 -4
  20. package/dist/{enable-4GXLQEHD.js → enable-6KXREKRP.js} +24 -4
  21. package/dist/{guide-HCR43LJN.js → guide-HCLEOAGR.js} +1 -1
  22. package/dist/{host-VIQ5YI3V.js → host-2JOPHLN3.js} +4 -3
  23. package/dist/index.js +46 -46
  24. package/dist/{init-S2K4CQO2.js → init-VENKICVP.js} +54 -18
  25. package/dist/{install-LUPE3VTC.js → install-A4TSBGOV.js} +52 -9
  26. package/dist/{learn-A3TP6PLL.js → learn-SSNBBDY3.js} +2 -2
  27. package/dist/{mcp-QNJTCZMS.js → mcp-J5VO3OH7.js} +13 -11
  28. package/dist/{mcp-serve-4VP4KDYG.js → mcp-serve-55DSE2J4.js} +4 -3
  29. package/dist/{mcp-serve-learn-UVXIDOEZ.js → mcp-serve-learn-EDBWNL4I.js} +3 -2
  30. package/dist/{memory-7GKTQSIW.js → memory-CDZKWOFL.js} +9 -7
  31. package/dist/{permission-VISPGMUK.js → permission-DPKPA2HU.js} +11 -3
  32. package/dist/{permissions-2SBACQHV.js → permissions-HZYUVKCY.js} +2 -2
  33. package/dist/{session-VDGNTICO.js → session-YWJDLNBP.js} +2 -2
  34. package/dist/{status-RHSL5MBU.js → status-ZOAYLVH6.js} +18 -16
  35. package/dist/{statusline-AOZHEQSV.js → statusline-R5BNYK3H.js} +2 -2
  36. package/dist/{uninstall-QN6527IR.js → uninstall-TCMK2WNW.js} +52 -8
  37. package/dist/{update-ZQG25VOJ.js → update-6OYI5BAY.js} +10 -7
  38. package/dist/{update-check-7LKJLJPM.js → update-check-EJSGVGO6.js} +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-RZRT7NGT.js +0 -18
@@ -1,17 +1,13 @@
1
1
  import {
2
2
  getAllRules,
3
3
  getExistingRules
4
- } from "./chunk-RCE4OWNX.js";
4
+ } from "./chunk-463QKRBN.js";
5
5
  import {
6
6
  listMdFilesRecursive
7
7
  } from "./chunk-2DTXVMPQ.js";
8
- import {
9
- registerLearnMcp,
10
- unregisterLearnMcp
11
- } from "./chunk-6NXZKAOV.js";
12
8
  import {
13
9
  resolveLearnDir
14
- } from "./chunk-5KHZQCZB.js";
10
+ } from "./chunk-FQUIO5BW.js";
15
11
  import {
16
12
  findStatuslineHookPath,
17
13
  getCurrentAccountEmail,
@@ -22,11 +18,15 @@ import {
22
18
  saveStatuslineConfig,
23
19
  selectStatuslineComponents,
24
20
  writeStatuslineSettings
25
- } from "./chunk-ETTZRJ55.js";
21
+ } from "./chunk-4CPUWHIN.js";
26
22
  import {
27
23
  ALL_COMPONENT_IDS,
28
24
  DEFAULT_CONFIG
29
25
  } from "./chunk-3WIZA5OZ.js";
26
+ import {
27
+ registerLearnMcp,
28
+ unregisterLearnMcp
29
+ } from "./chunk-7JQZRMOG.js";
30
30
  import {
31
31
  ensureShellCompletion,
32
32
  hasShellCompletion,
@@ -34,8 +34,8 @@ import {
34
34
  } from "./chunk-667NMPN4.js";
35
35
  import {
36
36
  memoryConfigMenu
37
- } from "./chunk-BXSCYGWE.js";
38
- import "./chunk-RZRT7NGT.js";
37
+ } from "./chunk-ZGIUKUL2.js";
38
+ import "./chunk-GTOEIGDM.js";
39
39
  import {
40
40
  BACK,
41
41
  applyDocsDirChange,
@@ -45,7 +45,9 @@ import {
45
45
  getScopeLabel,
46
46
  injectBackChoice,
47
47
  showConfigHint
48
- } from "./chunk-GIH6E7GJ.js";
48
+ } from "./chunk-VMODQCSL.js";
49
+ import "./chunk-ZZNTNIM4.js";
50
+ import "./chunk-OFEC6OVI.js";
49
51
  import "./chunk-EVGXUDX4.js";
50
52
  import {
51
53
  mergeJson,
@@ -58,7 +60,7 @@ import {
58
60
  globalConfigPath,
59
61
  localConfigPath,
60
62
  resolvePath
61
- } from "./chunk-PLSJW7QJ.js";
63
+ } from "./chunk-IV5OPG34.js";
62
64
  import {
63
65
  log,
64
66
  printBanner
@@ -541,7 +543,7 @@ async function editAutoApprove(globalCfg, localCfg) {
541
543
  if (scope === "back") return;
542
544
  writeToScope(scope, { autoApprove: value });
543
545
  if (value) {
544
- const { runDangerousRulesAudit } = await import("./permissions-2SBACQHV.js");
546
+ const { runDangerousRulesAudit } = await import("./permissions-HZYUVKCY.js");
545
547
  await runDangerousRulesAudit(
546
548
  [
547
549
  claudeProjectSettingsPath(),
@@ -737,7 +739,7 @@ async function editPermissions() {
737
739
  )
738
740
  });
739
741
  if (choice === BACK) return;
740
- const { permissionCommand } = await import("./permission-VISPGMUK.js");
742
+ const { permissionCommand } = await import("./permission-DPKPA2HU.js");
741
743
  switch (choice) {
742
744
  case "interactive":
743
745
  await permissionCommand({});
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ensureStatusline
3
- } from "./chunk-ETTZRJ55.js";
3
+ } from "./chunk-4CPUWHIN.js";
4
4
  import "./chunk-3WIZA5OZ.js";
5
5
  import {
6
6
  ensureShellCompletion
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  isMarketplaceRegistered,
10
10
  isPluginInstalled
11
- } from "./chunk-32UAW3NX.js";
11
+ } from "./chunk-2EY7VVFT.js";
12
12
  import {
13
13
  commandExists,
14
14
  run,
@@ -22,7 +22,7 @@ import {
22
22
  devStatePath,
23
23
  knownMarketplacesPath,
24
24
  pluginCachePath
25
- } from "./chunk-PLSJW7QJ.js";
25
+ } from "./chunk-IV5OPG34.js";
26
26
  import {
27
27
  log,
28
28
  printBanner
@@ -1,18 +1,23 @@
1
1
  import {
2
2
  isPluginDisabled,
3
3
  setPluginEnabled
4
- } from "./chunk-32UAW3NX.js";
4
+ } from "./chunk-2EY7VVFT.js";
5
5
  import {
6
6
  isCodexPluginDisabled,
7
7
  setCodexPluginEnabled
8
- } from "./chunk-5QCGEPQO.js";
8
+ } from "./chunk-RL3DCID7.js";
9
+ import {
10
+ setOmpAgentDisabled
11
+ } from "./chunk-GTOEIGDM.js";
9
12
  import {
10
13
  resolveHostFlags,
11
14
  resolveScope
12
- } from "./chunk-GIH6E7GJ.js";
15
+ } from "./chunk-VMODQCSL.js";
16
+ import "./chunk-ZZNTNIM4.js";
17
+ import "./chunk-OFEC6OVI.js";
13
18
  import "./chunk-EVGXUDX4.js";
14
19
  import "./chunk-5UVDWG5L.js";
15
- import "./chunk-PLSJW7QJ.js";
20
+ import "./chunk-IV5OPG34.js";
16
21
  import {
17
22
  log
18
23
  } from "./chunk-NREZK463.js";
@@ -32,6 +37,16 @@ async function disableCommand(opts = {}) {
32
37
  log.dim("Restart Codex CLI for the change to take effect.");
33
38
  return;
34
39
  }
40
+ if (host === "omp") {
41
+ const ompScope = opts.project || opts.local ? "project" : "user";
42
+ log.step(`Disabling omp agents (${chalk.cyan(ompScope)} scope)...`);
43
+ setOmpAgentDisabled(ompScope);
44
+ log.success(
45
+ `Coding Friend disabled for omp at ${chalk.cyan(ompScope)} scope.`
46
+ );
47
+ log.dim("Restart omp for the change to take effect.");
48
+ return;
49
+ }
35
50
  const scope = await resolveScope(
36
51
  opts,
37
52
  "Where should Coding Friend be disabled?"
@@ -1,18 +1,23 @@
1
1
  import {
2
2
  isPluginDisabled,
3
3
  setPluginEnabled
4
- } from "./chunk-32UAW3NX.js";
4
+ } from "./chunk-2EY7VVFT.js";
5
5
  import {
6
6
  isCodexPluginDisabled,
7
7
  setCodexPluginEnabled
8
- } from "./chunk-5QCGEPQO.js";
8
+ } from "./chunk-RL3DCID7.js";
9
+ import {
10
+ setOmpAgentEnabled
11
+ } from "./chunk-GTOEIGDM.js";
9
12
  import {
10
13
  resolveHostFlags,
11
14
  resolveScope
12
- } from "./chunk-GIH6E7GJ.js";
15
+ } from "./chunk-VMODQCSL.js";
16
+ import "./chunk-ZZNTNIM4.js";
17
+ import "./chunk-OFEC6OVI.js";
13
18
  import "./chunk-EVGXUDX4.js";
14
19
  import "./chunk-5UVDWG5L.js";
15
- import "./chunk-PLSJW7QJ.js";
20
+ import "./chunk-IV5OPG34.js";
16
21
  import {
17
22
  log
18
23
  } from "./chunk-NREZK463.js";
@@ -32,6 +37,21 @@ async function enableCommand(opts = {}) {
32
37
  log.dim("Restart Codex CLI for the change to take effect.");
33
38
  return;
34
39
  }
40
+ if (host === "omp") {
41
+ const ompScope = opts.project || opts.local ? "project" : "user";
42
+ if (!setOmpAgentEnabled(ompScope)) {
43
+ log.info(
44
+ `Coding Friend is already enabled for omp at ${chalk.cyan(ompScope)} scope.`
45
+ );
46
+ return;
47
+ }
48
+ log.step(`Enabling omp agents (${chalk.cyan(ompScope)} scope)...`);
49
+ log.success(
50
+ `Coding Friend enabled for omp at ${chalk.cyan(ompScope)} scope.`
51
+ );
52
+ log.dim("Restart omp for the change to take effect.");
53
+ return;
54
+ }
35
55
  const scope = await resolveScope(
36
56
  opts,
37
57
  "Where should Coding Friend be enabled?"
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  devStatePath,
6
6
  pluginCachePath
7
- } from "./chunk-PLSJW7QJ.js";
7
+ } from "./chunk-IV5OPG34.js";
8
8
  import {
9
9
  log
10
10
  } from "./chunk-NREZK463.js";
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  resolveLearnDir
3
- } from "./chunk-5KHZQCZB.js";
3
+ } from "./chunk-FQUIO5BW.js";
4
4
  import "./chunk-3WIZA5OZ.js";
5
5
  import {
6
6
  getLibPath
7
- } from "./chunk-RZRT7NGT.js";
7
+ } from "./chunk-ZZNTNIM4.js";
8
+ import "./chunk-OFEC6OVI.js";
8
9
  import {
9
10
  run,
10
11
  streamExec
@@ -14,7 +15,7 @@ import {
14
15
  } from "./chunk-5UVDWG5L.js";
15
16
  import {
16
17
  globalConfigPath
17
- } from "./chunk-PLSJW7QJ.js";
18
+ } from "./chunk-IV5OPG34.js";
18
19
  import {
19
20
  log,
20
21
  printBanner
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  installedPluginsPath
4
- } from "./chunk-PLSJW7QJ.js";
4
+ } from "./chunk-IV5OPG34.js";
5
5
 
6
6
  // src/index.ts
7
7
  import { Command } from "commander";
@@ -42,34 +42,34 @@ var program = new Command();
42
42
  program.name("cf").description(
43
43
  "coding-friend CLI \u2014 host learning docs, setup MCP, init projects"
44
44
  ).version(wantsVersion ? buildVersionString() : pkg.version, "-v, --version");
45
- program.command("install").description("Install the Coding Friend plugin into a supported host").option("--user", "Install at user scope (all projects)").option("--global", "Install at user scope (all projects)").option("--project", "Install at project scope (shared via git)").option("--local", "Install at local scope (this machine only)").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").action(async (opts) => {
46
- const { installCommand } = await import("./install-LUPE3VTC.js");
45
+ program.command("install").description("Install the Coding Friend plugin into a supported host").option("--user", "Install at user scope (all projects)").option("--global", "Install at user scope (all projects)").option("--project", "Install at project scope (shared via git)").option("--local", "Install at local scope (this machine only)").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").action(async (opts) => {
46
+ const { installCommand } = await import("./install-A4TSBGOV.js");
47
47
  await installCommand(opts);
48
48
  });
49
- program.command("uninstall").description("Uninstall the Coding Friend plugin from a supported host").option("--user", "Uninstall from user scope (all projects)").option("--global", "Uninstall from user scope (all projects)").option("--project", "Uninstall from project scope").option("--local", "Uninstall from local scope").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").option(
49
+ program.command("uninstall").description("Uninstall the Coding Friend plugin from a supported host").option("--user", "Uninstall from user scope (all projects)").option("--global", "Uninstall from user scope (all projects)").option("--project", "Uninstall from project scope").option("--local", "Uninstall from local scope").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").option(
50
50
  "--remove-marketplace",
51
51
  "Also remove the host marketplace registration"
52
52
  ).action(async (opts) => {
53
- const { uninstallCommand } = await import("./uninstall-QN6527IR.js");
53
+ const { uninstallCommand } = await import("./uninstall-TCMK2WNW.js");
54
54
  await uninstallCommand(opts);
55
55
  });
56
- program.command("disable").description("Disable the Coding Friend plugin without uninstalling").option("--user", "Disable at user scope (all projects)").option("--global", "Disable at user scope (all projects)").option("--project", "Disable at project scope").option("--local", "Disable at local scope").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").action(async (opts) => {
57
- const { disableCommand } = await import("./disable-MO7AXYYF.js");
56
+ program.command("disable").description("Disable the Coding Friend plugin without uninstalling").option("--user", "Disable at user scope (all projects)").option("--global", "Disable at user scope (all projects)").option("--project", "Disable at project scope").option("--local", "Disable at local scope").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").action(async (opts) => {
57
+ const { disableCommand } = await import("./disable-6L352DMD.js");
58
58
  await disableCommand(opts);
59
59
  });
60
- program.command("enable").description("Re-enable the Coding Friend plugin").option("--user", "Enable at user scope (all projects)").option("--global", "Enable at user scope (all projects)").option("--project", "Enable at project scope").option("--local", "Enable at local scope").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").action(async (opts) => {
61
- const { enableCommand } = await import("./enable-4GXLQEHD.js");
60
+ program.command("enable").description("Re-enable the Coding Friend plugin").option("--user", "Enable at user scope (all projects)").option("--global", "Enable at user scope (all projects)").option("--project", "Enable at project scope").option("--local", "Enable at local scope").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").action(async (opts) => {
61
+ const { enableCommand } = await import("./enable-6KXREKRP.js");
62
62
  await enableCommand(opts);
63
63
  });
64
- program.command("init").description("Initialize coding-friend in current project").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").option(
64
+ program.command("init").description("Initialize coding-friend in current project").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").option(
65
65
  "--trust-project",
66
66
  "For Codex, mark the current project trusted in ~/.codex/config.toml"
67
67
  ).action(async (opts) => {
68
- const { initCommand } = await import("./init-S2K4CQO2.js");
68
+ const { initCommand } = await import("./init-VENKICVP.js");
69
69
  await initCommand(opts);
70
70
  });
71
71
  program.command("config").description("Manage Coding Friend configuration").action(async () => {
72
- const { configCommand } = await import("./config-EX3B3HWO.js");
72
+ const { configCommand } = await import("./config-VNSC2NAY.js");
73
73
  await configCommand();
74
74
  });
75
75
  var learn = program.command("learn").description("Manage learning docs \u2014 host as a website or push to git");
@@ -81,58 +81,58 @@ Learn subcommands:
81
81
  learn push [path] Commit and push learning docs (only if learn dir is the git root)`
82
82
  );
83
83
  learn.command("host").description("Build and serve learning docs as a static website").argument("[path]", "path to docs folder").option("-p, --port <port>", "port number", "3333").action(async (path, opts) => {
84
- const { hostCommand } = await import("./host-VIQ5YI3V.js");
84
+ const { hostCommand } = await import("./host-2JOPHLN3.js");
85
85
  await hostCommand(path, opts);
86
86
  });
87
87
  learn.command("push").description("Commit and push learning docs to origin").argument("[path]", "path to docs folder").action(async (path) => {
88
- const { learnPushCommand } = await import("./learn-A3TP6PLL.js");
88
+ const { learnPushCommand } = await import("./learn-SSNBBDY3.js");
89
89
  await learnPushCommand(path);
90
90
  });
91
91
  program.command("host", { hidden: true }).argument("[path]", "path to docs folder").option("-p, --port <port>", "port number", "3333").action(async (path, opts) => {
92
- const { hostCommand } = await import("./host-VIQ5YI3V.js");
92
+ const { hostCommand } = await import("./host-2JOPHLN3.js");
93
93
  await hostCommand(path, opts);
94
94
  });
95
95
  program.command("mcp").description("Setup MCP server for learning docs").action(async () => {
96
- const { mcpCommand } = await import("./mcp-QNJTCZMS.js");
96
+ const { mcpCommand } = await import("./mcp-J5VO3OH7.js");
97
97
  await mcpCommand();
98
98
  });
99
99
  program.command("mcp-serve").description(
100
100
  "Start the cf-memory MCP server (used internally by npx). When memoryDir is omitted, resolves from CLAUDE_PROJECT_DIR at runtime."
101
101
  ).argument("[memoryDir]", "path to memory directory (optional)").action(async (memoryDir) => {
102
- const { mcpServeCommand } = await import("./mcp-serve-4VP4KDYG.js");
102
+ const { mcpServeCommand } = await import("./mcp-serve-55DSE2J4.js");
103
103
  await mcpServeCommand(memoryDir);
104
104
  });
105
105
  program.command("mcp-serve-learn").description("Start the learn MCP server (used internally by npx)").argument("<docsDir>", "path to docs directory").action(async (docsDir) => {
106
- const { mcpServeLearnCommand } = await import("./mcp-serve-learn-UVXIDOEZ.js");
106
+ const { mcpServeLearnCommand } = await import("./mcp-serve-learn-EDBWNL4I.js");
107
107
  await mcpServeLearnCommand(docsDir);
108
108
  });
109
109
  program.command("permission").description("Manage host permission and approval settings for Coding Friend").option("--all", "Apply all recommended permissions without prompts").option("--user", "Save to user-level settings (~/.claude/settings.json)").option(
110
110
  "--project",
111
111
  "Save to project-level settings (.claude/settings.local.json)"
112
- ).option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").option(
112
+ ).option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").option(
113
113
  "--enable-auto-approve",
114
114
  "For Codex, enable deterministic Coding Friend auto-approve"
115
115
  ).option(
116
116
  "--disable-auto-approve",
117
117
  "For Codex, disable deterministic Coding Friend auto-approve"
118
118
  ).action(async (opts) => {
119
- const { permissionCommand } = await import("./permission-VISPGMUK.js");
119
+ const { permissionCommand } = await import("./permission-DPKPA2HU.js");
120
120
  await permissionCommand(opts);
121
121
  });
122
122
  program.command("statusline").description("Setup coding-friend statusline in Claude Code").action(async () => {
123
- const { statuslineCommand } = await import("./statusline-AOZHEQSV.js");
123
+ const { statuslineCommand } = await import("./statusline-R5BNYK3H.js");
124
124
  await statuslineCommand();
125
125
  });
126
- program.command("update").description("Update coding-friend plugin, CLI, and statusline").option("--cli", "Update only the CLI (npm package)").option("--plugin", "Update only the host plugin").option("--statusline", "Update only the statusline").option("--user", "Update plugin at user scope (all projects)").option("--global", "Update plugin at user scope (all projects)").option("--project", "Update plugin at project scope").option("--local", "Update plugin at local scope").option("--agent <agent>", "Operate on host agent: claude or codex", "claude").option("--codex", "Alias for --agent codex").action(async (opts) => {
127
- const { updateCommand } = await import("./update-ZQG25VOJ.js");
126
+ program.command("update").description("Update coding-friend plugin, CLI, and statusline").option("--cli", "Update only the CLI (npm package)").option("--plugin", "Update only the host plugin").option("--statusline", "Update only the statusline").option("--user", "Update plugin at user scope (all projects)").option("--global", "Update plugin at user scope (all projects)").option("--project", "Update plugin at project scope").option("--local", "Update plugin at local scope").option("--agent <agent>", "Operate on host agent: claude, codex, or omp").option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").action(async (opts) => {
127
+ const { updateCommand } = await import("./update-6OYI5BAY.js");
128
128
  await updateCommand(opts);
129
129
  });
130
130
  program.command("status").description("Show comprehensive Coding Friend status").action(async () => {
131
- const { statusCommand } = await import("./status-RHSL5MBU.js");
131
+ const { statusCommand } = await import("./status-ZOAYLVH6.js");
132
132
  await statusCommand();
133
133
  });
134
134
  program.command("clean").description("Clean files generated by Coding Friend in docs/").action(async () => {
135
- const { cleanCommand } = await import("./clean-MSRZSOSO.js");
135
+ const { cleanCommand } = await import("./clean-LPWEBJJ5.js");
136
136
  await cleanCommand();
137
137
  });
138
138
  var session = program.command("session").description("[beta] Save and load Claude Code sessions across machines");
@@ -147,11 +147,11 @@ session.command("save").description("Save current Claude Code session to sync fo
147
147
  "-s, --session-id <id>",
148
148
  "session UUID to save (default: auto-detect newest)"
149
149
  ).option("-l, --label <label>", "label for this session").action(async (opts) => {
150
- const { sessionSaveCommand } = await import("./session-VDGNTICO.js");
150
+ const { sessionSaveCommand } = await import("./session-YWJDLNBP.js");
151
151
  await sessionSaveCommand(opts);
152
152
  });
153
153
  session.command("load").description("Load a saved session from sync folder").action(async () => {
154
- const { sessionLoadCommand } = await import("./session-VDGNTICO.js");
154
+ const { sessionLoadCommand } = await import("./session-YWJDLNBP.js");
155
155
  await sessionLoadCommand();
156
156
  });
157
157
  var memory = program.command("memory").description("AI memory system \u2014 store and search project knowledge");
@@ -171,43 +171,43 @@ Memory subcommands:
171
171
  memory mcp Show MCP server setup instructions`
172
172
  );
173
173
  memory.command("status").description("Show memory system status").action(async () => {
174
- const { memoryStatusCommand } = await import("./memory-7GKTQSIW.js");
174
+ const { memoryStatusCommand } = await import("./memory-CDZKWOFL.js");
175
175
  await memoryStatusCommand();
176
176
  });
177
177
  memory.command("search").description("Search memories by query").argument("<query>", "search query").action(async (query) => {
178
- const { memorySearchCommand } = await import("./memory-7GKTQSIW.js");
178
+ const { memorySearchCommand } = await import("./memory-CDZKWOFL.js");
179
179
  await memorySearchCommand(query);
180
180
  });
181
181
  memory.command("list").description(
182
182
  "List memories in current project, or all projects with --projects"
183
183
  ).option("--projects", "List all project databases with size and metadata").action(async (opts) => {
184
- const { memoryListCommand } = await import("./memory-7GKTQSIW.js");
184
+ const { memoryListCommand } = await import("./memory-CDZKWOFL.js");
185
185
  await memoryListCommand(opts);
186
186
  });
187
187
  memory.command("init").description(
188
188
  "Initialize memory system \u2014 interactive wizard (first time) or config menu"
189
189
  ).action(async () => {
190
- const { memoryInitCommand } = await import("./memory-7GKTQSIW.js");
190
+ const { memoryInitCommand } = await import("./memory-CDZKWOFL.js");
191
191
  await memoryInitCommand();
192
192
  });
193
193
  memory.command("config").description("Configure memory system settings").action(async () => {
194
- const { memoryConfigCommand } = await import("./memory-7GKTQSIW.js");
194
+ const { memoryConfigCommand } = await import("./memory-CDZKWOFL.js");
195
195
  await memoryConfigCommand();
196
196
  });
197
197
  memory.command("start-daemon").description("Start the memory daemon (Tier 2 \u2014 MiniSearch)").action(async () => {
198
- const { memoryStartDaemonCommand } = await import("./memory-7GKTQSIW.js");
198
+ const { memoryStartDaemonCommand } = await import("./memory-CDZKWOFL.js");
199
199
  await memoryStartDaemonCommand();
200
200
  });
201
201
  memory.command("stop-daemon").description("Stop the memory daemon").action(async () => {
202
- const { memoryStopDaemonCommand } = await import("./memory-7GKTQSIW.js");
202
+ const { memoryStopDaemonCommand } = await import("./memory-CDZKWOFL.js");
203
203
  await memoryStopDaemonCommand();
204
204
  });
205
205
  memory.command("rebuild").description("Rebuild the daemon search index").action(async () => {
206
- const { memoryRebuildCommand } = await import("./memory-7GKTQSIW.js");
206
+ const { memoryRebuildCommand } = await import("./memory-CDZKWOFL.js");
207
207
  await memoryRebuildCommand();
208
208
  });
209
209
  memory.command("mcp").description("Show MCP server setup instructions").action(async () => {
210
- const { memoryMcpCommand } = await import("./memory-7GKTQSIW.js");
210
+ const { memoryMcpCommand } = await import("./memory-CDZKWOFL.js");
211
211
  await memoryMcpCommand();
212
212
  });
213
213
  memory.command("rm").description("Remove a project database").option("--project-id <id>", "Project ID to remove").option("--all", "Remove all project databases").option(
@@ -215,17 +215,17 @@ memory.command("rm").description("Remove a project database").option("--project-
215
215
  "Remove orphaned projects (source dir missing or 0 memories)"
216
216
  ).action(
217
217
  async (opts) => {
218
- const { memoryRmCommand } = await import("./memory-7GKTQSIW.js");
218
+ const { memoryRmCommand } = await import("./memory-CDZKWOFL.js");
219
219
  await memoryRmCommand(opts);
220
220
  }
221
221
  );
222
222
  var guide = program.command("guide").description("Manage custom skill guides");
223
223
  guide.command("create").description("Create a custom guide for a skill").argument("<skill-name>", "skill to create guide for (e.g. cf-commit)").action(async (skillName) => {
224
- const { guideCreateCommand } = await import("./guide-HCR43LJN.js");
224
+ const { guideCreateCommand } = await import("./guide-HCLEOAGR.js");
225
225
  guideCreateCommand(skillName);
226
226
  });
227
227
  guide.command("list").description("List existing custom guides").action(async () => {
228
- const { guideListCommand } = await import("./guide-HCR43LJN.js");
228
+ const { guideListCommand } = await import("./guide-HCLEOAGR.js");
229
229
  guideListCommand();
230
230
  });
231
231
  var dev = program.command("dev").description("Development mode commands");
@@ -241,28 +241,28 @@ Dev subcommands:
241
241
  dev update [path] Update local dev plugin to latest version`
242
242
  );
243
243
  dev.command("on").description("Switch to local plugin source").argument("[path]", "path to local coding-friend repo (default: cwd)").action(async (path) => {
244
- const { devOnCommand } = await import("./dev-PTBNMKZT.js");
244
+ const { devOnCommand } = await import("./dev-NRTDUQAR.js");
245
245
  await devOnCommand(path);
246
246
  });
247
247
  dev.command("off").description("Switch back to remote marketplace").action(async () => {
248
- const { devOffCommand } = await import("./dev-PTBNMKZT.js");
248
+ const { devOffCommand } = await import("./dev-NRTDUQAR.js");
249
249
  await devOffCommand();
250
250
  });
251
251
  dev.command("status").description("Show current dev mode").action(async () => {
252
- const { devStatusCommand } = await import("./dev-PTBNMKZT.js");
252
+ const { devStatusCommand } = await import("./dev-NRTDUQAR.js");
253
253
  await devStatusCommand();
254
254
  });
255
255
  dev.command("sync").description(
256
256
  "Copy local source files to plugin cache (no version bump needed)"
257
257
  ).action(async () => {
258
- const { devSyncCommand } = await import("./dev-PTBNMKZT.js");
258
+ const { devSyncCommand } = await import("./dev-NRTDUQAR.js");
259
259
  await devSyncCommand();
260
260
  });
261
261
  dev.command("restart").description("Reinstall local dev plugin (off + on)").argument(
262
262
  "[path]",
263
263
  "path to local coding-friend repo (default: saved path or cwd)"
264
264
  ).action(async (path) => {
265
- const { devRestartCommand } = await import("./dev-PTBNMKZT.js");
265
+ const { devRestartCommand } = await import("./dev-NRTDUQAR.js");
266
266
  await devRestartCommand(path);
267
267
  });
268
268
  dev.command("update").description(
@@ -271,13 +271,13 @@ dev.command("update").description(
271
271
  "[path]",
272
272
  "path to local coding-friend repo (default: saved path or cwd)"
273
273
  ).action(async (path) => {
274
- const { devUpdateCommand } = await import("./dev-PTBNMKZT.js");
274
+ const { devUpdateCommand } = await import("./dev-NRTDUQAR.js");
275
275
  await devUpdateCommand(path);
276
276
  });
277
277
  program.hook("postAction", async () => {
278
278
  const topCmd = process.argv[2];
279
279
  if (topCmd === "update") return;
280
- const { checkAndNotifyCliUpdate } = await import("./update-check-7LKJLJPM.js");
280
+ const { checkAndNotifyCliUpdate } = await import("./update-check-EJSGVGO6.js");
281
281
  checkAndNotifyCliUpdate(pkg.version);
282
282
  });
283
283
  await program.parseAsync();
@@ -6,18 +6,14 @@ import {
6
6
  getExistingRules,
7
7
  getMissingRules,
8
8
  logPluginScriptWarning
9
- } from "./chunk-RCE4OWNX.js";
10
- import {
11
- isLearnMcpRegistered,
12
- registerLearnMcp
13
- } from "./chunk-6NXZKAOV.js";
9
+ } from "./chunk-463QKRBN.js";
14
10
  import {
15
11
  ensureMemoryBuilt,
16
12
  isMemoryInitialized,
17
13
  memoryInitWizard
18
- } from "./chunk-S4ENKXXC.js";
19
- import "./chunk-VHUU3QDC.js";
20
- import "./chunk-5KHZQCZB.js";
14
+ } from "./chunk-ODW27NAC.js";
15
+ import "./chunk-YPW67OGP.js";
16
+ import "./chunk-FQUIO5BW.js";
21
17
  import {
22
18
  findStatuslineHookPath,
23
19
  getCurrentAccountEmail,
@@ -28,10 +24,14 @@ import {
28
24
  saveStatuslineConfig,
29
25
  selectStatuslineComponents,
30
26
  writeStatuslineSettings
31
- } from "./chunk-ETTZRJ55.js";
27
+ } from "./chunk-4CPUWHIN.js";
32
28
  import {
33
29
  DEFAULT_CONFIG
34
30
  } from "./chunk-3WIZA5OZ.js";
31
+ import {
32
+ isLearnMcpRegistered,
33
+ registerLearnMcp
34
+ } from "./chunk-7JQZRMOG.js";
35
35
  import {
36
36
  ensureShellCompletion,
37
37
  hasShellCompletion
@@ -40,17 +40,17 @@ import {
40
40
  isMemoryMcpRegistered,
41
41
  memoryConfigMenu,
42
42
  registerMemoryMcp
43
- } from "./chunk-BXSCYGWE.js";
44
- import {
45
- getLibPath
46
- } from "./chunk-RZRT7NGT.js";
43
+ } from "./chunk-ZGIUKUL2.js";
47
44
  import {
48
45
  deployCodexAgents,
49
46
  findCodexAgentSourceDir,
50
47
  trustCodexProject,
51
48
  writeCodexAgentLimits,
52
49
  writeCodexMemoryMcpConfig
53
- } from "./chunk-5QCGEPQO.js";
50
+ } from "./chunk-RL3DCID7.js";
51
+ import {
52
+ isOmpAgentInstalled
53
+ } from "./chunk-GTOEIGDM.js";
54
54
  import {
55
55
  BACK,
56
56
  applyDocsDirChange,
@@ -62,7 +62,11 @@ import {
62
62
  injectBackChoice,
63
63
  resolveHostFlags,
64
64
  showConfigHint
65
- } from "./chunk-GIH6E7GJ.js";
65
+ } from "./chunk-VMODQCSL.js";
66
+ import {
67
+ getLibPath
68
+ } from "./chunk-ZZNTNIM4.js";
69
+ import "./chunk-OFEC6OVI.js";
66
70
  import {
67
71
  commandExists,
68
72
  run
@@ -79,8 +83,10 @@ import {
79
83
  codexConfigTomlPath,
80
84
  globalConfigPath,
81
85
  localConfigPath,
86
+ ompProjectDir,
87
+ ompProjectMcpJsonPath,
82
88
  resolvePath
83
- } from "./chunk-PLSJW7QJ.js";
89
+ } from "./chunk-IV5OPG34.js";
84
90
  import {
85
91
  log,
86
92
  printBanner
@@ -708,7 +714,7 @@ async function stepAutoApprove(globalCfg, localCfg) {
708
714
  mergeJson(targetPath, { autoApprove: autoApproveChoice });
709
715
  log.success(`Saved to ${targetPath}`);
710
716
  if (autoApproveChoice) {
711
- const { runDangerousRulesAudit } = await import("./permissions-2SBACQHV.js");
717
+ const { runDangerousRulesAudit } = await import("./permissions-HZYUVKCY.js");
712
718
  await runDangerousRulesAudit(
713
719
  [
714
720
  claudeProjectSettingsPath(),
@@ -992,7 +998,7 @@ async function initMenu(gitAvailable) {
992
998
  log.success(`Saved to ${targetPath}`);
993
999
  }
994
1000
  if (autoApproveChoice) {
995
- const { runDangerousRulesAudit } = await import("./permissions-2SBACQHV.js");
1001
+ const { runDangerousRulesAudit } = await import("./permissions-HZYUVKCY.js");
996
1002
  await runDangerousRulesAudit(
997
1003
  [
998
1004
  claudeProjectSettingsPath(),
@@ -1064,6 +1070,10 @@ async function initCommand(opts = {}) {
1064
1070
  initCodexCommand(opts);
1065
1071
  return;
1066
1072
  }
1073
+ if (host === "omp") {
1074
+ initOmpCommand(opts);
1075
+ return;
1076
+ }
1067
1077
  _stepIndex = 0;
1068
1078
  console.log();
1069
1079
  printBanner("\u2728 Coding Friend Setup Wizard \u2728");
@@ -1278,6 +1288,32 @@ function initCodexCommand(opts) {
1278
1288
  log.congrats("Codex setup complete!");
1279
1289
  log.dim("Restart Codex CLI or start a new session to use Coding Friend.");
1280
1290
  }
1291
+ function initOmpCommand(_opts) {
1292
+ _stepIndex = 0;
1293
+ console.log();
1294
+ printBanner("\u2728 Coding Friend OMP Setup \u2728");
1295
+ console.log();
1296
+ mkdirSync(ompProjectDir(), { recursive: true });
1297
+ const mcpPath = ompProjectMcpJsonPath();
1298
+ if (!existsSync(mcpPath)) {
1299
+ writeJson(mcpPath, { mcpServers: {} });
1300
+ log.success("Created project .omp/mcp.json.");
1301
+ } else {
1302
+ log.dim(".omp/mcp.json already exists; left unchanged.");
1303
+ }
1304
+ if (!existsSync(localConfigPath())) {
1305
+ writeJson(localConfigPath(), {});
1306
+ log.success("Created .coding-friend/config.json.");
1307
+ } else {
1308
+ log.dim(".coding-friend/config.json already exists; left unchanged.");
1309
+ }
1310
+ console.log();
1311
+ log.congrats("OMP setup complete!");
1312
+ if (!isOmpAgentInstalled("user") && !isOmpAgentInstalled("project")) {
1313
+ log.dim("Next: cf install --agent omp");
1314
+ }
1315
+ log.dim("Restart omp or start a new session to use Coding Friend.");
1316
+ }
1281
1317
  function renderCodexAgentsMd() {
1282
1318
  return `# Coding Friend
1283
1319