coding-friend-cli 1.40.1 → 1.40.2

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,7 +1,7 @@
1
1
  import {
2
2
  ensureStatusline,
3
3
  getInstalledVersion
4
- } from "./chunk-Q2QDSYQT.js";
4
+ } from "./chunk-FK4SXIF7.js";
5
5
  import {
6
6
  ensureShellCompletion
7
7
  } from "./chunk-667NMPN4.js";
@@ -323,7 +323,7 @@ async function updateClaudeCommand(opts, mode) {
323
323
  }
324
324
  let refreshMemoryAfterUpdate = null;
325
325
  if (doCli) {
326
- ({ refreshMemoryAfterUpdate } = await import("./memory-4NVLWOFS.js"));
326
+ ({ refreshMemoryAfterUpdate } = await import("./memory-KNKGLCVG.js"));
327
327
  if (!latestCliVersion) {
328
328
  log.warn("Cannot check latest CLI version from npm.");
329
329
  } else {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_CONFIG
3
- } from "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-ITI7MXLA.js";
4
4
  import {
5
5
  readJson
6
6
  } from "./chunk-5UVDWG5L.js";
@@ -101,7 +101,8 @@ var MemoryConfigSchema = z.object({
101
101
  autoStart: z.boolean().optional()
102
102
  });
103
103
  var ReviewConfigSchema = z.strictObject({
104
- withCodex: z.boolean().optional()
104
+ withCodex: z.boolean().optional(),
105
+ maxRounds: z.number().int().min(1).optional()
105
106
  });
106
107
  var ConfigSchema = z.strictObject({
107
108
  language: z.string().optional(),
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ALL_COMPONENT_IDS,
3
3
  STATUSLINE_COMPONENTS
4
- } from "./chunk-3WIZA5OZ.js";
4
+ } from "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  mergeJson,
7
7
  readJson,
@@ -23,6 +23,7 @@ var STATUSLINE_COMPONENTS = [
23
23
  }
24
24
  ];
25
25
  var ALL_COMPONENT_IDS = STATUSLINE_COMPONENTS.map((c) => c.id);
26
+ var DEFAULT_REVIEW_MAX_ROUNDS = 5;
26
27
  var DEFAULT_CONFIG = {
27
28
  language: "en",
28
29
  docsDir: "docs",
@@ -54,5 +55,6 @@ var DEFAULT_CONFIG = {
54
55
  export {
55
56
  STATUSLINE_COMPONENTS,
56
57
  ALL_COMPONENT_IDS,
58
+ DEFAULT_REVIEW_MAX_ROUNDS,
57
59
  DEFAULT_CONFIG
58
60
  };
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  loadConfig,
8
8
  resolveMemoryDir
9
- } from "./chunk-E4NBTQXR.js";
9
+ } from "./chunk-CGZNFAOB.js";
10
10
  import {
11
11
  getMemoryMcpStatus,
12
12
  isMemoryMcpRegistered,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  loadConfig,
3
3
  resolveMemoryDir
4
- } from "./chunk-E4NBTQXR.js";
5
- import "./chunk-3WIZA5OZ.js";
4
+ } from "./chunk-CGZNFAOB.js";
5
+ import "./chunk-ITI7MXLA.js";
6
6
  import "./chunk-5UVDWG5L.js";
7
7
  import "./chunk-EVGXUDX4.js";
