coding-friend-cli 1.34.0 → 1.34.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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_CONFIG
3
- } from "./chunk-OYPOADCX.js";
3
+ } from "./chunk-DHH6SRXV.js";
4
4
  import {
5
5
  globalConfigPath,
6
6
  localConfigPath,
@@ -66,11 +66,6 @@ var MemoryConfigSchema = z.object({
66
66
  autoCapture: z.boolean().optional(),
67
67
  autoStart: z.boolean().optional()
68
68
  });
69
- var CodexConfigSchema = z.strictObject({
70
- enabled: z.boolean().optional(),
71
- modes: z.array(z.enum(["QUICK", "STANDARD", "DEEP"])).optional(),
72
- effort: z.enum(["minimal", "low", "medium", "high", "xhigh"]).optional()
73
- });
74
69
  var ConfigSchema = z.strictObject({
75
70
  language: z.string().optional(),
76
71
  docsDir: z.string().optional(),
@@ -79,8 +74,7 @@ var ConfigSchema = z.strictObject({
79
74
  memory: MemoryConfigSchema.optional(),
80
75
  autoApprove: z.boolean().optional(),
81
76
  autoApproveIgnore: z.array(z.string()).optional(),
82
- autoApproveAllowExtra: z.array(z.string()).optional(),
83
- codex: CodexConfigSchema.optional()
77
+ autoApproveAllowExtra: z.array(z.string()).optional()
84
78
  });
85
79
  var KNOWN_KEYS = [
86
80
  "language",
@@ -90,8 +84,7 @@ var KNOWN_KEYS = [
90
84
  "memory",
91
85
  "autoApprove",
92
86
  "autoApproveIgnore",
93
- "autoApproveAllowExtra",
94
- "codex"
87
+ "autoApproveAllowExtra"
95
88
  ];
96
89
  function suggestKey(unknown) {
97
90
  let best = null;
@@ -173,7 +166,9 @@ function sanitizeRawConfig(raw) {
173
166
  }
174
167
  }
175
168
  const keyList = unknownKeys.length > 0 ? `: ${unknownKeys.join(", ")}` : "";
176
- log.warn(`sanitizeRawConfig: unrecognized config keys${keyList} \u2014 returning raw config`);
169
+ log.warn(
170
+ `sanitizeRawConfig: unrecognized config keys${keyList} \u2014 returning raw config`
171
+ );
177
172
  return raw;
178
173
  }
179
174
  function loadConfig() {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  detectMemoryMcpState
3
- } from "./chunk-AYIREX73.js";
3
+ } from "./chunk-FI5HEQ43.js";
4
4
 
5
5
  // src/lib/mcp-health.ts
6
6
  async function checkMemoryMcpHealth(deps) {
@@ -22,7 +22,6 @@ var ALL_COMPONENT_IDS = STATUSLINE_COMPONENTS.map((c) => c.id);
22
22
  var DEFAULT_CONFIG = {
23
23
  language: "en",
24
24
  docsDir: "docs",
25
- codex: { enabled: false, modes: ["STANDARD", "DEEP"], effort: "medium" },
26
25
  learn: {
27
26
  language: "en",
28
27
  outputDir: "docs/learn",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  warnStaleMcpJson
3
- } from "./chunk-AYIREX73.js";
3
+ } from "./chunk-FI5HEQ43.js";
4
4
  import {
5
5
  editMemoryAutoCapture,
6
6
  editMemoryAutoStart,
@@ -9,11 +9,11 @@ import {
9
9
  getMemoryMcpStatus,
10
10
  memoryConfigMenu,
11
11
  writeMemoryMcpEntry
12
- } from "./chunk-3UIH5U3Y.js";
12
+ } from "./chunk-QCKIBJF6.js";
13
13
  import {
14
14
  loadConfig,
15
15
  resolveMemoryDir
16
- } from "./chunk-K6EDQGDN.js";
16
+ } from "./chunk-AZ6AK5M4.js";
17
17
  import {
18
18
  getLibPath
19
19
  } from "./chunk-RZRT7NGT.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeMemoryMcpEntry
3
- } from "./chunk-3UIH5U3Y.js";
3
+ } from "./chunk-QCKIBJF6.js";
4
4
  import {
5
5
  log
6
6
  } from "./chunk-NREZK463.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ensureStatusline,
