coding-friend-cli 1.18.0 → 1.20.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.
Files changed (35) hide show
  1. package/README.md +24 -1
  2. package/dist/{chunk-YC6MBHCT.js → chunk-JFGLNTZI.js} +13 -0
  3. package/dist/{chunk-VUAUAO2R.js → chunk-NEQZP5D4.js} +10 -6
  4. package/dist/{chunk-A427XMWE.js → chunk-PHQK2MMO.js} +4 -2
  5. package/dist/{chunk-KTX4MGMR.js → chunk-QMD7P67N.js} +24 -4
  6. package/dist/chunk-WEMDLEK5.js +331 -0
  7. package/dist/{config-6SBGNTAQ.js → config-UQXY45DN.js} +6 -244
  8. package/dist/{dev-MC6TGHRT.js → dev-7DLYIXBO.js} +2 -2
  9. package/dist/{disable-R6K5YJN4.js → disable-XYZRE3TD.js} +1 -1
  10. package/dist/{enable-HF4PYVJN.js → enable-3NZBQWLQ.js} +1 -1
  11. package/dist/{host-SYZH3FVC.js → host-QDWBFJB2.js} +1 -1
  12. package/dist/index.js +37 -28
  13. package/dist/{init-2HLPKYXB.js → init-ONUC6QMM.js} +1 -1
  14. package/dist/{install-3QCRGPTY.js → install-35IWHBIS.js} +3 -3
  15. package/dist/{mcp-TBEDYELW.js → mcp-GFIOFXOL.js} +1 -1
  16. package/dist/{memory-BQK2R7BV.js → memory-47RXG7VL.js} +158 -26
  17. package/dist/postinstall.js +1 -1
  18. package/dist/{session-H4XW2WXH.js → session-JGRF5SNX.js} +1 -1
  19. package/dist/status-SENJZQ3G.js +226 -0
  20. package/dist/{uninstall-5LRHXFSF.js → uninstall-NNCEKPIE.js} +2 -2
  21. package/dist/{update-4YUSCBCB.js → update-NZ2HRWEN.js} +6 -2
  22. package/lib/cf-memory/CHANGELOG.md +4 -0
  23. package/lib/cf-memory/README.md +29 -1
  24. package/lib/cf-memory/package.json +1 -1
  25. package/lib/cf-memory/src/__tests__/markdown-backend.test.ts +41 -1
  26. package/lib/cf-memory/src/backends/markdown.ts +28 -12
  27. package/lib/cf-memory/src/lib/types.ts +1 -0
  28. package/lib/cf-memory/src/tools/store.ts +23 -5
  29. package/lib/learn-host/CHANGELOG.md +5 -0
  30. package/lib/learn-host/package.json +1 -1
  31. package/lib/learn-host/src/app/[category]/[slug]/page.tsx +4 -3
  32. package/lib/learn-host/src/components/Breadcrumbs.tsx +1 -1
  33. package/lib/learn-host/src/components/DocCard.tsx +4 -1
  34. package/lib/learn-host/src/components/Sidebar.tsx +1 -1
  35. package/package.json +1 -1
@@ -1,7 +1,11 @@
1
+ import {
2
+ memoryConfigMenu
3
+ } from "./chunk-WEMDLEK5.js";
1
4
  import {
2
5
  getAllRules,
3
6
  getExistingRules
4
7
  } from "./chunk-7CAIGH2Y.js";