8
8
  import {
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-2DTXVMPQ.js";
9
9
  import {
10
10
  resolveLearnDir
11
- } from "./chunk-E4NBTQXR.js";
11
+ } from "./chunk-CGZNFAOB.js";
12
12
  import {
13
13
  findStatuslineHookPath,
14
14
  getCurrentAccountEmail,
@@ -19,11 +19,12 @@ import {
19
19
  saveStatuslineConfig,
20
20
  selectStatuslineComponents,
21
21
  writeStatuslineSettings
22
- } from "./chunk-Q2QDSYQT.js";
22
+ } from "./chunk-FK4SXIF7.js";
23
23
  import {
24
24
  ALL_COMPONENT_IDS,
25
- DEFAULT_CONFIG
26
- } from "./chunk-3WIZA5OZ.js";
25
+ DEFAULT_CONFIG,
26
+ DEFAULT_REVIEW_MAX_ROUNDS
27
+ } from "./chunk-ITI7MXLA.js";
27
28
  import {
28
29
  registerLearnMcp,
29
30
  unregisterLearnMcp
@@ -516,8 +517,14 @@ async function editTdd(globalCfg, localCfg) {
516
517
  if (scope === "back") return;
517
518
  writeToScope(scope, { tdd: value });
518
519
  }
520
+ function getReviewConfig(globalCfg, localCfg) {
521
+ return {
522
+ ...globalCfg?.review ?? {},
523
+ ...localCfg?.review ?? {}
524
+ };
525
+ }
519
526
  async function editReviewWithCodex(globalCfg, localCfg) {
520
- const currentValue = getMergedValue("review", globalCfg, localCfg)?.withCodex;
527
+ const currentValue = getReviewConfig(globalCfg, localCfg).withCodex;
521
528
  if (currentValue !== void 0) {
522
529
  log.dim(`Current: ${currentValue}`);
523
530
  }
@@ -530,6 +537,59 @@ async function editReviewWithCodex(globalCfg, localCfg) {
530
537
  if (scope === "back") return;
531
538
  writeNestedField("review", scope, "withCodex", value);
532
539
  }
540
+ async function editReviewMaxRounds(globalCfg, localCfg) {
541
+ const currentValue = getReviewConfig(globalCfg, localCfg).maxRounds;
542
+ if (currentValue !== void 0) {
543
+ log.dim(`Current: ${currentValue}`);
544
+ }
545
+ log.dim(
546
+ "Caps how many /cf-review rounds /cf-plan --auto and /cf-tdd --auto run before waiting for you (initial review + fix re-reviews)."
547
+ );
548
+ const raw = await input({
549
+ message: "Maximum review rounds:",
550
+ default: String(currentValue ?? DEFAULT_REVIEW_MAX_ROUNDS),
551
+ validate: (val) => {
552
+ const n = Number(val);
553
+ if (!Number.isInteger(n) || n < 1) return "Must be an integer \u2265 1";
554
+ return true;
555
+ }
556
+ });
557
+ const scope = await askScope();
558
+ if (scope === "back") return;
559
+ writeNestedField("review", scope, "maxRounds", Number(raw));
560
+ }
561
+ async function reviewSubMenu() {
562
+ while (true) {
563
+ const globalCfg = readJson(globalConfigPath());
564
+ const localCfg = readJson(localConfigPath());
565
+ const review = getReviewConfig(globalCfg, localCfg);
566
+ const choice = await select({
567
+ message: "Review settings:",
568
+ choices: injectBackChoice(
569
+ [
570
+ {
571
+ name: `Codex dual-review (${review.withCodex ?? false})`,
572
+ value: "withCodex"
573
+ },
574
+ {
575
+ name: `Max review rounds (${review.maxRounds ?? DEFAULT_REVIEW_MAX_ROUNDS})`,
576
+ value: "maxRounds"
577
+ }
578
+ ],
579
+ "Back"
580
+ )
581
+ });
582
+ if (choice === BACK) return;
583
+ switch (choice) {
584
+ case "withCodex":
585
+ await editReviewWithCodex(globalCfg, localCfg);
586
+ break;
587
+ case "maxRounds":
588
+ await editReviewMaxRounds(globalCfg, localCfg);
589
+ break;
590
+ }
591
+ }
592
+ }
533
593
  async function editAutoApprove(globalCfg, localCfg) {
534
594
  const currentValue = getMergedValue("autoApprove", globalCfg, localCfg);
535
595
  if (currentValue !== void 0) {
@@ -788,7 +848,8 @@ async function configCommand() {
788
848
  localCfg
789
849
  );
790
850
  const reviewScope = getScopeLabel("review", globalCfg, localCfg);
791
- const withCodexVal = getMergedValue("review", globalCfg, localCfg)?.withCodex;
851
+ const reviewVal = getReviewConfig(globalCfg, localCfg);
852
+ const maxRoundsVal = reviewVal.maxRounds ?? DEFAULT_REVIEW_MAX_ROUNDS;
792
853
  const planDocsScope = getScopeLabel("disableGUIPlan", globalCfg, localCfg);
793
854
  const statuslineStatus = isStatuslineConfigured() ? chalk.green("configured") : chalk.yellow("not configured");
794
855
  const completionStatus = hasShellCompletion() ? chalk.green("installed") : chalk.yellow("not installed");
@@ -841,9 +902,9 @@ async function configCommand() {
841
902
  description: " Block reads of .env, keys, and similar secrets (all hosts)"
842
903
  },
843
904
  {
844
- name: `Codex dual-review ${formatScopeLabel(reviewScope)}${withCodexVal !== void 0 ? ` (${withCodexVal})` : ""}`,
905
+ name: `Review settings ${formatScopeLabel(reviewScope)} (${maxRoundsVal} rounds)`,
845
906
  value: "review",
846
- description: " Run a Codex second-opinion review alongside Claude's on every /cf-review"
907
+ description: " Autopilot review-fix rounds + Codex second-opinion on every /cf-review"
847
908
  },
848
909
  {
849
910
  name: `Plan docs ${formatScopeLabel(planDocsScope)}`,
@@ -900,7 +961,7 @@ async function configCommand() {
900
961
  await editPrivacyBlock(globalCfg, localCfg);
901
962
  break;
902
963
  case "review":
903
- await editReviewWithCodex(globalCfg, localCfg);
964
+ await reviewSubMenu();
904
965
  break;
905
966
  case "planDocs":
906
967
  await planDocsSubMenu();
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ensureStatusline
3
- } from "./chunk-Q2QDSYQT.js";
4
- import "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-FK4SXIF7.js";
4
+ import "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  ensureShellCompletion
7
7
  } from "./chunk-667NMPN4.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveLearnDir
3
- } from "./chunk-E4NBTQXR.js";
4
- import "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-CGZNFAOB.js";
4
+ import "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  getLibPath
7
7
  } from "./chunk-TN3Y75WG.js";
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ program.command("install").description("Install the Coding Friend plugin into a
46
46
  "--agent <agent>",
47
47
  "Operate on host agent: claude, codex, omp, or agy"
48
48
  ).option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").option("--agy", "Shortcut for --agent agy (beta)").action(async (opts) => {
49
- const { installCommand } = await import("./install-45O5ICBA.js");
49
+ const { installCommand } = await import("./install-MS7SS2L5.js");
50
50
  await installCommand(opts);
51
51
  });