3
3
  getInstalledVersion
4
- } from "./chunk-XOHLBLN2.js";
4
+ } from "./chunk-LXZ47XCD.js";
5
5
  import {
6
6
  ensureShellCompletion
7
7
  } from "./chunk-DMJCO6LJ.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ALL_COMPONENT_IDS,
3
3
  STATUSLINE_COMPONENTS
4
- } from "./chunk-OYPOADCX.js";
4
+ } from "./chunk-DHH6SRXV.js";
5
5
  import {
6
6
  claudeSettingsPath,
7
7
  globalConfigPath,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveMemoryDir
3
- } from "./chunk-K6EDQGDN.js";
3
+ } from "./chunk-AZ6AK5M4.js";
4
4
  import {
5
5
  getLibPath
6
6
  } from "./chunk-RZRT7NGT.js";
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  memoryConfigMenu
3
- } from "./chunk-3UIH5U3Y.js";
3
+ } from "./chunk-QCKIBJF6.js";
4
+ import "./chunk-AZ6AK5M4.js";
5
+ import "./chunk-RZRT7NGT.js";
4
6
  import {
5
7
  findStatuslineHookPath,
6
8
  getCurrentAccountEmail,
@@ -11,11 +13,11 @@ import {
11
13
  saveStatuslineConfig,
12
14
  selectStatuslineComponents,
13
15
  writeStatuslineSettings
14
- } from "./chunk-XOHLBLN2.js";
16
+ } from "./chunk-LXZ47XCD.js";
15
17
  import {
16
18
  ALL_COMPONENT_IDS,
17
19
  DEFAULT_CONFIG
18
- } from "./chunk-OYPOADCX.js";
20
+ } from "./chunk-DHH6SRXV.js";
19
21
  import {
20
22
  ensureShellCompletion,
21
23
  hasShellCompletion,
@@ -411,68 +413,6 @@ async function editAutoApprove(globalCfg, localCfg) {
411
413
  log.dim("Docs: https://cf.dinhanhthi.com/docs/reference/auto-approve/");
412
414
  }
413
415
  }
