coding-friend-cli 1.39.1 → 1.40.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/README.md +5 -0
- package/dist/{chunk-ODW27NAC.js → chunk-B44ROTV6.js} +10 -10
- package/dist/{chunk-ZGIUKUL2.js → chunk-CZW36H3D.js} +39 -7
- package/dist/{chunk-FQUIO5BW.js → chunk-E4NBTQXR.js} +13 -7
- package/dist/{chunk-IV5OPG34.js → chunk-IYBIIRH4.js} +29 -1
- package/dist/{chunk-GTOEIGDM.js → chunk-KCBMCHSA.js} +295 -44
- package/dist/{chunk-463QKRBN.js → chunk-KG6HYBGD.js} +23 -7
- package/dist/{chunk-MO4SUPZN.js → chunk-KTUPGMIV.js} +97 -15
- package/dist/{chunk-7JQZRMOG.js → chunk-NIMO4VJW.js} +37 -6
- package/dist/{chunk-OFEC6OVI.js → chunk-OBCNHQFA.js} +42 -2
- package/dist/{chunk-4CPUWHIN.js → chunk-Q2QDSYQT.js} +1 -1
- package/dist/{chunk-RL3DCID7.js → chunk-RG3EMZH6.js} +1 -1
- package/dist/{chunk-2EY7VVFT.js → chunk-SUYE5S2W.js} +1 -1
- package/dist/{chunk-YPW67OGP.js → chunk-TFF47F7P.js} +1 -1
- package/dist/{chunk-ZZNTNIM4.js → chunk-TN3Y75WG.js} +2 -2
- package/dist/{chunk-VMODQCSL.js → chunk-Z5XTSF7L.js} +5 -5
- package/dist/{clean-LPWEBJJ5.js → clean-PKSSS662.js} +3 -3
- package/dist/{config-VNSC2NAY.js → config-WHEUK2LC.js} +47 -26
- package/dist/{dev-NRTDUQAR.js → dev-HWKNWOZY.js} +7 -7
- package/dist/{disable-6L352DMD.js → disable-DCGVIHKG.js} +22 -8
- package/dist/{enable-6KXREKRP.js → enable-YYWJDOYB.js} +21 -8
- package/dist/{guide-HCLEOAGR.js → guide-45EIK76P.js} +1 -1
- package/dist/{host-2JOPHLN3.js → host-GZJSMJSF.js} +7 -7
- package/dist/index.js +67 -46
- package/dist/{init-VENKICVP.js → init-TUBWQCBQ.js} +236 -53
- package/dist/{install-A4TSBGOV.js → install-45O5ICBA.js} +68 -11
- package/dist/{learn-SSNBBDY3.js → learn-AJT7Z6F7.js} +5 -5
- package/dist/{mcp-J5VO3OH7.js → mcp-JGBZMNWL.js} +26 -13
- package/dist/{mcp-serve-55DSE2J4.js → mcp-serve-IS4T24CV.js} +8 -10
- package/dist/{mcp-serve-learn-EDBWNL4I.js → mcp-serve-learn-HXZZ3DUI.js} +6 -6
- package/dist/{memory-CDZKWOFL.js → memory-4NVLWOFS.js} +10 -10
- package/dist/{permission-DPKPA2HU.js → permission-DDBMBFJV.js} +26 -26
- package/dist/{session-YWJDLNBP.js → session-GBHL5TH3.js} +3 -3
- package/dist/{status-ZOAYLVH6.js → status-KQQJNSEZ.js} +33 -15
- package/dist/{statusline-R5BNYK3H.js → statusline-B7PXP3AQ.js} +3 -3
- package/dist/{uninstall-TCMK2WNW.js → uninstall-6QKNGLKK.js} +38 -13
- package/dist/{update-6OYI5BAY.js → update-YJ363TBU.js} +11 -11
- package/dist/{update-check-EJSGVGO6.js → update-check-5JZUJGUM.js} +1 -1
- package/lib/learn-host/src/components/layout/Footer.tsx +1 -1
- package/package.json +1 -1
- package/dist/permissions-HZYUVKCY.js +0 -38
package/README.md
CHANGED
|
@@ -57,6 +57,7 @@ cf install --global # Same as --user
|
|
|
57
57
|
cf install --project # Install at project scope (shared via git)
|
|
58
58
|
cf install --local # Install at local scope (this machine only)
|
|
59
59
|
cf install --agent codex # Register/install Coding Friend for Codex CLI
|
|
60
|
+
cf install --agent agy # Google Antigravity (beta); alias --agy
|
|
60
61
|
# 💡 Safe to run multiple times (idempotent).
|
|
61
62
|
cf uninstall # Uninstall plugin (interactive scope chooser)
|
|
62
63
|
cf uninstall --user # Uninstall from user scope (full cleanup)
|
|
@@ -64,6 +65,7 @@ cf uninstall --global # Same as --user
|
|
|
64
65
|
cf uninstall --project # Uninstall from project scope only
|
|
65
66
|
cf uninstall --local # Uninstall from local scope only
|
|
66
67
|
cf uninstall --agent codex # Disable Coding Friend in Codex CLI
|
|
68
|
+
cf uninstall --agent agy # Google Antigravity (beta); alias --agy
|
|
67
69
|
# 💡 Interactive — asks for confirmation before acting.
|
|
68
70
|
cf disable # Disable plugin (interactive scope chooser)
|
|
69
71
|
cf disable --user # Disable at user scope (all projects)
|
|
@@ -78,6 +80,7 @@ cf enable --project # Enable at project scope
|
|
|
78
80
|
cf enable --local # Enable at local scope
|
|
79
81
|
cf init # Initialize workspace (interactive)
|
|
80
82
|
cf init --agent codex # Initialize workspace for Codex CLI
|
|
83
|
+
cf init --agent agy # Google Antigravity (beta); alias --agy
|
|
81
84
|
# 💡 You can run this anywhere, anytime.
|
|
82
85
|
cf config # Manage Coding Friend configuration (interactive menu)
|
|
83
86
|
# 💡 Edit docsDir, language, learn settings, and more.
|
|
@@ -93,6 +96,7 @@ cf permission --all # Apply all recommended permissions without prompts
|
|
|
93
96
|
cf permission --user # Save to user-level settings (~/.claude/settings.json)
|
|
94
97
|
cf permission --project # Save to project-level settings (.claude/settings.local.json)
|
|
95
98
|
cf permission --agent codex --enable-auto-approve
|
|
99
|
+
cf permission --agent agy # Antigravity (beta); alias --agy
|
|
96
100
|
cf permission --all --user # Apply all recommended permissions to user settings
|
|
97
101
|
cf statusline # Setup coding-friend statusline
|
|
98
102
|
cf update # Update plugin + CLI + statusline
|
|
@@ -102,6 +106,7 @@ cf update --cli # Update only the CLI (npm package)
|
|
|
102
106
|
cf update --plugin # Update only the Claude Code plugin
|
|
103
107
|
cf update --statusline # Update only the statusline
|
|
104
108
|
cf update --agent codex # Update Codex marketplace/plugin cache
|
|
109
|
+
cf update --agent agy # Google Antigravity (beta); alias --agy
|
|
105
110
|
cf update --project # Update plugin at project scope
|
|
106
111
|
cf update --local # Update plugin at local scope
|
|
107
112
|
cf dev on [path] # Switch to local plugin source for development
|
|
@@ -2,35 +2,35 @@ import {
|
|
|
2
2
|
checkMemoryMcpHealth,
|
|
3
3
|
printHealthSection,
|
|
4
4
|
warnStaleMcpJson
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TFF47F7P.js";
|
|
6
6
|
import {
|
|
7
7
|
loadConfig,
|
|
8
8
|
resolveMemoryDir
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-E4NBTQXR.js";
|
|
10
10
|
import {
|
|
11
11
|
getMemoryMcpStatus,
|
|
12
12
|
isMemoryMcpRegistered,
|
|
13
13
|
memoryConfigMenu,
|
|
14
14
|
registerMemoryMcp
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-CZW36H3D.js";
|
|
16
16
|
import {
|
|
17
17
|
showConfigHint
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-Z5XTSF7L.js";
|
|
19
19
|
import {
|
|
20
20
|
getLibPath
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import {
|
|
23
|
-
run,
|
|
24
|
-
runWithStderr
|
|
25
|
-
} from "./chunk-EVGXUDX4.js";
|
|
21
|
+
} from "./chunk-TN3Y75WG.js";
|
|
26
22
|
import {
|
|
27
23
|
mergeJson,
|
|
28
24
|
readJson
|
|
29
25
|
} from "./chunk-5UVDWG5L.js";
|
|
26
|
+
import {
|
|
27
|
+
run,
|
|
28
|
+
runWithStderr
|
|
29
|
+
} from "./chunk-EVGXUDX4.js";
|
|
30
30
|
import {
|
|
31
31
|
globalConfigPath,
|
|
32
32
|
localConfigPath
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-IYBIIRH4.js";
|
|
34
34
|
import {
|
|
35
35
|
log,
|
|
36
36
|
printBanner
|
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
|
+
readAgyMcpConfig,
|
|
2
3
|
readOmpMcpJson,
|
|
4
|
+
removeAgyMcpEntry,
|
|
3
5
|
removeOmpMcpEntry,
|
|
6
|
+
writeAgyMcpEntry,
|
|
4
7
|
writeOmpMcpEntry
|
|
5
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KCBMCHSA.js";
|
|
6
9
|
import {
|
|
7
10
|
BACK,
|
|
8
11
|
askScope,
|
|
9
12
|
formatScopeLabel,
|
|
10
13
|
injectBackChoice
|
|
11
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-Z5XTSF7L.js";
|
|
12
15
|
import {
|
|
13
16
|
getLibPath
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import {
|
|
16
|
-
runWithStderr
|
|
17
|
-
} from "./chunk-EVGXUDX4.js";
|
|
17
|
+
} from "./chunk-TN3Y75WG.js";
|
|
18
18
|
import {
|
|
19
19
|
mergeJson,
|
|
20
20
|
readJson,
|
|
21
21
|
writeJson
|
|
22
22
|
} from "./chunk-5UVDWG5L.js";
|
|
23
|
+
import {
|
|
24
|
+
runWithStderr
|
|
25
|
+
} from "./chunk-EVGXUDX4.js";
|
|
23
26
|
import {
|
|
24
27
|
claudeConfigDir,
|
|
25
28
|
globalConfigPath,
|
|
26
29
|
localConfigPath
|
|
27
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-IYBIIRH4.js";
|
|
28
31
|
import {
|
|
29
32
|
log
|
|
30
33
|
} from "./chunk-NREZK463.js";
|
|
@@ -35,10 +38,18 @@ var OMP_MEMORY_SERVER = {
|
|
|
35
38
|
command: "npx",
|
|
36
39
|
args: ["-y", "coding-friend-cli", "mcp-serve"]
|
|
37
40
|
};
|
|
41
|
+
var AGY_MEMORY_SERVER = {
|
|
42
|
+
command: "npx",
|
|
43
|
+
args: ["-y", "coding-friend-cli", "mcp-serve"]
|
|
44
|
+
};
|
|
38
45
|
function hasOmpMemoryEntry() {
|
|
39
46
|
const data = readOmpMcpJson();
|
|
40
47
|
return data !== null && MCP_NAME in data.mcpServers;
|
|
41
48
|
}
|
|
49
|
+
function hasAgyMemoryEntry() {
|
|
50
|
+
const data = readAgyMcpConfig();
|
|
51
|
+
return data !== null && MCP_NAME in data.mcpServers;
|
|
52
|
+
}
|
|
42
53
|
function registerMemoryMcp(host = "claude") {
|
|
43
54
|
if (host === "omp") {
|
|
44
55
|
try {
|
|
@@ -50,6 +61,16 @@ function registerMemoryMcp(host = "claude") {
|
|
|
50
61
|
return false;
|
|
51
62
|
}
|
|
52
63
|
}
|
|
64
|
+
if (host === "agy") {
|
|
65
|
+
try {
|
|
66
|
+
writeAgyMcpEntry(MCP_NAME, AGY_MEMORY_SERVER);
|
|
67
|
+
return true;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
const detail = error instanceof Error ? error.message : "unknown error";
|
|
70
|
+
log.warn(`Could not register MCP: ${detail}`);
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
53
74
|
const result = runWithStderr("claude", [
|
|
54
75
|
"mcp",
|
|
55
76
|
"add",
|
|
@@ -78,6 +99,7 @@ function registerMemoryMcp(host = "claude") {
|
|
|
78
99
|
}
|
|
79
100
|
function isMemoryMcpRegistered(host = "claude") {
|
|
80
101
|
if (host === "omp") return hasOmpMemoryEntry();
|
|
102
|
+
if (host === "agy") return hasAgyMemoryEntry();
|
|
81
103
|
const result = runWithStderr("claude", ["mcp", "get", MCP_NAME]);
|
|
82
104
|
return result.exitCode === 0;
|
|
83
105
|
}
|
|
@@ -92,6 +114,16 @@ function unregisterMemoryMcp(host = "claude") {
|
|
|
92
114
|
return false;
|
|
93
115
|
}
|
|
94
116
|
}
|
|
117
|
+
if (host === "agy") {
|
|
118
|
+
try {
|
|
119
|
+
removeAgyMcpEntry(MCP_NAME);
|
|
120
|
+
return !hasAgyMemoryEntry();
|
|
121
|
+
} catch (error) {
|
|
122
|
+
const detail = error instanceof Error ? error.message : "unknown error";
|
|
123
|
+
log.warn(`Could not unregister MCP: ${detail}`);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
95
127
|
const result = runWithStderr("claude", [
|
|
96
128
|
"mcp",
|
|
97
129
|
"remove",
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_CONFIG
|
|
3
3
|
} from "./chunk-3WIZA5OZ.js";
|
|
4
|
-
import {
|
|
5
|
-
run
|
|
6
|
-
} from "./chunk-EVGXUDX4.js";
|
|
7
4
|
import {
|
|
8
5
|
readJson
|
|
9
6
|
} from "./chunk-5UVDWG5L.js";
|
|
7
|
+
import {
|
|
8
|
+
run
|
|
9
|
+
} from "./chunk-EVGXUDX4.js";
|
|
10
10
|
import {
|
|
11
11
|
globalConfigPath,
|
|
12
12
|
localConfigPath,
|
|
13
13
|
resolvePath
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IYBIIRH4.js";
|
|
15
15
|
import {
|
|
16
16
|
log
|
|
17
17
|
} from "./chunk-NREZK463.js";
|
|
@@ -112,9 +112,10 @@ var ConfigSchema = z.strictObject({
|
|
|
112
112
|
memory: MemoryConfigSchema.optional(),
|
|
113
113
|
review: ReviewConfigSchema.optional(),
|
|
114
114
|
autoApprove: z.boolean().optional(),
|
|
115
|
-
autoApproveCodex: z.boolean().optional(),
|
|
116
115
|
autoApproveIgnore: z.array(z.string()).optional(),
|
|
117
116
|
autoApproveAllowExtra: z.array(z.string()).optional(),
|
|
117
|
+
privacyBlock: z.boolean().optional(),
|
|
118
|
+
scoutBlock: z.boolean().optional(),
|
|
118
119
|
disableGUIPlan: z.boolean().optional(),
|
|
119
120
|
guiPlanFormat: z.enum(["html", "md"]).optional()
|
|
120
121
|
});
|
|
@@ -127,12 +128,16 @@ var KNOWN_KEYS = [
|
|
|
127
128
|
"memory",
|
|
128
129
|
"review",
|
|
129
130
|
"autoApprove",
|
|
130
|
-
"autoApproveCodex",
|
|
131
131
|
"autoApproveIgnore",
|
|
132
132
|
"autoApproveAllowExtra",
|
|
133
|
+
"privacyBlock",
|
|
134
|
+
"scoutBlock",
|
|
133
135
|
"disableGUIPlan",
|
|
134
136
|
"guiPlanFormat"
|
|
135
137
|
];
|
|
138
|
+
var RENAMED_KEYS = {
|
|
139
|
+
autoApproveCodex: "autoApprove"
|
|
140
|
+
};
|
|
136
141
|
function suggestKey(unknown) {
|
|
137
142
|
let best = null;
|
|
138
143
|
let bestDist = Infinity;
|
|
@@ -172,8 +177,9 @@ function validateConfig(merged) {
|
|
|
172
177
|
for (const key of keys) {
|
|
173
178
|
const isNested = issue.path.length > 0;
|
|
174
179
|
const fullKey = isNested ? `${issue.path.join(".")}.${key}` : key;
|
|
180
|
+
const renamedTo = isNested ? void 0 : RENAMED_KEYS[key];
|
|
175
181
|
const suggestion = isNested ? null : suggestKey(key);
|
|
176
|
-
const hint = suggestion ? ` Did you mean '${suggestion}'?` : "";
|
|
182
|
+
const hint = renamedTo ? ` It was replaced by '${renamedTo}' \u2014 set that instead.` : suggestion ? ` Did you mean '${suggestion}'?` : "";
|
|
177
183
|
log.warn(`Unknown config key '${fullKey}'.${hint}`);
|
|
178
184
|
stripPath(sanitized, [...issue.path, key]);
|
|
179
185
|
}
|
|
@@ -139,6 +139,28 @@ function ompProjectAgentsDir() {
|
|
|
139
139
|
function ompProjectExtensionsDir() {
|
|
140
140
|
return resolve(ompProjectDir(), "extensions");
|
|
141
141
|
}
|
|
142
|
+
function agyConfigRoot() {
|
|
143
|
+
const env = process.env.ANTIGRAVITY_HOME?.trim();
|
|
144
|
+
if (!env) return join(homedir(), ".gemini");
|
|
145
|
+
if (env === "~") return homedir();
|
|
146
|
+
if (env.startsWith("~/")) return join(homedir(), env.slice(2));
|
|
147
|
+
return env;
|
|
148
|
+
}
|
|
149
|
+
function agyConfigDir() {
|
|
150
|
+
return join(agyConfigRoot(), "config");
|
|
151
|
+
}
|
|
152
|
+
function agyPluginsDir() {
|
|
153
|
+
return join(agyConfigDir(), "plugins");
|
|
154
|
+
}
|
|
155
|
+
function agyPluginDir() {
|
|
156
|
+
return join(agyPluginsDir(), "coding-friend");
|
|
157
|
+
}
|
|
158
|
+
function agyConfigJsonPath() {
|
|
159
|
+
return join(agyConfigDir(), "config.json");
|
|
160
|
+
}
|
|
161
|
+
function agySourceCloneDir() {
|
|
162
|
+
return join(homedir(), ".coding-friend", "agy-src");
|
|
163
|
+
}
|
|
142
164
|
|
|
143
165
|
export {
|
|
144
166
|
resolvePath,
|
|
@@ -169,5 +191,11 @@ export {
|
|
|
169
191
|
ompProjectMcpJsonPath,
|
|
170
192
|
ompProjectConfigYmlPath,
|
|
171
193
|
ompProjectAgentsDir,
|
|
172
|
-
ompProjectExtensionsDir
|
|
194
|
+
ompProjectExtensionsDir,
|
|
195
|
+
agyConfigRoot,
|
|
196
|
+
agyConfigDir,
|
|
197
|
+
agyPluginsDir,
|
|
198
|
+
agyPluginDir,
|
|
199
|
+
agyConfigJsonPath,
|
|
200
|
+
agySourceCloneDir
|
|
173
201
|
};
|