52
52
  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(
@@ -80,11 +80,11 @@ program.command("init").description("Initialize coding-friend in current project
80
80
  "--trust-project",
81
81
  "For Codex, mark the current project trusted in ~/.codex/config.toml"
82
82
  ).action(async (opts) => {
83
- const { initCommand } = await import("./init-TUBWQCBQ.js");
83
+ const { initCommand } = await import("./init-ORERNRR7.js");
84
84
  await initCommand(opts);
85
85
  });
86
86
  program.command("config").description("Manage Coding Friend configuration").action(async () => {
87
- const { configCommand } = await import("./config-WHEUK2LC.js");
87
+ const { configCommand } = await import("./config-A4JIINZK.js");
88
88
  await configCommand();
89
89
  });
90
90
  var learn = program.command("learn").description("Manage learning docs \u2014 host as a website or push to git");
@@ -96,25 +96,25 @@ Learn subcommands:
96
96
  learn push [path] Commit and push learning docs (only if learn dir is the git root)`
97
97
  );
98
98
  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) => {
99
- const { hostCommand } = await import("./host-GZJSMJSF.js");
99
+ const { hostCommand } = await import("./host-7XKH5HLB.js");
100
100
  await hostCommand(path, opts);
101
101
  });
102
102
  learn.command("push").description("Commit and push learning docs to origin").argument("[path]", "path to docs folder").action(async (path) => {
103
- const { learnPushCommand } = await import("./learn-AJT7Z6F7.js");
103
+ const { learnPushCommand } = await import("./learn-Q5YHKHQH.js");
104
104
  await learnPushCommand(path);
105
105
  });
106
106
  program.command("host", { hidden: true }).argument("[path]", "path to docs folder").option("-p, --port <port>", "port number", "3333").action(async (path, opts) => {
107
- const { hostCommand } = await import("./host-GZJSMJSF.js");
107
+ const { hostCommand } = await import("./host-7XKH5HLB.js");
108
108
  await hostCommand(path, opts);
109
109
  });
110
110
  program.command("mcp").description("Setup MCP server for learning docs").action(async () => {
111
- const { mcpCommand } = await import("./mcp-JGBZMNWL.js");
111
+ const { mcpCommand } = await import("./mcp-XGWHYBEN.js");
112
112
  await mcpCommand();
113
113
  });
114
114
  program.command("mcp-serve").description(
115
115
  "Start the cf-memory MCP server (used internally by npx). When memoryDir is omitted, resolves from CLAUDE_PROJECT_DIR at runtime."
116
116
  ).argument("[memoryDir]", "path to memory directory (optional)").action(async (memoryDir) => {
117
- const { mcpServeCommand } = await import("./mcp-serve-IS4T24CV.js");
117
+ const { mcpServeCommand } = await import("./mcp-serve-7RWXY3J4.js");
118
118
  await mcpServeCommand(memoryDir);
119
119
  });
120
120
  program.command("mcp-serve-learn").description("Start the learn MCP server (used internally by npx)").argument("<docsDir>", "path to docs directory").action(async (docsDir) => {
@@ -138,22 +138,22 @@ program.command("permission").description("Manage host permission and approval s
138
138
  await permissionCommand(opts);
139
139
  });
140
140
  program.command("statusline").description("Setup coding-friend statusline in Claude Code").action(async () => {
141
- const { statuslineCommand } = await import("./statusline-B7PXP3AQ.js");
141
+ const { statuslineCommand } = await import("./statusline-CO4ZOUXH.js");
142
142
  await statuslineCommand();
143
143
  });
144
144
  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(
145
145
  "--agent <agent>",
146
146
  "Operate on host agent: claude, codex, omp, or agy"
147
147
  ).option("--codex", "Alias for --agent codex").option("--omp", "Alias for --agent omp").option("--agy", "Shortcut for --agent agy (beta)").action(async (opts) => {
148
- const { updateCommand } = await import("./update-YJ363TBU.js");
148
+ const { updateCommand } = await import("./update-6YMGKFUB.js");
149
149
  await updateCommand(opts);
150
150
  });
151
151
  program.command("status").description("Show comprehensive Coding Friend status").action(async () => {
152
- const { statusCommand } = await import("./status-KQQJNSEZ.js");
152
+ const { statusCommand } = await import("./status-WICNVD7B.js");
153
153
  await statusCommand();
154
154
  });
155
155
  program.command("clean").description("Clean files generated by Coding Friend in docs/").action(async () => {
156
- const { cleanCommand } = await import("./clean-PKSSS662.js");
156
+ const { cleanCommand } = await import("./clean-S57BNTWM.js");
157
157
  await cleanCommand();
158
158
  });
159
159
  var session = program.command("session").description("[beta] Save and load Claude Code sessions across machines");
@@ -168,11 +168,11 @@ session.command("save").description("Save current Claude Code session to sync fo
168
168
  "-s, --session-id <id>",
169
169
  "session UUID to save (default: auto-detect newest)"
170
170
  ).option("-l, --label <label>", "label for this session").action(async (opts) => {
171
- const { sessionSaveCommand } = await import("./session-GBHL5TH3.js");
171
+ const { sessionSaveCommand } = await import("./session-WU5344ZD.js");
172
172
  await sessionSaveCommand(opts);
173
173
  });
174
174
  session.command("load").description("Load a saved session from sync folder").action(async () => {
175
- const { sessionLoadCommand } = await import("./session-GBHL5TH3.js");
175
+ const { sessionLoadCommand } = await import("./session-WU5344ZD.js");
176
176
  await sessionLoadCommand();
177
177
  });
178
178
  var memory = program.command("memory").description("AI memory system \u2014 store and search project knowledge");
@@ -192,43 +192,43 @@ Memory subcommands:
192
192
  memory mcp Show MCP server setup instructions`
193
193
  );