414
- function buildCodexConfig(input2) {
415
- return {
416
- enabled: input2.enabled,
417
- modes: input2.modes,
418
- effort: input2.effort
419
- };
420
- }
421
- async function editCodex(globalCfg, localCfg) {
422
- const current = localCfg?.codex ?? globalCfg?.codex;
423
- const defaults = DEFAULT_CONFIG.codex;
424
- if (current !== void 0) {
425
- log.dim(
426
- `Current: enabled=${current.enabled}, modes=${(current.modes ?? []).join(",") || "(none)"}, effort=${current.effort}`
427
- );
428
- }
429
- const enabled = await confirm({
430
- message: "Enable Codex as 6th specialist in /cf-review? (requires `codex` CLI in PATH)",
431
- default: current?.enabled ?? defaults.enabled
432
- });
433
- const modes = await checkbox({
434
- message: "Which review modes should Codex run in?",
435
- choices: [
436
- { name: "QUICK (\u22643 files, \u226450 lines)", value: "QUICK" },
437
- { name: "STANDARD (4\u201310 files or 51\u2013300 lines)", value: "STANDARD" },
438
- {
439
- name: "DEEP (>10 files, >300 lines, or sensitive paths)",
440
- value: "DEEP"
441
- }
442
- ],
443
- default: current?.modes ?? defaults.modes
444
- });
445
- if (modes.length === 0) {
446
- log.dim(
447
- "Warning: no modes selected \u2014 Codex will never run. Select at least one mode."
448
- );
449
- }
450
- const effort = await select({
451
- message: "Codex reasoning effort level:",
452
- choices: [
453
- { name: "minimal \u2014 fastest, least thorough", value: "minimal" },
454
- { name: "low", value: "low" },
455
- { name: "medium (default)", value: "medium" },
456
- { name: "high", value: "high" },
457
- { name: "xhigh \u2014 slowest, most thorough", value: "xhigh" }
458
- ],
459
- default: current?.effort ?? defaults.effort
460
- });
461
- const scope = await askScope();
462
- if (scope === "back") return;
463
- const codexCfg = buildCodexConfig({ enabled, modes, effort });
464
- writeToScope(scope, { codex: codexCfg });
465
- if (enabled) {
466
- log.dim(
467
- "Tip: make sure `codex` CLI is installed \u2014 `npm install -g @openai/codex`"
468
- );
469
- log.dim(
470
- "Docs: https://cf.dinhanhthi.com/docs/configuration/config-json/#codex"
471
- );
472
- } else {
473
- log.dim("Codex disabled.");
474
- }
475
- }
476
416
  async function editStatusline() {
477
417
  const hookResult = findStatuslineHookPath();
478
418
  if (!hookResult) {
@@ -686,8 +626,6 @@ async function configCommand() {
686
626
  globalCfg,
687
627
  localCfg
688
628
  );
689
- const codexScope = getScopeLabel("codex", globalCfg, localCfg);
690
- const codexEnabled = getMergedValue("codex", globalCfg, localCfg)?.enabled;
691
629
  const statuslineStatus = isStatuslineConfigured() ? chalk.green("configured") : chalk.yellow("not configured");
692
630
  const completionStatus = hasShellCompletion() ? chalk.green("installed") : chalk.yellow("not installed");
693
631
  const projectRules = getExistingRules(claudeLocalSettingsPath());
@@ -728,11 +666,6 @@ async function configCommand() {
728
666
  value: "autoApprove",
729
667
  description: " Auto-approve safe tool calls, block destructive ones, prompt for ambiguous"
730
668
  },
731
- {
732
- name: `Codex cross-engine review ${formatScopeLabel(codexScope)}${codexEnabled !== void 0 ? ` (${codexEnabled ? "enabled" : "disabled"})` : ""}`,
733
- value: "codex",
734
- description: " Enable OpenAI Codex as 6th specialist in /cf-review (opt-in)"
735
- },
736
669
  {
737
670
  name: `Statusline (${statuslineStatus})`,
738
671
  value: "statusline",
@@ -776,9 +709,6 @@ async function configCommand() {
776
709
  case "autoApprove":
777
710
  await editAutoApprove(globalCfg, localCfg);
778
711
  break;
779
- case "codex":
780
- await editCodex(globalCfg, localCfg);
781
- break;
782
712
  case "statusline":
783
713
  await editStatusline();
784
714
  break;
@@ -795,9 +725,6 @@ async function configCommand() {
795
725
  console.log();
796
726
  }
797
727
  }
798
-
799
728
  export {
800
- buildCodexConfig,
801
- editCodex,
802
729
  configCommand
803
730
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ensureStatusline
3
- } from "./chunk-XOHLBLN2.js";
4
- import "./chunk-OYPOADCX.js";
3
+ } from "./chunk-LXZ47XCD.js";
4
+ import "./chunk-DHH6SRXV.js";
5
5
  import {
6
6
  ensureShellCompletion
7
7
  } from "./chunk-DMJCO6LJ.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  resolveDocsDir
3
- } from "./chunk-K6EDQGDN.js";
3
+ } from "./chunk-AZ6AK5M4.js";
4
4
  import {
5
5
  getLibPath
6
6
  } from "./chunk-RZRT7NGT.js";
7
- import "./chunk-OYPOADCX.js";
7
+ import "./chunk-DHH6SRXV.js";
8
8
  import "./chunk-TWKNGPBO.js";
9
9
  import {
10
10
  run,
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ program.name("cf").description(
14
14
  "coding-friend CLI \u2014 host learning docs, setup MCP, init projects"
15
15
  ).version(pkg.version, "-v, --version");
16
16
  program.command("install").description("Install the Coding Friend plugin into Claude Code").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)").action(async (opts) => {
17
- const { installCommand } = await import("./install-FKL6WLIG.js");
17
+ const { installCommand } = await import("./install-22BLHQ6D.js");
18
18
  await installCommand(opts);
19
19
  });
20
20
  program.command("uninstall").description("Uninstall the Coding Friend plugin from Claude Code").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").action(async (opts) => {
@@ -30,19 +30,19 @@ program.command("enable").description("Re-enable the Coding Friend plugin").opti
30
30
  await enableCommand(opts);
31
31
  });
32
32
  program.command("init").description("Initialize coding-friend in current project").action(async () => {
33
- const { initCommand } = await import("./init-WDFYY5MM.js");
33
+ const { initCommand } = await import("./init-KY3ZPEWP.js");
34
34
  await initCommand();
35
35
  });