8
+ import "./chunk-RZRT7NGT.js";
5
9
  import {
6
10
  findStatuslineHookPath,
7
11
  isStatuslineConfigured,
@@ -17,7 +21,7 @@ import {
17
21
  ensureShellCompletion,
18
22
  hasShellCompletion,
19
23
  removeShellCompletion
20
- } from "./chunk-VUAUAO2R.js";
24
+ } from "./chunk-NEQZP5D4.js";
21
25
  import {
22
26
  BACK,
23
27
  applyDocsDirChange,
@@ -61,9 +65,6 @@ function getNestedFieldScope(section, field, globalCfg, localCfg) {
61
65
  function getLearnFieldScope(field, globalCfg, localCfg) {
62
66
  return getNestedFieldScope("learn", field, globalCfg, localCfg);
63
67
  }
64
- function getMemoryFieldScope(field, globalCfg, localCfg) {
65
- return getNestedFieldScope("memory", field, globalCfg, localCfg);
66
- }
67
68
  function getMergedNestedValue(section, field, globalCfg, localCfg) {
68
69
  const localSection = localCfg?.[section];
69
70
  if (localSection?.[field] !== void 0) return localSection[field];
@@ -73,9 +74,6 @@ function getMergedNestedValue(section, field, globalCfg, localCfg) {
73
74
  function getMergedLearnValue(field, globalCfg, localCfg) {
74
75
  return getMergedNestedValue("learn", field, globalCfg, localCfg);
75
76
  }
76
- function getMergedMemoryValue(field, globalCfg, localCfg) {
77
- return getMergedNestedValue("memory", field, globalCfg, localCfg);
78
- }
79
77
  function writeToScope(scope, data) {
80
78
  const targetPath = scope === "global" ? globalConfigPath() : localConfigPath();
81
79
  mergeJson(targetPath, data);
@@ -92,9 +90,6 @@ function writeNestedField(section, scope, field, value) {
92
90
  function writeLearnField(scope, field, value) {
93
91
  writeNestedField("learn", scope, field, value);
94
92
  }
95
- function writeMemoryField(scope, field, value) {
96
- writeNestedField("memory", scope, field, value);
97
- }
98
93
  async function editDocsDir(globalCfg, localCfg) {
99
94
  const currentValue = getMergedValue("docsDir", globalCfg, localCfg);
100
95
  if (currentValue) {
@@ -380,239 +375,6 @@ async function learnSubMenu() {
380
375
  }
381
376
  }
382
377
  }
383
- async function editMemoryTier(globalCfg, localCfg) {
384
- const currentValue = getMergedMemoryValue("tier", globalCfg, localCfg);
385
- if (currentValue) {
386
- log.dim(`Current: ${currentValue}`);
387
- }
388
- const choice = await select({
389
- message: "Memory search tier:",
390
- choices: injectBackChoice(
391
- [
392
- {
393
- name: "auto \u2014 detect best available (recommended)",
394
- value: "auto"
395
- },
396
- {
397
- name: "full \u2014 SQLite + FTS5 + vector embeddings (Tier 1)",
398
- value: "full"
399
- },
400
- {
401
- name: "lite \u2014 MiniSearch daemon, in-memory BM25 + fuzzy (Tier 2)",
402
- value: "lite"
403
- },
404
- {
405
- name: "markdown \u2014 file-based substring search (Tier 3)",
406
- value: "markdown"
407
- }
408
- ],
409
- "Back"
410
- )
411
- });
412
- if (choice === BACK) return;
413
- const scope = await askScope();
414
- if (scope === "back") return;
415
- writeMemoryField(scope, "tier", choice);
416
- }
417
- async function editMemoryAutoCapture(globalCfg, localCfg) {
418
- const currentValue = getMergedMemoryValue(
419
- "autoCapture",
420
- globalCfg,
421
- localCfg
422
- );
423
- if (currentValue !== void 0) {
424
- log.dim(`Current: ${currentValue}`);
425
- }
426
- const value = await confirm({
427
- message: "Auto-capture session context to memory on PreCompact (context window compression)?",
428
- default: currentValue ?? false
429
- });
430
- const scope = await askScope();
431
- if (scope === "back") return;
432
- writeMemoryField(scope, "autoCapture", value);
433
- }
434
- async function editMemoryAutoStart(globalCfg, localCfg) {
435
- const currentValue = getMergedMemoryValue(
436
- "autoStart",
437
- globalCfg,
438
- localCfg
439
- );
440
- if (currentValue !== void 0) {
441
- log.dim(`Current: ${currentValue}`);
442
- }
443
- const value = await confirm({
444
- message: "Auto-start memory daemon when MCP server connects?",
445
- default: currentValue ?? false
446
- });
447
- const scope = await askScope();
448
- if (scope === "back") return;
449
- writeMemoryField(scope, "autoStart", value);
450
- }
451
- async function editMemoryEmbedding(globalCfg, localCfg) {
452
- const currentEmbedding = getMergedMemoryValue(
453
- "embedding",
454
- globalCfg,
455
- localCfg
456
- );
457
- if (currentEmbedding) {
458
- const parts = [`provider: ${currentEmbedding.provider ?? "transformers"}`];
459
- if (currentEmbedding.model) parts.push(`model: ${currentEmbedding.model}`);
460
- if (currentEmbedding.ollamaUrl)
461
- parts.push(`url: ${currentEmbedding.ollamaUrl}`);
462
- log.dim(`Current: ${parts.join(", ")}`);
463
- }
464
- const provider = await select({
465
- message: "Embedding provider:",
466
- choices: injectBackChoice(
467
- [
468
- {
469
- name: "transformers \u2014 Transformers.js, runs in-process (no external deps)",
470
- value: "transformers"
471
- },
472
- {
473
- name: "ollama \u2014 Local Ollama server (faster, GPU support, wider model selection)",
474
- value: "ollama"
475
- }
476
- ],
477
- "Back"
478
- )
479
- });
480
- if (provider === BACK) return;
481
- let model;
482
- let ollamaUrl;
483
- if (provider === "ollama") {
484
- model = await input({
485
- message: "Ollama model name:",
486
- default: currentEmbedding?.model ?? "all-minilm:l6-v2"
487
- });
488
- ollamaUrl = await input({
489
- message: "Ollama server URL:",
490
- default: currentEmbedding?.ollamaUrl ?? "http://localhost:11434"
491
- });
492
- if (ollamaUrl === "http://localhost:11434") ollamaUrl = void 0;
493
- } else {
494
- model = await input({
495
- message: "Transformers.js model:",
496
- default: currentEmbedding?.model ?? "Xenova/all-MiniLM-L6-v2"
497
- });
498
- if (model === "Xenova/all-MiniLM-L6-v2") model = void 0;
499
- }
500
- const scope = await askScope();
501
- if (scope === "back") return;
502
- const embedding = { provider };
503
- if (model) embedding.model = model;
504
- if (ollamaUrl) embedding.ollamaUrl = ollamaUrl;
505
- writeMemoryField(scope, "embedding", embedding);
506
- }
507
- async function editMemoryDaemonTimeout(globalCfg, localCfg) {
508
- const currentDaemon = getMergedMemoryValue("daemon", globalCfg, localCfg);
509
- const currentMs = currentDaemon?.idleTimeout;
510
- const currentMin = currentMs ? currentMs / 6e4 : void 0;
511
- if (currentMin !== void 0) {
512
- log.dim(`Current: ${currentMin} minutes`);
513
- }
514
- const value = await input({
515
- message: "Daemon idle timeout (minutes):",
516
- default: String(currentMin ?? 30),
517
- validate: (val) => {
518
- const n = Number(val);
519
- if (isNaN(n) || n < 1) return "Must be a positive number";
520
- return true;
521
- }
522
- });
523
- const scope = await askScope();
524
- if (scope === "back") return;
525
- writeMemoryField(scope, "daemon", {
526
- ...currentDaemon,
527
- idleTimeout: Number(value) * 6e4
528
- });
529
- }
530
- async function memorySubMenu() {
531
- while (true) {
532
- const globalCfg = readJson(globalConfigPath());
533
- const localCfg = readJson(localConfigPath());
534
- const tierScope = getMemoryFieldScope("tier", globalCfg, localCfg);
535
- const tierVal = getMergedMemoryValue("tier", globalCfg, localCfg);
536
- const autoCaptureScope = getMemoryFieldScope(
537
- "autoCapture",
538
- globalCfg,
539
- localCfg
540
- );
541
- const autoCaptureVal = getMergedMemoryValue(
542
- "autoCapture",
543
- globalCfg,
544
- localCfg
545
- );
546
- const autoStartScope = getMemoryFieldScope(
547
- "autoStart",
548
- globalCfg,
549
- localCfg
550
- );
551
- const autoStartVal = getMergedMemoryValue(
552
- "autoStart",
553
- globalCfg,
554
- localCfg
555
- );
556
- const embeddingScope = getMemoryFieldScope(
557
- "embedding",
558
- globalCfg,
559
- localCfg
560
- );
561
- const embeddingVal = getMergedMemoryValue(
562
- "embedding",
563
- globalCfg,
564
- localCfg
565
- );
566
- const daemonScope = getMemoryFieldScope("daemon", globalCfg, localCfg);
567
- const daemonVal = getMergedMemoryValue("daemon", globalCfg, localCfg);
568
- const choice = await select({
569
- message: "Memory settings:",
570
- choices: injectBackChoice(
571
- [
572
- {
573
- name: `Tier ${formatScopeLabel(tierScope)}${tierVal ? ` (${tierVal})` : ""}`,
574
- value: "tier"
575
- },
576
- {
577
- name: `Auto-capture ${formatScopeLabel(autoCaptureScope)}${autoCaptureVal !== void 0 ? ` (${autoCaptureVal})` : ""}`,
578
- value: "autoCapture"
579
- },
580
- {
581
- name: `Auto-start daemon ${formatScopeLabel(autoStartScope)}${autoStartVal !== void 0 ? ` (${autoStartVal})` : ""}`,
582
- value: "autoStart"
583
- },
584
- {
585
- name: `Embedding ${formatScopeLabel(embeddingScope)}${embeddingVal?.provider ? ` (${embeddingVal.provider})` : ""}`,
586
- value: "embedding"
587
- },
588
- {
589
- name: `Daemon timeout ${formatScopeLabel(daemonScope)}${daemonVal?.idleTimeout ? ` (${daemonVal.idleTimeout / 6e4}min)` : ""}`,
590
- value: "daemon"
591
- }
592
- ],
593
- "Back"
594
- )
595
- });
596
- if (choice === BACK) return;
597
- switch (choice) {
598
- case "tier":
599
- await editMemoryTier(globalCfg, localCfg);
600
- break;
601
- case "autoCapture":
602
- await editMemoryAutoCapture(globalCfg, localCfg);
603
- break;
604
- case "autoStart":
605
- await editMemoryAutoStart(globalCfg, localCfg);
606
- break;
607
- case "embedding":
608
- await editMemoryEmbedding(globalCfg, localCfg);
609
- break;
610
- case "daemon":
611
- await editMemoryDaemonTimeout(globalCfg, localCfg);
612
- break;
613
- }
614
- }
615
- }
616
378
  async function editStatusline() {
617
379
  const hookResult = findStatuslineHookPath();
618
380
  if (!hookResult) {
@@ -885,7 +647,7 @@ async function configCommand() {
885
647
  await learnSubMenu();
886
648
  break;
887
649
  case "memory":
888
- await memorySubMenu();
650
+ await memoryConfigMenu();
889
651
  break;
890
652
  case "statusline":
891
653
  await editStatusline();
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  isMarketplaceRegistered,
3
3
  isPluginInstalled
4
- } from "./chunk-YC6MBHCT.js";
4
+ } from "./chunk-JFGLNTZI.js";
5
5
  import {
6
6
  ensureStatusline
7
7
  } from "./chunk-ORACWEDN.js";
8
8
  import "./chunk-POC2WHU2.js";
9
9
  import {
10
10
  ensureShellCompletion
11
- } from "./chunk-VUAUAO2R.js";
11
+ } from "./chunk-NEQZP5D4.js";
12
12
  import {
13
13
  commandExists,
14
14
  run
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  isPluginDisabled,
3
3
  setPluginEnabled
4
- } from "./chunk-YC6MBHCT.js";
4
+ } from "./chunk-JFGLNTZI.js";
5
5
  import {
6
6
  resolveScope
7
7
  } from "./chunk-C5LYVVEI.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  isPluginDisabled,
3
3
  setPluginEnabled
4
- } from "./chunk-YC6MBHCT.js";
4
+ } from "./chunk-JFGLNTZI.js";
5
5
  import {
6
6
  resolveScope
7
7
  } from "./chunk-C5LYVVEI.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveDocsDir
3
- } from "./chunk-KTX4MGMR.js";
3
+ } from "./chunk-QMD7P67N.js";
4
4
  import {
5
5
  getLibPath
6
6
  } from "./chunk-RZRT7NGT.js";
package/dist/index.js CHANGED
@@ -14,35 +14,35 @@ 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-3QCRGPTY.js");
17
+ const { installCommand } = await import("./install-35IWHBIS.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) => {
21
- const { uninstallCommand } = await import("./uninstall-5LRHXFSF.js");
21
+ const { uninstallCommand } = await import("./uninstall-NNCEKPIE.js");
22
22
  await uninstallCommand(opts);
23
23
  });
