@staticn0va/wigolo 0.6.4 → 0.6.5
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 +43 -19
- package/assets/blocks/claude-code/CLAUDE.md.block +20 -0
- package/assets/blocks/claude-code/wigolo-command.md +40 -0
- package/assets/blocks/cursor/wigolo.mdc +46 -0
- package/assets/blocks/gemini-cli/GEMINI.md.block +18 -0
- package/assets/blocks/vscode/copilot-instructions.md.block +18 -0
- package/assets/skills/wigolo/SKILL.md +50 -0
- package/assets/skills/wigolo/rules/cache-first.md +30 -0
- package/assets/skills/wigolo/rules/synthesis.md +43 -0
- package/assets/skills/wigolo-agent/SKILL.md +73 -0
- package/assets/skills/wigolo-crawl/SKILL.md +60 -0
- package/assets/skills/wigolo-extract/SKILL.md +59 -0
- package/assets/skills/wigolo-fetch/SKILL.md +65 -0
- package/assets/skills/wigolo-find-similar/SKILL.md +72 -0
- package/assets/skills/wigolo-research/SKILL.md +77 -0
- package/assets/skills/wigolo-search/SKILL.md +78 -0
- package/dist/agent/pipeline.js +3 -3
- package/dist/agent/pipeline.js.map +1 -1
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +44 -33
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/agents/antigravity.d.ts +20 -0
- package/dist/cli/agents/antigravity.d.ts.map +1 -0
- package/dist/cli/agents/antigravity.js +56 -0
- package/dist/cli/agents/antigravity.js.map +1 -0
- package/dist/cli/agents/claude-code.d.ts +25 -0
- package/dist/cli/agents/claude-code.d.ts.map +1 -0
- package/dist/cli/agents/claude-code.js +117 -0
- package/dist/cli/agents/claude-code.js.map +1 -0
- package/dist/cli/agents/cursor.d.ts +21 -0
- package/dist/cli/agents/cursor.d.ts.map +1 -0
- package/dist/cli/agents/cursor.js +57 -0
- package/dist/cli/agents/cursor.js.map +1 -0
- package/dist/cli/agents/gemini-cli.d.ts +21 -0
- package/dist/cli/agents/gemini-cli.d.ts.map +1 -0
- package/dist/cli/agents/gemini-cli.js +55 -0
- package/dist/cli/agents/gemini-cli.js.map +1 -0
- package/dist/cli/agents/registry.d.ts +21 -0
- package/dist/cli/agents/registry.d.ts.map +1 -0
- package/dist/cli/agents/registry.js +20 -0
- package/dist/cli/agents/registry.js.map +1 -0
- package/dist/cli/agents/utils.d.ts +26 -0
- package/dist/cli/agents/utils.d.ts.map +1 -0
- package/dist/cli/agents/utils.js +151 -0
- package/dist/cli/agents/utils.js.map +1 -0
- package/dist/cli/agents/vscode.d.ts +21 -0
- package/dist/cli/agents/vscode.d.ts.map +1 -0
- package/dist/cli/agents/vscode.js +58 -0
- package/dist/cli/agents/vscode.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +92 -54
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/tui/components/AgentSelect.d.ts +13 -0
- package/dist/cli/tui/components/AgentSelect.d.ts.map +1 -0
- package/dist/cli/tui/components/AgentSelect.js +88 -0
- package/dist/cli/tui/components/AgentSelect.js.map +1 -0
- package/dist/cli/tui/components/Banner.d.ts +6 -0
- package/dist/cli/tui/components/Banner.d.ts.map +1 -0
- package/dist/cli/tui/components/Banner.js +15 -0
- package/dist/cli/tui/components/Banner.js.map +1 -0
- package/dist/cli/tui/components/BrowserSelect.d.ts +7 -0
- package/dist/cli/tui/components/BrowserSelect.d.ts.map +1 -0
- package/dist/cli/tui/components/BrowserSelect.js +12 -0
- package/dist/cli/tui/components/BrowserSelect.js.map +1 -0
- package/dist/cli/tui/components/InstallProgress.d.ts +9 -0
- package/dist/cli/tui/components/InstallProgress.d.ts.map +1 -0
- package/dist/cli/tui/components/InstallProgress.js +34 -0
- package/dist/cli/tui/components/InstallProgress.js.map +1 -0
- package/dist/cli/tui/components/SkillInstall.d.ts +14 -0
- package/dist/cli/tui/components/SkillInstall.d.ts.map +1 -0
- package/dist/cli/tui/components/SkillInstall.js +80 -0
- package/dist/cli/tui/components/SkillInstall.js.map +1 -0
- package/dist/cli/tui/components/Summary.d.ts +22 -0
- package/dist/cli/tui/components/Summary.d.ts.map +1 -0
- package/dist/cli/tui/components/Summary.js +19 -0
- package/dist/cli/tui/components/Summary.js.map +1 -0
- package/dist/cli/tui/components/SystemCheck.d.ts +8 -0
- package/dist/cli/tui/components/SystemCheck.d.ts.map +1 -0
- package/dist/cli/tui/components/SystemCheck.js +36 -0
- package/dist/cli/tui/components/SystemCheck.js.map +1 -0
- package/dist/cli/tui/components/Verification.d.ts +8 -0
- package/dist/cli/tui/components/Verification.d.ts.map +1 -0
- package/dist/cli/tui/components/Verification.js +31 -0
- package/dist/cli/tui/components/Verification.js.map +1 -0
- package/dist/cli/tui/hooks/useAgentDetect.d.ts +6 -0
- package/dist/cli/tui/hooks/useAgentDetect.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useAgentDetect.js +18 -0
- package/dist/cli/tui/hooks/useAgentDetect.js.map +1 -0
- package/dist/cli/tui/hooks/useInstall.d.ts +14 -0
- package/dist/cli/tui/hooks/useInstall.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useInstall.js +70 -0
- package/dist/cli/tui/hooks/useInstall.js.map +1 -0
- package/dist/cli/tui/hooks/useSystemCheck.d.ts +13 -0
- package/dist/cli/tui/hooks/useSystemCheck.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSystemCheck.js +97 -0
- package/dist/cli/tui/hooks/useSystemCheck.js.map +1 -0
- package/dist/cli/tui/hooks/useVerify.d.ts +14 -0
- package/dist/cli/tui/hooks/useVerify.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useVerify.js +52 -0
- package/dist/cli/tui/hooks/useVerify.js.map +1 -0
- package/dist/cli/tui/ink-init.d.ts +2 -0
- package/dist/cli/tui/ink-init.d.ts.map +1 -0
- package/dist/cli/tui/ink-init.js +125 -0
- package/dist/cli/tui/ink-init.js.map +1 -0
- package/dist/cli/tui/status-python.js +1 -1
- package/dist/cli/tui/status-python.js.map +1 -1
- package/dist/cli/tui/utils/config-writer.d.ts +3 -0
- package/dist/cli/tui/utils/config-writer.d.ts.map +1 -0
- package/dist/cli/tui/utils/config-writer.js +20 -0
- package/dist/cli/tui/utils/config-writer.js.map +1 -0
- package/dist/cli/tui/utils/suppress-logs.d.ts +3 -0
- package/dist/cli/tui/utils/suppress-logs.d.ts.map +1 -0
- package/dist/cli/tui/utils/suppress-logs.js +7 -0
- package/dist/cli/tui/utils/suppress-logs.js.map +1 -0
- package/dist/cli/tui/verify-suggestions.d.ts +1 -1
- package/dist/cli/tui/verify-suggestions.d.ts.map +1 -1
- package/dist/cli/tui/verify-suggestions.js +0 -3
- package/dist/cli/tui/verify-suggestions.js.map +1 -1
- package/dist/cli/tui/verify.d.ts +0 -3
- package/dist/cli/tui/verify.d.ts.map +1 -1
- package/dist/cli/tui/verify.js +0 -26
- package/dist/cli/tui/verify.js.map +1 -1
- package/dist/cli/uninstall.d.ts +2 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +50 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/embedding/embed.d.ts +2 -0
- package/dist/embedding/embed.d.ts.map +1 -1
- package/dist/embedding/embed.js +18 -0
- package/dist/embedding/embed.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -2
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +8 -7
- package/dist/instructions.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +29 -1
- package/dist/logger.js.map +1 -1
- package/dist/research/brief.d.ts +4 -2
- package/dist/research/brief.d.ts.map +1 -1
- package/dist/research/brief.js +127 -1
- package/dist/research/brief.js.map +1 -1
- package/dist/research/decompose.d.ts +7 -0
- package/dist/research/decompose.d.ts.map +1 -1
- package/dist/research/decompose.js +126 -2
- package/dist/research/decompose.js.map +1 -1
- package/dist/research/pipeline.d.ts +1 -1
- package/dist/research/pipeline.d.ts.map +1 -1
- package/dist/research/pipeline.js +12 -7
- package/dist/research/pipeline.js.map +1 -1
- package/dist/search/engines/bing.d.ts.map +1 -1
- package/dist/search/engines/bing.js +40 -0
- package/dist/search/engines/bing.js.map +1 -1
- package/dist/search/engines/duckduckgo.d.ts.map +1 -1
- package/dist/search/engines/duckduckgo.js +13 -1
- package/dist/search/engines/duckduckgo.js.map +1 -1
- package/dist/search/engines/startpage.d.ts.map +1 -1
- package/dist/search/engines/startpage.js +21 -1
- package/dist/search/engines/startpage.js.map +1 -1
- package/dist/search/find-similar.d.ts.map +1 -1
- package/dist/search/find-similar.js +28 -8
- package/dist/search/find-similar.js.map +1 -1
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +6 -1
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/search.js +1 -1
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { mergeBlock, removeBlock, readAsset, readSkillDir } from './utils.js';
|
|
6
|
+
function claudeDir() {
|
|
7
|
+
return join(homedir(), '.claude');
|
|
8
|
+
}
|
|
9
|
+
function detect() {
|
|
10
|
+
try {
|
|
11
|
+
execSync('which claude', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function buildMcpArgs(cmd) {
|
|
19
|
+
return ['mcp', 'add', 'wigolo', '--', cmd.command, ...cmd.args];
|
|
20
|
+
}
|
|
21
|
+
async function installMcp(cmd) {
|
|
22
|
+
const args = buildMcpArgs(cmd);
|
|
23
|
+
try {
|
|
24
|
+
execSync(`claude ${args.join(' ')}`, {
|
|
25
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
26
|
+
timeout: 15000,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const e = err;
|
|
31
|
+
const msg = e.message ?? '';
|
|
32
|
+
// "already exists" is fine
|
|
33
|
+
if (!msg.includes('already exists') && !msg.includes('already registered')) {
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function installInstructions() {
|
|
39
|
+
const block = readAsset('blocks/claude-code/CLAUDE.md.block');
|
|
40
|
+
const target = join(claudeDir(), 'CLAUDE.md');
|
|
41
|
+
mergeBlock(target, block);
|
|
42
|
+
}
|
|
43
|
+
const SKILL_DIRS = [
|
|
44
|
+
'wigolo',
|
|
45
|
+
'wigolo-search',
|
|
46
|
+
'wigolo-fetch',
|
|
47
|
+
'wigolo-crawl',
|
|
48
|
+
'wigolo-extract',
|
|
49
|
+
'wigolo-find-similar',
|
|
50
|
+
'wigolo-research',
|
|
51
|
+
'wigolo-agent',
|
|
52
|
+
];
|
|
53
|
+
async function installSkills() {
|
|
54
|
+
const skillsBase = join(claudeDir(), 'skills');
|
|
55
|
+
mkdirSync(skillsBase, { recursive: true });
|
|
56
|
+
for (const dirName of SKILL_DIRS) {
|
|
57
|
+
const files = readSkillDir(dirName);
|
|
58
|
+
const dest = join(skillsBase, dirName);
|
|
59
|
+
mkdirSync(dest, { recursive: true });
|
|
60
|
+
for (const [relPath, content] of Object.entries(files)) {
|
|
61
|
+
const target = join(dest, relPath);
|
|
62
|
+
mkdirSync(join(dest, relPath, '..'), { recursive: true });
|
|
63
|
+
writeFileSync(target, content, 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function installCommand() {
|
|
68
|
+
const content = readAsset('blocks/claude-code/wigolo-command.md');
|
|
69
|
+
const commandsDir = join(claudeDir(), 'commands');
|
|
70
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
71
|
+
writeFileSync(join(commandsDir, 'wigolo.md'), content, 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
async function uninstall() {
|
|
74
|
+
const removed = [];
|
|
75
|
+
// Remove MCP
|
|
76
|
+
try {
|
|
77
|
+
execSync('claude mcp remove wigolo', { stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
|
|
78
|
+
removed.push('MCP server (claude mcp remove)');
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// already gone or claude not found
|
|
82
|
+
}
|
|
83
|
+
// Remove instructions block
|
|
84
|
+
const claudeMd = join(claudeDir(), 'CLAUDE.md');
|
|
85
|
+
if (existsSync(claudeMd) && removeBlock(claudeMd)) {
|
|
86
|
+
removed.push('~/.claude/CLAUDE.md block');
|
|
87
|
+
}
|
|
88
|
+
// Remove skill directories
|
|
89
|
+
const skillsBase = join(claudeDir(), 'skills');
|
|
90
|
+
for (const dirName of SKILL_DIRS) {
|
|
91
|
+
const skillDir = join(skillsBase, dirName);
|
|
92
|
+
if (existsSync(skillDir)) {
|
|
93
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
94
|
+
removed.push(`~/.claude/skills/${dirName}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Remove command
|
|
98
|
+
const commandFile = join(claudeDir(), 'commands', 'wigolo.md');
|
|
99
|
+
if (existsSync(commandFile)) {
|
|
100
|
+
rmSync(commandFile);
|
|
101
|
+
removed.push('~/.claude/commands/wigolo.md');
|
|
102
|
+
}
|
|
103
|
+
return { removed };
|
|
104
|
+
}
|
|
105
|
+
export const claudeCodeHandler = {
|
|
106
|
+
id: 'claude-code',
|
|
107
|
+
displayName: 'Claude Code',
|
|
108
|
+
supportsSkills: true,
|
|
109
|
+
supportsCommands: true,
|
|
110
|
+
detect,
|
|
111
|
+
installMcp,
|
|
112
|
+
installInstructions,
|
|
113
|
+
installSkills,
|
|
114
|
+
installCommand,
|
|
115
|
+
uninstall,
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli/agents/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare function detect(): boolean;
|
|
2
|
+
declare function installMcp(cmd: {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
declare function installInstructions(): Promise<void>;
|
|
7
|
+
declare function uninstall(): Promise<{
|
|
8
|
+
removed: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare const cursorHandler: {
|
|
11
|
+
id: "cursor";
|
|
12
|
+
displayName: string;
|
|
13
|
+
supportsSkills: boolean;
|
|
14
|
+
supportsCommands: boolean;
|
|
15
|
+
detect: typeof detect;
|
|
16
|
+
installMcp: typeof installMcp;
|
|
17
|
+
installInstructions: typeof installInstructions;
|
|
18
|
+
uninstall: typeof uninstall;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/cli/agents/cursor.ts"],"names":[],"mappings":"AAYA,iBAAS,MAAM,IAAI,OAAO,CAazB;AAED,iBAAe,UAAU,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED,iBAAe,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKlD;AAED,iBAAe,SAAS,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgBzD;AAED,eAAO,MAAM,aAAa;;;;;;;;;CASzB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { mergeMcpJson, removeMcpJson, readAsset } from './utils.js';
|
|
6
|
+
const MCP_KEY_PATH = ['mcpServers', 'wigolo'];
|
|
7
|
+
function cursorDir() {
|
|
8
|
+
return join(homedir(), '.cursor');
|
|
9
|
+
}
|
|
10
|
+
function detect() {
|
|
11
|
+
const home = homedir();
|
|
12
|
+
return (existsSync(join(home, '.cursor')) ||
|
|
13
|
+
(() => {
|
|
14
|
+
try {
|
|
15
|
+
execSync('which cursor', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
})());
|
|
22
|
+
}
|
|
23
|
+
async function installMcp(cmd) {
|
|
24
|
+
const configPath = join(cursorDir(), 'mcp.json');
|
|
25
|
+
mergeMcpJson(configPath, { command: cmd.command, args: cmd.args }, MCP_KEY_PATH);
|
|
26
|
+
}
|
|
27
|
+
async function installInstructions() {
|
|
28
|
+
const content = readAsset('blocks/cursor/wigolo.mdc');
|
|
29
|
+
const rulesDir = join(cursorDir(), 'rules');
|
|
30
|
+
mkdirSync(rulesDir, { recursive: true });
|
|
31
|
+
writeFileSync(join(rulesDir, 'wigolo.mdc'), content, 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
async function uninstall() {
|
|
34
|
+
const removed = [];
|
|
35
|
+
const configPath = join(cursorDir(), 'mcp.json');
|
|
36
|
+
if (existsSync(configPath)) {
|
|
37
|
+
removeMcpJson(configPath, MCP_KEY_PATH);
|
|
38
|
+
removed.push('~/.cursor/mcp.json (wigolo entry)');
|
|
39
|
+
}
|
|
40
|
+
const rulesFile = join(cursorDir(), 'rules', 'wigolo.mdc');
|
|
41
|
+
if (existsSync(rulesFile)) {
|
|
42
|
+
rmSync(rulesFile);
|
|
43
|
+
removed.push('~/.cursor/rules/wigolo.mdc');
|
|
44
|
+
}
|
|
45
|
+
return { removed };
|
|
46
|
+
}
|
|
47
|
+
export const cursorHandler = {
|
|
48
|
+
id: 'cursor',
|
|
49
|
+
displayName: 'Cursor',
|
|
50
|
+
supportsSkills: false,
|
|
51
|
+
supportsCommands: false,
|
|
52
|
+
detect,
|
|
53
|
+
installMcp,
|
|
54
|
+
installInstructions,
|
|
55
|
+
uninstall,
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/cli/agents/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE9C,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,MAAM;IACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC,GAAG,EAAE;YACJ,IAAI,CAAC;gBACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAwC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,QAAiB;IACrB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,MAAM;IACN,UAAU;IACV,mBAAmB;IACnB,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare function detect(): boolean;
|
|
2
|
+
declare function installMcp(cmd: {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
declare function installInstructions(): Promise<void>;
|
|
7
|
+
declare function uninstall(): Promise<{
|
|
8
|
+
removed: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare const geminiCliHandler: {
|
|
11
|
+
id: "gemini-cli";
|
|
12
|
+
displayName: string;
|
|
13
|
+
supportsSkills: boolean;
|
|
14
|
+
supportsCommands: boolean;
|
|
15
|
+
detect: typeof detect;
|
|
16
|
+
installMcp: typeof installMcp;
|
|
17
|
+
installInstructions: typeof installInstructions;
|
|
18
|
+
uninstall: typeof uninstall;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=gemini-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli.d.ts","sourceRoot":"","sources":["../../../src/cli/agents/gemini-cli.ts"],"names":[],"mappings":"AAYA,iBAAS,MAAM,IAAI,OAAO,CAQzB;AAED,iBAAe,UAAU,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF;AAED,iBAAe,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKlD;AAED,iBAAe,SAAS,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAezD;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;CAS5B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { mergeMcpJson, removeMcpJson, mergeBlock, removeBlock, readAsset } from './utils.js';
|
|
6
|
+
const MCP_KEY_PATH = ['mcpServers', 'wigolo'];
|
|
7
|
+
function geminiDir() {
|
|
8
|
+
return join(homedir(), '.gemini');
|
|
9
|
+
}
|
|
10
|
+
function detect() {
|
|
11
|
+
if (existsSync(geminiDir()))
|
|
12
|
+
return true;
|
|
13
|
+
try {
|
|
14
|
+
execSync('which gemini', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function installMcp(cmd) {
|
|
22
|
+
const configPath = join(geminiDir(), 'settings.json');
|
|
23
|
+
mkdirSync(geminiDir(), { recursive: true });
|
|
24
|
+
mergeMcpJson(configPath, { command: cmd.command, args: cmd.args }, MCP_KEY_PATH);
|
|
25
|
+
}
|
|
26
|
+
async function installInstructions() {
|
|
27
|
+
const block = readAsset('blocks/gemini-cli/GEMINI.md.block');
|
|
28
|
+
// Gemini CLI looks for GEMINI.md in CWD or home directory
|
|
29
|
+
const target = join(process.cwd(), 'GEMINI.md');
|
|
30
|
+
mergeBlock(target, block);
|
|
31
|
+
}
|
|
32
|
+
async function uninstall() {
|
|
33
|
+
const removed = [];
|
|
34
|
+
const configPath = join(geminiDir(), 'settings.json');
|
|
35
|
+
if (existsSync(configPath)) {
|
|
36
|
+
removeMcpJson(configPath, MCP_KEY_PATH);
|
|
37
|
+
removed.push('~/.gemini/settings.json (wigolo entry)');
|
|
38
|
+
}
|
|
39
|
+
const instructionsFile = join(process.cwd(), 'GEMINI.md');
|
|
40
|
+
if (existsSync(instructionsFile) && removeBlock(instructionsFile)) {
|
|
41
|
+
removed.push('GEMINI.md block');
|
|
42
|
+
}
|
|
43
|
+
return { removed };
|
|
44
|
+
}
|
|
45
|
+
export const geminiCliHandler = {
|
|
46
|
+
id: 'gemini-cli',
|
|
47
|
+
displayName: 'Gemini CLI',
|
|
48
|
+
supportsSkills: false,
|
|
49
|
+
supportsCommands: false,
|
|
50
|
+
detect,
|
|
51
|
+
installMcp,
|
|
52
|
+
installInstructions,
|
|
53
|
+
uninstall,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=gemini-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli.js","sourceRoot":"","sources":["../../../src/cli/agents/gemini-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAU,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE9C,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,MAAM;IACb,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAwC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;IACtD,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,KAAK,GAAG,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC7D,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAChD,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,YAAqB;IACzB,WAAW,EAAE,YAAY;IACzB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,MAAM;IACN,UAAU;IACV,mBAAmB;IACnB,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type AgentSkillHandler = {
|
|
2
|
+
id: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
supportsSkills: boolean;
|
|
5
|
+
supportsCommands: boolean;
|
|
6
|
+
detect(): boolean;
|
|
7
|
+
installMcp(cmd: {
|
|
8
|
+
command: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
installInstructions(): Promise<void>;
|
|
12
|
+
installSkills?(): Promise<void>;
|
|
13
|
+
installCommand?(): Promise<void>;
|
|
14
|
+
uninstall(): Promise<{
|
|
15
|
+
removed: string[];
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
export declare const agentHandlers: readonly AgentSkillHandler[];
|
|
19
|
+
export declare function getAgentHandler(id: string): AgentSkillHandler | undefined;
|
|
20
|
+
export declare function detectInstalledHandlers(): AgentSkillHandler[];
|
|
21
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/agents/registry.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAC;IAClB,UAAU,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,aAAa,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAMrD,CAAC;AAMF,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzE;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,EAAE,CAE7D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { claudeCodeHandler } from './claude-code.js';
|
|
2
|
+
import { cursorHandler } from './cursor.js';
|
|
3
|
+
import { vscodeHandler } from './vscode.js';
|
|
4
|
+
import { geminiCliHandler } from './gemini-cli.js';
|
|
5
|
+
import { antigravityHandler } from './antigravity.js';
|
|
6
|
+
export const agentHandlers = [
|
|
7
|
+
claudeCodeHandler,
|
|
8
|
+
cursorHandler,
|
|
9
|
+
vscodeHandler,
|
|
10
|
+
geminiCliHandler,
|
|
11
|
+
antigravityHandler,
|
|
12
|
+
];
|
|
13
|
+
const handlerMap = new Map(agentHandlers.map((h) => [h.id, h]));
|
|
14
|
+
export function getAgentHandler(id) {
|
|
15
|
+
return handlerMap.get(id);
|
|
16
|
+
}
|
|
17
|
+
export function detectInstalledHandlers() {
|
|
18
|
+
return agentHandlers.filter((h) => h.detect());
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/agents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAetD,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,kBAAkB;CACnB,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACpC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare function getVersion(): string;
|
|
2
|
+
export declare function readAsset(relPath: string): string;
|
|
3
|
+
/** Returns { 'SKILL.md': content, 'rules/cache-first.md': content, ... } */
|
|
4
|
+
export declare function readSkillDir(name: string): Record<string, string>;
|
|
5
|
+
/**
|
|
6
|
+
* Merge a block (delimited by wigolo:start/wigolo:end markers) into a file.
|
|
7
|
+
* Creates the file if it doesn't exist.
|
|
8
|
+
* Replaces an existing block, or appends if no block present.
|
|
9
|
+
*/
|
|
10
|
+
export declare function mergeBlock(filePath: string, block: string): void;
|
|
11
|
+
/** Remove the wigolo block from a file. Returns true if a block was removed. */
|
|
12
|
+
export declare function removeBlock(filePath: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Create or merge an MCP server entry into a JSON config file.
|
|
15
|
+
* keyPath like ['mcpServers', 'wigolo'] navigates/creates nested keys.
|
|
16
|
+
* Other servers in the file are preserved.
|
|
17
|
+
*/
|
|
18
|
+
export declare function mergeMcpJson(configPath: string, entry: Record<string, unknown>, keyPath: string[]): void;
|
|
19
|
+
/** Remove the wigolo entry from a JSON MCP config, preserving other servers. */
|
|
20
|
+
export declare function removeMcpJson(configPath: string, keyPath: string[]): void;
|
|
21
|
+
/** Detect whether wigolo is installed globally and return the appropriate command. */
|
|
22
|
+
export declare function getMcpCommand(): {
|
|
23
|
+
command: string;
|
|
24
|
+
args: string[];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/cli/agents/utils.ts"],"names":[],"mappings":"AAWA,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBjE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwBhE;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiBrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI,CAuBN;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAmBzE;AAED,sFAAsF;AACtF,wBAAgB,aAAa,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAanE"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
function getPackageRoot() {
|
|
6
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
// dist/cli/agents/utils.js → ../../.. = package root
|
|
8
|
+
return join(here, '..', '..', '..');
|
|
9
|
+
}
|
|
10
|
+
export function getVersion() {
|
|
11
|
+
try {
|
|
12
|
+
const raw = readFileSync(join(getPackageRoot(), 'package.json'), 'utf-8');
|
|
13
|
+
const pkg = JSON.parse(raw);
|
|
14
|
+
return pkg.version ?? '0.0.0';
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return '0.0.0';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function readAsset(relPath) {
|
|
21
|
+
const full = join(getPackageRoot(), 'assets', relPath);
|
|
22
|
+
return readFileSync(full, 'utf-8').replace(/\{version\}/g, getVersion());
|
|
23
|
+
}
|
|
24
|
+
/** Returns { 'SKILL.md': content, 'rules/cache-first.md': content, ... } */
|
|
25
|
+
export function readSkillDir(name) {
|
|
26
|
+
const dir = join(getPackageRoot(), 'assets', 'skills', name);
|
|
27
|
+
const result = {};
|
|
28
|
+
const mainPath = join(dir, 'SKILL.md');
|
|
29
|
+
if (existsSync(mainPath)) {
|
|
30
|
+
result['SKILL.md'] = readFileSync(mainPath, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
const rulesDir = join(dir, 'rules');
|
|
33
|
+
if (existsSync(rulesDir)) {
|
|
34
|
+
for (const file of readdirSync(rulesDir)) {
|
|
35
|
+
if (file.endsWith('.md')) {
|
|
36
|
+
result[`rules/${file}`] = readFileSync(join(rulesDir, file), 'utf-8');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Merge a block (delimited by wigolo:start/wigolo:end markers) into a file.
|
|
44
|
+
* Creates the file if it doesn't exist.
|
|
45
|
+
* Replaces an existing block, or appends if no block present.
|
|
46
|
+
*/
|
|
47
|
+
export function mergeBlock(filePath, block) {
|
|
48
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
49
|
+
const START = '<!-- wigolo:start';
|
|
50
|
+
const END = '<!-- wigolo:end -->';
|
|
51
|
+
if (!existsSync(filePath)) {
|
|
52
|
+
writeFileSync(filePath, block.trimEnd() + '\n', 'utf-8');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
56
|
+
const startIdx = content.indexOf(START);
|
|
57
|
+
const endIdx = content.indexOf(END);
|
|
58
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
59
|
+
const before = content.slice(0, startIdx).trimEnd();
|
|
60
|
+
const after = content.slice(endIdx + END.length).trimStart();
|
|
61
|
+
const parts = [before, block.trimEnd(), after].filter(Boolean);
|
|
62
|
+
writeFileSync(filePath, parts.join('\n\n') + '\n', 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const trimmed = content.trimEnd();
|
|
66
|
+
writeFileSync(filePath, trimmed + '\n\n' + block.trimEnd() + '\n', 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Remove the wigolo block from a file. Returns true if a block was removed. */
|
|
70
|
+
export function removeBlock(filePath) {
|
|
71
|
+
if (!existsSync(filePath))
|
|
72
|
+
return false;
|
|
73
|
+
const START = '<!-- wigolo:start';
|
|
74
|
+
const END = '<!-- wigolo:end -->';
|
|
75
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
76
|
+
const startIdx = content.indexOf(START);
|
|
77
|
+
const endIdx = content.indexOf(END);
|
|
78
|
+
if (startIdx === -1 || endIdx === -1)
|
|
79
|
+
return false;
|
|
80
|
+
const before = content.slice(0, startIdx).trimEnd();
|
|
81
|
+
const after = content.slice(endIdx + END.length).trimStart();
|
|
82
|
+
const parts = [before, after].filter(Boolean);
|
|
83
|
+
const newContent = parts.join('\n\n');
|
|
84
|
+
writeFileSync(filePath, newContent ? newContent + '\n' : '', 'utf-8');
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create or merge an MCP server entry into a JSON config file.
|
|
89
|
+
* keyPath like ['mcpServers', 'wigolo'] navigates/creates nested keys.
|
|
90
|
+
* Other servers in the file are preserved.
|
|
91
|
+
*/
|
|
92
|
+
export function mergeMcpJson(configPath, entry, keyPath) {
|
|
93
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
94
|
+
let root = {};
|
|
95
|
+
if (existsSync(configPath)) {
|
|
96
|
+
try {
|
|
97
|
+
root = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
root = {};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
let obj = root;
|
|
104
|
+
for (let i = 0; i < keyPath.length - 1; i++) {
|
|
105
|
+
const key = keyPath[i];
|
|
106
|
+
if (typeof obj[key] !== 'object' || obj[key] === null) {
|
|
107
|
+
obj[key] = {};
|
|
108
|
+
}
|
|
109
|
+
obj = obj[key];
|
|
110
|
+
}
|
|
111
|
+
obj[keyPath[keyPath.length - 1]] = entry;
|
|
112
|
+
writeFileSync(configPath, JSON.stringify(root, null, 2) + '\n', 'utf-8');
|
|
113
|
+
}
|
|
114
|
+
/** Remove the wigolo entry from a JSON MCP config, preserving other servers. */
|
|
115
|
+
export function removeMcpJson(configPath, keyPath) {
|
|
116
|
+
if (!existsSync(configPath))
|
|
117
|
+
return;
|
|
118
|
+
let root;
|
|
119
|
+
try {
|
|
120
|
+
root = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
let obj = root;
|
|
126
|
+
for (let i = 0; i < keyPath.length - 1; i++) {
|
|
127
|
+
const key = keyPath[i];
|
|
128
|
+
if (typeof obj[key] !== 'object' || obj[key] === null)
|
|
129
|
+
return;
|
|
130
|
+
obj = obj[key];
|
|
131
|
+
}
|
|
132
|
+
delete obj[keyPath[keyPath.length - 1]];
|
|
133
|
+
writeFileSync(configPath, JSON.stringify(root, null, 2) + '\n', 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
/** Detect whether wigolo is installed globally and return the appropriate command. */
|
|
136
|
+
export function getMcpCommand() {
|
|
137
|
+
try {
|
|
138
|
+
const path = execSync('which wigolo', {
|
|
139
|
+
encoding: 'utf-8',
|
|
140
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
141
|
+
}).trim();
|
|
142
|
+
if (path) {
|
|
143
|
+
return { command: 'wigolo', args: [] };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// not found globally
|
|
148
|
+
}
|
|
149
|
+
return { command: 'npx', args: ['-y', '@staticn0va/wigolo'] };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cli/agents/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,qDAAqD;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACpD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAa;IACxD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,mBAAmB,CAAC;IAClC,MAAM,GAAG,GAAG,qBAAqB,CAAC;IAElC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,KAAK,GAAG,mBAAmB,CAAC;IAClC,MAAM,GAAG,GAAG,qBAAqB,CAAC;IAClC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,KAA8B,EAC9B,OAAiB;IAEjB,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA4B,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QACD,GAAG,GAAG,GAAG,CAAC,GAAG,CAA4B,CAAC;IAC5C,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAEzC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,OAAiB;IACjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEpC,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA4B,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,OAAO;QAC9D,GAAG,GAAG,GAAG,CAAC,GAAG,CAA4B,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAExC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,EAAE;YACpC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare function detect(): boolean;
|
|
2
|
+
declare function installMcp(cmd: {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
declare function installInstructions(): Promise<void>;
|
|
7
|
+
declare function uninstall(): Promise<{
|
|
8
|
+
removed: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare const vscodeHandler: {
|
|
11
|
+
id: "vscode";
|
|
12
|
+
displayName: string;
|
|
13
|
+
supportsSkills: boolean;
|
|
14
|
+
supportsCommands: boolean;
|
|
15
|
+
detect: typeof detect;
|
|
16
|
+
installMcp: typeof installMcp;
|
|
17
|
+
installInstructions: typeof installInstructions;
|
|
18
|
+
uninstall: typeof uninstall;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=vscode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../../../src/cli/agents/vscode.ts"],"names":[],"mappings":"AAaA,iBAAS,MAAM,IAAI,OAAO,CASzB;AAED,iBAAe,UAAU,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF;AAED,iBAAe,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED,iBAAe,SAAS,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAezD;AAED,eAAO,MAAM,aAAa;;;;;;;;;CASzB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { mergeMcpJson, removeMcpJson, mergeBlock, removeBlock, readAsset } from './utils.js';
|
|
6
|
+
const MCP_KEY_PATH = ['servers', 'wigolo'];
|
|
7
|
+
const INSTRUCTIONS_FILE = '.github/copilot-instructions.md';
|
|
8
|
+
function vscodeConfigPath() {
|
|
9
|
+
return join(homedir(), '.vscode', 'mcp.json');
|
|
10
|
+
}
|
|
11
|
+
function detect() {
|
|
12
|
+
const home = homedir();
|
|
13
|
+
if (existsSync(join(home, '.vscode')))
|
|
14
|
+
return true;
|
|
15
|
+
try {
|
|
16
|
+
execSync('which code', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function installMcp(cmd) {
|
|
24
|
+
const configPath = vscodeConfigPath();
|
|
25
|
+
mkdirSync(join(homedir(), '.vscode'), { recursive: true });
|
|
26
|
+
mergeMcpJson(configPath, { command: cmd.command, args: cmd.args, type: 'stdio' }, MCP_KEY_PATH);
|
|
27
|
+
}
|
|
28
|
+
async function installInstructions() {
|
|
29
|
+
const block = readAsset('blocks/vscode/copilot-instructions.md.block');
|
|
30
|
+
// Install to project-level .github/copilot-instructions.md (CWD)
|
|
31
|
+
const target = join(process.cwd(), INSTRUCTIONS_FILE);
|
|
32
|
+
mkdirSync(join(process.cwd(), '.github'), { recursive: true });
|
|
33
|
+
mergeBlock(target, block);
|
|
34
|
+
}
|
|
35
|
+
async function uninstall() {
|
|
36
|
+
const removed = [];
|
|
37
|
+
const configPath = vscodeConfigPath();
|
|
38
|
+
if (existsSync(configPath)) {
|
|
39
|
+
removeMcpJson(configPath, MCP_KEY_PATH);
|
|
40
|
+
removed.push('~/.vscode/mcp.json (wigolo entry)');
|
|
41
|
+
}
|
|
42
|
+
const instructionsFile = join(process.cwd(), INSTRUCTIONS_FILE);
|
|
43
|
+
if (existsSync(instructionsFile) && removeBlock(instructionsFile)) {
|
|
44
|
+
removed.push('.github/copilot-instructions.md block');
|
|
45
|
+
}
|
|
46
|
+
return { removed };
|
|
47
|
+
}
|
|
48
|
+
export const vscodeHandler = {
|
|
49
|
+
id: 'vscode',
|
|
50
|
+
displayName: 'VS Code (Copilot)',
|
|
51
|
+
supportsSkills: false,
|
|
52
|
+
supportsCommands: false,
|
|
53
|
+
detect,
|
|
54
|
+
installMcp,
|
|
55
|
+
installInstructions,
|
|
56
|
+
uninstall,
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=vscode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../../src/cli/agents/vscode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAU,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7F,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC3C,MAAM,iBAAiB,GAAG,iCAAiC,CAAC;AAE5D,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,MAAM;IACb,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAwC;IAChE,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,YAAY,CACV,UAAU,EACV,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EACvD,YAAY,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,KAAK,GAAG,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACvE,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACtD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,QAAiB;IACrB,WAAW,EAAE,mBAAmB;IAChC,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,MAAM;IACN,UAAU;IACV,mBAAmB;IACnB,SAAS;CACV,CAAC"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Command = 'mcp' | 'warmup' | 'serve' | 'health' | 'doctor' | 'auth' | 'plugin' | 'shell' | 'init' | 'setup' | 'status';
|
|
1
|
+
export type Command = 'mcp' | 'warmup' | 'serve' | 'health' | 'doctor' | 'auth' | 'plugin' | 'shell' | 'init' | 'uninstall' | 'setup' | 'status';
|
|
2
2
|
export interface ParsedCommand {
|
|
3
3
|
command: Command;
|
|
4
4
|
args: string[];
|