memax-cli 0.1.0-alpha.9 → 0.1.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/assets/skills/memax-memory/SKILL.md +173 -0
- package/dist/commands/agent-configs.d.ts +41 -0
- package/dist/commands/agent-configs.d.ts.map +1 -0
- package/dist/commands/agent-configs.js +1290 -0
- package/dist/commands/agent-configs.js.map +1 -0
- package/dist/commands/agent-configs.test.d.ts +2 -0
- package/dist/commands/agent-configs.test.d.ts.map +1 -0
- package/dist/commands/agent-configs.test.js +122 -0
- package/dist/commands/agent-configs.test.js.map +1 -0
- package/dist/commands/agent-sessions.d.ts +74 -0
- package/dist/commands/agent-sessions.d.ts.map +1 -0
- package/dist/commands/agent-sessions.js +1513 -0
- package/dist/commands/agent-sessions.js.map +1 -0
- package/dist/commands/agent-sessions.test.d.ts +2 -0
- package/dist/commands/agent-sessions.test.d.ts.map +1 -0
- package/dist/commands/agent-sessions.test.js +255 -0
- package/dist/commands/agent-sessions.test.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +36 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/ask.d.ts +15 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +483 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +103 -8
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/capture.d.ts +19 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +69 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +13 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +15 -18
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/dreams.d.ts +22 -0
- package/dist/commands/dreams.d.ts.map +1 -0
- package/dist/commands/dreams.js +251 -0
- package/dist/commands/dreams.js.map +1 -0
- package/dist/commands/dreams.test.d.ts +2 -0
- package/dist/commands/dreams.test.d.ts.map +1 -0
- package/dist/commands/dreams.test.js +39 -0
- package/dist/commands/dreams.test.js.map +1 -0
- package/dist/commands/hook.d.ts +2 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +25 -103
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/hub.d.ts +37 -0
- package/dist/commands/hub.d.ts.map +1 -0
- package/dist/commands/hub.js +347 -0
- package/dist/commands/hub.js.map +1 -0
- package/dist/commands/hub.test.d.ts +2 -0
- package/dist/commands/hub.test.d.ts.map +1 -0
- package/dist/commands/hub.test.js +62 -0
- package/dist/commands/hub.test.js.map +1 -0
- package/dist/commands/import.d.ts +13 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +257 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/import.test.d.ts +2 -0
- package/dist/commands/import.test.d.ts.map +1 -0
- package/dist/commands/import.test.js +11 -0
- package/dist/commands/import.test.js.map +1 -0
- package/dist/commands/list.d.ts +9 -2
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +118 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/list.test.d.ts +2 -0
- package/dist/commands/list.test.d.ts.map +1 -0
- package/dist/commands/list.test.js +20 -0
- package/dist/commands/list.test.js.map +1 -0
- package/dist/commands/login.d.ts +7 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +81 -20
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +386 -65
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/push.d.ts +6 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +42 -8
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/recall.d.ts +11 -1
- package/dist/commands/recall.d.ts.map +1 -1
- package/dist/commands/recall.js +228 -41
- package/dist/commands/recall.js.map +1 -1
- package/dist/commands/recall.test.d.ts +2 -0
- package/dist/commands/recall.test.d.ts.map +1 -0
- package/dist/commands/recall.test.js +31 -0
- package/dist/commands/recall.test.js.map +1 -0
- package/dist/commands/setup-hooks.d.ts +13 -0
- package/dist/commands/setup-hooks.d.ts.map +1 -0
- package/dist/commands/setup-hooks.js +193 -0
- package/dist/commands/setup-hooks.js.map +1 -0
- package/dist/commands/setup-instructions.d.ts +21 -0
- package/dist/commands/setup-instructions.d.ts.map +1 -0
- package/dist/commands/setup-instructions.js +172 -0
- package/dist/commands/setup-instructions.js.map +1 -0
- package/dist/commands/setup-mcp.d.ts +40 -0
- package/dist/commands/setup-mcp.d.ts.map +1 -0
- package/dist/commands/setup-mcp.js +414 -0
- package/dist/commands/setup-mcp.js.map +1 -0
- package/dist/commands/setup-types.d.ts +33 -0
- package/dist/commands/setup-types.d.ts.map +1 -0
- package/dist/commands/setup-types.js +60 -0
- package/dist/commands/setup-types.js.map +1 -0
- package/dist/commands/setup.d.ts +10 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +216 -534
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/show.d.ts +5 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +36 -14
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/topic.d.ts +32 -0
- package/dist/commands/topic.d.ts.map +1 -0
- package/dist/commands/topic.js +265 -0
- package/dist/commands/topic.js.map +1 -0
- package/dist/commands/topic.test.d.ts +2 -0
- package/dist/commands/topic.test.d.ts.map +1 -0
- package/dist/commands/topic.test.js +114 -0
- package/dist/commands/topic.test.js.map +1 -0
- package/dist/index.js +35 -144
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +10 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +104 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/client.test.d.ts +2 -0
- package/dist/lib/client.test.d.ts.map +1 -0
- package/dist/lib/client.test.js +44 -0
- package/dist/lib/client.test.js.map +1 -0
- package/dist/lib/config.d.ts +43 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +72 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credentials.d.ts +3 -0
- package/dist/lib/credentials.d.ts.map +1 -1
- package/dist/lib/credentials.js +24 -2
- package/dist/lib/credentials.js.map +1 -1
- package/dist/lib/hubs.d.ts +7 -0
- package/dist/lib/hubs.d.ts.map +1 -0
- package/dist/lib/hubs.js +33 -0
- package/dist/lib/hubs.js.map +1 -0
- package/dist/lib/hubs.test.d.ts +2 -0
- package/dist/lib/hubs.test.d.ts.map +1 -0
- package/dist/lib/hubs.test.js +58 -0
- package/dist/lib/hubs.test.js.map +1 -0
- package/dist/lib/project-context.d.ts +56 -0
- package/dist/lib/project-context.d.ts.map +1 -0
- package/dist/lib/project-context.js +225 -0
- package/dist/lib/project-context.js.map +1 -0
- package/dist/lib/project-context.test.d.ts +2 -0
- package/dist/lib/project-context.test.d.ts.map +1 -0
- package/dist/lib/project-context.test.js +75 -0
- package/dist/lib/project-context.test.js.map +1 -0
- package/dist/lib/prompt.d.ts +7 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +41 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/trash.d.ts +6 -0
- package/dist/lib/trash.d.ts.map +1 -0
- package/dist/lib/trash.js +28 -0
- package/dist/lib/trash.js.map +1 -0
- package/package.json +17 -13
- package/.vscode/mcp.json +0 -8
- package/dist/commands/sync.d.ts +0 -12
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -414
- package/dist/commands/sync.js.map +0 -1
- package/dist/lib/api.d.ts +0 -4
- package/dist/lib/api.d.ts.map +0 -1
- package/dist/lib/api.js +0 -95
- package/dist/lib/api.js.map +0 -1
- package/src/commands/auth.ts +0 -92
- package/src/commands/config.ts +0 -27
- package/src/commands/delete.ts +0 -58
- package/src/commands/hook.ts +0 -243
- package/src/commands/list.ts +0 -38
- package/src/commands/login.ts +0 -164
- package/src/commands/mcp.ts +0 -405
- package/src/commands/push.ts +0 -137
- package/src/commands/recall.ts +0 -163
- package/src/commands/setup.ts +0 -1077
- package/src/commands/show.ts +0 -35
- package/src/commands/sync.ts +0 -506
- package/src/index.ts +0 -213
- package/src/lib/api.ts +0 -110
- package/src/lib/config.ts +0 -61
- package/src/lib/credentials.ts +0 -42
- package/tsconfig.json +0 -9
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { loadConfig } from "../lib/config.js";
|
|
6
|
+
import { getLocalAgentKey, saveLocalAgentKey } from "../lib/credentials.js";
|
|
7
|
+
import { resolveHubID } from "../lib/hubs.js";
|
|
8
|
+
import { commandExists, resolveMemaxBin, } from "./setup-types.js";
|
|
9
|
+
// --- Remote MCP setup ---
|
|
10
|
+
export function getApiUrl() {
|
|
11
|
+
return loadConfig().api_url;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets up MCP with OAuth discovery (no API key in config).
|
|
15
|
+
*
|
|
16
|
+
* The MCP client discovers auth endpoints via .well-known/oauth-protected-resource
|
|
17
|
+
* and .well-known/oauth-authorization-server, then completes the OAuth flow in
|
|
18
|
+
* the user's browser when it first connects. Agent identity is auto-detected
|
|
19
|
+
* from the OAuth client_name.
|
|
20
|
+
*
|
|
21
|
+
* Each agent gets its own config shape via agent.remoteEntry() — some use
|
|
22
|
+
* { type: "url" }, some use { type: "http" }, some use { httpUrl }, etc.
|
|
23
|
+
*/
|
|
24
|
+
export function setupMcpOAuth(agent) {
|
|
25
|
+
const mcpUrl = `${getApiUrl()}/mcp`;
|
|
26
|
+
// Claude Code uses its own CLI
|
|
27
|
+
if (agent.id === "claude-code") {
|
|
28
|
+
if (!commandExists("claude")) {
|
|
29
|
+
throw new Error("claude CLI not found in PATH");
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
execSync("claude mcp remove memax --scope user", { stdio: "pipe" });
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Not installed yet
|
|
36
|
+
}
|
|
37
|
+
// Claude Code HTTP transport — no auth header, OAuth auto-discovery
|
|
38
|
+
// --scope user so it's available across all projects
|
|
39
|
+
execSync(`claude mcp add memax --transport http ${mcpUrl} --scope user`, {
|
|
40
|
+
stdio: "pipe",
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Codex TOML
|
|
45
|
+
if (agent.format === "toml") {
|
|
46
|
+
mkdirSync(dirname(agent.configPath), { recursive: true });
|
|
47
|
+
let content = "";
|
|
48
|
+
if (existsSync(agent.configPath)) {
|
|
49
|
+
content = readFileSync(agent.configPath, "utf-8");
|
|
50
|
+
}
|
|
51
|
+
content = content.replace(/\[mcp_servers\.memax(?:\.\w+)*\][\s\S]*?(?=\n\[|$)/g, "");
|
|
52
|
+
content = content.trim();
|
|
53
|
+
if (content)
|
|
54
|
+
content += "\n\n";
|
|
55
|
+
content += `[mcp_servers.memax]\ntype = "url"\nurl = "${mcpUrl}"\n`;
|
|
56
|
+
writeFileSync(agent.configPath, content);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// JSON-based agents — per-agent config shape, no auth header
|
|
60
|
+
writeRemoteJsonConfig(agent, mcpUrl);
|
|
61
|
+
}
|
|
62
|
+
export async function ensureApiKey(hubId, agentName, opts = {}) {
|
|
63
|
+
try {
|
|
64
|
+
const resolvedHubID = hubId ? await resolveHubID(hubId) : undefined;
|
|
65
|
+
if (hubId && !resolvedHubID) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
if (resolvedHubID && opts.agentSync) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const { getClient } = await import("../lib/client.js");
|
|
72
|
+
const name = agentName
|
|
73
|
+
? `mcp-${agentName}${resolvedHubID ? `-hub-${resolvedHubID.slice(0, 8)}` : ""}`
|
|
74
|
+
: resolvedHubID
|
|
75
|
+
? `mcp-setup-hub-${resolvedHubID.slice(0, 8)}`
|
|
76
|
+
: "mcp-setup";
|
|
77
|
+
const scopes = ["read"];
|
|
78
|
+
if (!opts.readOnly)
|
|
79
|
+
scopes.push("write");
|
|
80
|
+
if (opts.allowOrganize)
|
|
81
|
+
scopes.push("organize");
|
|
82
|
+
if (opts.allowDelete)
|
|
83
|
+
scopes.push("delete");
|
|
84
|
+
if (opts.agentSync)
|
|
85
|
+
scopes.push("agent-sync");
|
|
86
|
+
const result = await getClient().auth.createKey({
|
|
87
|
+
name,
|
|
88
|
+
hubId: resolvedHubID,
|
|
89
|
+
agentName: agentName || undefined,
|
|
90
|
+
expiresInDays: 90,
|
|
91
|
+
scopes,
|
|
92
|
+
trustLevel: resolvedHubID ? "standard" : "elevated",
|
|
93
|
+
});
|
|
94
|
+
return result.key;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function ensureLocalAgentKey(agentName) {
|
|
101
|
+
const existing = getLocalAgentKey(agentName);
|
|
102
|
+
if (existing) {
|
|
103
|
+
return existing;
|
|
104
|
+
}
|
|
105
|
+
const created = await ensureApiKey(undefined, agentName);
|
|
106
|
+
if (!created) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
console.log(chalk.yellow(` Creating new local key for ${agentName}. If you had a previous key, revoke it from Memax Settings.`));
|
|
110
|
+
saveLocalAgentKey(agentName, created);
|
|
111
|
+
return created;
|
|
112
|
+
}
|
|
113
|
+
export function setupMcpRemote(agent, apiKey) {
|
|
114
|
+
const mcpUrl = `${getApiUrl()}/mcp`;
|
|
115
|
+
const authHeaders = { Authorization: `Bearer ${apiKey}` };
|
|
116
|
+
// Claude Code uses its own CLI
|
|
117
|
+
if (agent.id === "claude-code") {
|
|
118
|
+
if (!commandExists("claude")) {
|
|
119
|
+
throw new Error("claude CLI not found in PATH");
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
execSync("claude mcp remove memax --scope user", { stdio: "pipe" });
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Not installed yet
|
|
126
|
+
}
|
|
127
|
+
// --scope user so it's available across all projects
|
|
128
|
+
execSync(`claude mcp add memax --transport http ${mcpUrl} --header "Authorization: Bearer ${apiKey}" --scope user`, { stdio: "pipe" });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Codex TOML
|
|
132
|
+
if (agent.format === "toml") {
|
|
133
|
+
mkdirSync(dirname(agent.configPath), { recursive: true });
|
|
134
|
+
let content = "";
|
|
135
|
+
if (existsSync(agent.configPath)) {
|
|
136
|
+
content = readFileSync(agent.configPath, "utf-8");
|
|
137
|
+
}
|
|
138
|
+
content = content.replace(/\[mcp_servers\.memax(?:\.\w+)*\][\s\S]*?(?=\n\[|$)/g, "");
|
|
139
|
+
content = content.trim();
|
|
140
|
+
if (content)
|
|
141
|
+
content += "\n\n";
|
|
142
|
+
content += `[mcp_servers.memax]\ntype = "url"\nurl = "${mcpUrl}"\n\n[mcp_servers.memax.headers]\nAuthorization = "Bearer ${apiKey}"\n`;
|
|
143
|
+
writeFileSync(agent.configPath, content);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// JSON-based agents — per-agent config shape with auth headers
|
|
147
|
+
writeRemoteJsonConfig(agent, mcpUrl, authHeaders);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Shared JSON config writer for remote MCP. Uses agent.remoteEntry() to
|
|
151
|
+
* produce the correct schema shape for each agent.
|
|
152
|
+
*/
|
|
153
|
+
function writeRemoteJsonConfig(agent, mcpUrl, authHeaders) {
|
|
154
|
+
mkdirSync(dirname(agent.configPath), { recursive: true });
|
|
155
|
+
let config = {};
|
|
156
|
+
if (existsSync(agent.configPath)) {
|
|
157
|
+
try {
|
|
158
|
+
config = JSON.parse(readFileSync(agent.configPath, "utf-8"));
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Start fresh
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const servers = (getNestedKey(config, agent.mcpKey) ?? {});
|
|
165
|
+
servers.memax = agent.remoteEntry(mcpUrl, authHeaders);
|
|
166
|
+
setNestedKey(config, agent.mcpKey, servers);
|
|
167
|
+
writeFileSync(agent.configPath, JSON.stringify(config, null, 2) + "\n");
|
|
168
|
+
}
|
|
169
|
+
// --- Local MCP setup per agent ---
|
|
170
|
+
export function setupMcp(agent, bin) {
|
|
171
|
+
// Claude Code has its own CLI for MCP management
|
|
172
|
+
if (agent.id === "claude-code") {
|
|
173
|
+
setupMcpClaudeCode(bin);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
mkdirSync(dirname(agent.configPath), { recursive: true });
|
|
177
|
+
if (agent.format === "toml") {
|
|
178
|
+
setupMcpToml(agent, bin);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// JSON-based agents
|
|
182
|
+
let config = {};
|
|
183
|
+
if (existsSync(agent.configPath)) {
|
|
184
|
+
try {
|
|
185
|
+
config = JSON.parse(readFileSync(agent.configPath, "utf-8"));
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Start fresh
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const servers = (getNestedKey(config, agent.mcpKey) ?? {});
|
|
192
|
+
const allArgs = [...bin.args, "mcp", "serve", "--agent", agent.id];
|
|
193
|
+
servers.memax = agent.localEntry
|
|
194
|
+
? agent.localEntry(bin.command, allArgs)
|
|
195
|
+
: { command: bin.command, args: allArgs };
|
|
196
|
+
setNestedKey(config, agent.mcpKey, servers);
|
|
197
|
+
writeFileSync(agent.configPath, JSON.stringify(config, null, 2) + "\n");
|
|
198
|
+
}
|
|
199
|
+
export function setupMcpClaudeCode(bin) {
|
|
200
|
+
// Claude Code uses its own CLI for MCP — settings.json mcpServers is ignored
|
|
201
|
+
if (!commandExists("claude")) {
|
|
202
|
+
throw new Error("claude CLI not found in PATH");
|
|
203
|
+
}
|
|
204
|
+
// Remove existing first (idempotent)
|
|
205
|
+
try {
|
|
206
|
+
execSync("claude mcp remove memax --scope user", { stdio: "pipe" });
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Not installed yet — fine
|
|
210
|
+
}
|
|
211
|
+
// claude mcp add <name> -- <command> [args...]
|
|
212
|
+
// --scope user so it's available across all projects
|
|
213
|
+
const allArgs = [...bin.args, "mcp", "serve", "--agent", "claude-code"];
|
|
214
|
+
const cmd = `claude mcp add memax --scope user -- ${bin.command} ${allArgs.join(" ")}`;
|
|
215
|
+
try {
|
|
216
|
+
execSync(cmd, { stdio: "pipe" });
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
throw new Error(`claude mcp add failed: ${err.message}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
export function setupMcpToml(agent, bin) {
|
|
223
|
+
// Codex uses TOML — append or update the memax section
|
|
224
|
+
let content = "";
|
|
225
|
+
if (existsSync(agent.configPath)) {
|
|
226
|
+
content = readFileSync(agent.configPath, "utf-8");
|
|
227
|
+
}
|
|
228
|
+
// Remove existing memax section if present
|
|
229
|
+
content = content.replace(/\[mcp_servers\.memax(?:\.\w+)*\][\s\S]*?(?=\n\[|$)/g, "");
|
|
230
|
+
const args = [...bin.args, "mcp", "serve", "--agent", agent.id]
|
|
231
|
+
.map((a) => `"${a}"`)
|
|
232
|
+
.join(", ");
|
|
233
|
+
content = content.trim();
|
|
234
|
+
if (content)
|
|
235
|
+
content += "\n\n";
|
|
236
|
+
content += `[mcp_servers.memax]\ncommand = "${bin.command}"\nargs = [${args}]\n`;
|
|
237
|
+
writeFileSync(agent.configPath, content);
|
|
238
|
+
}
|
|
239
|
+
export async function printMcpConfigs(opts) {
|
|
240
|
+
const mcpUrl = `${getApiUrl()}/mcp`;
|
|
241
|
+
const indent = (json) => JSON.stringify(json, null, 2)
|
|
242
|
+
.split("\n")
|
|
243
|
+
.map((l) => " " + l)
|
|
244
|
+
.join("\n");
|
|
245
|
+
console.log(chalk.bold("\n Memax MCP Configuration\n"));
|
|
246
|
+
if (opts.local) {
|
|
247
|
+
const bin = resolveMemaxBin();
|
|
248
|
+
const cmd = bin ? bin.command : "memax";
|
|
249
|
+
const baseArgs = bin ? [...bin.args, "mcp", "serve"] : ["mcp", "serve"];
|
|
250
|
+
console.log(chalk.gray(" Mode: local (stdio)\n"));
|
|
251
|
+
console.log(chalk.gray(" Note: add --agent <name> for agent identity attribution.\n" +
|
|
252
|
+
" Example: memax mcp serve --agent claude-code\n"));
|
|
253
|
+
// Include --agent placeholder so manual setups get attribution
|
|
254
|
+
const args = [...baseArgs, "--agent", "<agent-id>"];
|
|
255
|
+
console.log(chalk.white(" For most agents (Claude Code, Cursor, Gemini, etc.):\n"));
|
|
256
|
+
console.log(indent({ mcpServers: { memax: { command: cmd, args } } }));
|
|
257
|
+
console.log(chalk.white("\n For Copilot CLI:\n"));
|
|
258
|
+
console.log(indent({
|
|
259
|
+
mcpServers: {
|
|
260
|
+
memax: { command: cmd, args, tools: [{ type: "function" }] },
|
|
261
|
+
},
|
|
262
|
+
}));
|
|
263
|
+
console.log(chalk.white("\n For VS Code (.vscode/mcp.json):\n"));
|
|
264
|
+
console.log(indent({ servers: { memax: { command: cmd, args } } }));
|
|
265
|
+
console.log(chalk.white("\n For OpenCode:\n"));
|
|
266
|
+
console.log(indent({ mcp: { memax: { type: "local", command: cmd, args } } }));
|
|
267
|
+
}
|
|
268
|
+
else if (opts.apiKey) {
|
|
269
|
+
let apiKey;
|
|
270
|
+
try {
|
|
271
|
+
apiKey = await ensureApiKey(opts.hub, undefined, {
|
|
272
|
+
readOnly: opts.readOnly,
|
|
273
|
+
allowDelete: opts.allowDelete,
|
|
274
|
+
allowOrganize: opts.allowOrganize,
|
|
275
|
+
agentSync: opts.agentSync,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Not logged in
|
|
280
|
+
}
|
|
281
|
+
const keyDisplay = apiKey ?? "mxk_your_api_key_here";
|
|
282
|
+
const authHeaders = { Authorization: `Bearer ${keyDisplay}` };
|
|
283
|
+
console.log(chalk.gray(" Mode: remote server (API key)\n"));
|
|
284
|
+
console.log(chalk.white(" For Claude Code:\n"));
|
|
285
|
+
console.log(chalk.gray(` claude mcp add memax --transport http ${mcpUrl} --header "Authorization: Bearer ${keyDisplay}" --scope user`));
|
|
286
|
+
console.log(chalk.white("\n For Cursor, Windsurf:\n"));
|
|
287
|
+
console.log(indent({
|
|
288
|
+
mcpServers: {
|
|
289
|
+
memax: { type: "url", url: mcpUrl, headers: authHeaders },
|
|
290
|
+
},
|
|
291
|
+
}));
|
|
292
|
+
console.log(chalk.white("\n For Gemini CLI:\n"));
|
|
293
|
+
console.log(indent({
|
|
294
|
+
mcpServers: { memax: { httpUrl: mcpUrl, headers: authHeaders } },
|
|
295
|
+
}));
|
|
296
|
+
console.log(chalk.white("\n For Copilot CLI:\n"));
|
|
297
|
+
console.log(indent({
|
|
298
|
+
mcpServers: {
|
|
299
|
+
memax: {
|
|
300
|
+
type: "http",
|
|
301
|
+
url: mcpUrl,
|
|
302
|
+
tools: [{ type: "function" }],
|
|
303
|
+
headers: authHeaders,
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
}));
|
|
307
|
+
console.log(chalk.white("\n For VS Code (.vscode/mcp.json):\n"));
|
|
308
|
+
console.log(indent({
|
|
309
|
+
servers: { memax: { type: "http", url: mcpUrl, headers: authHeaders } },
|
|
310
|
+
}));
|
|
311
|
+
console.log(chalk.white("\n For Codex CLI (~/.codex/config.toml):\n"));
|
|
312
|
+
console.log(chalk.gray(` [mcp_servers.memax]`));
|
|
313
|
+
console.log(chalk.gray(` type = "url"`));
|
|
314
|
+
console.log(chalk.gray(` url = "${mcpUrl}"`));
|
|
315
|
+
console.log(chalk.gray(`\n [mcp_servers.memax.headers]`));
|
|
316
|
+
console.log(chalk.gray(` Authorization = "Bearer ${keyDisplay}"`));
|
|
317
|
+
if (apiKey) {
|
|
318
|
+
console.log(chalk.yellow("\n API key created: mcp-setup"));
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
console.log(chalk.yellow("\n Not logged in — replace mxk_your_api_key_here with a real key."));
|
|
322
|
+
console.log(chalk.gray(" Run: memax login && memax auth create-key --name mcp"));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
console.log(chalk.gray(" Mode: remote server (OAuth — recommended)\n"));
|
|
327
|
+
console.log(chalk.white(" For Claude Code:\n"));
|
|
328
|
+
console.log(chalk.gray(` claude mcp add memax --transport http ${mcpUrl} --scope user`));
|
|
329
|
+
console.log(chalk.gray(" (OAuth auto-discovery — authenticates via browser)\n"));
|
|
330
|
+
console.log(chalk.white(" For Cursor, Windsurf:\n"));
|
|
331
|
+
console.log(indent({ mcpServers: { memax: { type: "url", url: mcpUrl } } }));
|
|
332
|
+
console.log(chalk.white("\n For Gemini CLI:\n"));
|
|
333
|
+
console.log(indent({ mcpServers: { memax: { httpUrl: mcpUrl } } }));
|
|
334
|
+
console.log(chalk.white("\n For Copilot CLI:\n"));
|
|
335
|
+
console.log(indent({
|
|
336
|
+
mcpServers: {
|
|
337
|
+
memax: { type: "http", url: mcpUrl, tools: [{ type: "function" }] },
|
|
338
|
+
},
|
|
339
|
+
}));
|
|
340
|
+
console.log(chalk.white("\n For VS Code (.vscode/mcp.json):\n"));
|
|
341
|
+
console.log(indent({ servers: { memax: { type: "http", url: mcpUrl } } }));
|
|
342
|
+
console.log(chalk.white("\n For Codex CLI (~/.codex/config.toml):\n"));
|
|
343
|
+
console.log(chalk.gray(` [mcp_servers.memax]`));
|
|
344
|
+
console.log(chalk.gray(` type = "url"`));
|
|
345
|
+
console.log(chalk.gray(` url = "${mcpUrl}"`));
|
|
346
|
+
console.log(chalk.gray("\n All agents authenticate via OAuth when they first connect.\n For API key mode: memax setup --print --api-key"));
|
|
347
|
+
}
|
|
348
|
+
console.log();
|
|
349
|
+
}
|
|
350
|
+
// --- Teardown helpers ---
|
|
351
|
+
export function removeMcpJson(agent) {
|
|
352
|
+
if (!existsSync(agent.configPath))
|
|
353
|
+
return false;
|
|
354
|
+
try {
|
|
355
|
+
const config = JSON.parse(readFileSync(agent.configPath, "utf-8"));
|
|
356
|
+
const servers = getNestedKey(config, agent.mcpKey);
|
|
357
|
+
if (!servers?.memax)
|
|
358
|
+
return false;
|
|
359
|
+
delete servers.memax;
|
|
360
|
+
if (Object.keys(servers).length === 0)
|
|
361
|
+
deleteNestedKey(config, agent.mcpKey);
|
|
362
|
+
writeFileSync(agent.configPath, JSON.stringify(config, null, 2) + "\n");
|
|
363
|
+
console.log(chalk.gray(` Removed MCP from ${agent.name}`));
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
export function removeMcpToml(agent) {
|
|
371
|
+
if (!existsSync(agent.configPath))
|
|
372
|
+
return false;
|
|
373
|
+
let content = readFileSync(agent.configPath, "utf-8");
|
|
374
|
+
const before = content;
|
|
375
|
+
content = content.replace(/\[mcp_servers\.memax(?:\.\w+)*\][\s\S]*?(?=\n\[|$)/g, "");
|
|
376
|
+
if (content === before)
|
|
377
|
+
return false;
|
|
378
|
+
writeFileSync(agent.configPath, content.trim() + "\n");
|
|
379
|
+
console.log(chalk.gray(` Removed MCP from ${agent.name}`));
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
// --- Nested key helpers for configs like openclaw's "mcp.servers" ---
|
|
383
|
+
export function getNestedKey(obj, key) {
|
|
384
|
+
const parts = key.split(".");
|
|
385
|
+
let current = obj;
|
|
386
|
+
for (const part of parts) {
|
|
387
|
+
if (current == null || typeof current !== "object")
|
|
388
|
+
return undefined;
|
|
389
|
+
current = current[part];
|
|
390
|
+
}
|
|
391
|
+
return current;
|
|
392
|
+
}
|
|
393
|
+
export function setNestedKey(obj, key, value) {
|
|
394
|
+
const parts = key.split(".");
|
|
395
|
+
let current = obj;
|
|
396
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
397
|
+
if (!(parts[i] in current) || typeof current[parts[i]] !== "object") {
|
|
398
|
+
current[parts[i]] = {};
|
|
399
|
+
}
|
|
400
|
+
current = current[parts[i]];
|
|
401
|
+
}
|
|
402
|
+
current[parts[parts.length - 1]] = value;
|
|
403
|
+
}
|
|
404
|
+
export function deleteNestedKey(obj, key) {
|
|
405
|
+
const parts = key.split(".");
|
|
406
|
+
let current = obj;
|
|
407
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
408
|
+
if (!(parts[i] in current) || typeof current[parts[i]] !== "object")
|
|
409
|
+
return;
|
|
410
|
+
current = current[parts[i]];
|
|
411
|
+
}
|
|
412
|
+
delete current[parts[parts.length - 1]];
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=setup-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/commands/setup-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface AgentDef {
|
|
2
|
+
name: string;
|
|
3
|
+
id: string;
|
|
4
|
+
configPath: string;
|
|
5
|
+
format: "json-mcpServers" | "json-servers" | "toml";
|
|
6
|
+
/** Key under which MCP servers live */
|
|
7
|
+
mcpKey: string;
|
|
8
|
+
hasHooks: boolean;
|
|
9
|
+
/** Global instruction file path (e.g. ~/.claude/CLAUDE.md) — null if none */
|
|
10
|
+
globalInstructionFile: string | null;
|
|
11
|
+
detect: () => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the correct MCP server entry shape for this agent's remote config.
|
|
14
|
+
* Each agent has its own schema expectations for remote/HTTP MCP servers.
|
|
15
|
+
* The `authHeaders` param is undefined for OAuth mode (agent handles auth)
|
|
16
|
+
* or an object with Authorization header for API key mode.
|
|
17
|
+
*/
|
|
18
|
+
remoteEntry: (mcpUrl: string, authHeaders?: Record<string, string>) => Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the correct MCP server entry shape for local stdio mode.
|
|
21
|
+
* Most agents use { command, args }, but some (OpenCode) need a type field.
|
|
22
|
+
* If undefined, the default { command, args } shape is used.
|
|
23
|
+
*/
|
|
24
|
+
localEntry?: (command: string, args: string[]) => Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface MemaxBin {
|
|
27
|
+
command: string;
|
|
28
|
+
args: string[];
|
|
29
|
+
shell: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function commandExists(cmd: string): boolean;
|
|
32
|
+
export declare function resolveMemaxBin(): MemaxBin | null;
|
|
33
|
+
//# sourceMappingURL=setup-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-types.d.ts","sourceRoot":"","sources":["../../src/commands/setup-types.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,GAAG,cAAc,GAAG,MAAM,CAAC;IACpD,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB;;;;;OAKG;IACH,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,wBAAgB,eAAe,IAAI,QAAQ,GAAG,IAAI,CA4CjD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { platform } from "node:os";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
// --- Shared utilities ---
|
|
6
|
+
export function commandExists(cmd) {
|
|
7
|
+
try {
|
|
8
|
+
const which = platform() === "win32" ? "where" : "which";
|
|
9
|
+
execSync(`${which} ${cmd}`, { stdio: "pipe" });
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function resolveMemaxBin() {
|
|
17
|
+
// 1. Local repo build (preferred during dev so setup/hooks use the same CLI code being tested)
|
|
18
|
+
const localBuild = join(process.cwd(), "packages", "cli", "dist", "index.js");
|
|
19
|
+
if (existsSync(localBuild)) {
|
|
20
|
+
return {
|
|
21
|
+
command: "node",
|
|
22
|
+
args: [localBuild],
|
|
23
|
+
shell: `node ${localBuild}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// 2. Global install — use absolute path so agents find it without shell PATH
|
|
27
|
+
if (commandExists("memax")) {
|
|
28
|
+
try {
|
|
29
|
+
const which = platform() === "win32" ? "where memax" : "which memax";
|
|
30
|
+
const absPath = execSync(which, { encoding: "utf-8", stdio: "pipe" })
|
|
31
|
+
.trim()
|
|
32
|
+
.split("\n")[0];
|
|
33
|
+
if (absPath) {
|
|
34
|
+
return { command: absPath, args: [], shell: absPath };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// fall through
|
|
39
|
+
}
|
|
40
|
+
return { command: "memax", args: [], shell: "memax" };
|
|
41
|
+
}
|
|
42
|
+
// 3. npx as last resort (slow startup — agents may timeout on first run)
|
|
43
|
+
try {
|
|
44
|
+
execSync("npx --yes memax-cli --version", {
|
|
45
|
+
encoding: "utf-8",
|
|
46
|
+
timeout: 15000,
|
|
47
|
+
stdio: "pipe",
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
command: "npx",
|
|
51
|
+
args: ["-y", "memax-cli"],
|
|
52
|
+
shell: "npx -y memax-cli",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// npx failed
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=setup-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-types.js","sourceRoot":"","sources":["../../src/commands/setup-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAW,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuC9C,2BAA2B;AAE3B,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,QAAQ,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,+FAA+F;IAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,UAAU,CAAC;YAClB,KAAK,EAAE,QAAQ,UAAU,EAAE;SAC5B,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;YACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;iBAClE,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC;QACH,QAAQ,CAAC,+BAA+B,EAAE;YACxC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;YACzB,KAAK,EAAE,kBAAkB;SAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type AgentDef, type MemaxBin } from "./setup-types.js";
|
|
3
|
+
export type { AgentDef, MemaxBin };
|
|
1
4
|
interface SetupOptions {
|
|
2
5
|
mcp?: boolean;
|
|
3
6
|
hooks?: boolean;
|
|
4
7
|
instructions?: boolean;
|
|
5
8
|
all?: boolean;
|
|
6
9
|
local?: boolean;
|
|
10
|
+
apiKey?: boolean;
|
|
7
11
|
print?: boolean;
|
|
8
12
|
only?: string;
|
|
9
13
|
skip?: string;
|
|
14
|
+
hub?: string;
|
|
15
|
+
readOnly?: boolean;
|
|
16
|
+
allowDelete?: boolean;
|
|
17
|
+
allowOrganize?: boolean;
|
|
18
|
+
agentSync?: boolean;
|
|
10
19
|
}
|
|
11
20
|
export declare function setupCommand(options: SetupOptions): Promise<void>;
|
|
12
21
|
export declare function teardownCommand(options: {
|
|
13
22
|
only?: string;
|
|
14
23
|
}): Promise<void>;
|
|
15
|
-
export
|
|
24
|
+
export declare function registerSetupCommands(program: Command): void;
|
|
16
25
|
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAGd,MAAM,kBAAkB,CAAC;AAoB1B,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAyKnC,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqSvE;AAID,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFhB;AAuED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC5D"}
|