24
24
  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").action(async (opts) => {
25
- const { disableCommand } = await import("./disable-R6K5YJN4.js");
25
+ const { disableCommand } = await import("./disable-XYZRE3TD.js");
26
26
  await disableCommand(opts);
27
27
  });
28
28
  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").action(async (opts) => {
29
- const { enableCommand } = await import("./enable-HF4PYVJN.js");
29
+ const { enableCommand } = await import("./enable-3NZBQWLQ.js");
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-2HLPKYXB.js");
33
+ const { initCommand } = await import("./init-ONUC6QMM.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-6SBGNTAQ.js");
37
+ const { configCommand } = await import("./config-UQXY45DN.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-SYZH3FVC.js");
41
+ const { hostCommand } = await import("./host-QDWBFJB2.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-TBEDYELW.js");
45
+ const { mcpCommand } = await import("./mcp-GFIOFXOL.js");
46
46
  await mcpCommand(path);
47
47
  });
48
48
  program.command("permission").description("Manage Claude Code permission rules for Coding Friend").option("--all", "Apply all recommended permissions without prompts").option("--user", "Save to user-level settings (~/.claude/settings.json)").option(
@@ -57,9 +57,13 @@ program.command("statusline").description("Setup coding-friend statusline in Cla
57
57
  await statuslineCommand();
58
58
  });