36
36
  program.command("config").description("Manage Coding Friend configuration").action(async () => {
37
- const { configCommand } = await import("./config-MCEQOLE5.js");
37
+ const { configCommand } = await import("./config-44VQBNMS.js");
38
38
  await configCommand();
39
39
  });
40
40
  program.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) => {
41
- const { hostCommand } = await import("./host-Y3WIXDSS.js");
41
+ const { hostCommand } = await import("./host-6IBKKCPA.js");
42
42
  await hostCommand(path, opts);
43
43
  });
44
44
  program.command("mcp").description("Setup MCP server for learning docs").argument("[path]", "path to docs folder").action(async (path) => {
45
- const { mcpCommand } = await import("./mcp-J4SD646S.js");
45
+ const { mcpCommand } = await import("./mcp-OGZAZZRF.js");
46
46
  await mcpCommand(path);
47
47
  });
48
48
  program.command("mcp-serve").description("Start the cf-memory MCP server (used internally by npx)").argument("<memoryDir>", "path to memory directory").action(async (memoryDir) => {
@@ -61,15 +61,15 @@ program.command("permission").description("Manage Claude Code permission rules f
61
61
  await permissionCommand(opts);
62
62
  });
63
63
  program.command("statusline").description("Setup coding-friend statusline in Claude Code").action(async () => {
64
- const { statuslineCommand } = await import("./statusline-MLLKBHHR.js");
64
+ const { statuslineCommand } = await import("./statusline-GKVAX7GR.js");
65
65
  await statuslineCommand();
66
66
  });
67
67
  program.command("update").description("Update coding-friend plugin, CLI, and statusline").option("--cli", "Update only the CLI (npm package)").option("--plugin", "Update only the Claude Code 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").action(async (opts) => {
68
- const { updateCommand } = await import("./update-G5HZINBK.js");
68
+ const { updateCommand } = await import("./update-P5ZR2JVQ.js");
69
69
  await updateCommand(opts);
70
70
  });
71
71
  program.command("status").description("Show comprehensive Coding Friend status").action(async () => {
72
- const { statusCommand } = await import("./status-BX2SVBBW.js");
72
+ const { statusCommand } = await import("./status-NMSVOSC4.js");
73
73
  await statusCommand();
74
74
  });
75
75
  var session = program.command("session").description("Save and load Claude Code sessions across machines");
@@ -84,11 +84,11 @@ session.command("save").description("Save current Claude Code session to sync fo
84
84
  "-s, --session-id <id>",
85
85
  "session UUID to save (default: auto-detect newest)"
86
86
  ).option("-l, --label <label>", "label for this session").action(async (opts) => {
87
- const { sessionSaveCommand } = await import("./session-6WQGKIRG.js");
87
+ const { sessionSaveCommand } = await import("./session-RCEE6P35.js");
88
88
  await sessionSaveCommand(opts);
89
89
  });
90
90
  session.command("load").description("Load a saved session from sync folder").action(async () => {
91
- const { sessionLoadCommand } = await import("./session-6WQGKIRG.js");
91
+ const { sessionLoadCommand } = await import("./session-RCEE6P35.js");
92
92
  await sessionLoadCommand();
93
93
  });
94
94
  var memory = program.command("memory").description("AI memory system \u2014 store and search project knowledge");
@@ -108,43 +108,43 @@ Memory subcommands:
108
108
  memory mcp Show MCP server setup instructions`
109
109
  );
110
110
  memory.command("status").description("Show memory system status").action(async () => {
111
- const { memoryStatusCommand } = await import("./memory-RLZR7XQY.js");
111
+ const { memoryStatusCommand } = await import("./memory-JM45DEIX.js");
112
112
  await memoryStatusCommand();
113
113
  });
114
114
  memory.command("search").description("Search memories by query").argument("<query>", "search query").action(async (query) => {
115
- const { memorySearchCommand } = await import("./memory-RLZR7XQY.js");
115
+ const { memorySearchCommand } = await import("./memory-JM45DEIX.js");
116
116
  await memorySearchCommand(query);
117
117
  });
118
118
  memory.command("list").description(
119
119
  "List memories in current project, or all projects with --projects"
120
120
  ).option("--projects", "List all project databases with size and metadata").action(async (opts) => {
121
- const { memoryListCommand } = await import("./memory-RLZR7XQY.js");
121
+ const { memoryListCommand } = await import("./memory-JM45DEIX.js");
122
122
  await memoryListCommand(opts);
123
123
  });
124
124
  memory.command("init").description(
125
125
  "Initialize memory system \u2014 interactive wizard (first time) or config menu"
126
126
  ).action(async () => {
127
- const { memoryInitCommand } = await import("./memory-RLZR7XQY.js");
127
+ const { memoryInitCommand } = await import("./memory-JM45DEIX.js");
128
128
  await memoryInitCommand();
129
129
  });
130
130
  memory.command("config").description("Configure memory system settings").action(async () => {
131
- const { memoryConfigCommand } = await import("./memory-RLZR7XQY.js");
131
+ const { memoryConfigCommand } = await import("./memory-JM45DEIX.js");
132
132
  await memoryConfigCommand();
133
133
  });
134
134
  memory.command("start-daemon").description("Start the memory daemon (Tier 2 \u2014 MiniSearch)").action(async () => {
135
- const { memoryStartDaemonCommand } = await import("./memory-RLZR7XQY.js");
135
+ const { memoryStartDaemonCommand } = await import("./memory-JM45DEIX.js");
136
136
  await memoryStartDaemonCommand();
137
137
  });
138
138
  memory.command("stop-daemon").description("Stop the memory daemon").action(async () => {
139
- const { memoryStopDaemonCommand } = await import("./memory-RLZR7XQY.js");
139
+ const { memoryStopDaemonCommand } = await import("./memory-JM45DEIX.js");
140
140
  await memoryStopDaemonCommand();
141
141
  });
142
142
  memory.command("rebuild").description("Rebuild the daemon search index").action(async () => {
143
- const { memoryRebuildCommand } = await import("./memory-RLZR7XQY.js");
143
+ const { memoryRebuildCommand } = await import("./memory-JM45DEIX.js");
144
144
  await memoryRebuildCommand();
145
145
  });
146
146
  memory.command("mcp").description("Show MCP server setup instructions").action(async () => {
147
- const { memoryMcpCommand } = await import("./memory-RLZR7XQY.js");
147
+ const { memoryMcpCommand } = await import("./memory-JM45DEIX.js");
148
148
  await memoryMcpCommand();
149
149
  });
150
150
  memory.command("rm").description("Remove a project database").option("--project-id <id>", "Project ID to remove").option("--all", "Remove all project databases").option(
@@ -152,7 +152,7 @@ memory.command("rm").description("Remove a project database").option("--project-
152
152
  "Remove orphaned projects (source dir missing or 0 memories)"
153
153
  ).action(
154
154
  async (opts) => {
155
- const { memoryRmCommand } = await import("./memory-RLZR7XQY.js");
155
+ const { memoryRmCommand } = await import("./memory-JM45DEIX.js");
156
156
  await memoryRmCommand(opts);
157
157
  }
158
158
  );
@@ -178,35 +178,35 @@ Dev subcommands:
178
178
  dev update [path] Update local dev plugin to latest version`
179
179
  );
