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