194
194
  memory.command("status").description("Show memory system status").action(async () => {
195
- const { memoryStatusCommand } = await import("./memory-4NVLWOFS.js");
195
+ const { memoryStatusCommand } = await import("./memory-KNKGLCVG.js");
196
196
  await memoryStatusCommand();
197
197
  });
198
198
  memory.command("search").description("Search memories by query").argument("<query>", "search query").action(async (query) => {
199
- const { memorySearchCommand } = await import("./memory-4NVLWOFS.js");
199
+ const { memorySearchCommand } = await import("./memory-KNKGLCVG.js");
200
200
  await memorySearchCommand(query);
201
201
  });
202
202
  memory.command("list").description(
203
203
  "List memories in current project, or all projects with --projects"
204
204
  ).option("--projects", "List all project databases with size and metadata").action(async (opts) => {
205
- const { memoryListCommand } = await import("./memory-4NVLWOFS.js");
205
+ const { memoryListCommand } = await import("./memory-KNKGLCVG.js");
206
206
  await memoryListCommand(opts);
207
207
  });
208
208
  memory.command("init").description(
209
209
  "Initialize memory system \u2014 interactive wizard (first time) or config menu"
210
210
  ).action(async () => {
211
- const { memoryInitCommand } = await import("./memory-4NVLWOFS.js");
211
+ const { memoryInitCommand } = await import("./memory-KNKGLCVG.js");
212
212
  await memoryInitCommand();
213
213
  });
