coding-friend-cli 1.37.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/{chunk-GZT3YPAP.js → chunk-32UAW3NX.js} +1 -1
- package/dist/chunk-5QCGEPQO.js +238 -0
- package/dist/{chunk-YIXAQ4R2.js → chunk-6NXZKAOV.js} +1 -1
- package/dist/{chunk-676YCW6T.js → chunk-776ZY62N.js} +99 -7
- package/dist/{chunk-DP6DFQ4G.js → chunk-BXSCYGWE.js} +2 -2
- package/dist/{chunk-W6D3J5DX.js → chunk-CGEMETKQ.js} +8 -6
- package/dist/{chunk-XEKQW4RN.js → chunk-ETTZRJ55.js} +1 -1
- package/dist/{chunk-IKLMHJH6.js → chunk-GIH6E7GJ.js} +62 -1
- package/dist/{chunk-6S7352JG.js → chunk-ONG4KRYP.js} +1 -1
- package/dist/{chunk-X2H7JJMR.js → chunk-PLSJW7QJ.js} +29 -1
- package/dist/{chunk-O5ZKLFSL.js → chunk-RCE4OWNX.js} +1 -1
- package/dist/{chunk-PI4P34KF.js → chunk-RFNKPAJW.js} +3 -1
- package/dist/{clean-WEYQZB34.js → clean-YWEMYDE5.js} +2 -2
- package/dist/{config-ZMR2AOBB.js → config-NG7SICM4.js} +12 -24
- package/dist/{dev-IGHMMEP4.js → dev-PTBNMKZT.js} +3 -3
- package/dist/{disable-HL5OEURT.js → disable-MO7AXYYF.js} +20 -3
- package/dist/{enable-CZIOCKKJ.js → enable-4GXLQEHD.js} +20 -3
- package/dist/{guide-CO2V4ZLZ.js → guide-HCR43LJN.js} +1 -1
- package/dist/{host-SSRI4JZV.js → host-EV6QIVTI.js} +2 -2
- package/dist/index.js +59 -47
- package/dist/{init-6MFQWPOP.js → init-KYE5CJMW.js} +115 -12
- package/dist/{install-37NN4CQH.js → install-XAFQY5YF.js} +79 -6
- package/dist/{learn-OPH3CI67.js → learn-MC4VDHZH.js} +2 -2
- package/dist/{mcp-DWKVMNC7.js → mcp-FV6YX3ZT.js} +7 -7
- package/dist/{mcp-serve-5GODJ4DJ.js → mcp-serve-PXREYQRZ.js} +2 -2
- package/dist/{mcp-serve-learn-OF3ZJUJC.js → mcp-serve-learn-UVXIDOEZ.js} +1 -1
- package/dist/{memory-TRDLADUM.js → memory-DF7OUOTV.js} +6 -6
- package/dist/{permission-I3OFJUYA.js → permission-VISPGMUK.js} +38 -4
- package/dist/{permissions-J46VP6US.js → permissions-2SBACQHV.js} +2 -2
- package/dist/{session-S4WKA4P5.js → session-QK6OZO3X.js} +2 -2
- package/dist/{status-YZEOUX46.js → status-FVFTJ6GS.js} +11 -10
- package/dist/{statusline-KKFJPTI7.js → statusline-AOZHEQSV.js} +2 -2
- package/dist/{uninstall-AVA3J554.js → uninstall-MF6FRUBO.js} +51 -4
- package/dist/{update-Q3ACCK4Z.js → update-QNUCSDSA.js} +6 -5
- package/dist/{update-check-25SCLHZO.js → update-check-7LKJLJPM.js} +1 -1
- package/lib/cf-memory/src/lib/claude-md.ts +82 -70
- package/lib/cf-memory/src/lib/status-frame.ts +2 -2
- package/lib/cf-memory/src/tools/delete.ts +1 -1
- package/lib/cf-memory/src/tools/store.ts +6 -6
- package/lib/cf-memory/src/tools/update.ts +5 -11
- package/package.json +32 -4
- package/lib/cf-memory/README.md +0 -317
- package/lib/cf-memory/src/__tests__/claude-md.test.ts +0 -343
- package/lib/cf-memory/src/__tests__/daemon-client.test.ts +0 -146
- package/lib/cf-memory/src/__tests__/daemon-e2e.test.ts +0 -223
- package/lib/cf-memory/src/__tests__/daemon.test.ts +0 -407
- package/lib/cf-memory/src/__tests__/dedup.test.ts +0 -103
- package/lib/cf-memory/src/__tests__/embeddings.test.ts +0 -292
- package/lib/cf-memory/src/__tests__/lazy-install.test.ts +0 -210
- package/lib/cf-memory/src/__tests__/markdown-backend.test.ts +0 -450
- package/lib/cf-memory/src/__tests__/migration.test.ts +0 -255
- package/lib/cf-memory/src/__tests__/migrations.test.ts +0 -288
- package/lib/cf-memory/src/__tests__/minisearch-backend.test.ts +0 -262
- package/lib/cf-memory/src/__tests__/ollama.test.ts +0 -48
- package/lib/cf-memory/src/__tests__/project-id.test.ts +0 -43
- package/lib/cf-memory/src/__tests__/schema.test.ts +0 -128
- package/lib/cf-memory/src/__tests__/search.test.ts +0 -115
- package/lib/cf-memory/src/__tests__/sqlite-lazy-db.test.ts +0 -213
- package/lib/cf-memory/src/__tests__/status-frame.test.ts +0 -136
- package/lib/cf-memory/src/__tests__/temporal-decay.test.ts +0 -54
- package/lib/cf-memory/src/__tests__/tier.test.ts +0 -388
- package/lib/cf-memory/src/__tests__/tools.test.ts +0 -83
- package/lib/cf-memory/vitest.config.ts +0 -7
- package/lib/learn-host/.prettierignore +0 -4
- package/lib/learn-host/.prettierrc +0 -8
- package/lib/learn-host/README.md +0 -113
- package/lib/learn-host/eslint.config.mjs +0 -6
- package/lib/learn-mcp/README.md +0 -187
- package/lib/learn-mcp/src/__tests__/docs.test.ts +0 -117
- package/lib/learn-mcp/vitest.config.ts +0 -8
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
globalConfigPath,
|
|
12
12
|
localConfigPath,
|
|
13
13
|
resolvePath
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
15
15
|
import {
|
|
16
16
|
log
|
|
17
17
|
} from "./chunk-NREZK463.js";
|
|
@@ -107,6 +107,7 @@ var ConfigSchema = z.strictObject({
|
|
|
107
107
|
memory: MemoryConfigSchema.optional(),
|
|
108
108
|
review: ReviewConfigSchema.optional(),
|
|
109
109
|
autoApprove: z.boolean().optional(),
|
|
110
|
+
autoApproveCodex: z.boolean().optional(),
|
|
110
111
|
autoApproveIgnore: z.array(z.string()).optional(),
|
|
111
112
|
autoApproveAllowExtra: z.array(z.string()).optional(),
|
|
112
113
|
disableGUIPlan: z.boolean().optional(),
|
|
@@ -121,6 +122,7 @@ var KNOWN_KEYS = [
|
|
|
121
122
|
"memory",
|
|
122
123
|
"review",
|
|
123
124
|
"autoApprove",
|
|
125
|
+
"autoApproveCodex",
|
|
124
126
|
"autoApproveIgnore",
|
|
125
127
|
"autoApproveAllowExtra",
|
|
126
128
|
"disableGUIPlan",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadConfig,
|
|
3
3
|
resolveMemoryDir
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RFNKPAJW.js";
|
|
5
5
|
import "./chunk-3WIZA5OZ.js";
|
|
6
6
|
import "./chunk-EVGXUDX4.js";
|
|
7
7
|
import "./chunk-5UVDWG5L.js";
|
|
8
8
|
import {
|
|
9
9
|
resolvePath
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
11
11
|
import {
|
|
12
12
|
log,
|
|
13
13
|
printBanner
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getAllRules,
|
|
3
3
|
getExistingRules
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RCE4OWNX.js";
|
|
5
5
|
import {
|
|
6
6
|
listMdFilesRecursive
|
|
7
7
|
} from "./chunk-2DTXVMPQ.js";
|
|
8
8
|
import {
|
|
9
9
|
registerLearnMcp,
|
|
10
10
|
unregisterLearnMcp
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-6NXZKAOV.js";
|
|
12
12
|
import {
|
|
13
13
|
resolveLearnDir
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-RFNKPAJW.js";
|
|
15
15
|
import {
|
|
16
16
|
findStatuslineHookPath,
|
|
17
17
|
getCurrentAccountEmail,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
saveStatuslineConfig,
|
|
23
23
|
selectStatuslineComponents,
|
|
24
24
|
writeStatuslineSettings
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-ETTZRJ55.js";
|
|
26
26
|
import {
|
|
27
27
|
ALL_COMPONENT_IDS,
|
|
28
28
|
DEFAULT_CONFIG
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
} from "./chunk-667NMPN4.js";
|
|
35
35
|
import {
|
|
36
36
|
memoryConfigMenu
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-BXSCYGWE.js";
|
|
38
38
|
import "./chunk-RZRT7NGT.js";
|
|
39
39
|
import {
|
|
40
40
|
BACK,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
getScopeLabel,
|
|
46
46
|
injectBackChoice,
|
|
47
47
|
showConfigHint
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-GIH6E7GJ.js";
|
|
49
49
|
import "./chunk-EVGXUDX4.js";
|
|
50
50
|
import {
|
|
51
51
|
mergeJson,
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
globalConfigPath,
|
|
59
59
|
localConfigPath,
|
|
60
60
|
resolvePath
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
62
62
|
import {
|
|
63
63
|
log,
|
|
64
64
|
printBanner
|
|
@@ -448,11 +448,7 @@ async function editDisableGUIPlan(globalCfg, localCfg) {
|
|
|
448
448
|
writeToScope(scope, { disableGUIPlan: value });
|
|
449
449
|
}
|
|
450
450
|
async function editGuiPlanFormat(globalCfg, localCfg) {
|
|
451
|
-
const currentValue = getMergedValue(
|
|
452
|
-
"guiPlanFormat",
|
|
453
|
-
globalCfg,
|
|
454
|
-
localCfg
|
|
455
|
-
);
|
|
451
|
+
const currentValue = getMergedValue("guiPlanFormat", globalCfg, localCfg);
|
|
456
452
|
if (currentValue !== void 0) {
|
|
457
453
|
log.dim(`Current: ${currentValue}`);
|
|
458
454
|
}
|
|
@@ -476,16 +472,8 @@ async function planDocsSubMenu() {
|
|
|
476
472
|
while (true) {
|
|
477
473
|
const globalCfg = readJson(globalConfigPath());
|
|
478
474
|
const localCfg = readJson(localConfigPath());
|
|
479
|
-
const disableVal = getMergedValue(
|
|
480
|
-
|
|
481
|
-
globalCfg,
|
|
482
|
-
localCfg
|
|
483
|
-
);
|
|
484
|
-
const formatVal = getMergedValue(
|
|
485
|
-
"guiPlanFormat",
|
|
486
|
-
globalCfg,
|
|
487
|
-
localCfg
|
|
488
|
-
);
|
|
475
|
+
const disableVal = getMergedValue("disableGUIPlan", globalCfg, localCfg);
|
|
476
|
+
const formatVal = getMergedValue("guiPlanFormat", globalCfg, localCfg);
|
|
489
477
|
const choice = await select({
|
|
490
478
|
message: "Plan docs settings:",
|
|
491
479
|
choices: injectBackChoice(
|
|
@@ -553,7 +541,7 @@ async function editAutoApprove(globalCfg, localCfg) {
|
|
|
553
541
|
if (scope === "back") return;
|
|
554
542
|
writeToScope(scope, { autoApprove: value });
|
|
555
543
|
if (value) {
|
|
556
|
-
const { runDangerousRulesAudit } = await import("./permissions-
|
|
544
|
+
const { runDangerousRulesAudit } = await import("./permissions-2SBACQHV.js");
|
|
557
545
|
await runDangerousRulesAudit(
|
|
558
546
|
[
|
|
559
547
|
claudeProjectSettingsPath(),
|
|
@@ -749,7 +737,7 @@ async function editPermissions() {
|
|
|
749
737
|
)
|
|
750
738
|
});
|
|
751
739
|
if (choice === BACK) return;
|
|
752
|
-
const { permissionCommand } = await import("./permission-
|
|
740
|
+
const { permissionCommand } = await import("./permission-VISPGMUK.js");
|
|
753
741
|
switch (choice) {
|
|
754
742
|
case "interactive":
|
|
755
743
|
await permissionCommand({});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureStatusline
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ETTZRJ55.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-
|
|
11
|
+
} from "./chunk-32UAW3NX.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-
|
|
25
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
26
26
|
import {
|
|
27
27
|
log,
|
|
28
28
|
printBanner
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isPluginDisabled,
|
|
3
3
|
setPluginEnabled
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-32UAW3NX.js";
|
|
5
5
|
import {
|
|
6
|
+
isCodexPluginDisabled,
|
|
7
|
+
setCodexPluginEnabled
|
|
8
|
+
} from "./chunk-5QCGEPQO.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveHostFlags,
|
|
6
11
|
resolveScope
|
|
7
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GIH6E7GJ.js";
|
|
8
13
|
import "./chunk-EVGXUDX4.js";
|
|
9
14
|
import "./chunk-5UVDWG5L.js";
|
|
10
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-PLSJW7QJ.js";
|
|
11
16
|
import {
|
|
12
17
|
log
|
|
13
18
|
} from "./chunk-NREZK463.js";
|
|
@@ -15,6 +20,18 @@ import {
|
|
|
15
20
|
// src/commands/disable.ts
|
|
16
21
|
import chalk from "chalk";
|
|
17
22
|
async function disableCommand(opts = {}) {
|
|
23
|
+
const { host } = resolveHostFlags(opts);
|
|
24
|
+
if (host === "codex") {
|
|
25
|
+
if (isCodexPluginDisabled()) {
|
|
26
|
+
log.info("Coding Friend is already disabled for Codex.");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
log.step("Disabling Codex plugin...");
|
|
30
|
+
setCodexPluginEnabled(false);
|
|
31
|
+
log.success("Coding Friend disabled for Codex.");
|
|
32
|
+
log.dim("Restart Codex CLI for the change to take effect.");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
18
35
|
const scope = await resolveScope(
|
|
19
36
|
opts,
|
|
20
37
|
"Where should Coding Friend be disabled?"
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isPluginDisabled,
|
|
3
3
|
setPluginEnabled
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-32UAW3NX.js";
|
|
5
5
|
import {
|
|
6
|
+
isCodexPluginDisabled,
|
|
7
|
+
setCodexPluginEnabled
|
|
8
|
+
} from "./chunk-5QCGEPQO.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveHostFlags,
|
|
6
11
|
resolveScope
|
|
7
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GIH6E7GJ.js";
|
|
8
13
|
import "./chunk-EVGXUDX4.js";
|
|
9
14
|
import "./chunk-5UVDWG5L.js";
|
|
10
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-PLSJW7QJ.js";
|
|
11
16
|
import {
|
|
12
17
|
log
|
|
13
18
|
} from "./chunk-NREZK463.js";
|
|
@@ -15,6 +20,18 @@ import {
|
|
|
15
20
|
// src/commands/enable.ts
|
|
16
21
|
import chalk from "chalk";
|
|
17
22
|
async function enableCommand(opts = {}) {
|
|
23
|
+
const { host } = resolveHostFlags(opts);
|
|
24
|
+
if (host === "codex") {
|
|
25
|
+
if (!isCodexPluginDisabled()) {
|
|
26
|
+
log.info("Coding Friend is already enabled for Codex.");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
log.step("Enabling Codex plugin...");
|
|
30
|
+
setCodexPluginEnabled(true);
|
|
31
|
+
log.success("Coding Friend enabled for Codex.");
|
|
32
|
+
log.dim("Restart Codex CLI for the change to take effect.");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
18
35
|
const scope = await resolveScope(
|
|
19
36
|
opts,
|
|
20
37
|
"Where should Coding Friend be enabled?"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveLearnDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RFNKPAJW.js";
|
|
4
4
|
import "./chunk-3WIZA5OZ.js";
|
|
5
5
|
import {
|
|
6
6
|
getLibPath
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-5UVDWG5L.js";
|
|
15
15
|
import {
|
|
16
16
|
globalConfigPath
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
18
18
|
import {
|
|
19
19
|
log,
|
|
20
20
|
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-
|
|
4
|
+
} from "./chunk-PLSJW7QJ.js";
|
|
5
5
|
|
|
6
6
|
// src/index.ts
|
|
7
7
|
import { Command } from "commander";
|
|
@@ -42,28 +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
|
|
46
|
-
const { installCommand } = await import("./install-
|
|
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-XAFQY5YF.js");
|
|
47
47
|
await installCommand(opts);
|
|
48
48
|
});
|
|
49
|
-
program.command("uninstall").description("Uninstall the Coding Friend plugin from
|
|
50
|
-
|
|
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(
|
|
50
|
+
"--remove-marketplace",
|
|
51
|
+
"Also remove the host marketplace registration"
|
|
52
|
+
).action(async (opts) => {
|
|
53
|
+
const { uninstallCommand } = await import("./uninstall-MF6FRUBO.js");
|
|
51
54
|
await uninstallCommand(opts);
|
|
52
55
|
});
|
|
53
|
-
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) => {
|
|
54
|
-
const { disableCommand } = await import("./disable-
|
|
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");
|
|
55
58
|
await disableCommand(opts);
|
|
56
59
|
});
|
|
57
|
-
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) => {
|
|
58
|
-
const { enableCommand } = await import("./enable-
|
|
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");
|
|
59
62
|
await enableCommand(opts);
|
|
60
63
|
});
|
|
61
|
-
program.command("init").description("Initialize coding-friend in current project").
|
|
62
|
-
|
|
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(
|
|
65
|
+
"--trust-project",
|
|
66
|
+
"For Codex, mark the current project trusted in ~/.codex/config.toml"
|
|
67
|
+
).action(async (opts) => {
|
|
68
|
+
const { initCommand } = await import("./init-KYE5CJMW.js");
|
|
69
|
+
await initCommand(opts);
|
|
64
70
|
});
|
|
65
71
|
program.command("config").description("Manage Coding Friend configuration").action(async () => {
|
|
66
|
-
const { configCommand } = await import("./config-
|
|
72
|
+
const { configCommand } = await import("./config-NG7SICM4.js");
|
|
67
73
|
await configCommand();
|
|
68
74
|
});
|
|
69
75
|
var learn = program.command("learn").description("Manage learning docs \u2014 host as a website or push to git");
|
|
@@ -75,52 +81,58 @@ Learn subcommands:
|
|
|
75
81
|
learn push [path] Commit and push learning docs (only if learn dir is the git root)`
|
|
76
82
|
);
|
|
77
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) => {
|
|
78
|
-
const { hostCommand } = await import("./host-
|
|
84
|
+
const { hostCommand } = await import("./host-EV6QIVTI.js");
|
|
79
85
|
await hostCommand(path, opts);
|
|
80
86
|
});
|
|
81
87
|
learn.command("push").description("Commit and push learning docs to origin").argument("[path]", "path to docs folder").action(async (path) => {
|
|
82
|
-
const { learnPushCommand } = await import("./learn-
|
|
88
|
+
const { learnPushCommand } = await import("./learn-MC4VDHZH.js");
|
|
83
89
|
await learnPushCommand(path);
|
|
84
90
|
});
|
|
85
91
|
program.command("host", { hidden: true }).argument("[path]", "path to docs folder").option("-p, --port <port>", "port number", "3333").action(async (path, opts) => {
|
|
86
|
-
const { hostCommand } = await import("./host-
|
|
92
|
+
const { hostCommand } = await import("./host-EV6QIVTI.js");
|
|
87
93
|
await hostCommand(path, opts);
|
|
88
94
|
});
|
|
89
95
|
program.command("mcp").description("Setup MCP server for learning docs").action(async () => {
|
|
90
|
-
const { mcpCommand } = await import("./mcp-
|
|
96
|
+
const { mcpCommand } = await import("./mcp-FV6YX3ZT.js");
|
|
91
97
|
await mcpCommand();
|
|
92
98
|
});
|
|
93
99
|
program.command("mcp-serve").description(
|
|
94
100
|
"Start the cf-memory MCP server (used internally by npx). When memoryDir is omitted, resolves from CLAUDE_PROJECT_DIR at runtime."
|
|
95
101
|
).argument("[memoryDir]", "path to memory directory (optional)").action(async (memoryDir) => {
|
|
96
|
-
const { mcpServeCommand } = await import("./mcp-serve-
|
|
102
|
+
const { mcpServeCommand } = await import("./mcp-serve-PXREYQRZ.js");
|
|
97
103
|
await mcpServeCommand(memoryDir);
|
|
98
104
|
});
|
|
99
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) => {
|
|
100
|
-
const { mcpServeLearnCommand } = await import("./mcp-serve-learn-
|
|
106
|
+
const { mcpServeLearnCommand } = await import("./mcp-serve-learn-UVXIDOEZ.js");
|
|
101
107
|
await mcpServeLearnCommand(docsDir);
|
|
102
108
|
});
|
|
103
|
-
program.command("permission").description("Manage
|
|
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(
|
|
104
110
|
"--project",
|
|
105
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(
|
|
113
|
+
"--enable-auto-approve",
|
|
114
|
+
"For Codex, enable deterministic Coding Friend auto-approve"
|
|
115
|
+
).option(
|
|
116
|
+
"--disable-auto-approve",
|
|
117
|
+
"For Codex, disable deterministic Coding Friend auto-approve"
|
|
106
118
|
).action(async (opts) => {
|
|
107
|
-
const { permissionCommand } = await import("./permission-
|
|
119
|
+
const { permissionCommand } = await import("./permission-VISPGMUK.js");
|
|
108
120
|
await permissionCommand(opts);
|
|
109
121
|
});
|
|
110
122
|
program.command("statusline").description("Setup coding-friend statusline in Claude Code").action(async () => {
|
|
111
|
-
const { statuslineCommand } = await import("./statusline-
|
|
123
|
+
const { statuslineCommand } = await import("./statusline-AOZHEQSV.js");
|
|
112
124
|
await statuslineCommand();
|
|
113
125
|
});
|
|
114
|
-
program.command("update").description("Update coding-friend plugin, CLI, and statusline").option("--cli", "Update only the CLI (npm package)").option("--plugin", "Update only the
|
|
115
|
-
const { updateCommand } = await import("./update-
|
|
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-QNUCSDSA.js");
|
|
116
128
|
await updateCommand(opts);
|
|
117
129
|
});
|
|
118
130
|
program.command("status").description("Show comprehensive Coding Friend status").action(async () => {
|
|
119
|
-
const { statusCommand } = await import("./status-
|
|
131
|
+
const { statusCommand } = await import("./status-FVFTJ6GS.js");
|
|
120
132
|
await statusCommand();
|
|
121
133
|
});
|
|
122
134
|
program.command("clean").description("Clean files generated by Coding Friend in docs/").action(async () => {
|
|
123
|
-
const { cleanCommand } = await import("./clean-
|
|
135
|
+
const { cleanCommand } = await import("./clean-YWEMYDE5.js");
|
|
124
136
|
await cleanCommand();
|
|
125
137
|
});
|
|
126
138
|
var session = program.command("session").description("[beta] Save and load Claude Code sessions across machines");
|
|
@@ -135,11 +147,11 @@ session.command("save").description("Save current Claude Code session to sync fo
|
|
|
135
147
|
"-s, --session-id <id>",
|
|
136
148
|
"session UUID to save (default: auto-detect newest)"
|
|
137
149
|
).option("-l, --label <label>", "label for this session").action(async (opts) => {
|
|
138
|
-
const { sessionSaveCommand } = await import("./session-
|
|
150
|
+
const { sessionSaveCommand } = await import("./session-QK6OZO3X.js");
|
|
139
151
|
await sessionSaveCommand(opts);
|
|
140
152
|
});
|
|
141
153
|
session.command("load").description("Load a saved session from sync folder").action(async () => {
|
|
142
|
-
const { sessionLoadCommand } = await import("./session-
|
|
154
|
+
const { sessionLoadCommand } = await import("./session-QK6OZO3X.js");
|
|
143
155
|
await sessionLoadCommand();
|
|
144
156
|
});
|
|
145
157
|
var memory = program.command("memory").description("AI memory system \u2014 store and search project knowledge");
|
|
@@ -159,43 +171,43 @@ Memory subcommands:
|
|
|
159
171
|
memory mcp Show MCP server setup instructions`
|
|
160
172
|
);
|
|
161
173
|
memory.command("status").description("Show memory system status").action(async () => {
|
|
162
|
-
const { memoryStatusCommand } = await import("./memory-
|
|
174
|
+
const { memoryStatusCommand } = await import("./memory-DF7OUOTV.js");
|
|
163
175
|
await memoryStatusCommand();
|
|
164
176
|
});
|
|
165
177
|
memory.command("search").description("Search memories by query").argument("<query>", "search query").action(async (query) => {
|
|
166
|
-
const { memorySearchCommand } = await import("./memory-
|
|
178
|
+
const { memorySearchCommand } = await import("./memory-DF7OUOTV.js");
|
|
167
179
|
await memorySearchCommand(query);
|
|
168
180
|
});
|
|
169
181
|
memory.command("list").description(
|
|
170
182
|
"List memories in current project, or all projects with --projects"
|
|
171
183
|
).option("--projects", "List all project databases with size and metadata").action(async (opts) => {
|
|
172
|
-
const { memoryListCommand } = await import("./memory-
|
|
184
|
+
const { memoryListCommand } = await import("./memory-DF7OUOTV.js");
|
|
173
185
|
await memoryListCommand(opts);
|
|
174
186
|
});
|
|
175
187
|
memory.command("init").description(
|
|
176
188
|
"Initialize memory system \u2014 interactive wizard (first time) or config menu"
|
|
177
189
|
).action(async () => {
|
|
178
|
-
const { memoryInitCommand } = await import("./memory-
|
|
190
|
+
const { memoryInitCommand } = await import("./memory-DF7OUOTV.js");
|
|
179
191
|
await memoryInitCommand();
|
|
180
192
|
});
|
|
181
193
|
memory.command("config").description("Configure memory system settings").action(async () => {
|
|
182
|
-
const { memoryConfigCommand } = await import("./memory-
|
|
194
|
+
const { memoryConfigCommand } = await import("./memory-DF7OUOTV.js");
|
|
183
195
|
await memoryConfigCommand();
|
|
184
196
|
});
|
|
185
197
|
memory.command("start-daemon").description("Start the memory daemon (Tier 2 \u2014 MiniSearch)").action(async () => {
|
|
186
|
-
const { memoryStartDaemonCommand } = await import("./memory-
|
|
198
|
+
const { memoryStartDaemonCommand } = await import("./memory-DF7OUOTV.js");
|
|
187
199
|
await memoryStartDaemonCommand();
|
|
188
200
|
});
|
|
189
201
|
memory.command("stop-daemon").description("Stop the memory daemon").action(async () => {
|
|
190
|
-
const { memoryStopDaemonCommand } = await import("./memory-
|
|
202
|
+
const { memoryStopDaemonCommand } = await import("./memory-DF7OUOTV.js");
|
|
191
203
|
await memoryStopDaemonCommand();
|
|
192
204
|
});
|
|
193
205
|
memory.command("rebuild").description("Rebuild the daemon search index").action(async () => {
|
|
194
|
-
const { memoryRebuildCommand } = await import("./memory-
|
|
206
|
+
const { memoryRebuildCommand } = await import("./memory-DF7OUOTV.js");
|
|
195
207
|
await memoryRebuildCommand();
|
|
196
208
|
});
|
|
197
209
|
memory.command("mcp").description("Show MCP server setup instructions").action(async () => {
|
|
198
|
-
const { memoryMcpCommand } = await import("./memory-
|
|
210
|
+
const { memoryMcpCommand } = await import("./memory-DF7OUOTV.js");
|
|
199
211
|
await memoryMcpCommand();
|
|
200
212
|
});
|
|
201
213
|
memory.command("rm").description("Remove a project database").option("--project-id <id>", "Project ID to remove").option("--all", "Remove all project databases").option(
|
|
@@ -203,17 +215,17 @@ memory.command("rm").description("Remove a project database").option("--project-
|
|
|
203
215
|
"Remove orphaned projects (source dir missing or 0 memories)"
|
|
204
216
|
).action(
|
|
205
217
|
async (opts) => {
|
|
206
|
-
const { memoryRmCommand } = await import("./memory-
|
|
218
|
+
const { memoryRmCommand } = await import("./memory-DF7OUOTV.js");
|
|
207
219
|
await memoryRmCommand(opts);
|
|
208
220
|
}
|
|
209
221
|
);
|
|
210
222
|
var guide = program.command("guide").description("Manage custom skill guides");
|
|
211
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) => {
|
|
212
|
-
const { guideCreateCommand } = await import("./guide-
|
|
224
|
+
const { guideCreateCommand } = await import("./guide-HCR43LJN.js");
|
|
213
225
|
guideCreateCommand(skillName);
|
|
214
226
|
});
|
|
215
227
|
guide.command("list").description("List existing custom guides").action(async () => {
|
|
216
|
-
const { guideListCommand } = await import("./guide-
|
|
228
|
+
const { guideListCommand } = await import("./guide-HCR43LJN.js");
|
|
217
229
|
guideListCommand();
|
|
218
230
|
});
|
|
219
231
|
var dev = program.command("dev").description("Development mode commands");
|
|
@@ -229,28 +241,28 @@ Dev subcommands:
|
|
|
229
241
|
dev update [path] Update local dev plugin to latest version`
|
|
230
242
|
);
|
|
231
243
|
dev.command("on").description("Switch to local plugin source").argument("[path]", "path to local coding-friend repo (default: cwd)").action(async (path) => {
|
|
232
|
-
const { devOnCommand } = await import("./dev-
|
|
244
|
+
const { devOnCommand } = await import("./dev-PTBNMKZT.js");
|
|
233
245
|
await devOnCommand(path);
|
|
234
246
|
});
|
|
235
247
|
dev.command("off").description("Switch back to remote marketplace").action(async () => {
|
|
236
|
-
const { devOffCommand } = await import("./dev-
|
|
248
|
+
const { devOffCommand } = await import("./dev-PTBNMKZT.js");
|
|
237
249
|
await devOffCommand();
|
|
238
250
|
});
|
|
239
251
|
dev.command("status").description("Show current dev mode").action(async () => {
|
|
240
|
-
const { devStatusCommand } = await import("./dev-
|
|
252
|
+
const { devStatusCommand } = await import("./dev-PTBNMKZT.js");
|
|
241
253
|
await devStatusCommand();
|
|
242
254
|
});
|
|
243
255
|
dev.command("sync").description(
|
|
244
256
|
"Copy local source files to plugin cache (no version bump needed)"
|
|
245
257
|
).action(async () => {
|
|
246
|
-
const { devSyncCommand } = await import("./dev-
|
|
258
|
+
const { devSyncCommand } = await import("./dev-PTBNMKZT.js");
|
|
247
259
|
await devSyncCommand();
|
|
248
260
|
});
|
|
249
261
|
dev.command("restart").description("Reinstall local dev plugin (off + on)").argument(
|
|
250
262
|
"[path]",
|
|
251
263
|
"path to local coding-friend repo (default: saved path or cwd)"
|
|
252
264
|
).action(async (path) => {
|
|
253
|
-
const { devRestartCommand } = await import("./dev-
|
|
265
|
+
const { devRestartCommand } = await import("./dev-PTBNMKZT.js");
|
|
254
266
|
await devRestartCommand(path);
|
|
255
267
|
});
|
|
256
268
|
dev.command("update").description(
|
|
@@ -259,13 +271,13 @@ dev.command("update").description(
|
|
|
259
271
|
"[path]",
|
|
260
272
|
"path to local coding-friend repo (default: saved path or cwd)"
|
|
261
273
|
).action(async (path) => {
|
|
262
|
-
const { devUpdateCommand } = await import("./dev-
|
|
274
|
+
const { devUpdateCommand } = await import("./dev-PTBNMKZT.js");
|
|
263
275
|
await devUpdateCommand(path);
|
|
264
276
|
});
|
|
265
277
|
program.hook("postAction", async () => {
|
|
266
278
|
const topCmd = process.argv[2];
|
|
267
279
|
if (topCmd === "update") return;
|
|
268
|
-
const { checkAndNotifyCliUpdate } = await import("./update-check-
|
|
280
|
+
const { checkAndNotifyCliUpdate } = await import("./update-check-7LKJLJPM.js");
|
|
269
281
|
checkAndNotifyCliUpdate(pkg.version);
|
|
270
282
|
});
|
|
271
283
|
await program.parseAsync();
|