@xmemo/client 0.4.155 → 0.4.157
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 +37 -7
- package/package.json +3 -2
- package/plugins/kiro/.kiro-plugin/power.json +35 -0
- package/plugins/kiro/CHANGELOG.md +9 -0
- package/plugins/kiro/LICENSE +7 -0
- package/plugins/kiro/POWER.md +147 -0
- package/plugins/kiro/README.md +31 -0
- package/plugins/kiro/SETUP.md +234 -0
- package/plugins/kiro/assets/logo.svg +27 -0
- package/plugins/kiro/mcp.json +7 -0
- package/plugins/kiro/steering/xmemo-memory.md +32 -0
- package/src/cli.js +23 -3996
- package/src/commands/auth.js +230 -0
- package/src/commands/diagnostics.js +197 -0
- package/src/commands/mcp.js +188 -0
- package/src/commands/profile.js +57 -0
- package/src/commands/setup.js +191 -0
- package/src/commands/update.js +58 -0
- package/src/config/env.js +82 -0
- package/src/config/paths.js +26 -0
- package/src/config/profile.js +533 -0
- package/src/core/args.js +63 -0
- package/src/core/constants.js +32 -0
- package/src/core/errors.js +6 -0
- package/src/core/io.js +16 -0
- package/src/core/runtime.js +144 -0
- package/src/core/version.js +1 -0
- package/src/mcp/clients/detect.js +51 -0
- package/src/mcp/clients/registry.js +68 -0
- package/src/mcp/clients.js +81 -0
- package/src/mcp/core/names.js +13 -0
- package/src/mcp/core/templates.js +156 -0
- package/src/mcp/formats/json.js +355 -0
- package/src/mcp/formats/toml.js +148 -0
- package/src/mcp/formats/yaml.js +72 -0
- package/src/mcp/identity/device.js +78 -0
- package/src/mcp/identity/paths.js +155 -0
- package/src/mcp/proxy/copilot.js +44 -0
- package/src/mcp/proxy/server.js +112 -0
- package/src/network/auth.js +200 -0
- package/src/network/base-url.js +13 -0
- package/src/network/discovery.js +103 -0
- package/src/network/http.js +161 -0
- package/src/ui/help.js +59 -0
- package/src/ui/setup.js +244 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hasFlag,
|
|
3
|
+
optionValue,
|
|
4
|
+
parsePositiveInteger,
|
|
5
|
+
stringValue
|
|
6
|
+
} from '../core/args.js';
|
|
7
|
+
import { baseUrlOption } from '../network/base-url.js';
|
|
8
|
+
import {
|
|
9
|
+
DEFAULT_PROXY_PORT
|
|
10
|
+
} from '../core/constants.js';
|
|
11
|
+
import {
|
|
12
|
+
buildSetupPlan,
|
|
13
|
+
ensureDiscoveryService
|
|
14
|
+
} from '../network/discovery.js';
|
|
15
|
+
import { UsageError } from '../core/errors.js';
|
|
16
|
+
import {
|
|
17
|
+
endpointUrl,
|
|
18
|
+
fetchJson,
|
|
19
|
+
normalizeBaseUrl
|
|
20
|
+
} from '../network/http.js';
|
|
21
|
+
import { writeLine } from '../core/io.js';
|
|
22
|
+
import {
|
|
23
|
+
MCP_CLIENTS,
|
|
24
|
+
supportedMcpClients
|
|
25
|
+
} from '../mcp/clients.js';
|
|
26
|
+
import { mergeCopilotMcpConfig } from '../mcp/proxy/copilot.js';
|
|
27
|
+
import { detectClient } from '../mcp/clients/detect.js';
|
|
28
|
+
import {
|
|
29
|
+
agentIdentity,
|
|
30
|
+
envReferenceIdentity
|
|
31
|
+
} from '../mcp/identity/device.js';
|
|
32
|
+
import {
|
|
33
|
+
confirmProfileInstall,
|
|
34
|
+
defaultProfileTarget,
|
|
35
|
+
profileClientConfig,
|
|
36
|
+
profileInstallResult
|
|
37
|
+
} from '../config/profile.js';
|
|
38
|
+
import {
|
|
39
|
+
clientSetupPlan,
|
|
40
|
+
copilotSetupPlan,
|
|
41
|
+
normalizeSetupClientId,
|
|
42
|
+
positionalClientArg,
|
|
43
|
+
supportedSetupClientIds,
|
|
44
|
+
writeSetupSummary
|
|
45
|
+
} from '../ui/setup.js';
|
|
46
|
+
|
|
47
|
+
export async function setupCommand(args, io) {
|
|
48
|
+
const positionalClientId = positionalClientArg(args, MCP_CLIENTS);
|
|
49
|
+
const optionArgs = positionalClientId ? args.slice(1) : args;
|
|
50
|
+
const baseUrl = normalizeBaseUrl(baseUrlOption(optionArgs, io.env));
|
|
51
|
+
const outputJson = hasFlag(optionArgs, '--json');
|
|
52
|
+
const shortClientSetup = Boolean(positionalClientId);
|
|
53
|
+
const setupAll = hasFlag(optionArgs, '--all');
|
|
54
|
+
|
|
55
|
+
let clientId = null;
|
|
56
|
+
try {
|
|
57
|
+
clientId = normalizeSetupClientId(positionalClientId ?? optionValue(optionArgs, '--client'), MCP_CLIENTS);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
if (!setupAll) {
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (setupAll && clientId) {
|
|
65
|
+
throw new UsageError('Cannot specify both --all and a specific client.');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const dryRun = hasFlag(optionArgs, '--dry-run') || hasFlag(optionArgs, '--preview');
|
|
69
|
+
const writeConfig = !dryRun && (hasFlag(optionArgs, '--write') || hasFlag(optionArgs, '--yes') || shortClientSetup || (setupAll && (hasFlag(optionArgs, '--write') || hasFlag(optionArgs, '--yes'))));
|
|
70
|
+
const timeoutMs = parsePositiveInteger(optionValue(optionArgs, '--timeout-ms') ?? '5000', '--timeout-ms');
|
|
71
|
+
|
|
72
|
+
if (writeConfig && !clientId && !setupAll) {
|
|
73
|
+
throw new UsageError(`Setup --write requires --client <${supportedSetupClientIds(MCP_CLIENTS).join('|')}> or --all so the CLI never writes broad config implicitly.`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const discoveryUrl = endpointUrl(baseUrl, '/.well-known/memory-os.json');
|
|
77
|
+
const discovery = await fetchJson(discoveryUrl, timeoutMs, io);
|
|
78
|
+
ensureDiscoveryService(discovery, discoveryUrl);
|
|
79
|
+
|
|
80
|
+
const statusUrl = stringValue(discovery, ['urls', 'onboarding_status'])
|
|
81
|
+
?? stringValue(discovery, ['onboarding_status_url'])
|
|
82
|
+
?? endpointUrl(baseUrl, '/v1/onboarding/status');
|
|
83
|
+
const status = await fetchJson(statusUrl, timeoutMs, io);
|
|
84
|
+
const setupPlan = buildSetupPlan({
|
|
85
|
+
baseUrl,
|
|
86
|
+
discoveryUrl,
|
|
87
|
+
statusUrl,
|
|
88
|
+
discovery,
|
|
89
|
+
status,
|
|
90
|
+
localClients: supportedMcpClients()
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
if (setupAll) {
|
|
94
|
+
setupPlan.detectedClients = [];
|
|
95
|
+
const scanIds = ['codex', 'cursor', 'copilot-cli', 'gemini-cli', 'antigravity', 'antigravity-ide', 'antigravity2', 'antigravity-cli', 'windsurf', 'cline', 'continue', 'claude-desktop', 'qwen', 'opencode', 'trae', 'trae-solo'];
|
|
96
|
+
for (const scanId of scanIds) {
|
|
97
|
+
const detection = await detectClient(scanId, io.env, MCP_CLIENTS);
|
|
98
|
+
if (detection.detected) {
|
|
99
|
+
let clientPlan;
|
|
100
|
+
if (scanId === 'copilot-cli') {
|
|
101
|
+
const proxyPort = parsePositiveInteger(optionValue(optionArgs, '--port') ?? String(DEFAULT_PROXY_PORT), '--port');
|
|
102
|
+
clientPlan = copilotSetupPlan(setupPlan.mcpUrl, proxyPort, io.env);
|
|
103
|
+
clientPlan.configPath = detection.path;
|
|
104
|
+
if (writeConfig) {
|
|
105
|
+
await mergeCopilotMcpConfig(clientPlan.configPath, clientPlan.proxyUrl);
|
|
106
|
+
clientPlan.written = true;
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
const client = MCP_CLIENTS.get(scanId);
|
|
110
|
+
const identity = writeConfig ? await agentIdentity(scanId, io.env) : envReferenceIdentity(scanId);
|
|
111
|
+
clientPlan = clientSetupPlan(scanId, client, setupPlan.mcpUrl, io.env, identity);
|
|
112
|
+
clientPlan.configPath = detection.path;
|
|
113
|
+
if (writeConfig) {
|
|
114
|
+
await client.writeConfig(clientPlan.configPath, setupPlan.mcpUrl, identity);
|
|
115
|
+
clientPlan.written = true;
|
|
116
|
+
if (profileClientConfig(scanId)) {
|
|
117
|
+
const installProfile = hasFlag(optionArgs, '--yes') || hasFlag(optionArgs, '--profile');
|
|
118
|
+
if (installProfile) {
|
|
119
|
+
const profileTarget = defaultProfileTarget(scanId, io.env);
|
|
120
|
+
const profileResult = await profileInstallResult(scanId, profileTarget, { write: true });
|
|
121
|
+
clientPlan.behaviorProfile = profileResult;
|
|
122
|
+
if (scanId === 'codex') {
|
|
123
|
+
clientPlan.codexProfile = profileResult;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
setupPlan.detectedClients.push(clientPlan);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
} else if (clientId) {
|
|
133
|
+
if (clientId === 'copilot-cli') {
|
|
134
|
+
const proxyPort = parsePositiveInteger(optionValue(optionArgs, '--port') ?? String(DEFAULT_PROXY_PORT), '--port');
|
|
135
|
+
setupPlan.selectedClient = copilotSetupPlan(setupPlan.mcpUrl, proxyPort, io.env);
|
|
136
|
+
if (writeConfig) {
|
|
137
|
+
await mergeCopilotMcpConfig(setupPlan.selectedClient.configPath, setupPlan.selectedClient.proxyUrl);
|
|
138
|
+
setupPlan.selectedClient.written = true;
|
|
139
|
+
}
|
|
140
|
+
} else {
|
|
141
|
+
const client = MCP_CLIENTS.get(clientId);
|
|
142
|
+
if (!client) {
|
|
143
|
+
throw new UsageError(`Unsupported MCP client: ${clientId}. Supported clients: ${supportedSetupClientIds(MCP_CLIENTS).join(', ')}.`);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const identity = writeConfig ? await agentIdentity(clientId, io.env) : envReferenceIdentity(clientId);
|
|
147
|
+
setupPlan.selectedClient = clientSetupPlan(clientId, client, setupPlan.mcpUrl, io.env, identity);
|
|
148
|
+
if (writeConfig) {
|
|
149
|
+
await client.writeConfig(setupPlan.selectedClient.configPath, setupPlan.mcpUrl, identity);
|
|
150
|
+
setupPlan.selectedClient.written = true;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (shortClientSetup && profileClientConfig(clientId)) {
|
|
154
|
+
const profileTarget = optionValue(optionArgs, '--profile-target')
|
|
155
|
+
?? optionValue(optionArgs, '--target')
|
|
156
|
+
?? defaultProfileTarget(clientId, io.env);
|
|
157
|
+
let installProfile = false;
|
|
158
|
+
let prompted = false;
|
|
159
|
+
let skipped = false;
|
|
160
|
+
if (hasFlag(optionArgs, '--no-profile')) {
|
|
161
|
+
skipped = true;
|
|
162
|
+
} else if (dryRun) {
|
|
163
|
+
installProfile = false;
|
|
164
|
+
} else if (writeConfig) {
|
|
165
|
+
installProfile = outputJson || hasFlag(optionArgs, '--yes') || hasFlag(optionArgs, '--profile');
|
|
166
|
+
if (!installProfile && !outputJson) {
|
|
167
|
+
prompted = true;
|
|
168
|
+
installProfile = await confirmProfileInstall(clientId, profileTarget, io);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const profileResult = await profileInstallResult(clientId, profileTarget, { write: installProfile });
|
|
172
|
+
profileResult.prompted = prompted;
|
|
173
|
+
profileResult.accepted = installProfile;
|
|
174
|
+
profileResult.skipped = skipped;
|
|
175
|
+
setupPlan.selectedClient.behaviorProfile = profileResult;
|
|
176
|
+
if (clientId === 'codex') {
|
|
177
|
+
setupPlan.selectedClient.codexProfile = profileResult;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (outputJson) {
|
|
184
|
+
writeLine(io.stdout, JSON.stringify(setupPlan, null, 2));
|
|
185
|
+
return 0;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
writeSetupSummary(setupPlan, io);
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { hasFlag } from '../core/args.js';
|
|
2
|
+
import {
|
|
3
|
+
COMMAND_NAME,
|
|
4
|
+
PACKAGE_NAME
|
|
5
|
+
} from '../core/constants.js';
|
|
6
|
+
import { UsageError } from '../core/errors.js';
|
|
7
|
+
import { writeLine } from '../core/io.js';
|
|
8
|
+
import {
|
|
9
|
+
npmExecutable,
|
|
10
|
+
runProcess
|
|
11
|
+
} from '../core/runtime.js';
|
|
12
|
+
|
|
13
|
+
export async function updateCommand(args, io) {
|
|
14
|
+
const outputJson = hasFlag(args, '--json');
|
|
15
|
+
const dryRun = hasFlag(args, '--dry-run');
|
|
16
|
+
const npmCommand = npmExecutable();
|
|
17
|
+
const npmArgs = ['install', '-g', `${PACKAGE_NAME}@latest`];
|
|
18
|
+
const report = {
|
|
19
|
+
package: PACKAGE_NAME,
|
|
20
|
+
command: [npmCommand, ...npmArgs],
|
|
21
|
+
dryRun,
|
|
22
|
+
tokenSent: false,
|
|
23
|
+
projectFilesModified: false
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const commandToDisplay = report.command.map(c => c === 'npm.cmd' ? 'npm' : c).join(' ');
|
|
27
|
+
|
|
28
|
+
if (dryRun) {
|
|
29
|
+
if (outputJson) {
|
|
30
|
+
writeLine(io.stdout, JSON.stringify(report, null, 2));
|
|
31
|
+
} else {
|
|
32
|
+
writeLine(io.stdout, `Update command: ${commandToDisplay}`);
|
|
33
|
+
writeLine(io.stdout, 'Dry run only; no changes made.');
|
|
34
|
+
}
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!outputJson) {
|
|
39
|
+
writeLine(io.stdout, `Updating ${PACKAGE_NAME} to the latest version...`);
|
|
40
|
+
writeLine(io.stdout, `Running: ${commandToDisplay}`);
|
|
41
|
+
}
|
|
42
|
+
const result = await runProcess(npmCommand, npmArgs, io, { stream: !outputJson });
|
|
43
|
+
report.exitCode = result.code;
|
|
44
|
+
report.completed = result.code === 0;
|
|
45
|
+
|
|
46
|
+
if (outputJson) {
|
|
47
|
+
writeLine(io.stdout, JSON.stringify(report, null, 2));
|
|
48
|
+
}
|
|
49
|
+
if (result.code !== 0) {
|
|
50
|
+
const detail = result.stderr.trim() || result.stdout.trim() || `exit code ${result.code}`;
|
|
51
|
+
throw new UsageError(`Update failed: ${detail}`);
|
|
52
|
+
}
|
|
53
|
+
if (!outputJson) {
|
|
54
|
+
writeLine(io.stdout, `Update complete. Run \`${COMMAND_NAME} --version\` to confirm.`);
|
|
55
|
+
}
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { hasFlag, optionValue } from '../core/args.js';
|
|
2
|
+
import { baseUrlOption } from '../network/base-url.js';
|
|
3
|
+
import {
|
|
4
|
+
AGENT_ID_ENV_VAR,
|
|
5
|
+
AGENT_INSTANCE_ENV_VAR,
|
|
6
|
+
COMMAND_NAME,
|
|
7
|
+
PRODUCT_NAME,
|
|
8
|
+
TOKEN_ENV_VAR
|
|
9
|
+
} from '../core/constants.js';
|
|
10
|
+
import { UsageError } from '../core/errors.js';
|
|
11
|
+
import { normalizeBaseUrl } from '../network/http.js';
|
|
12
|
+
import { writeLine } from '../core/io.js';
|
|
13
|
+
|
|
14
|
+
export function envCommand(args, io) {
|
|
15
|
+
const subcommand = args[0] ?? 'help';
|
|
16
|
+
if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
|
|
17
|
+
writeLine(io.stdout, 'Env commands:');
|
|
18
|
+
writeLine(io.stdout, ` ${COMMAND_NAME} env example [--shell bash|powershell|cmd] [--base-url <url>] [--json]`);
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
if (subcommand !== 'example') {
|
|
22
|
+
throw new UsageError(`Unknown env command: ${subcommand}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const baseUrl = normalizeBaseUrl(baseUrlOption(args.slice(1), io.env));
|
|
26
|
+
const outputJson = hasFlag(args, '--json');
|
|
27
|
+
const shell = optionValue(args, '--shell') ?? (process.platform === 'win32' ? 'powershell' : 'bash');
|
|
28
|
+
const placeholder = '<paste-token-from-your-secret-store>';
|
|
29
|
+
const payload = {
|
|
30
|
+
XMEMO_URL: baseUrl,
|
|
31
|
+
XMEMO_BASE_URL: baseUrl,
|
|
32
|
+
MEMORY_OS_URL: baseUrl,
|
|
33
|
+
MEMORY_OS_BASE_URL: baseUrl,
|
|
34
|
+
[TOKEN_ENV_VAR]: placeholder,
|
|
35
|
+
[AGENT_ID_ENV_VAR]: '<agent-family>',
|
|
36
|
+
[AGENT_INSTANCE_ENV_VAR]: '<stable-random-id-for-this-local-agent>'
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
if (outputJson) {
|
|
40
|
+
writeLine(io.stdout, JSON.stringify(payload, null, 2));
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (shell === 'powershell') {
|
|
45
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('XMEMO_URL', '${baseUrl}', 'User')`);
|
|
46
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('XMEMO_BASE_URL', '${baseUrl}', 'User')`);
|
|
47
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('MEMORY_OS_URL', '${baseUrl}', 'User')`);
|
|
48
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('MEMORY_OS_BASE_URL', '${baseUrl}', 'User')`);
|
|
49
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('${TOKEN_ENV_VAR}', '${placeholder}', 'User')`);
|
|
50
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('${AGENT_ID_ENV_VAR}', '<agent-family>', 'User')`);
|
|
51
|
+
writeLine(io.stdout, `[Environment]::SetEnvironmentVariable('${AGENT_INSTANCE_ENV_VAR}', '<stable-random-id-for-this-local-agent>', 'User')`);
|
|
52
|
+
} else if (shell === 'cmd') {
|
|
53
|
+
writeLine(io.stdout, `setx XMEMO_URL "${baseUrl}"`);
|
|
54
|
+
writeLine(io.stdout, `setx XMEMO_BASE_URL "${baseUrl}"`);
|
|
55
|
+
writeLine(io.stdout, `setx MEMORY_OS_URL "${baseUrl}"`);
|
|
56
|
+
writeLine(io.stdout, `setx MEMORY_OS_BASE_URL "${baseUrl}"`);
|
|
57
|
+
writeLine(io.stdout, `setx ${TOKEN_ENV_VAR} "${placeholder}"`);
|
|
58
|
+
writeLine(io.stdout, `setx ${AGENT_ID_ENV_VAR} "<agent-family>"`);
|
|
59
|
+
writeLine(io.stdout, `setx ${AGENT_INSTANCE_ENV_VAR} "<stable-random-id-for-this-local-agent>"`);
|
|
60
|
+
} else {
|
|
61
|
+
writeLine(io.stdout, `export XMEMO_URL="${baseUrl}"`);
|
|
62
|
+
writeLine(io.stdout, `export XMEMO_BASE_URL="${baseUrl}"`);
|
|
63
|
+
writeLine(io.stdout, `export MEMORY_OS_URL="${baseUrl}"`);
|
|
64
|
+
writeLine(io.stdout, `export MEMORY_OS_BASE_URL="${baseUrl}"`);
|
|
65
|
+
writeLine(io.stdout, `export ${TOKEN_ENV_VAR}="${placeholder}"`);
|
|
66
|
+
writeLine(io.stdout, `export ${AGENT_ID_ENV_VAR}="<agent-family>"`);
|
|
67
|
+
writeLine(io.stdout, `export ${AGENT_INSTANCE_ENV_VAR}="<stable-random-id-for-this-local-agent>"`);
|
|
68
|
+
}
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function writePrivacy(io) {
|
|
73
|
+
writeLine(io.stdout, `${PRODUCT_NAME} CLI privacy and security defaults:`);
|
|
74
|
+
writeLine(io.stdout, '- No telemetry or analytics.');
|
|
75
|
+
writeLine(io.stdout, '- `status` does not send tokens.');
|
|
76
|
+
writeLine(io.stdout, `- MCP configs reference ${TOKEN_ENV_VAR}; token values are not embedded.`);
|
|
77
|
+
writeLine(io.stdout, `- Agent instance IDs are non-secret and stored in user-scoped config outside git.`);
|
|
78
|
+
writeLine(io.stdout, '- `login` and `token add` store credentials in the user-scoped XMemo CLI config directory.');
|
|
79
|
+
writeLine(io.stdout, '- Legacy `token set` plaintext storage requires explicit --allow-plaintext.');
|
|
80
|
+
writeLine(io.stdout, '- npm publishing is restricted by package.json files whitelist.');
|
|
81
|
+
}
|
|
82
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export {
|
|
2
|
+
configRoot,
|
|
3
|
+
defaultAntigravity2ConfigPath,
|
|
4
|
+
defaultAntigravityCliConfigPath,
|
|
5
|
+
defaultAntigravityConfigPath,
|
|
6
|
+
defaultAntigravityIdeConfigPath,
|
|
7
|
+
defaultClaudeConfigPath,
|
|
8
|
+
defaultClaudecodeConfigPath,
|
|
9
|
+
defaultClineConfigPath,
|
|
10
|
+
defaultCodexConfigPath,
|
|
11
|
+
defaultContinueConfigPath,
|
|
12
|
+
defaultCopilotConfigPath,
|
|
13
|
+
defaultCursorConfigPath,
|
|
14
|
+
defaultGeminiConfigPath,
|
|
15
|
+
defaultHermesConfigPath,
|
|
16
|
+
defaultJetbrainsConfigPath,
|
|
17
|
+
defaultKiroConfigPath,
|
|
18
|
+
defaultOpencodeConfigPath,
|
|
19
|
+
defaultOpenclawConfigPath,
|
|
20
|
+
defaultQwenConfigPath,
|
|
21
|
+
defaultTraeConfigPath,
|
|
22
|
+
defaultTraeSoloConfigPath,
|
|
23
|
+
defaultWindsurfConfigPath,
|
|
24
|
+
defaultZedConfigPath
|
|
25
|
+
} from '../mcp/identity/paths.js';
|
|
26
|
+
|