214
214
  memory.command("config").description("Configure memory system settings").action(async () => {
215
- const { memoryConfigCommand } = await import("./memory-4NVLWOFS.js");
215
+ const { memoryConfigCommand } = await import("./memory-KNKGLCVG.js");
216
216
  await memoryConfigCommand();
217
217
  });
218
218
  memory.command("start-daemon").description("Start the memory daemon (Tier 2 \u2014 MiniSearch)").action(async () => {
219
- const { memoryStartDaemonCommand } = await import("./memory-4NVLWOFS.js");
219
+ const { memoryStartDaemonCommand } = await import("./memory-KNKGLCVG.js");
220
220
  await memoryStartDaemonCommand();
221
221
  });
222
222
  memory.command("stop-daemon").description("Stop the memory daemon").action(async () => {
223
- const { memoryStopDaemonCommand } = await import("./memory-4NVLWOFS.js");
223
+ const { memoryStopDaemonCommand } = await import("./memory-KNKGLCVG.js");
224
224
  await memoryStopDaemonCommand();
225
225
  });
226
226
  memory.command("rebuild").description("Rebuild the daemon search index").action(async () => {
227
- const { memoryRebuildCommand } = await import("./memory-4NVLWOFS.js");
227
+ const { memoryRebuildCommand } = await import("./memory-KNKGLCVG.js");
228
228
  await memoryRebuildCommand();
229
229
  });
230
230
  memory.command("mcp").description("Show MCP server setup instructions").action(async () => {
231
- const { memoryMcpCommand } = await import("./memory-4NVLWOFS.js");
231
+ const { memoryMcpCommand } = await import("./memory-KNKGLCVG.js");
232
232
  await memoryMcpCommand();
233
233
  });