180
180
  dev.command("on").description("Switch to local plugin source").argument("[path]", "path to local coding-friend repo (default: cwd)").action(async (path) => {
181
- const { devOnCommand } = await import("./dev-S6VZUD33.js");
181
+ const { devOnCommand } = await import("./dev-QXVERU42.js");
182
182
  await devOnCommand(path);
183
183
  });
184
184
  dev.command("off").description("Switch back to remote marketplace").action(async () => {
185
- const { devOffCommand } = await import("./dev-S6VZUD33.js");
185
+ const { devOffCommand } = await import("./dev-QXVERU42.js");
186
186
  await devOffCommand();
187
187
  });
188
188
  dev.command("status").description("Show current dev mode").action(async () => {
189
- const { devStatusCommand } = await import("./dev-S6VZUD33.js");
189
+ const { devStatusCommand } = await import("./dev-QXVERU42.js");
190
190
  await devStatusCommand();
191
191
  });
192
192
  dev.command("sync").description(
193
193
  "Copy local source files to plugin cache (no version bump needed)"
194
194
  ).action(async () => {
195
- const { devSyncCommand } = await import("./dev-S6VZUD33.js");
195
+ const { devSyncCommand } = await import("./dev-QXVERU42.js");
196
196
  await devSyncCommand();
197
197
  });
