f2g-telco 0.1.3 → 0.1.4
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/dist/commands/status.js
CHANGED
|
@@ -1,20 +1,66 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { loadConfig, getToolPaths } from '../utils/config.js';
|
|
3
6
|
import { log } from '../utils/logger.js';
|
|
4
7
|
export async function statusCommand() {
|
|
5
8
|
const config = await loadConfig();
|
|
6
9
|
if (!config) {
|
|
7
|
-
log.error('No F2G-Telco config found. Run: f2g-telco init');
|
|
10
|
+
log.error('No F2G-Telco config found. Run: npx f2g-telco init');
|
|
8
11
|
return;
|
|
9
12
|
}
|
|
13
|
+
const home = os.homedir();
|
|
14
|
+
const paths = getToolPaths(config.tool);
|
|
15
|
+
// MCP config check
|
|
16
|
+
let mcpCount = 0;
|
|
17
|
+
try {
|
|
18
|
+
if (config.tool === 'crush') {
|
|
19
|
+
const crush = await fs.readJson(paths.mcpConfig);
|
|
20
|
+
mcpCount = Object.keys(crush.mcp || {}).length;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const kiro = await fs.readJson(paths.mcpConfig);
|
|
24
|
+
mcpCount = Object.keys(kiro.mcpServers || {}).length;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch { /* config unreadable */ }
|
|
28
|
+
// Skills count
|
|
29
|
+
let skillCount = 0;
|
|
30
|
+
try {
|
|
31
|
+
const entries = await fs.readdir(paths.skills);
|
|
32
|
+
skillCount = entries.length;
|
|
33
|
+
}
|
|
34
|
+
catch { /* dir missing */ }
|
|
35
|
+
// Inventory check
|
|
36
|
+
const invExists = await fs.pathExists(config.paths.inventory);
|
|
37
|
+
let invLines = 0;
|
|
38
|
+
if (invExists) {
|
|
39
|
+
const content = await fs.readFile(config.paths.inventory, 'utf-8');
|
|
40
|
+
invLines = content.split('\n').length;
|
|
41
|
+
}
|
|
42
|
+
// Providers from config
|
|
43
|
+
const providers = config.provider ? config.provider.split(',').map(p => p.trim()) : ['unknown'];
|
|
10
44
|
console.log(`
|
|
11
|
-
${chalk.bold('F2G-Telco')} v${config.version}
|
|
45
|
+
${chalk.bold.blue('F2G-Telco')} v${config.version}
|
|
46
|
+
${'─'.repeat(40)}
|
|
47
|
+
|
|
48
|
+
${chalk.bold('Tool')} ${chalk.cyan(config.tool)}
|
|
49
|
+
${chalk.bold('Providers')} ${providers.map(p => chalk.cyan(p)).join(', ')}
|
|
50
|
+
${chalk.bold('MCPs')} ${chalk.green(String(config.installedMcps.length))} configured (${mcpCount} in ${config.tool} config)
|
|
51
|
+
${chalk.bold('Skills')} ${chalk.green(String(skillCount))} in ${paths.skills}
|
|
52
|
+
${chalk.bold('Inventory')} ${invExists ? chalk.green(`${invLines} lines`) : chalk.red('missing')}
|
|
53
|
+
|
|
54
|
+
${chalk.bold('Configured MCPs:')}
|
|
55
|
+
${config.installedMcps.map(m => ' ' + chalk.dim('• ') + m).join('\n ')}
|
|
12
56
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
57
|
+
${chalk.bold('Paths:')}
|
|
58
|
+
${chalk.dim(' Config: ')} ${config.paths.config}
|
|
59
|
+
${chalk.dim(' Skills: ')} ${paths.skills}
|
|
60
|
+
${chalk.dim(' Agents: ')} ${paths.agents}
|
|
61
|
+
${chalk.dim(' MCP file: ')} ${paths.mcpConfig}
|
|
62
|
+
${chalk.dim(' Inventory: ')} ${config.paths.inventory}
|
|
63
|
+
${chalk.dim(' Log: ')} ${path.join(home, '.f2g-telco', 'f2g-telco.log')}
|
|
18
64
|
`);
|
|
19
65
|
}
|
|
20
66
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,41 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { execSync } from 'child_process';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
2
6
|
import ora from 'ora';
|
|
7
|
+
import { loadConfig, getToolPaths } from '../utils/config.js';
|
|
3
8
|
import { log } from '../utils/logger.js';
|
|
4
|
-
import { loadConfig } from '../utils/config.js';
|
|
5
9
|
export async function updateCommand() {
|
|
6
10
|
log.header('F2G-Telco Update');
|
|
7
11
|
const config = await loadConfig();
|
|
8
12
|
if (!config) {
|
|
9
|
-
log.error('No F2G-Telco config found. Run: f2g-telco init');
|
|
13
|
+
log.error('No F2G-Telco config found. Run: npx f2g-telco init');
|
|
10
14
|
return;
|
|
11
15
|
}
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
const home = os.homedir();
|
|
17
|
+
let updated = 0;
|
|
18
|
+
// 1. Check for CLI updates via npm
|
|
19
|
+
const s1 = ora('Checking for f2g-telco updates...').start();
|
|
14
20
|
try {
|
|
15
|
-
execSync('npm
|
|
16
|
-
|
|
21
|
+
const latest = execSync('npm view f2g-telco version 2>/dev/null', {
|
|
22
|
+
encoding: 'utf-8', timeout: 15_000,
|
|
23
|
+
}).trim();
|
|
24
|
+
if (latest && latest !== config.version) {
|
|
25
|
+
s1.succeed(`New version available: ${chalk.green(latest)} (current: ${config.version})`);
|
|
26
|
+
console.log(chalk.dim(` Run: npx f2g-telco@${latest} init to upgrade`));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
s1.succeed(`f2g-telco is up to date (v${config.version})`);
|
|
30
|
+
}
|
|
17
31
|
}
|
|
18
32
|
catch {
|
|
19
|
-
|
|
33
|
+
s1.info('Could not check npm registry (offline?)');
|
|
20
34
|
}
|
|
21
|
-
// Update skill
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
// 2. Update skill repositories
|
|
36
|
+
const skillDirs = ['awesome-copilot', 'agency-agents', 'claude-best-practices'];
|
|
37
|
+
const agentsDir = path.join(home, '.agents');
|
|
38
|
+
for (const dir of skillDirs) {
|
|
39
|
+
const repoPath = path.join(agentsDir, dir);
|
|
40
|
+
if (!await fs.pathExists(path.join(repoPath, '.git')))
|
|
41
|
+
continue;
|
|
42
|
+
const s = ora(`Updating ${dir}...`).start();
|
|
43
|
+
try {
|
|
44
|
+
const result = execSync(`git -C "${repoPath}" pull --ff-only 2>&1`, {
|
|
45
|
+
encoding: 'utf-8', timeout: 30_000,
|
|
46
|
+
});
|
|
47
|
+
if (result.includes('Already up to date')) {
|
|
48
|
+
s.succeed(`${dir} — already up to date`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
s.succeed(`${dir} — ${chalk.green('updated')}`);
|
|
52
|
+
updated++;
|
|
31
53
|
}
|
|
32
|
-
catch { /* skip if not cloned */ }
|
|
33
54
|
}
|
|
34
|
-
|
|
55
|
+
catch {
|
|
56
|
+
s.warn(`${dir} — could not update (check manually)`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// 3. Refresh MCP config from registry
|
|
60
|
+
const s3 = ora('Refreshing MCP configuration...').start();
|
|
61
|
+
try {
|
|
62
|
+
const registryPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', '..', 'registry', 'mcps.json');
|
|
63
|
+
// For npx usage, registry is bundled — just confirm config is intact
|
|
64
|
+
const paths = getToolPaths(config.tool);
|
|
65
|
+
if (await fs.pathExists(paths.mcpConfig)) {
|
|
66
|
+
s3.succeed('MCP configuration intact');
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
s3.warn('MCP config file missing — run: npx f2g-telco init');
|
|
70
|
+
}
|
|
35
71
|
}
|
|
36
72
|
catch {
|
|
37
|
-
|
|
73
|
+
s3.info('MCP config check skipped');
|
|
74
|
+
}
|
|
75
|
+
// 4. Verify INVENTORY.md
|
|
76
|
+
const s4 = ora('Checking INVENTORY.md...').start();
|
|
77
|
+
if (await fs.pathExists(config.paths.inventory)) {
|
|
78
|
+
s4.succeed('INVENTORY.md present');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
s4.warn('INVENTORY.md missing — run: npx f2g-telco init');
|
|
82
|
+
}
|
|
83
|
+
// Summary
|
|
84
|
+
console.log('');
|
|
85
|
+
if (updated > 0) {
|
|
86
|
+
log.success(`Update complete — ${updated} skill source(s) updated.`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
log.success('Everything is up to date.');
|
|
38
90
|
}
|
|
39
|
-
log.
|
|
91
|
+
console.log(chalk.dim(' Run: npx f2g-telco doctor to verify health'));
|
|
92
|
+
console.log('');
|
|
40
93
|
}
|
|
41
94
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|