59
59
  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) => {
60
- const { updateCommand } = await import("./update-4YUSCBCB.js");
60
+ const { updateCommand } = await import("./update-NZ2HRWEN.js");
61
61
  await updateCommand(opts);
62
62
  });
63
+ program.command("status").description("Show comprehensive Coding Friend status").action(async () => {
64
+ const { statusCommand } = await import("./status-SENJZQ3G.js");
65
+ await statusCommand();
66
+ });
63
67
  var session = program.command("session").description("Save and load Claude Code sessions across machines");
64
68
  program.addHelpText(
65
69
  "after",
@@ -72,11 +76,11 @@ session.command("save").description("Save current Claude Code session to sync fo
72
76
  "-s, --session-id <id>",
73
77
  "session UUID to save (default: auto-detect newest)"
74
78
  ).option("-l, --label <label>", "label for this session").action(async (opts) => {
75
- const { sessionSaveCommand } = await import("./session-H4XW2WXH.js");
79
+ const { sessionSaveCommand } = await import("./session-JGRF5SNX.js");
76
80
  await sessionSaveCommand(opts);
77
81
  });
78
82
  session.command("load").description("Load a saved session from sync folder").action(async () => {
79
- const { sessionLoadCommand } = await import("./session-H4XW2WXH.js");
83
+ const { sessionLoadCommand } = await import("./session-JGRF5SNX.js");
80
84
  await sessionLoadCommand();
81
85
  });
82
86
  var memory = program.command("memory").description("AI memory system \u2014 store and search project knowledge");
@@ -88,46 +92,51 @@ Memory subcommands:
88
92
  memory search Search memories by query
89
93
  memory list List memories in current project (--projects for all DBs)
90
94
  memory rm Remove a project database (--project-id <id>, --all, or --prune)
91
- memory init Initialize Tier 1 (install SQLite deps, import existing memories)
95
+ memory init Initialize memory system (interactive wizard)
96
+ memory config Configure memory system settings
92
97
  memory start-daemon Start the memory daemon (Tier 2)
93
98
  memory stop-daemon Stop the memory daemon
94
99
  memory rebuild Rebuild the daemon search index
95
100
  memory mcp Show MCP server setup instructions`
96
101
  );
97
102
  memory.command("status").description("Show memory system status").action(async () => {
98
- const { memoryStatusCommand } = await import("./memory-BQK2R7BV.js");
103
+ const { memoryStatusCommand } = await import("./memory-47RXG7VL.js");
99
104
  await memoryStatusCommand();
100
105
  });
101
106
  memory.command("search").description("Search memories by query").argument("<query>", "search query").action(async (query) => {
102
- const { memorySearchCommand } = await import("./memory-BQK2R7BV.js");
107
+ const { memorySearchCommand } = await import("./memory-47RXG7VL.js");
103
108
  await memorySearchCommand(query);
104
109
  });
105
110
  memory.command("list").description(
106
111
  "List memories in current project, or all projects with --projects"
107
112
  ).option("--projects", "List all project databases with size and metadata").action(async (opts) => {
108
- const { memoryListCommand } = await import("./memory-BQK2R7BV.js");
113
+ const { memoryListCommand } = await import("./memory-47RXG7VL.js");
109
114
  await memoryListCommand(opts);
110
115
  });
111
116
  memory.command("init").description(
112
- "Initialize Tier 1 \u2014 install SQLite deps and import existing memories"
117
+ "Initialize memory system \u2014 interactive wizard (first time) or config menu"
113
118
  ).action(async () => {
114
- const { memoryInitCommand } = await import("./memory-BQK2R7BV.js");
119
+ const { memoryInitCommand } = await import("./memory-47RXG7VL.js");
115
120
  await memoryInitCommand();
116
121
  });
122
+ memory.command("config").description("Configure memory system settings").action(async () => {
123
+ const { memoryConfigCommand } = await import("./memory-47RXG7VL.js");
124
+ await memoryConfigCommand();
125
+ });
117
126
  memory.command("start-daemon").description("Start the memory daemon (Tier 2 \u2014 MiniSearch)").action(async () => {
118
- const { memoryStartDaemonCommand } = await import("./memory-BQK2R7BV.js");
127
+ const { memoryStartDaemonCommand } = await import("./memory-47RXG7VL.js");
119
128
  await memoryStartDaemonCommand();
120
129
  });
121
130
  memory.command("stop-daemon").description("Stop the memory daemon").action(async () => {
122
- const { memoryStopDaemonCommand } = await import("./memory-BQK2R7BV.js");
131
+ const { memoryStopDaemonCommand } = await import("./memory-47RXG7VL.js");
123
132
  await memoryStopDaemonCommand();
124
133
  });
125
134
  memory.command("rebuild").description("Rebuild the daemon search index").action(async () => {
126
- const { memoryRebuildCommand } = await import("./memory-BQK2R7BV.js");
135
+ const { memoryRebuildCommand } = await import("./memory-47RXG7VL.js");
127
136
  await memoryRebuildCommand();
128
137
  });
129
138
  memory.command("mcp").description("Show MCP server setup instructions").action(async () => {
130
- const { memoryMcpCommand } = await import("./memory-BQK2R7BV.js");
139
+ const { memoryMcpCommand } = await import("./memory-47RXG7VL.js");
131
140
  await memoryMcpCommand();
132
141
  });
133
142
  memory.command("rm").description("Remove a project database").option("--project-id <id>", "Project ID to remove").option("--all", "Remove all project databases").option(
@@ -135,7 +144,7 @@ memory.command("rm").description("Remove a project database").option("--project-
135
144
  "Remove orphaned projects (source dir missing or 0 memories)"
136
145
  ).action(
137
146
  async (opts) => {
138
- const { memoryRmCommand } = await import("./memory-BQK2R7BV.js");
147
+ const { memoryRmCommand } = await import("./memory-47RXG7VL.js");
139
148
  await memoryRmCommand(opts);
140
149
  }
141
150
  );
@@ -152,35 +161,35 @@ Dev subcommands:
152
161
  dev update [path] Update local dev plugin to latest version`
153
162
  );
