f2g-telco 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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/commands/add.d.ts +1 -0
- package/dist/commands/add.js +264 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +97 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.js +460 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.js +52 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +1 -0
- package/dist/commands/remove.js +127 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/update.js +41 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/installers/mcps.d.ts +33 -0
- package/dist/installers/mcps.js +185 -0
- package/dist/installers/mcps.js.map +1 -0
- package/dist/installers/skills.d.ts +15 -0
- package/dist/installers/skills.js +55 -0
- package/dist/installers/skills.js.map +1 -0
- package/dist/utils/config.d.ts +22 -0
- package/dist/utils/config.js +36 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/detect.d.ts +18 -0
- package/dist/utils/detect.js +42 -0
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +64 -0
- package/registry/mcps.json +186 -0
- package/registry/providers.json +121 -0
- package/registry/skills.json +34 -0
- package/templates/crush/autonomous.md +38 -0
- package/templates/inventory.md +16 -0
- package/templates/kiro/orchestrator.md +17 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
7
|
+
import { detectEnvironment } from '../utils/detect.js';
|
|
8
|
+
import { log, isVerbose } from '../utils/logger.js';
|
|
9
|
+
import { saveConfig, loadConfig, getToolPaths } from '../utils/config.js';
|
|
10
|
+
import { installMcps, writeToolConfig } from '../installers/mcps.js';
|
|
11
|
+
import { installSkills } from '../installers/skills.js';
|
|
12
|
+
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
13
|
+
const registryDir = path.resolve(__dirname, '..', '..', 'registry');
|
|
14
|
+
const templatesDir = path.resolve(__dirname, '..', '..', 'templates');
|
|
15
|
+
/**
|
|
16
|
+
* Draw a boxed panel for guided API key setup
|
|
17
|
+
*/
|
|
18
|
+
function drawSetupBox(name, description, steps) {
|
|
19
|
+
const width = 60;
|
|
20
|
+
const topBorder = '╔' + '═'.repeat(width - 2) + '╗';
|
|
21
|
+
const bottomBorder = '╚' + '═'.repeat(width - 2) + '╝';
|
|
22
|
+
const emptyLine = '║' + ' '.repeat(width - 2) + '║';
|
|
23
|
+
const padLine = (text) => {
|
|
24
|
+
const visible = text.replace(/\x1B\[[0-9;]*m/g, ''); // Strip ANSI for length calc
|
|
25
|
+
const padding = width - 2 - visible.length;
|
|
26
|
+
return '║ ' + text + ' '.repeat(Math.max(0, padding - 2)) + '║';
|
|
27
|
+
};
|
|
28
|
+
console.log('\n' + chalk.cyan(topBorder));
|
|
29
|
+
console.log(chalk.cyan(padLine(chalk.bold(`📦 ${name}`) + chalk.dim(` — ${description}`))));
|
|
30
|
+
console.log(chalk.cyan(emptyLine));
|
|
31
|
+
steps.forEach((step, i) => {
|
|
32
|
+
const numbered = `${i + 1}. ${step}`;
|
|
33
|
+
console.log(chalk.cyan(padLine(numbered)));
|
|
34
|
+
});
|
|
35
|
+
console.log(chalk.cyan(emptyLine));
|
|
36
|
+
console.log(chalk.cyan(bottomBorder));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Prompt for a single MCP/provider API key with guided setup
|
|
40
|
+
*/
|
|
41
|
+
async function promptApiKey(name, description, envKey, steps) {
|
|
42
|
+
drawSetupBox(name, description, steps);
|
|
43
|
+
const { action } = await inquirer.prompt([{
|
|
44
|
+
type: 'list',
|
|
45
|
+
name: 'action',
|
|
46
|
+
message: 'What would you like to do?',
|
|
47
|
+
choices: [
|
|
48
|
+
{ name: chalk.green('Enter API key'), value: 'enter' },
|
|
49
|
+
{ name: chalk.yellow('Skip — install without this service'), value: 'skip' },
|
|
50
|
+
],
|
|
51
|
+
}]);
|
|
52
|
+
if (action === 'skip') {
|
|
53
|
+
return { key: '', skipped: true };
|
|
54
|
+
}
|
|
55
|
+
const { value } = await inquirer.prompt([{
|
|
56
|
+
type: 'password',
|
|
57
|
+
name: 'value',
|
|
58
|
+
message: `${envKey}:`,
|
|
59
|
+
mask: '*',
|
|
60
|
+
}]);
|
|
61
|
+
return { key: value || '', skipped: !value };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Show the end summary of configured vs skipped services
|
|
65
|
+
*/
|
|
66
|
+
function showOnboardingSummary(results) {
|
|
67
|
+
console.log('\n' + chalk.bold(' Configuration Summary:'));
|
|
68
|
+
console.log();
|
|
69
|
+
for (const name of results.configured) {
|
|
70
|
+
console.log(chalk.green(` ✅ ${name}`) + chalk.dim(' (API key saved)'));
|
|
71
|
+
}
|
|
72
|
+
for (const name of results.skipped) {
|
|
73
|
+
console.log(chalk.yellow(` ⏭️ ${name}`) + chalk.dim(' (skipped)'));
|
|
74
|
+
}
|
|
75
|
+
if (results.skipped.length > 0) {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(chalk.dim(' Skipped services can be added later with: f2g-telco init --reconfigure'));
|
|
78
|
+
}
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Guided onboarding flow for collecting API keys
|
|
83
|
+
*/
|
|
84
|
+
async function guidedOnboarding(mcps, providerConfig, existingEnvVars) {
|
|
85
|
+
const envVars = { ...existingEnvVars };
|
|
86
|
+
const skippedMcps = new Set();
|
|
87
|
+
const results = { configured: [], skipped: [] };
|
|
88
|
+
// First: handle provider API key if needed
|
|
89
|
+
if (providerConfig?.requiresEnv && providerConfig.requiresEnv.length > 0) {
|
|
90
|
+
for (const envKey of providerConfig.requiresEnv) {
|
|
91
|
+
if (process.env[envKey] || envVars[envKey]) {
|
|
92
|
+
results.configured.push(providerConfig.name);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const steps = providerConfig.setupSteps || [
|
|
96
|
+
providerConfig.setup || `Set up ${providerConfig.name}`,
|
|
97
|
+
];
|
|
98
|
+
const { key, skipped } = await promptApiKey(providerConfig.name, providerConfig.description, envKey, steps);
|
|
99
|
+
if (skipped) {
|
|
100
|
+
results.skipped.push(providerConfig.name);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
envVars[envKey] = key;
|
|
104
|
+
results.configured.push(providerConfig.name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Then: handle each MCP that requires an API key
|
|
109
|
+
for (const mcp of mcps) {
|
|
110
|
+
if (!mcp.requiresEnv || mcp.requiresEnv.length === 0)
|
|
111
|
+
continue;
|
|
112
|
+
for (const envKey of mcp.requiresEnv) {
|
|
113
|
+
if (process.env[envKey] || envVars[envKey]) {
|
|
114
|
+
results.configured.push(mcp.name);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const steps = mcp.setupSteps || [
|
|
118
|
+
mcp.envSetup || `Get API key for ${mcp.name}`,
|
|
119
|
+
];
|
|
120
|
+
const { key, skipped } = await promptApiKey(mcp.name, mcp.description, envKey, steps);
|
|
121
|
+
if (skipped) {
|
|
122
|
+
results.skipped.push(mcp.name);
|
|
123
|
+
skippedMcps.add(mcp.id);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
envVars[envKey] = key;
|
|
127
|
+
results.configured.push(mcp.name);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
showOnboardingSummary(results);
|
|
132
|
+
return { envVars, skippedMcps };
|
|
133
|
+
}
|
|
134
|
+
export async function initCommand(options) {
|
|
135
|
+
try {
|
|
136
|
+
await runInit(options);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
handleInitError(err);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function handleInitError(err) {
|
|
144
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
145
|
+
// Network errors
|
|
146
|
+
if (message.includes('ENOTFOUND') || message.includes('getaddrinfo') || message.includes('ECONNREFUSED')) {
|
|
147
|
+
log.error('No internet connection');
|
|
148
|
+
log.dim(' Check your network and try again. Some MCPs require downloading packages.');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Git not installed
|
|
152
|
+
if (message.includes('git') && (message.includes('ENOENT') || message.includes('not found'))) {
|
|
153
|
+
log.error('Git is not installed');
|
|
154
|
+
log.dim(' Install Git first: https://git-scm.com/downloads');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// npm permission errors
|
|
158
|
+
if (message.includes('EACCES') || message.includes('permission denied')) {
|
|
159
|
+
log.error('Permission denied during installation');
|
|
160
|
+
log.dim(' F2G-Telco installs to ~/.local — check your permissions.');
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Generic error
|
|
164
|
+
log.error(message);
|
|
165
|
+
if (isVerbose() && err instanceof Error && err.stack) {
|
|
166
|
+
console.error(chalk.dim(err.stack));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function runInit(options) {
|
|
170
|
+
console.log(chalk.bold(`
|
|
171
|
+
╔═══════════════════════════════════════╗
|
|
172
|
+
║ F2G-Telco v0.1.0 ║
|
|
173
|
+
║ Supercharge your AI environment ║
|
|
174
|
+
╚═══════════════════════════════════════╝
|
|
175
|
+
`));
|
|
176
|
+
// Handle --reconfigure: jump straight to API key collection
|
|
177
|
+
if (options.reconfigure) {
|
|
178
|
+
const existingConfig = await loadConfig();
|
|
179
|
+
if (!existingConfig) {
|
|
180
|
+
log.error('No existing configuration found. Run `f2g-telco init` first.');
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
log.header('Reconfiguring API Keys');
|
|
184
|
+
const mcpRegistry = await fs.readJson(path.join(registryDir, 'mcps.json'));
|
|
185
|
+
const providers = await fs.readJson(path.join(registryDir, 'providers.json'));
|
|
186
|
+
const providerConfig = providers.providers.find((p) => p.id === existingConfig.provider);
|
|
187
|
+
const { envVars, skippedMcps } = await guidedOnboarding(mcpRegistry.mcps, providerConfig, {});
|
|
188
|
+
// Reinstall MCPs with new keys
|
|
189
|
+
log.header('Reinstalling MCP servers');
|
|
190
|
+
const mcpsToInstall = mcpRegistry.mcps.filter((mcp) => !skippedMcps.has(mcp.id) && mcp.requiresEnv.every((key) => envVars[key] || process.env[key]));
|
|
191
|
+
const installedIds = await installMcps(mcpsToInstall, existingConfig.tool, envVars);
|
|
192
|
+
// Rewrite config
|
|
193
|
+
log.header('Updating configuration');
|
|
194
|
+
await writeToolConfig(mcpRegistry.mcps, installedIds, existingConfig.tool, envVars, providerConfig);
|
|
195
|
+
// Update saved config
|
|
196
|
+
existingConfig.installedMcps = installedIds;
|
|
197
|
+
await saveConfig(existingConfig);
|
|
198
|
+
log.success('Reconfiguration complete!');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Step 1: Detect
|
|
202
|
+
log.header('Step 1 — Detecting environment');
|
|
203
|
+
const env = await detectEnvironment();
|
|
204
|
+
log.info(`OS: ${env.os}`);
|
|
205
|
+
log.info(`Node: ${env.node || chalk.red('not found — required')}`);
|
|
206
|
+
log.info(`Python: ${env.python || chalk.dim('not found — some MCPs need it')}`);
|
|
207
|
+
log.info(`Git: ${env.git || chalk.red('not found — required')}`);
|
|
208
|
+
if (!env.node || !env.git) {
|
|
209
|
+
log.error('Node.js and Git are required. Install them first.');
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
const detected = [];
|
|
213
|
+
if (env.tools.crush)
|
|
214
|
+
detected.push('Crush');
|
|
215
|
+
if (env.tools.kiro)
|
|
216
|
+
detected.push('Kiro');
|
|
217
|
+
if (detected.length > 0)
|
|
218
|
+
log.success(`Tools: ${detected.join(', ')}`);
|
|
219
|
+
const detectedProviders = [];
|
|
220
|
+
if (env.providers.copilot)
|
|
221
|
+
detectedProviders.push('Copilot');
|
|
222
|
+
if (env.providers.ollama)
|
|
223
|
+
detectedProviders.push('Ollama');
|
|
224
|
+
if (env.providers.nim)
|
|
225
|
+
detectedProviders.push('NIM');
|
|
226
|
+
if (detectedProviders.length > 0)
|
|
227
|
+
log.success(`Providers: ${detectedProviders.join(', ')}`);
|
|
228
|
+
// Step 2: Choose tool
|
|
229
|
+
log.header('Step 2 — Choose your AI coding tool');
|
|
230
|
+
let tool = options.tool;
|
|
231
|
+
if (!tool) {
|
|
232
|
+
const { selectedTool } = await inquirer.prompt([{
|
|
233
|
+
type: 'list',
|
|
234
|
+
name: 'selectedTool',
|
|
235
|
+
message: 'Which tool do you want to configure?',
|
|
236
|
+
choices: [
|
|
237
|
+
{ name: `Crush${env.tools.crush ? chalk.green(' (detected)') : ''}`, value: 'crush' },
|
|
238
|
+
{ name: `Kiro CLI${env.tools.kiro ? chalk.green(' (detected)') : ''}`, value: 'kiro' },
|
|
239
|
+
],
|
|
240
|
+
}]);
|
|
241
|
+
tool = selectedTool;
|
|
242
|
+
}
|
|
243
|
+
// Step 3: Choose provider
|
|
244
|
+
log.header('Step 3 — Choose your AI provider');
|
|
245
|
+
const providers = await fs.readJson(path.join(registryDir, 'providers.json'));
|
|
246
|
+
let provider = options.provider;
|
|
247
|
+
if (!provider) {
|
|
248
|
+
const choices = providers.providers
|
|
249
|
+
.filter((p) => p.tools.includes(tool))
|
|
250
|
+
.map((p) => ({
|
|
251
|
+
name: `${p.name}${p.free === true ? chalk.green(' (free)') : p.free === false ? chalk.yellow(' (subscription)') : ''} — ${p.description}`,
|
|
252
|
+
value: p.id,
|
|
253
|
+
}));
|
|
254
|
+
const { selectedProvider } = await inquirer.prompt([{
|
|
255
|
+
type: 'list',
|
|
256
|
+
name: 'selectedProvider',
|
|
257
|
+
message: 'Which AI provider do you use?',
|
|
258
|
+
choices,
|
|
259
|
+
}]);
|
|
260
|
+
provider = selectedProvider;
|
|
261
|
+
}
|
|
262
|
+
const providerConfig = providers.providers.find((p) => p.id === provider);
|
|
263
|
+
// Step 4: Guided API key collection
|
|
264
|
+
log.header('Step 4 — Service Configuration');
|
|
265
|
+
const mcpRegistry = await fs.readJson(path.join(registryDir, 'mcps.json'));
|
|
266
|
+
let envVars = {};
|
|
267
|
+
let skippedMcps = new Set();
|
|
268
|
+
if (!options.yes) {
|
|
269
|
+
const result = await guidedOnboarding(mcpRegistry.mcps, providerConfig, {});
|
|
270
|
+
envVars = result.envVars;
|
|
271
|
+
skippedMcps = result.skippedMcps;
|
|
272
|
+
}
|
|
273
|
+
// Step 5: Install MCPs
|
|
274
|
+
log.header('Step 5 — Installing MCP servers');
|
|
275
|
+
const mcpsToInstall = mcpRegistry.mcps.filter((mcp) => !skippedMcps.has(mcp.id) && mcp.requiresEnv.every((key) => envVars[key] || process.env[key]));
|
|
276
|
+
const installedIds = await installMcps(mcpsToInstall, tool, envVars);
|
|
277
|
+
// Step 5b: Install ContextGraph bridge (Python wrapper) if available
|
|
278
|
+
if (installedIds.includes('contextgraph') && env.python) {
|
|
279
|
+
await installContextGraphBridge(os.homedir(), envVars);
|
|
280
|
+
}
|
|
281
|
+
// Step 6: Write complete tool config
|
|
282
|
+
log.header('Step 6 — Writing tool configuration');
|
|
283
|
+
await writeToolConfig(mcpRegistry.mcps, installedIds, tool, envVars, providerConfig);
|
|
284
|
+
// Step 7: Install orchestrator
|
|
285
|
+
log.header('Step 7 — Setting up orchestrator agent');
|
|
286
|
+
const toolPaths = getToolPaths(tool);
|
|
287
|
+
const home = os.homedir();
|
|
288
|
+
if (tool === 'crush') {
|
|
289
|
+
const agentsDir = path.join(home, '.config', 'crush', 'agents');
|
|
290
|
+
await fs.ensureDir(agentsDir);
|
|
291
|
+
const tpl = await fs.readFile(path.join(templatesDir, 'crush', 'autonomous.md'), 'utf-8');
|
|
292
|
+
await fs.writeFile(path.join(agentsDir, 'autonomous.md'), tpl);
|
|
293
|
+
log.success('Orchestrator agent written to ~/.config/crush/agents/autonomous.md');
|
|
294
|
+
}
|
|
295
|
+
else if (tool === 'kiro') {
|
|
296
|
+
const tpl = await fs.readFile(path.join(templatesDir, 'kiro', 'orchestrator.md'), 'utf-8');
|
|
297
|
+
const content = tpl.replace(/USER/g, path.basename(home));
|
|
298
|
+
const settingsDir = path.join(home, '.kiro', 'settings');
|
|
299
|
+
await fs.ensureDir(settingsDir);
|
|
300
|
+
await fs.writeFile(path.join(settingsDir, 'orchestrator.md'), content);
|
|
301
|
+
log.success('Orchestrator written to ~/.kiro/settings/orchestrator.md');
|
|
302
|
+
}
|
|
303
|
+
// Step 8: Install skills
|
|
304
|
+
log.header('Step 8 — Installing skills');
|
|
305
|
+
const skillsRegistry = await fs.readJson(path.join(registryDir, 'skills.json'));
|
|
306
|
+
await fs.ensureDir(toolPaths.skills);
|
|
307
|
+
const skillCount = await installSkills(skillsRegistry.sources, toolPaths.skills);
|
|
308
|
+
log.success(`${skillCount} skills symlinked`);
|
|
309
|
+
// Step 9: Generate INVENTORY.md
|
|
310
|
+
log.header('Step 9 — Generating INVENTORY.md');
|
|
311
|
+
const inventoryPath = path.join(home, '.agents', 'INVENTORY.md');
|
|
312
|
+
await fs.ensureDir(path.dirname(inventoryPath));
|
|
313
|
+
await generateInventory(inventoryPath, installedIds, mcpRegistry.mcps, tool);
|
|
314
|
+
log.success(`INVENTORY.md → ${inventoryPath}`);
|
|
315
|
+
// Step 10: Save config
|
|
316
|
+
const config = {
|
|
317
|
+
version: '0.1.0',
|
|
318
|
+
provider: provider,
|
|
319
|
+
tool: tool,
|
|
320
|
+
installedMcps: installedIds,
|
|
321
|
+
installedSkills: [],
|
|
322
|
+
paths: {
|
|
323
|
+
home,
|
|
324
|
+
config: toolPaths.config,
|
|
325
|
+
skills: toolPaths.skills,
|
|
326
|
+
agents: toolPaths.agents || '',
|
|
327
|
+
inventory: inventoryPath,
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
await saveConfig(config);
|
|
331
|
+
console.log(chalk.bold.green(`
|
|
332
|
+
✔ F2G-Telco setup complete!
|
|
333
|
+
|
|
334
|
+
Tool: ${tool}
|
|
335
|
+
Provider: ${providerConfig.name}
|
|
336
|
+
MCPs: ${installedIds.length} installed
|
|
337
|
+
Skills: ${skillCount} symlinked
|
|
338
|
+
Orchestrator: ✔
|
|
339
|
+
Permissions: ${tool === 'crush' ? '38+ tools auto-approved' : 'configured'}
|
|
340
|
+
|
|
341
|
+
Next steps:
|
|
342
|
+
f2g-telco doctor Check everything is working
|
|
343
|
+
f2g-telco list See what's installed
|
|
344
|
+
f2g-telco update Pull latest configs
|
|
345
|
+
`));
|
|
346
|
+
}
|
|
347
|
+
async function generateInventory(filePath, installedIds, allMcps, tool) {
|
|
348
|
+
const rows = allMcps
|
|
349
|
+
.filter(m => installedIds.includes(m.id))
|
|
350
|
+
.map(m => `| ${m.name} | ${m.description} |`)
|
|
351
|
+
.join('\n');
|
|
352
|
+
await fs.writeFile(filePath, `# AI Environment Inventory
|
|
353
|
+
> Generated by F2G-Telco v0.1.0. Agents: read this to know what's available.
|
|
354
|
+
|
|
355
|
+
## MCP Servers (active)
|
|
356
|
+
| Server | Purpose |
|
|
357
|
+
|--------|---------|
|
|
358
|
+
${rows}
|
|
359
|
+
|
|
360
|
+
## Skills Discovery
|
|
361
|
+
Skills are in the tool's skills directory. Each has a SKILL.md with a \`description\` field.
|
|
362
|
+
Match task to skill by reading descriptions. Do NOT preload all skills.
|
|
363
|
+
|
|
364
|
+
## Key Rules
|
|
365
|
+
- **gitnexus**: Run \`npx gitnexus analyze\` in a repo before querying
|
|
366
|
+
- **context7**: Use for up-to-date library documentation
|
|
367
|
+
- **sequential-thinking**: Use for complex multi-step reasoning
|
|
368
|
+
- **mem0**: Check for prior context before starting work
|
|
369
|
+
- **contextgraph**: Use for structured recall with entity relationships
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
*Tool: ${tool} | Generated: ${new Date().toISOString().split('T')[0]} | F2G-Telco v0.1.0*
|
|
373
|
+
`);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Install ContextGraph Python package and create bridge wrapper script.
|
|
377
|
+
* The wrapper script allows MCP tools to invoke contextgraph-mcp.
|
|
378
|
+
*/
|
|
379
|
+
async function installContextGraphBridge(home, envVars) {
|
|
380
|
+
const binDir = path.join(home, '.local', 'bin');
|
|
381
|
+
const wrapperPath = path.join(binDir, 'contextgraph-mcp');
|
|
382
|
+
log.info('Setting up ContextGraph bridge with mem0 hydration...');
|
|
383
|
+
try {
|
|
384
|
+
execSync('pip3 install contextgraph[server,mcp] --quiet --break-system-packages 2>/dev/null || pip3 install contextgraph[server,mcp] --quiet', {
|
|
385
|
+
stdio: 'pipe',
|
|
386
|
+
timeout: 120_000,
|
|
387
|
+
});
|
|
388
|
+
await fs.ensureDir(binDir);
|
|
389
|
+
// Determine mem0 config for hydration
|
|
390
|
+
const mem0Key = envVars.MEM0_API_KEY || process.env.MEM0_API_KEY || '';
|
|
391
|
+
const mem0User = envVars.MEM0_DEFAULT_USER_ID || process.env.MEM0_DEFAULT_USER_ID || process.env.USER || 'default';
|
|
392
|
+
// Python wrapper that hydrates from mem0 on boot, then starts MCP server
|
|
393
|
+
const wrapperScript = `#!/usr/bin/env python3
|
|
394
|
+
"""ContextGraph MCP server with mem0 hydration — generated by F2G-Telco."""
|
|
395
|
+
import json, logging, os, sys, urllib.request
|
|
396
|
+
|
|
397
|
+
MEM0_API_KEY = os.environ.get("MEM0_API_KEY", ${JSON.stringify(mem0Key)})
|
|
398
|
+
MEM0_USER_ID = os.environ.get("MEM0_USER_ID", ${JSON.stringify(mem0User)})
|
|
399
|
+
HYDRATE_LIMIT = 50
|
|
400
|
+
|
|
401
|
+
os.environ.setdefault("CG_AGENT_NAME", "f2g-agent")
|
|
402
|
+
os.environ.setdefault("CG_AGENT_ORG", MEM0_USER_ID)
|
|
403
|
+
|
|
404
|
+
logging.basicConfig(level="WARNING", format="%(asctime)s %(name)s %(levelname)s %(message)s", stream=sys.stderr)
|
|
405
|
+
logger = logging.getLogger("contextgraph-bridge")
|
|
406
|
+
|
|
407
|
+
def fetch_mem0():
|
|
408
|
+
if not MEM0_API_KEY:
|
|
409
|
+
return []
|
|
410
|
+
payload = json.dumps({"filters": {"AND": [{"user_id": MEM0_USER_ID}]}, "page": 1, "page_size": HYDRATE_LIMIT}).encode()
|
|
411
|
+
req = urllib.request.Request("https://api.mem0.ai/v2/memories/", data=payload, headers={
|
|
412
|
+
"Authorization": f"Token {MEM0_API_KEY}", "Content-Type": "application/json"}, method="POST")
|
|
413
|
+
try:
|
|
414
|
+
with urllib.request.urlopen(req, timeout=20) as resp:
|
|
415
|
+
data = json.loads(resp.read().decode())
|
|
416
|
+
return (data if isinstance(data, list) else data.get("results", []))[:HYDRATE_LIMIT]
|
|
417
|
+
except Exception as e:
|
|
418
|
+
logger.warning("mem0 fetch failed: %s", e)
|
|
419
|
+
return []
|
|
420
|
+
|
|
421
|
+
def hydrate(service, agent_id, memories):
|
|
422
|
+
stored = 0
|
|
423
|
+
for mem in memories:
|
|
424
|
+
text = mem.get("memory", "")
|
|
425
|
+
if not text or len(text) < 20:
|
|
426
|
+
continue
|
|
427
|
+
if (mem.get("metadata") or {}).get("type") == "consolidation":
|
|
428
|
+
continue
|
|
429
|
+
try:
|
|
430
|
+
service.store_memory(agent_id=agent_id, content=text, visibility="org",
|
|
431
|
+
evidence=["hydrated from mem0"], citations=[f"mem0:{mem.get('id', '?')}"])
|
|
432
|
+
stored += 1
|
|
433
|
+
except Exception:
|
|
434
|
+
pass
|
|
435
|
+
return stored
|
|
436
|
+
|
|
437
|
+
def main():
|
|
438
|
+
from contextgraph.bootstrap import create_service
|
|
439
|
+
from contextgraph.mcp_server import _try_run_mcp_sdk, _JsonRpcServer
|
|
440
|
+
service = create_service()
|
|
441
|
+
agent = service.register_agent(name=os.environ.get("CG_AGENT_NAME", "f2g-agent"),
|
|
442
|
+
org_id=os.environ.get("CG_AGENT_ORG", "default"))
|
|
443
|
+
memories = fetch_mem0()
|
|
444
|
+
count = hydrate(service, agent.agent_id, memories) if memories else 0
|
|
445
|
+
sys.stderr.write(f"[contextgraph] Hydrated {count}/{len(memories)} mem0 memories\\n")
|
|
446
|
+
if not _try_run_mcp_sdk(service, agent.agent_id):
|
|
447
|
+
_JsonRpcServer(service, agent.agent_id).run()
|
|
448
|
+
|
|
449
|
+
if __name__ == "__main__":
|
|
450
|
+
main()
|
|
451
|
+
`;
|
|
452
|
+
await fs.writeFile(wrapperPath, wrapperScript);
|
|
453
|
+
await fs.chmod(wrapperPath, 0o755);
|
|
454
|
+
log.success(`ContextGraph bridge with mem0 hydration → ${wrapperPath}`);
|
|
455
|
+
}
|
|
456
|
+
catch {
|
|
457
|
+
log.warn('ContextGraph bridge setup failed — install Python 3.11+ and retry');
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { log } from '../utils/logger.js';
|
|
5
|
+
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
7
|
+
const registryDir = path.resolve(__dirname, '..', '..', 'registry');
|
|
8
|
+
export async function listCommand(options) {
|
|
9
|
+
const config = await loadConfig();
|
|
10
|
+
const showAll = !options.mcps && !options.skills && !options.providers;
|
|
11
|
+
if (showAll || options.mcps) {
|
|
12
|
+
log.header('MCP Servers');
|
|
13
|
+
const registry = await fs.readJson(path.join(registryDir, 'mcps.json'));
|
|
14
|
+
for (const mcp of registry.mcps) {
|
|
15
|
+
const installed = config?.installedMcps.includes(mcp.id);
|
|
16
|
+
const status = installed ? chalk.green('✔') : chalk.dim('○');
|
|
17
|
+
const freeTag = mcp.free ? chalk.green(' free') : '';
|
|
18
|
+
console.log(` ${status} ${chalk.bold(mcp.name)}${freeTag} — ${mcp.description}`);
|
|
19
|
+
if (mcp.requiresEnv.length > 0) {
|
|
20
|
+
console.log(chalk.dim(` requires: ${mcp.requiresEnv.join(', ')}`));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (showAll || options.providers) {
|
|
25
|
+
log.header('Providers');
|
|
26
|
+
const registry = await fs.readJson(path.join(registryDir, 'providers.json'));
|
|
27
|
+
for (const p of registry.providers) {
|
|
28
|
+
const active = config?.provider === p.id;
|
|
29
|
+
const status = active ? chalk.green('✔') : chalk.dim('○');
|
|
30
|
+
const freeTag = p.free ? chalk.green(' free') : p.free === false ? chalk.yellow(' paid') : '';
|
|
31
|
+
console.log(` ${status} ${chalk.bold(p.name)}${freeTag} — ${p.description}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (showAll || options.skills) {
|
|
35
|
+
log.header('Skill Sources');
|
|
36
|
+
const registry = await fs.readJson(path.join(registryDir, 'skills.json'));
|
|
37
|
+
for (const s of registry.sources) {
|
|
38
|
+
console.log(` ${chalk.bold(s.name)} — ${s.description}`);
|
|
39
|
+
if (s.picks) {
|
|
40
|
+
const counts = [];
|
|
41
|
+
if (s.picks.agents)
|
|
42
|
+
counts.push(`${s.picks.agents.length} agents`);
|
|
43
|
+
if (s.picks.skills)
|
|
44
|
+
counts.push(`${s.picks.skills.length} skills`);
|
|
45
|
+
if (s.picks.instructions)
|
|
46
|
+
counts.push(`${s.picks.instructions.length} instructions`);
|
|
47
|
+
console.log(chalk.dim(` picks: ${counts.join(', ')}`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAQpE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAEvE,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAClF,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;gBACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function removeCommand(mcpId: string): Promise<void>;
|