@burdenoff/vibe-plugin-ai 1.0.1 → 2.0.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/README.md CHANGED
@@ -23,13 +23,13 @@ npm install -g @burdenoff/vibe-plugin-ai
23
23
 
24
24
  ## Supported Tools
25
25
 
26
- | Tool | CLI Command | Config Files |
27
- |------|------------|-------------|
28
- | Claude Code | `claude` | `CLAUDE.md`, `.claude/settings.json` |
29
- | OpenCode | `opencode` | `OPENCODE.md`, `.opencode/config.json` |
30
- | Codex CLI | `codex` | `AGENTS.md`, `codex.json` |
31
- | GitHub Copilot | `gh copilot` | `.github/copilot-instructions.md` |
32
- | Cursor Agent | `cursor` | `.cursor/rules`, `.cursorrules` |
26
+ | Tool | CLI Command | Config Files |
27
+ | -------------- | ------------ | -------------------------------------- |
28
+ | Claude Code | `claude` | `CLAUDE.md`, `.claude/settings.json` |
29
+ | OpenCode | `opencode` | `OPENCODE.md`, `.opencode/config.json` |
30
+ | Codex CLI | `codex` | `AGENTS.md`, `codex.json` |
31
+ | GitHub Copilot | `gh copilot` | `.github/copilot-instructions.md` |
32
+ | Cursor Agent | `cursor` | `.cursor/rules`, `.cursorrules` |
33
33
 
34
34
  ## CLI Commands
35
35
 
package/dist/index.js CHANGED
@@ -1,187 +1,182 @@
1
- import { existsSync, writeFileSync, mkdirSync } from "fs";
1
+ // @bun
2
+ // src/index.ts
3
+ import { existsSync, mkdirSync, writeFileSync } from "fs";
2
4
  import { join } from "path";