198
198
  dev.command("restart").description("Reinstall local dev plugin (off + on)").argument(
199
199
  "[path]",
200
200
  "path to local coding-friend repo (default: saved path or cwd)"
201
201
  ).action(async (path) => {
202
- const { devRestartCommand } = await import("./dev-S6VZUD33.js");
202
+ const { devRestartCommand } = await import("./dev-QXVERU42.js");
203
203
  await devRestartCommand(path);
204
204
  });
205
205
  dev.command("update").description("Update local dev plugin to latest version (off + on)").argument(
206
206
  "[path]",
207
207
  "path to local coding-friend repo (default: saved path or cwd)"
208
208
  ).action(async (path) => {
209
- const { devUpdateCommand } = await import("./dev-S6VZUD33.js");
209
+ const { devUpdateCommand } = await import("./dev-QXVERU42.js");
210
210
  await devUpdateCommand(path);
211
211
  });
212
212
  program.hook("postAction", async () => {
@@ -1,16 +1,13 @@
1
- import {
2
- editCodex
3
- } from "./chunk-CXG6I6ZF.js";
4
1
  import {
5
2
  ensureMemoryBuilt,
6
3
  isMemoryInitialized,
7
4
  memoryInitWizard
8
- } from "./chunk-5X3JZKYW.js";
9
- import "./chunk-AYIREX73.js";
5
+ } from "./chunk-FAANBGCB.js";
6
+ import "./chunk-FI5HEQ43.js";
10
7
  import {
11
8
  memoryConfigMenu
12
- } from "./chunk-3UIH5U3Y.js";
13
- import "./chunk-K6EDQGDN.js";
9
+ } from "./chunk-QCKIBJF6.js";
10
+ import "./chunk-AZ6AK5M4.js";
14
11
  import {
15
12
  getLibPath
16
13
  } from "./chunk-RZRT7NGT.js";
@@ -24,10 +21,10 @@ import {
24
21
  saveStatuslineConfig,
25
22
  selectStatuslineComponents,
26
23
  writeStatuslineSettings
27
- } from "./chunk-XOHLBLN2.js";
24
+ } from "./chunk-LXZ47XCD.js";
28
25
  import {
29
26
  DEFAULT_CONFIG
30
- } from "./chunk-OYPOADCX.js";
27
+ } from "./chunk-DHH6SRXV.js";
31
28
  import {
32
29
  ensureShellCompletion,
33
30
  hasShellCompletion
@@ -745,8 +742,6 @@ async function initMenu(gitAvailable) {
745
742
  globalCfg,
746
743
  localCfg
747
744
  );
748
- const codexScope = getScopeLabel("codex", globalCfg, localCfg);
749
- const codexEnabled = getMergedValue("codex", globalCfg, localCfg)?.enabled;
750
745
  const projectRules = getExistingRules(claudeLocalSettingsPath());
751
746
  const userRules = getExistingRules(claudeSettingsPath());
752
747
  const allRules = getAllRules();
@@ -798,11 +793,6 @@ async function initMenu(gitAvailable) {
798
793
  value: "autoApprove",
799
794
  description: " Auto-approve safe tool calls, block destructive ones, prompt for ambiguous"
800
795
  },
801
- {
802
- name: `Codex cross-engine review ${formatScopeLabel(codexScope)}${codexEnabled !== void 0 ? ` (${codexEnabled ? "enabled" : "disabled"})` : ""}`,
803
- value: "codex",
804
- description: " Enable OpenAI Codex as 6th specialist in /cf-review (opt-in)"
805
- },
806
796
  {
807
797
  name: `Permissions (${permissionStatus} rules)`,
808
798
  value: "permissions",
@@ -871,9 +861,6 @@ async function initMenu(gitAvailable) {
871
861
  }
872
862
  break;
873
863
  }
874
- case "codex":
875
- await editCodex(globalCfg, localCfg);
876
- break;
877
864
  case "permissions": {
878
865
  const learnCfg = localCfg?.learn ?? globalCfg?.learn;
879
866
  const learnOutputDir = learnCfg?.outputDir || `${docsDir}/learn`;
@@ -1014,7 +1001,7 @@ async function initCommand() {
1014
1001
  console.log();
1015
1002
  log.congrats("Setup complete!");
1016
1003
  log.dim(
1017
- "Available commands: /cf-ask, /cf-plan, /cf-fix, /cf-commit, /cf-review, /cf-review-codex, /cf-review-out, /cf-review-in, /cf-ship, /cf-optimize, /cf-scan, /cf-remember, /cf-learn, /cf-teach, /cf-research, /cf-session, /cf-warm, /cf-help"
1004
+ "Available commands: /cf-ask, /cf-plan, /cf-design, /cf-fix, /cf-commit, /cf-review, /cf-review-out, /cf-review-in, /cf-ship, /cf-optimize, /cf-scan, /cf-remember, /cf-learn, /cf-teach, /cf-research, /cf-session, /cf-warm, /cf-help"
1018
1005
  );
1019
1006
  }
1020
1007
  export {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getLatestVersion,
3
3
  semverCompare
4
- } from "./chunk-UGTNIFBH.js";
4
+ } from "./chunk-G4QGJEV7.js";
5
5
  import {
6
6
  getInstalledVersion
7
- } from "./chunk-XOHLBLN2.js";
8
- import "./chunk-OYPOADCX.js";
7
+ } from "./chunk-LXZ47XCD.js";
8
+ import "./chunk-DHH6SRXV.js";
9
9
  import {
10
10
  ensureShellCompletion
11
11
  } from "./chunk-DMJCO6LJ.js";