154
163
  dev.command("on").description("Switch to local plugin source").argument("[path]", "path to local coding-friend repo (default: cwd)").action(async (path) => {
155
- const { devOnCommand } = await import("./dev-MC6TGHRT.js");
164
+ const { devOnCommand } = await import("./dev-7DLYIXBO.js");
156
165
  await devOnCommand(path);
157
166
  });
158
167
  dev.command("off").description("Switch back to remote marketplace").action(async () => {
159
- const { devOffCommand } = await import("./dev-MC6TGHRT.js");
168
+ const { devOffCommand } = await import("./dev-7DLYIXBO.js");
160
169
  await devOffCommand();
161
170
  });
162
171
  dev.command("status").description("Show current dev mode").action(async () => {
163
- const { devStatusCommand } = await import("./dev-MC6TGHRT.js");
172
+ const { devStatusCommand } = await import("./dev-7DLYIXBO.js");
164
173
  await devStatusCommand();
165
174
  });
166
175
  dev.command("sync").description(
167
176
  "Copy local source files to plugin cache (no version bump needed)"
168
177
  ).action(async () => {
169
- const { devSyncCommand } = await import("./dev-MC6TGHRT.js");
178
+ const { devSyncCommand } = await import("./dev-7DLYIXBO.js");
170
179
  await devSyncCommand();
171
180
  });
