coding-friend-cli 1.39.0 → 1.40.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 (40) hide show
  1. package/README.md +5 -0
  2. package/dist/{chunk-ODW27NAC.js → chunk-B44ROTV6.js} +10 -10
  3. package/dist/{chunk-ZGIUKUL2.js → chunk-CZW36H3D.js} +39 -7
  4. package/dist/{chunk-FQUIO5BW.js → chunk-E4NBTQXR.js} +13 -7
  5. package/dist/{chunk-IV5OPG34.js → chunk-IYBIIRH4.js} +29 -1
  6. package/dist/{chunk-GTOEIGDM.js → chunk-KCBMCHSA.js} +295 -44
  7. package/dist/{chunk-463QKRBN.js → chunk-KG6HYBGD.js} +23 -7
  8. package/dist/{chunk-WJHQUCOF.js → chunk-KTUPGMIV.js} +111 -15
  9. package/dist/{chunk-7JQZRMOG.js → chunk-NIMO4VJW.js} +37 -6
  10. package/dist/{chunk-OFEC6OVI.js → chunk-OBCNHQFA.js} +42 -2
  11. package/dist/{chunk-4CPUWHIN.js → chunk-Q2QDSYQT.js} +1 -1
  12. package/dist/{chunk-JSH6BMVZ.js → chunk-RG3EMZH6.js} +11 -1
  13. package/dist/{chunk-2EY7VVFT.js → chunk-SUYE5S2W.js} +1 -1
  14. package/dist/{chunk-YPW67OGP.js → chunk-TFF47F7P.js} +1 -1
  15. package/dist/{chunk-ZZNTNIM4.js → chunk-TN3Y75WG.js} +2 -2
  16. package/dist/{chunk-VMODQCSL.js → chunk-Z5XTSF7L.js} +5 -5
  17. package/dist/{clean-LPWEBJJ5.js → clean-PKSSS662.js} +3 -3
  18. package/dist/{config-VNSC2NAY.js → config-2CH4GI2L.js} +47 -26
  19. package/dist/{dev-NRTDUQAR.js → dev-HWKNWOZY.js} +7 -7
  20. package/dist/{disable-NROSQUHR.js → disable-DCGVIHKG.js} +22 -8
  21. package/dist/{enable-26FFJGX5.js → enable-YYWJDOYB.js} +21 -8
  22. package/dist/{guide-HCLEOAGR.js → guide-45EIK76P.js} +1 -1
  23. package/dist/{host-2JOPHLN3.js → host-GZJSMJSF.js} +7 -7
  24. package/dist/index.js +67 -46
  25. package/dist/{init-MHHII5EP.js → init-TUBWQCBQ.js} +236 -53
  26. package/dist/{install-OEFJLAWA.js → install-45O5ICBA.js} +68 -11
  27. package/dist/{learn-SSNBBDY3.js → learn-AJT7Z6F7.js} +5 -5
  28. package/dist/{mcp-J5VO3OH7.js → mcp-JGBZMNWL.js} +26 -13
  29. package/dist/{mcp-serve-55DSE2J4.js → mcp-serve-SHS5MQRW.js} +5 -5
  30. package/dist/{mcp-serve-learn-EDBWNL4I.js → mcp-serve-learn-HXZZ3DUI.js} +6 -6
  31. package/dist/{memory-CDZKWOFL.js → memory-4NVLWOFS.js} +10 -10
  32. package/dist/{permission-DPKPA2HU.js → permission-L5QMNMID.js} +25 -25
  33. package/dist/{session-YWJDLNBP.js → session-GBHL5TH3.js} +3 -3
  34. package/dist/{status-4WMIQL7L.js → status-KQQJNSEZ.js} +33 -15
  35. package/dist/{statusline-R5BNYK3H.js → statusline-B7PXP3AQ.js} +3 -3
  36. package/dist/{uninstall-EV7362NK.js → uninstall-6QKNGLKK.js} +38 -13
  37. package/dist/{update-YQBBAIIF.js → update-YJ363TBU.js} +11 -11
  38. package/dist/{update-check-EJSGVGO6.js → update-check-5JZUJGUM.js} +1 -1
  39. package/package.json +1 -1
  40. 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-YPW67OGP.js";
5
+ } from "./chunk-TFF47F7P.js";
6
6
  import {
7
7
  loadConfig,
8
8
  resolveMemoryDir
9
- } from "./chunk-FQUIO5BW.js";
9
+ } from "./chunk-E4NBTQXR.js";
10
10
  import {
11
11
  getMemoryMcpStatus,
12
12
  isMemoryMcpRegistered,
13
13
  memoryConfigMenu,
14
14
  registerMemoryMcp
15
- } from "./chunk-ZGIUKUL2.js";
15
+ } from "./chunk-CZW36H3D.js";
16
16
  import {
17
17
  showConfigHint
18
- } from "./chunk-VMODQCSL.js";
18
+ } from "./chunk-Z5XTSF7L.js";
19
19
  import {
20
20
  getLibPath
21
- } from "./chunk-ZZNTNIM4.js";
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-IV5OPG34.js";
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-GTOEIGDM.js";
8
+ } from "./chunk-KCBMCHSA.js";
6
9
  import {
7
10
  BACK,
8
11
  askScope,
9
12
  formatScopeLabel,
10
13
  injectBackChoice
11
- } from "./chunk-VMODQCSL.js";
14
+ } from "./chunk-Z5XTSF7L.js";
12
15
  import {
13
16
  getLibPath
14
- } from "./chunk-ZZNTNIM4.js";
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-IV5OPG34.js";
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-IV5OPG34.js";
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
  };