@@ -2,24 +2,24 @@ import {
2
2
  checkLearnMcpHealth,
3
3
  checkMemoryMcpHealth,
4
4
  listMdFilesRecursive
5
- } from "./chunk-TVAY4OQL.js";
5
+ } from "./chunk-CZDXMFEZ.js";
6
6
  import {
7
7
  ensureMemoryBuilt,
8
8
  printMemoryMcpConfig
9
- } from "./chunk-5X3JZKYW.js";
9
+ } from "./chunk-FAANBGCB.js";
10
10
  import {
11
11
  detectMemoryMcpState,
12
12
  warnStaleMcpJson
13
- } from "./chunk-AYIREX73.js";
14
- import "./chunk-3UIH5U3Y.js";
13
+ } from "./chunk-FI5HEQ43.js";
14
+ import "./chunk-QCKIBJF6.js";
15
15
  import {
16
16
  resolveDocsDir,
17
17
  resolveMemoryDir
18
- } from "./chunk-K6EDQGDN.js";
18
+ } from "./chunk-AZ6AK5M4.js";
19
19
  import {
20
20
  getLibPath
21
21
  } from "./chunk-RZRT7NGT.js";
22
- import "./chunk-OYPOADCX.js";
22
+ import "./chunk-DHH6SRXV.js";
23
23
  import "./chunk-Z5Q533UG.js";
24
24
  import "./chunk-TWKNGPBO.js";
25
25
  import {
@@ -95,7 +95,9 @@ async function mcpCommand(path) {
95
95
  }
96
96
  if (!existsSync(join(learnMcpDir, "dist"))) {
97
97
  log.step("Building MCP server...");
98
- const result = run("npm", ["run", "build", "--silent"], { cwd: learnMcpDir });
98
+ const result = run("npm", ["run", "build", "--silent"], {
99
+ cwd: learnMcpDir
100
+ });
99
101
  if (result === null) {
100
102
  log.error("Failed to build MCP server");
101
103
  process.exit(1);
@@ -13,12 +13,12 @@ import {
13
13
  memoryStatusCommand,
14
14
  memoryStopDaemonCommand,
15
15
  printMemoryMcpConfig
16
- } from "./chunk-5X3JZKYW.js";
17
- import "./chunk-AYIREX73.js";
18
- import "./chunk-3UIH5U3Y.js";
19
- import "./chunk-K6EDQGDN.js";
16
+ } from "./chunk-FAANBGCB.js";
17
+ import "./chunk-FI5HEQ43.js";
18
+ import "./chunk-QCKIBJF6.js";
19
+ import "./chunk-AZ6AK5M4.js";
20
20
  import "./chunk-RZRT7NGT.js";
21
- import "./chunk-OYPOADCX.js";
21
+ import "./chunk-DHH6SRXV.js";
22
22
  import "./chunk-Z5Q533UG.js";
23
23
  import "./chunk-TWKNGPBO.js";
24
24
  import "./chunk-EVGXUDX4.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-K6EDQGDN.js";
4
- import "./chunk-OYPOADCX.js";
3
+ } from "./chunk-AZ6AK5M4.js";
4
+ import "./chunk-DHH6SRXV.js";
5
5
  import {
6
6
  claudeSessionDir,
7
7
  encodeProjectPath,
@@ -2,14 +2,14 @@ import {
2
2
  checkLearnMcpHealth,
3
3
  checkMemoryMcpHealth,
4
4
  listMdFilesRecursive
5
- } from "./chunk-TVAY4OQL.js";
6
- import "./chunk-AYIREX73.js";
7
- import "./chunk-3UIH5U3Y.js";
5
+ } from "./chunk-CZDXMFEZ.js";
6
+ import "./chunk-FI5HEQ43.js";
7
+ import "./chunk-QCKIBJF6.js";
8
8
  import {
9
9
  resolveDocsDir,
10
10
  resolveMemoryDir,
11
11
  sanitizeRawConfig
12
- } from "./chunk-K6EDQGDN.js";
12
+ } from "./chunk-AZ6AK5M4.js";
13
13
  import {
14
14
  getLibPath
15
15
  } from "./chunk-RZRT7NGT.js";