234
234
  memory.command("rm").description("Remove a project database").option("--project-id <id>", "Project ID to remove").option("--all", "Remove all project databases").option(
@@ -236,7 +236,7 @@ memory.command("rm").description("Remove a project database").option("--project-
236
236
  "Remove orphaned projects (source dir missing or 0 memories)"
237
237
  ).action(
238
238
  async (opts) => {
239
- const { memoryRmCommand } = await import("./memory-4NVLWOFS.js");
239
+ const { memoryRmCommand } = await import("./memory-KNKGLCVG.js");
240
240
  await memoryRmCommand(opts);
241
241
  }
242
242
  );
@@ -262,28 +262,28 @@ Dev subcommands:
262
262
  dev update [path] Update local dev plugin to latest version`
263
263
  );
264
264
  dev.command("on").description("Switch to local plugin source").argument("[path]", "path to local coding-friend repo (default: cwd)").action(async (path) => {
265
- const { devOnCommand } = await import("./dev-HWKNWOZY.js");
265
+ const { devOnCommand } = await import("./dev-E3EHPMHE.js");
266
266
  await devOnCommand(path);
267
267
  });
268
268
  dev.command("off").description("Switch back to remote marketplace").action(async () => {
269
- const { devOffCommand } = await import("./dev-HWKNWOZY.js");
269
+ const { devOffCommand } = await import("./dev-E3EHPMHE.js");
270
270
  await devOffCommand();
271
271
  });
272
272
  dev.command("status").description("Show current dev mode").action(async () => {
273
- const { devStatusCommand } = await import("./dev-HWKNWOZY.js");
273
+ const { devStatusCommand } = await import("./dev-E3EHPMHE.js");
274
274
  await devStatusCommand();
275
275
  });
276
276
  dev.command("sync").description(
277
277
  "Copy local source files to plugin cache (no version bump needed)"
278
278
  ).action(async () => {
279
- const { devSyncCommand } = await import("./dev-HWKNWOZY.js");
279
+ const { devSyncCommand } = await import("./dev-E3EHPMHE.js");
280
280
  await devSyncCommand();
281
281
  });
282
282
  dev.command("restart").description("Reinstall local dev plugin (off + on)").argument(
283
283
  "[path]",
284
284
  "path to local coding-friend repo (default: saved path or cwd)"
285
285
  ).action(async (path) => {
286
- const { devRestartCommand } = await import("./dev-HWKNWOZY.js");
286
+ const { devRestartCommand } = await import("./dev-E3EHPMHE.js");
287
287
  await devRestartCommand(path);
288
288
  });
289
289
  dev.command("update").description(
@@ -292,7 +292,7 @@ dev.command("update").description(
292
292
  "[path]",
293
293
  "path to local coding-friend repo (default: saved path or cwd)"
294
294
  ).action(async (path) => {
295
- const { devUpdateCommand } = await import("./dev-HWKNWOZY.js");
295
+ const { devUpdateCommand } = await import("./dev-E3EHPMHE.js");
296
296
  await devUpdateCommand(path);
297
297
  });
298
298
  program.hook("postAction", async () => {
@@ -12,9 +12,9 @@ import {
12
12
  ensureMemoryBuilt,
13
13
  isMemoryInitialized,
14
14
  memoryInitWizard
15
- } from "./chunk-B44ROTV6.js";
15
+ } from "./chunk-KT5RLAFH.js";
16
16
  import "./chunk-TFF47F7P.js";
17
- import "./chunk-E4NBTQXR.js";
17
+ import "./chunk-CGZNFAOB.js";
18
18
  import {
19
19
  findStatuslineHookPath,
20
20
  getCurrentAccountEmail,
@@ -25,10 +25,10 @@ import {
25
25
  saveStatuslineConfig,
26
26
  selectStatuslineComponents,
27
27
  writeStatuslineSettings
28
- } from "./chunk-Q2QDSYQT.js";
28
+ } from "./chunk-FK4SXIF7.js";
29
29
  import {
30
30
  DEFAULT_CONFIG
31
- } from "./chunk-3WIZA5OZ.js";
31
+ } from "./chunk-ITI7MXLA.js";
32
32
  import {
33
33
  isLearnMcpRegistered,
34
34
  registerLearnMcp
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getLatestVersion,
3
3
  semverCompare
4
- } from "./chunk-KTUPGMIV.js";
4
+ } from "./chunk-4FQACYCV.js";
5
5
  import {
6
6
  getInstalledVersion
7
- } from "./chunk-Q2QDSYQT.js";
8
- import "./chunk-3WIZA5OZ.js";
7
+ } from "./chunk-FK4SXIF7.js";
8
+ import "./chunk-ITI7MXLA.js";
9
9
  import {
10
10
  ensureShellCompletion
11
11
  } from "./chunk-667NMPN4.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveLearnDir
3
- } from "./chunk-E4NBTQXR.js";
4
- import "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-CGZNFAOB.js";
4
+ import "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  readJson
7
7
  } from "./chunk-5UVDWG5L.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  ensureMemoryBuilt,
6
6
  printMemoryMcpConfig
7
- } from "./chunk-B44ROTV6.js";
7
+ } from "./chunk-KT5RLAFH.js";
8
8
  import {
9
9
  checkLearnMcpHealth,
10
10
  checkMemoryMcpHealth,
@@ -15,8 +15,8 @@ import {
15
15
  import {
16
16
  resolveLearnDir,
17
17
  resolveMemoryDir
18
- } from "./chunk-E4NBTQXR.js";
19
- import "./chunk-3WIZA5OZ.js";
18
+ } from "./chunk-CGZNFAOB.js";
19
+ import "./chunk-ITI7MXLA.js";
20
20
  import {
21
21
  isLearnMcpRegistered,
22
22
  registerLearnMcp
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveProjectMemoryDir
3
- } from "./chunk-E4NBTQXR.js";
4
- import "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-CGZNFAOB.js";
4
+ import "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  getLibPath
7
7
  } from "./chunk-TN3Y75WG.js";
@@ -14,10 +14,10 @@ import {
14
14
  memoryStopDaemonCommand,
15
15
  printMemoryMcpConfig,
16
16
  refreshMemoryAfterUpdate
17
- } from "./chunk-B44ROTV6.js";
17
+ } from "./chunk-KT5RLAFH.js";
18
18
  import "./chunk-TFF47F7P.js";
19
- import "./chunk-E4NBTQXR.js";
20
- import "./chunk-3WIZA5OZ.js";
19
+ import "./chunk-CGZNFAOB.js";
20
+ import "./chunk-ITI7MXLA.js";
21
21
  import "./chunk-CZW36H3D.js";
22
22
  import "./chunk-KCBMCHSA.js";
23
23
  import "./chunk-Z5XTSF7L.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-E4NBTQXR.js";
4
- import "./chunk-3WIZA5OZ.js";
3
+ } from "./chunk-CGZNFAOB.js";
4
+ import "./chunk-ITI7MXLA.js";
5
5
  import {
6
6
  readJson,
7
7
  writeJson
@@ -12,17 +12,17 @@ import {
12
12
  resolveLearnDir,
13
13
  resolveMemoryDir,
14
14
  sanitizeRawConfig
15
- } from "./chunk-E4NBTQXR.js";
15
+ } from "./chunk-CGZNFAOB.js";
16
16
  import {
17
17
  getCliVersion,
18
18
  getLatestCliVersion,
19
19
  getLatestVersion,
20
20
  semverCompare
21
- } from "./chunk-KTUPGMIV.js";
21
+ } from "./chunk-4FQACYCV.js";
22
22
  import {
23
23
  getInstalledVersion
24
- } from "./chunk-Q2QDSYQT.js";
25
- import "./chunk-3WIZA5OZ.js";
24
+ } from "./chunk-FK4SXIF7.js";
25
+ import "./chunk-ITI7MXLA.js";
26
26
  import {
27
27
  isLearnMcpRegistered
28
28
  } from "./chunk-NIMO4VJW.js";
@@ -8,10 +8,10 @@ import {
8
8
  saveStatuslineConfig,
9
9
  selectStatuslineComponents,
10
10
  writeStatuslineSettings
11
- } from "./chunk-Q2QDSYQT.js";
11
+ } from "./chunk-FK4SXIF7.js";
12
12
  import {
13
13
  ALL_COMPONENT_IDS
14
- } from "./chunk-3WIZA5OZ.js";
14
+ } from "./chunk-ITI7MXLA.js";
15
15
  import "./chunk-5UVDWG5L.js";
16
16
  import {
17
17
  commandExists
@@ -4,9 +4,9 @@ import {
4
4
  getLatestVersion,
5
5
  semverCompare,
6
6
  updateCommand
7
- } from "./chunk-KTUPGMIV.js";
8
- import "./chunk-Q2QDSYQT.js";
9
- import "./chunk-3WIZA5OZ.js";
7
+ } from "./chunk-4FQACYCV.js";
8
+ import "./chunk-FK4SXIF7.js";
9
+ import "./chunk-ITI7MXLA.js";
10
10
  import "./chunk-667NMPN4.js";
11
11
  import "./chunk-CZW36H3D.js";
12
12
  import "./chunk-SUYE5S2W.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-friend-cli",
3
- "version": "1.40.1",
3
+ "version": "1.40.2",
4
4
  "description": "CLI for coding-friend — host learning docs, setup MCP server, initialize projects",
5
5
  "type": "module",
6
6
  "bin": {