172
181
  dev.command("restart").description("Reinstall local dev plugin (off + on)").argument(
173
182
  "[path]",
174
183
  "path to local coding-friend repo (default: saved path or cwd)"
175
184
  ).action(async (path) => {
176
- const { devRestartCommand } = await import("./dev-MC6TGHRT.js");
185
+ const { devRestartCommand } = await import("./dev-7DLYIXBO.js");
177
186
  await devRestartCommand(path);
178
187
  });
179
188
  dev.command("update").description("Update local dev plugin to latest version (off + on)").argument(
180
189
  "[path]",
181
190
  "path to local coding-friend repo (default: saved path or cwd)"
182
191
  ).action(async (path) => {
183
- const { devUpdateCommand } = await import("./dev-MC6TGHRT.js");
192
+ const { devUpdateCommand } = await import("./dev-7DLYIXBO.js");
184
193
  await devUpdateCommand(path);
185
194
  });
186
195
  program.parse();
@@ -23,7 +23,7 @@ import {
23
23
  import {
24
24
  ensureShellCompletion,
25
25
  hasShellCompletion
26
- } from "./chunk-VUAUAO2R.js";
26
+ } from "./chunk-NEQZP5D4.js";
27
27
  import {
28
28
  BACK,
29
29
  applyDocsDirChange,
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  getLatestVersion,
3
3
  semverCompare
4
- } from "./chunk-A427XMWE.js";
4
+ } from "./chunk-PHQK2MMO.js";
5
5
  import {
6
6
  enableMarketplaceAutoUpdate,
7
7
  isMarketplaceRegistered,
8
8
  isPluginDisabled
9
- } from "./chunk-YC6MBHCT.js";
9
+ } from "./chunk-JFGLNTZI.js";
10
10
  import {
11
11
  getInstalledVersion
12
12
  } from "./chunk-ORACWEDN.js";
13
13
  import "./chunk-POC2WHU2.js";
14
14
  import {
15
15
  ensureShellCompletion
16
- } from "./chunk-VUAUAO2R.js";
16
+ } from "./chunk-NEQZP5D4.js";
17
17
  import {
18
18
  resolveScope
19
19
  } from "./chunk-C5LYVVEI.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveDocsDir
3
- } from "./chunk-KTX4MGMR.js";
3
+ } from "./chunk-QMD7P67N.js";
4
4
  import {
5
5
  getLibPath
6
6
  } from "./chunk-RZRT7NGT.js";