@@ -18,11 +18,11 @@ import {
18
18
  getLatestCliVersion,
19
19
  getLatestVersion,
20
20
  semverCompare
21
- } from "./chunk-UGTNIFBH.js";
21
+ } from "./chunk-G4QGJEV7.js";
22
22
  import {
23
23
  getInstalledVersion
24
- } from "./chunk-XOHLBLN2.js";
25
- import "./chunk-OYPOADCX.js";
24
+ } from "./chunk-LXZ47XCD.js";
25
+ import "./chunk-DHH6SRXV.js";
26
26
  import "./chunk-DMJCO6LJ.js";
27
27
  import {
28
28
  detectPluginScope,
@@ -8,10 +8,10 @@ import {
8
8
  saveStatuslineConfig,
9
9
  selectStatuslineComponents,
10
10
  writeStatuslineSettings
11
- } from "./chunk-XOHLBLN2.js";
11
+ } from "./chunk-LXZ47XCD.js";
12
12
  import {
13
13
  ALL_COMPONENT_IDS
14
- } from "./chunk-OYPOADCX.js";
14
+ } from "./chunk-DHH6SRXV.js";
15
15
  import "./chunk-TWKNGPBO.js";
16
16
  import {
17
17
  commandExists
@@ -4,9 +4,9 @@ import {
4
4
  getLatestVersion,
5
5
  semverCompare,
6
6
  updateCommand
7
- } from "./chunk-UGTNIFBH.js";
8
- import "./chunk-XOHLBLN2.js";
9
- import "./chunk-OYPOADCX.js";
7
+ } from "./chunk-G4QGJEV7.js";
8
+ import "./chunk-LXZ47XCD.js";
9
+ import "./chunk-DHH6SRXV.js";
10
10
  import "./chunk-DMJCO6LJ.js";
11
11
  import "./chunk-Z5Q533UG.js";
12
12
  import "./chunk-TWKNGPBO.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-friend-cli",
3
- "version": "1.34.0",
3
+ "version": "1.34.1",
4
4
  "description": "CLI for coding-friend — host learning docs, setup MCP server, initialize projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,22 +0,0 @@
1
- import {
2
- buildCodexConfig,
3
- configCommand,
4
- editCodex
5
- } from "./chunk-CXG6I6ZF.js";
6
- import "./chunk-3UIH5U3Y.js";
7
- import "./chunk-K6EDQGDN.js";
8
- import "./chunk-RZRT7NGT.js";
9
- import "./chunk-XOHLBLN2.js";
10
- import "./chunk-OYPOADCX.js";
11
- import "./chunk-DMJCO6LJ.js";
12
- import "./chunk-Z5Q533UG.js";
13
- import "./chunk-TWKNGPBO.js";
14
- import "./chunk-EVGXUDX4.js";
15
- import "./chunk-NREZK463.js";
16
- import "./chunk-O27FVQFU.js";
17
- import "./chunk-5UVDWG5L.js";
18
- export {
19
- buildCodexConfig,
20
- configCommand,
21
- editCodex
22
- };