@burdenoff/vibe-plugin-ai 1.0.1 → 2.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/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,190 @@
1
- import { existsSync, writeFileSync, mkdirSync } from "fs";
1
+ // @bun
2
+ // src/index.ts
3
+ import { mkdirSync } 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) => {
73
+ try {
74
+ return Bun.file(join(directory, f)).size > 0;
75
+ } catch {
76
+ return false;
77
+ }
78
+ });
60
79
  }
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
- },
80
+ var vibePlugin = {
81
+ name: "ai",
82
+ version: "2.0.0",
83
+ description: "AI tool management and integration",
84
+ tags: ["cli", "integration"],
85
+ cliCommand: "ai",
86
+ onCliSetup(program, _hostServices) {
87
+ const aiCmd = program.command("ai").description("Manage AI coding tools and configurations");
88
+ aiCmd.command("list").description("List all supported AI tools and their status").option("--cwd <dir>", "Project directory to check configs", process.cwd()).action((options) => {
89
+ console.log(`
90
+ \x1B[1m\u2500\u2500 AI Tools \u2500\u2500\x1B[0m
91
+ `);
92
+ for (const tool of AI_TOOLS) {
93
+ const { installed, version } = isToolInstalled(tool);
94
+ const icon = installed ? "\x1B[32m\u2713\x1B[0m" : "\x1B[31m\u2717\x1B[0m";
95
+ const versionStr = installed ? ` (${version.split(`
96
+ `)[0]})` : "";
97
+ console.log(` ${icon} \x1B[1m${tool.displayName}\x1B[0m${versionStr}`);
98
+ console.log(` ${tool.description}`);
99
+ const configs = findConfigFiles(tool, options.cwd);
100
+ if (configs.length > 0) {
101
+ console.log(` Config: ${configs.join(", ")}`);
102
+ } else {
103
+ console.log(` Config: (none found)`);
104
+ }
105
+ console.log();
106
+ }
107
+ });
108
+ aiCmd.command("install").description("Install an AI tool").argument("<tool>", `Tool name (${AI_TOOLS.map((t) => t.name).join(", ")})`).action((toolName) => {
109
+ const tool = AI_TOOLS.find((t) => t.name === toolName);
110
+ if (!tool) {
111
+ console.error(`\x1B[31mError:\x1B[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
112
+ process.exit(1);
113
+ }
114
+ if (!tool.installCommand) {
115
+ console.error(`\x1B[31mError:\x1B[0m '${tool.displayName}' must be installed manually.`);
116
+ process.exit(1);
117
+ }
118
+ const { installed } = isToolInstalled(tool);
119
+ if (installed) {
120
+ console.log(` \x1B[32m\u2713 ${tool.displayName} is already installed.\x1B[0m`);
121
+ return;
122
+ }
123
+ console.log(` Installing ${tool.displayName}...`);
124
+ const success = runInstallCommand(tool.installCommand);
125
+ if (success) {
126
+ console.log(`
127
+ \x1B[32m\u2713 ${tool.displayName} installed successfully.\x1B[0m
128
+ `);
129
+ } else {
130
+ console.error(`
131
+ \x1B[31m\u2717 Failed to install ${tool.displayName}.\x1B[0m`);
132
+ console.error(` Try manually: ${tool.installCommand}
133
+ `);
134
+ process.exit(1);
135
+ }
136
+ });
137
+ aiCmd.command("init").description("Initialize AI tool config in the current project").argument("<tool>", "Tool name").option("--cwd <dir>", "Project directory", process.cwd()).action(async (toolName, options) => {
138
+ const tool = AI_TOOLS.find((t) => t.name === toolName);
139
+ if (!tool) {
140
+ console.error(`\x1B[31mError:\x1B[0m Unknown tool '${toolName}'. Available: ${AI_TOOLS.map((t) => t.name).join(", ")}`);
141
+ process.exit(1);
142
+ }
143
+ const dir = options.cwd;
144
+ const primaryConfig = tool.configFiles[0];
145
+ const configPath = join(dir, primaryConfig);
146
+ try {
147
+ if (Bun.file(configPath).size >= 0) {
148
+ console.log(` \x1B[33m\u26A0\x1B[0m ${primaryConfig} already exists in ${dir}`);
149
+ return;
150
+ }
151
+ } catch {}
152
+ const segments = primaryConfig.split("/");
153
+ if (segments.length > 1) {
154
+ const parentDir = join(dir, ...segments.slice(0, -1));
155
+ mkdirSync(parentDir, { recursive: true });
156
+ }
157
+ const content = generateStarterConfig(tool);
158
+ await Bun.write(configPath, content);
159
+ console.log(`
160
+ \x1B[32m\u2713 Created ${primaryConfig}\x1B[0m in ${dir}
161
+ `);
162
+ });
163
+ aiCmd.command("check").description("Check which AI tools are installed").action(() => {
164
+ console.log(`
165
+ \x1B[1m\u2500\u2500 AI Tool Check \u2500\u2500\x1B[0m
166
+ `);
167
+ let allInstalled = true;
168
+ for (const tool of AI_TOOLS) {
169
+ const { installed, version } = isToolInstalled(tool);
170
+ const icon = installed ? "\x1B[32m\u2713\x1B[0m" : "\x1B[31m\u2717\x1B[0m";
171
+ console.log(` ${icon} ${tool.displayName.padEnd(20)} ${installed ? version.split(`
172
+ `)[0] : "not installed"}`);
173
+ if (!installed)
174
+ allInstalled = false;
175
+ }
176
+ console.log();
177
+ if (!allInstalled) {
178
+ console.log(` Install missing tools: \x1B[1mvibe ai install <tool>\x1B[0m
179
+ `);
180
+ }
181
+ });
182
+ }
179
183
  };
180
- // ── Config Templates ─────────────────────────────────────────────────────────
181
184
  function generateStarterConfig(tool) {
182
- switch (tool.name) {
183
- case "claude-code":
184
- return `# CLAUDE.md
185
+ switch (tool.name) {
186
+ case "claude-code":
187
+ return `# CLAUDE.md
185
188
 
186
189
  This file provides guidance to Claude Code when working with this project.
187
190
 
@@ -193,9 +196,9 @@ This file provides guidance to Claude Code when working with this project.
193
196
 
194
197
  \`\`\`bash
195
198
  # Add your development commands
196
- npm run dev
197
- npm run build
198
- npm run test
199
+ bun run dev
200
+ bun run build
201
+ bun run test
199
202
  \`\`\`
200
203
 
201
204
  ## Code Style & Conventions
@@ -207,8 +210,8 @@ npm run test
207
210
 
208
211
  <!-- Describe key architecture decisions -->
209
212
  `;
210
- case "codex":
211
- return `# AGENTS.md
213
+ case "codex":
214
+ return `# AGENTS.md
212
215
 
213
216
  Instructions for AI agents working on this project.
214
217
 
@@ -223,13 +226,13 @@ Instructions for AI agents working on this project.
223
226
  ## Development Workflow
224
227
 
225
228
  \`\`\`bash
226
- npm run dev
227
- npm run build
228
- npm run test
229
+ bun run dev
230
+ bun run build
231
+ bun run test
229
232
  \`\`\`
230
233
  `;
231
- case "copilot":
232
- return `# Copilot Instructions
234
+ case "copilot":
235
+ return `# Copilot Instructions
233
236
 
234
237
  ## Project Context
235
238
 
@@ -245,8 +248,8 @@ npm run test
245
248
 
246
249
  <!-- Describe common patterns in your codebase -->
247
250
  `;
248
- case "cursor-agent":
249
- return `# Cursor Rules
251
+ case "cursor-agent":
252
+ return `# Cursor Rules
250
253
 
251
254
  ## Project Overview
252
255
 
@@ -262,9 +265,15 @@ npm run test
262
265
 
263
266
  <!-- Describe your file organization -->
264
267
  `;
265
- default:
266
- return `# ${tool.displayName} Configuration\n\n<!-- Add your configuration here -->\n`;
267
- }
268
+ default:
269
+ return `# ${tool.displayName} Configuration
270
+
271
+ <!-- Add your configuration here -->
272
+ `;
273
+ }
268
274
  }
269
- export default vibePlugin;
270
- //# sourceMappingURL=index.js.map
275
+ var src_default = vibePlugin;
276
+ export {
277
+ vibePlugin,
278
+ src_default as default
279
+ };
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.1.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,10 @@
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",
41
+ "bun-types": "^1.3.9",
40
42
  "commander": "^14.0.3",
41
43
  "eslint": "^9.30.1",
42
44
  "prettier": "^3.6.2",
@@ -44,7 +46,7 @@
44
46
  "typescript": "^5.8.3"
45
47
  },
46
48
  "peerDependencies": {
47
- "@burdenoff/vibe-agent": ">=1.1.0"
49
+ "@burdenoff/vibe-agent": ">=2.0.0"
48
50
  },
49
51
  "peerDependenciesMeta": {
50
52
  "@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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"}