3
- import { execSync } from "child_process";
4
- const AI_TOOLS = [
5
- {
6
- name: "claude-code",
7
- displayName: "Claude Code",
8
- detectCommand: "claude --version",
9
- installCommand: "npm install -g @anthropic-ai/claude-code",
10
- configFiles: ["CLAUDE.md", ".claude/settings.json"],
11
- description: "Anthropic's AI coding agent",
12
- },
13
- {
14
- name: "opencode",
15
- displayName: "OpenCode",
16
- detectCommand: "opencode --version",
17
- installCommand: "npm install -g opencode",
18
- configFiles: ["OPENCODE.md", ".opencode/config.json"],
19
- description: "Open-source AI coding assistant",
20
- },
21
- {
22
- name: "codex",
23
- displayName: "OpenAI Codex CLI",
24
- detectCommand: "codex --version",
25
- installCommand: "npm install -g @openai/codex",
26
- configFiles: ["AGENTS.md", "codex.json"],
27
- description: "OpenAI's Codex CLI agent",
28
- },
29
- {
30
- name: "copilot",
31
- displayName: "GitHub Copilot",
32
- detectCommand: "gh copilot --version",
33
- configFiles: [".github/copilot-instructions.md"],
34
- description: "GitHub Copilot in the CLI",
35
- },
36
- {
37
- name: "cursor-agent",
38
- displayName: "Cursor Agent",
39
- detectCommand: "cursor --version",
40
- configFiles: [".cursor/rules", ".cursorrules"],
41
- description: "Cursor AI code editor agent",
42
- },
5
+ var AI_TOOLS = [
6
+ {
7
+ name: "claude-code",
8
+ displayName: "Claude Code",
9
+ detectCommand: "claude",
10
+ installCommand: "npm install -g @anthropic-ai/claude-code",
11
+ configFiles: ["CLAUDE.md", ".claude/settings.json"],
12
+ description: "Anthropic's AI coding agent"
13
+ },
14
+ {
15
+ name: "opencode",
16
+ displayName: "OpenCode",
17
+ detectCommand: "opencode",
18
+ installCommand: "npm install -g opencode",
19
+ configFiles: ["OPENCODE.md", ".opencode/config.json"],
20
+ description: "Open-source AI coding assistant"
21
+ },
22
+ {
23
+ name: "codex",
24
+ displayName: "OpenAI Codex CLI",
25
+ detectCommand: "codex",
26
+ installCommand: "npm install -g @openai/codex",
27
+ configFiles: ["AGENTS.md", "codex.json"],
28
+ description: "OpenAI's Codex CLI agent"
29
+ },
30
+ {
31
+ name: "copilot",
32
+ displayName: "GitHub Copilot",
33
+ detectCommand: "github-copilot-cli",
34
+ installCommand: "npm install -g @githubnext/github-copilot-cli",
35
+ configFiles: [".github/copilot-instructions.md"],
36
+ description: "GitHub Copilot in the CLI"
37
+ },
38
+ {
39
+ name: "cursor-agent",
40
+ displayName: "Cursor Agent",
41
+ detectCommand: "cursor",
42
+ configFiles: [".cursor/rules", ".cursorrules"],
43
+ description: "Cursor AI code editor agent"
44
+ }
43
45
  ];
44
- // ── Helper Functions ─────────────────────────────────────────────────────────
45
46
  function isToolInstalled(tool) {
46
- try {
47
- const version = execSync(tool.detectCommand, {
48
- encoding: "utf8",
49
- timeout: 10000,
50
- stdio: ["ignore", "pipe", "ignore"],
51
- }).trim();
52
- return { installed: true, version };
53
- }
54
- catch {
55
- return { installed: false, version: "" };
47
+ try {
48
+ const proc = Bun.spawnSync([tool.detectCommand, "--version"], {
49
+ timeout: 5000,
50
+ stdout: "pipe",
51
+ stderr: "ignore"
52
+ });
53
+ if (proc.exitCode === 0) {
54
+ const version = proc.stdout.toString().trim();
55
+ return { installed: true, version };
56
56
  }
57
+ return { installed: false, version: "" };
58
+ } catch {
59
+ return { installed: false, version: "" };
60
+ }
61
+ }
62
+ function runInstallCommand(command) {
63
+ const parts = command.split(" ");
64
+ const proc = Bun.spawnSync(parts, {
65
+ timeout: 120000,
66
+ stdout: "inherit",
67
+ stderr: "inherit"
68
+ });
69
+ return proc.exitCode === 0;
57
70
  }
58
71
  function findConfigFiles(tool, directory) {
59
- return tool.configFiles.filter((f) => existsSync(join(directory, f)));
72
+ return tool.configFiles.filter((f) => existsSync(join(directory, f)));
60
73
  }
61
- export const vibePlugin = {
62
- name: "ai",
63
- version: "1.0.0",
64
- description: "AI tool management for VibeControls Agent",
65
- onCliSetup(program) {
66
- const aiCmd = program
67
- .command("ai")
68
- .description("Manage AI coding tools and configurations");
69
- // ── vibe ai list ────────────────────────────────────────────────
70
- aiCmd
71
- .command("list")
72
- .description("List all supported AI tools and their status")
73
- .option("--cwd <dir>", "Project directory to check configs", process.cwd())
74
- .action((options) => {
75
- console.log("\n \x1b[1m── AI Tools ──\x1b[0m\n");
76
- for (const tool of AI_TOOLS) {
77
- const { installed, version } = isToolInstalled(tool);
78
- const icon = installed
79
- ? "\x1b[32m✓\x1b[0m"
80
- : "\x1b[31m✗\x1b[0m";
81
- const versionStr = installed
82
- ? ` (${version.split("\n")[0]})`
83
- : "";
84
- console.log(` ${icon} \x1b[1m${tool.displayName}\x1b[0m${versionStr}`);
85
- console.log(` ${tool.description}`);
86
- // Check for config files
87
- const configs = findConfigFiles(tool, options.cwd);
88
- if (configs.length > 0) {
89
- console.log(` Config: ${configs.join(", ")}`);
90
- }
91
- else {
92
- console.log(` Config: (none found)`);
93
- }
94
- console.log();
95
- }
96
- });
97
- // ── vibe ai install <tool> ──────────────────────────────────────
98
- aiCmd
99
- .command("install")
100
- .description("Install an AI tool")
101
- .argument("<tool>", `Tool name (${AI_TOOLS.map((t) => t.name).join(", ")})`)
102
- .action((toolName) => {
103
- const tool = AI_TOOLS.find((t) => t.name === toolName);
104
- if (!tool) {
105
- console.error(`\x1b[31mError:\x1b[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
106
- process.exit(1);
107
- }
108
- if (!tool.installCommand) {
109
- console.error(`\x1b[31mError:\x1b[0m '${tool.displayName}' must be installed manually.`);
110
- process.exit(1);
111
- }
112
- const { installed } = isToolInstalled(tool);
113
- if (installed) {
114
- console.log(` \x1b[32m✓ ${tool.displayName} is already installed.\x1b[0m`);
115
- return;
116
- }
117
- console.log(` Installing ${tool.displayName}...`);
118
- try {
119
- execSync(tool.installCommand, { stdio: "inherit", timeout: 120000 });
120
- console.log(`\n \x1b[32m✓ ${tool.displayName} installed successfully.\x1b[0m\n`);
121
- }
122
- catch {
123
- console.error(`\n \x1b[31m✗ Failed to install ${tool.displayName}.\x1b[0m`);
124
- console.error(` Try manually: ${tool.installCommand}\n`);
125
- process.exit(1);
126
- }
127
- });
128
- // ── vibe ai init <tool> ─────────────────────────────────────────
129
- aiCmd
130
- .command("init")
131
- .description("Initialize AI tool config in the current project")
132
- .argument("<tool>", "Tool name")
133
- .option("--cwd <dir>", "Project directory", process.cwd())
134
- .action((toolName, options) => {
135
- const tool = AI_TOOLS.find((t) => t.name === toolName);
136
- if (!tool) {
137
- console.error(`\x1b[31mError:\x1b[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
138
- process.exit(1);
139
- }
140
- const dir = options.cwd;
141
- const primaryConfig = tool.configFiles[0];
142
- const configPath = join(dir, primaryConfig);
143
- if (existsSync(configPath)) {
144
- console.log(` \x1b[33m⚠\x1b[0m ${primaryConfig} already exists in ${dir}`);
145
- return;
146
- }
147
- // Create parent directory if needed (e.g. .claude/)
148
- const parentDir = join(dir, primaryConfig.split("/").slice(0, -1).join("/"));
149
- if (parentDir !== dir) {
150
- mkdirSync(parentDir, { recursive: true });
151
- }
152
- // Generate a starter config
153
- const content = generateStarterConfig(tool);
154
- writeFileSync(configPath, content);
155
- console.log(`\n \x1b[32m✓ Created ${primaryConfig}\x1b[0m in ${dir}\n`);
156
- });
157
- // ── vibe ai check ───────────────────────────────────────────────
158
- aiCmd
159
- .command("check")
160
- .description("Check which AI tools are installed")
161
- .action(() => {
162
- console.log("\n \x1b[1m── AI Tool Check ──\x1b[0m\n");
163
- let allInstalled = true;
164
- for (const tool of AI_TOOLS) {
165
- const { installed, version } = isToolInstalled(tool);
166
- const icon = installed
167
- ? "\x1b[32m✓\x1b[0m"
168
- : "\x1b[31m✗\x1b[0m";
169
- console.log(` ${icon} ${tool.displayName.padEnd(20)} ${installed ? version.split("\n")[0] : "not installed"}`);
170
- if (!installed)
171
- allInstalled = false;
172
- }
173
- console.log();
174
- if (!allInstalled) {
175
- console.log(" Install missing tools: \x1b[1mvibe ai install <tool>\x1b[0m\n");
176
- }
177
- });
178
- },
74
+ var vibePlugin = {
75
+ name: "ai",
76
+ version: "2.0.0",
77
+ description: "AI tool management and integration",
78
+ tags: ["cli", "integration"],
79
+ cliCommand: "ai",
80
+ onCliSetup(program, _hostServices) {
81
+ const aiCmd = program.command("ai").description("Manage AI coding tools and configurations");
82
+ aiCmd.command("list").description("List all supported AI tools and their status").option("--cwd <dir>", "Project directory to check configs", process.cwd()).action((options) => {
83
+ console.log(`
84
+ \x1B[1m\u2500\u2500 AI Tools \u2500\u2500\x1B[0m
85
+ `);
86
+ for (const tool of AI_TOOLS) {
87
+ const { installed, version } = isToolInstalled(tool);
88
+ const icon = installed ? "\x1B[32m\u2713\x1B[0m" : "\x1B[31m\u2717\x1B[0m";
89
+ const versionStr = installed ? ` (${version.split(`
90
+ `)[0]})` : "";
91
+ console.log(` ${icon} \x1B[1m${tool.displayName}\x1B[0m${versionStr}`);
92
+ console.log(` ${tool.description}`);
93
+ const configs = findConfigFiles(tool, options.cwd);
94
+ if (configs.length > 0) {
95
+ console.log(` Config: ${configs.join(", ")}`);
96
+ } else {
97
+ console.log(` Config: (none found)`);
98
+ }
99
+ console.log();
100
+ }
101
+ });
102
+ aiCmd.command("install").description("Install an AI tool").argument("<tool>", `Tool name (${AI_TOOLS.map((t) => t.name).join(", ")})`).action((toolName) => {
103
+ const tool = AI_TOOLS.find((t) => t.name === toolName);
104
+ if (!tool) {
105
+ console.error(`\x1B[31mError:\x1B[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
106
+ process.exit(1);
107
+ }
108
+ if (!tool.installCommand) {
109
+ console.error(`\x1B[31mError:\x1B[0m '${tool.displayName}' must be installed manually.`);
110
+ process.exit(1);
111
+ }
112
+ const { installed } = isToolInstalled(tool);
113
+ if (installed) {
114
+ console.log(` \x1B[32m\u2713 ${tool.displayName} is already installed.\x1B[0m`);
115
+ return;
116
+ }
117
+ console.log(` Installing ${tool.displayName}...`);
118
+ const success = runInstallCommand(tool.installCommand);
119
+ if (success) {
120
+ console.log(`
121
+ \x1B[32m\u2713 ${tool.displayName} installed successfully.\x1B[0m
122
+ `);
123
+ } else {
124
+ console.error(`
125
+ \x1B[31m\u2717 Failed to install ${tool.displayName}.\x1B[0m`);
126
+ console.error(` Try manually: ${tool.installCommand}
127
+ `);
128
+ process.exit(1);
129
+ }
130
+ });
131
+ aiCmd.command("init").description("Initialize AI tool config in the current project").argument("<tool>", "Tool name").option("--cwd <dir>", "Project directory", process.cwd()).action((toolName, options) => {
132
+ const tool = AI_TOOLS.find((t) => t.name === toolName);
133
+ if (!tool) {
134
+ console.error(`\x1B[31mError:\x1B[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
135
+ process.exit(1);
136
+ }
137
+ const dir = options.cwd;
138
+ const primaryConfig = tool.configFiles[0];
139
+ const configPath = join(dir, primaryConfig);
140
+ if (existsSync(configPath)) {
141
+ console.log(` \x1B[33m\u26A0\x1B[0m ${primaryConfig} already exists in ${dir}`);
142
+ return;
143
+ }
144
+ const segments = primaryConfig.split("/");
145
+ if (segments.length > 1) {
146
+ const parentDir = join(dir, ...segments.slice(0, -1));
147
+ mkdirSync(parentDir, { recursive: true });
148
+ }
149
+ const content = generateStarterConfig(tool);
150
+ writeFileSync(configPath, content);
151
+ console.log(`
152
+ \x1B[32m\u2713 Created ${primaryConfig}\x1B[0m in ${dir}
153
+ `);
154
+ });
155
+ aiCmd.command("check").description("Check which AI tools are installed").action(() => {
156
+ console.log(`
157
+ \x1B[1m\u2500\u2500 AI Tool Check \u2500\u2500\x1B[0m
158
+ `);
159
+ let allInstalled = true;
160
+ for (const tool of AI_TOOLS) {
161
+ const { installed, version } = isToolInstalled(tool);
162
+ const icon = installed ? "\x1B[32m\u2713\x1B[0m" : "\x1B[31m\u2717\x1B[0m";
163
+ console.log(` ${icon} ${tool.displayName.padEnd(20)} ${installed ? version.split(`
164
+ `)[0] : "not installed"}`);
165
+ if (!installed)
166
+ allInstalled = false;
167
+ }
168
+ console.log();
169
+ if (!allInstalled) {
170
+ console.log(` Install missing tools: \x1B[1mvibe ai install <tool>\x1B[0m
171
+ `);
172
+ }
173
+ });
174
+ }
179
175
  };
180
- // ── Config Templates ─────────────────────────────────────────────────────────
181
176
  function generateStarterConfig(tool) {
182
- switch (tool.name) {
183
- case "claude-code":
184
- return `# CLAUDE.md
177
+ switch (tool.name) {
178
+ case "claude-code":
179
+ return `# CLAUDE.md
185
180
 
186
181
  This file provides guidance to Claude Code when working with this project.
187
182
 
@@ -193,9 +188,9 @@ This file provides guidance to Claude Code when working with this project.
193
188
 
194
189
  \`\`\`bash
195
190
  # Add your development commands
196
- npm run dev
197
- npm run build
198
- npm run test
191
+ bun run dev
192
+ bun run build
193
+ bun run test
199
194
  \`\`\`
200
195
 
201
196
  ## Code Style & Conventions
@@ -207,8 +202,8 @@ npm run test
207
202
 
208
203
  <!-- Describe key architecture decisions -->
209
204
  `;
210
- case "codex":
211
- return `# AGENTS.md
205
+ case "codex":
206
+ return `# AGENTS.md
212
207
 
213
208
  Instructions for AI agents working on this project.
214
209
 
@@ -223,13 +218,13 @@ Instructions for AI agents working on this project.
223
218
  ## Development Workflow
224
219
 
225
220
  \`\`\`bash
226
- npm run dev
227
- npm run build
228
- npm run test
221
+ bun run dev
222
+ bun run build
223
+ bun run test
229
224
  \`\`\`
230
225
  `;
231
- case "copilot":
232
- return `# Copilot Instructions
226
+ case "copilot":
227
+ return `# Copilot Instructions
233
228
 
234
229
  ## Project Context
235
230
 
@@ -245,8 +240,8 @@ npm run test
245
240
 
246
241
  <!-- Describe common patterns in your codebase -->
247
242
  `;
248
- case "cursor-agent":
249
- return `# Cursor Rules
243
+ case "cursor-agent":
244
+ return `# Cursor Rules
250
245
 
251
246
  ## Project Overview
252
247
 
@@ -262,9 +257,15 @@ npm run test
262
257
 
263
258
  <!-- Describe your file organization -->
264
259
  `;
265
- default:
266
- return `# ${tool.displayName} Configuration\n\n<!-- Add your configuration here -->\n`;
267
- }
260
+ default:
261
+ return `# ${tool.displayName} Configuration
262
+
263
+ <!-- Add your configuration here -->
264
+ `;
265
+ }
268
266
  }
269
- export default vibePlugin;
270
- //# sourceMappingURL=index.js.map
267
+ var src_default = vibePlugin;
268
+ export {
269
+ vibePlugin,
270
+ src_default as default
271
+ };
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@burdenoff/vibe-plugin-ai",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "main": "./dist/index.js",
5
5
  "type": "module",
6
6
  "engines": {
7
- "node": ">=18.0.0"
7
+ "bun": ">=1.3.0"
8
8
  },
9
9
  "scripts": {
10
- "build": "tsc",
10
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun",
11
11
  "lint": "eslint ./src",
12
- "format": "npx prettier . --write",
13
- "format:check": "npx prettier . --check",
12
+ "format": "bunx prettier . --write",
13
+ "format:check": "bunx prettier . --check",
14
14
  "type:check": "tsc --noEmit",
15
15
  "clean": "rimraf dist",
16
- "prebuild": "npm run clean",
17
- "prepublishOnly": "npm run build",
18
- "sanity": "npm run format:check && npm run lint && npm run type:check && npm run build"
16
+ "prebuild": "bun run clean",
17
+ "prepublishOnly": "bun run build",
18
+ "sanity": "bun run format:check && bun run lint && bun run type:check && bun run build"
19
19
  },
20
20
  "keywords": [
21
21
  "vibecontrols",
@@ -26,7 +26,8 @@
26
26
  "opencode",
27
27
  "codex",
28
28
  "copilot",
29
- "cursor-agent"
29
+ "cursor-agent",
30
+ "bun"
30
31
  ],
31
32
  "author": {
32
33
  "name": "Vignesh T.V",
@@ -34,9 +35,9 @@
34
35
  "url": "https://github.com/tvvignesh"
35
36
  },
36
37
  "license": "SEE LICENSE IN LICENSE",
37
- "description": "AI tool management plugin for VibeControls Agent — manage Claude Code, OpenCode, Codex, Copilot, and more",
38
+ "description": "AI tool management plugin for VibeControls Agent — manage Claude Code, OpenCode, Codex, Copilot, and more (Bun runtime)",
38
39
  "devDependencies": {
39
- "@types/node": "^24.0.11",
40
+ "@types/bun": "^1.2.16",
40
41
  "commander": "^14.0.3",
41
42
  "eslint": "^9.30.1",
42
43
  "prettier": "^3.6.2",
@@ -44,7 +45,7 @@
44
45
  "typescript": "^5.8.3"
45
46
  },
46
47
  "peerDependencies": {
47
- "@burdenoff/vibe-agent": ">=1.1.0"
48
+ "@burdenoff/vibe-agent": ">=2.0.0"
48
49
  },
49
50
  "peerDependenciesMeta": {
50
51
  "@burdenoff/vibe-agent": {
package/dist/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import type { Command } from "commander";
2
- export interface VibePlugin {
3
- name: string;
4
- version: string;
5
- description?: string;
6
- onCliSetup?: (program: Command) => void | Promise<void>;
7
- }
8
- export declare const vibePlugin: VibePlugin;
9
- export default vibePlugin;
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmGzC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,UAAU,EAAE,UA2JxB,CAAC;AAiGF,eAAe,UAAU,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}