automagik-forge 0.2.20 → 0.3.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
@@ -1,4 +1,4 @@
1
- # Automagik Forge
1
+ # Vibe Kanban
2
2
 
3
3
  > A visual project management tool for developers that integrates with git repositories and coding agents like Claude Code and Amp.
4
4
 
@@ -7,14 +7,14 @@
7
7
  Run vibe kanban instantly without installation:
8
8
 
9
9
  ```bash
10
- npx automagik-forge
10
+ npx vibe-kanban
11
11
  ```
12
12
 
13
13
  This will launch the application locally and open it in your browser automatically.
14
14
 
15
- ## What is Automagik Forge?
15
+ ## What is Vibe Kanban?
16
16
 
17
- Automagik Forge is a modern project management tool designed specifically for developers. It helps you organize your coding projects with kanban-style task management while providing powerful integrations with git repositories and AI coding agents.
17
+ Vibe Kanban is a modern project management tool designed specifically for developers. It helps you organize your coding projects with kanban-style task management while providing powerful integrations with git repositories and AI coding agents.
18
18
 
19
19
  ### ✨ Key Features
20
20
 
@@ -62,7 +62,7 @@ Automagik Forge is a modern project management tool designed specifically for de
62
62
 
63
63
  ## Core Functionality
64
64
 
65
- Automagik Forge provides a complete project management experience with these key capabilities:
65
+ Vibe Kanban provides a complete project management experience with these key capabilities:
66
66
 
67
67
  **Project Repository Management**
68
68
  - Full CRUD operations for managing coding projects
@@ -97,7 +97,7 @@ Automagik Forge provides a complete project management experience with these key
97
97
 
98
98
  ## Configuration
99
99
 
100
- Automagik Forge supports customization through its configuration system:
100
+ Vibe Kanban supports customization through its configuration system:
101
101
 
102
102
  - **Editor Integration**: Choose your preferred code editor
103
103
  - **Sound Notifications**: Customize completion sounds
@@ -153,7 +153,7 @@ Automagik Forge supports customization through its configuration system:
153
153
  **Ready to supercharge your development workflow?**
154
154
 
155
155
  ```bash
156
- npx automagik-forge
156
+ npx vibe-kanban
157
157
  ```
158
158
 
159
159
  *Start managing your projects with the power of AI coding agents today!*
package/bin/cli.js CHANGED
@@ -3,75 +3,6 @@
3
3
  const { execSync, spawn } = require("child_process");
4
4
  const path = require("path");
5
5
  const fs = require("fs");
6
- const zlib = require("zlib");
7
-
8
- // Fallback ZIP extraction using Node.js when unzip is not available
9
- function extractZipWithNode(zipPath, extractDir) {
10
- const buffer = fs.readFileSync(zipPath);
11
- let offset = 0;
12
-
13
- // Simple ZIP parser - look for file entries
14
- while (offset < buffer.length - 30) {
15
- // Look for local file header signature (0x04034b50)
16
- if (buffer.readUInt32LE(offset) === 0x04034b50) {
17
- const filenameLength = buffer.readUInt16LE(offset + 26);
18
- const extraFieldLength = buffer.readUInt16LE(offset + 28);
19
- const compressedSize = buffer.readUInt32LE(offset + 18);
20
- const uncompressedSize = buffer.readUInt32LE(offset + 22);
21
- const compressionMethod = buffer.readUInt16LE(offset + 8);
22
-
23
- offset += 30; // Skip local file header
24
-
25
- const filename = buffer.toString('utf8', offset, offset + filenameLength);
26
- offset += filenameLength + extraFieldLength;
27
-
28
- const fileData = buffer.slice(offset, offset + compressedSize);
29
- offset += compressedSize;
30
-
31
- // Skip directories
32
- if (filename.endsWith('/')) continue;
33
-
34
- const outputPath = path.join(extractDir, filename);
35
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
36
-
37
- if (compressionMethod === 0) {
38
- // No compression
39
- fs.writeFileSync(outputPath, fileData);
40
- } else if (compressionMethod === 8) {
41
- // Deflate compression
42
- const decompressed = zlib.inflateRawSync(fileData);
43
- fs.writeFileSync(outputPath, decompressed);
44
- } else {
45
- throw new Error(`Unsupported compression method: ${compressionMethod}`);
46
- }
47
- } else {
48
- offset++;
49
- }
50
- }
51
- }
52
-
53
- // Load .env file from current working directory
54
- function loadEnvFile() {
55
- const envPath = path.join(process.cwd(), '.env');
56
- if (fs.existsSync(envPath)) {
57
- const envContent = fs.readFileSync(envPath, 'utf8');
58
- envContent.split('\n').forEach(line => {
59
- const trimmed = line.trim();
60
- if (trimmed && !trimmed.startsWith('#')) {
61
- const [key, ...valueParts] = trimmed.split('=');
62
- if (key && valueParts.length > 0) {
63
- const value = valueParts.join('=');
64
- if (!process.env[key]) {
65
- process.env[key] = value;
66
- }
67
- }
68
- }
69
- });
70
- }
71
- }
72
-
73
- // Load environment variables from .env file
74
- loadEnvFile();
75
6
 
76
7
  // Detect true CPU arch on macOS (handles Rosetta)
77
8
  function getUnderlyingArch() {
@@ -102,39 +33,6 @@ function getUnderlyingArch() {
102
33
  return "x64";
103
34
  }
104
35
 
105
- // Handle help and version flags first
106
- if (process.argv.includes("--help") || process.argv.includes("-h")) {
107
- console.log(`
108
- automagik-forge v${require("../package.json").version}
109
-
110
- Usage: npx automagik-forge [options]
111
-
112
- Options:
113
- --help, -h Show this help message
114
- --version, -v Show version
115
- --mcp Run only MCP server (STDIO mode)
116
- --mcp-sse Run only MCP server (SSE mode)
117
-
118
- Without options: Runs only backend server (no MCP server)
119
-
120
- Environment Variables:
121
- BACKEND_PORT Backend server port (default: 8887)
122
- MCP_SSE_PORT MCP SSE server port (default: 8889)
123
- HOST Server host (default: 127.0.0.1)
124
-
125
- Examples:
126
- npx automagik-forge # Start backend server only
127
- npx automagik-forge --mcp # MCP server only (STDIO)
128
- npx automagik-forge --mcp-sse # MCP server only (SSE)
129
- `);
130
- process.exit(0);
131
- }
132
-
133
- if (process.argv.includes("--version") || process.argv.includes("-v")) {
134
- console.log(require("../package.json").version);
135
- process.exit(0);
136
- }
137
-
138
36
  const platform = process.platform;
139
37
  const arch = getUnderlyingArch();
140
38
 
@@ -165,7 +63,6 @@ function getBinaryName(base) {
165
63
  const platformDir = getPlatformDir();
166
64
  const extractDir = path.join(__dirname, "..", "dist", platformDir);
167
65
  const isMcpMode = process.argv.includes("--mcp");
168
- const isMcpSseMode = process.argv.includes("--mcp-sse");
169
66
 
170
67
  // ensure output dir
171
68
  fs.mkdirSync(extractDir, { recursive: true });
@@ -184,29 +81,12 @@ function extractAndRun(baseName, launch) {
184
81
  process.exit(1);
185
82
  }
186
83
 
187
- // extract with fallback methods
188
- if (platform === "win32") {
189
- const unzipCmd = `powershell -Command "Expand-Archive -Path '${zipPath}' -DestinationPath '${extractDir}' -Force"`;
190
- execSync(unzipCmd, { stdio: "inherit" });
191
- } else {
192
- // Try unzip first, fallback to Node.js extraction if not available
193
- try {
194
- execSync(`unzip -qq -o "${zipPath}" -d "${extractDir}"`, { stdio: "inherit" });
195
- } catch (unzipError) {
196
- console.log("⚠️ unzip not found, using Node.js extraction...");
197
- try {
198
- // Fallback to Node.js extraction using yauzl if available, or basic implementation
199
- extractZipWithNode(zipPath, extractDir);
200
- } catch (nodeError) {
201
- console.error("❌ Extraction failed. Please install unzip:");
202
- console.error(" Ubuntu/Debian: sudo apt-get install unzip");
203
- console.error(" RHEL/CentOS: sudo yum install unzip");
204
- console.error(" Alpine: apk add unzip");
205
- console.error("\nOriginal error:", unzipError.message);
206
- process.exit(1);
207
- }
208
- }
209
- }
84
+ // extract
85
+ const unzipCmd =
86
+ platform === "win32"
87
+ ? `powershell -Command "Expand-Archive -Path '${zipPath}' -DestinationPath '${extractDir}' -Force"`
88
+ : `unzip -qq -o "${zipPath}" -d "${extractDir}"`;
89
+ execSync(unzipCmd, { stdio: "inherit" });
210
90
 
211
91
  // perms & launch
212
92
  if (platform !== "win32") {
@@ -217,21 +97,9 @@ function extractAndRun(baseName, launch) {
217
97
  return launch(binPath);
218
98
  }
219
99
 
220
- if (isMcpMode || isMcpSseMode) {
221
- extractAndRun("automagik-forge-mcp", (bin) => {
222
- const mcpArgs = isMcpSseMode ? [] : ["--mcp-sse"];
223
- console.log(`Starting MCP server with ${isMcpSseMode ? 'SSE' : 'STDIO'} transport...`);
224
-
225
- // Environment variables are already loaded from .env file
226
-
227
- const proc = spawn(bin, mcpArgs, {
228
- stdio: ["pipe", "pipe", "pipe"],
229
- env: { ...process.env }
230
- });
231
- process.stdin.pipe(proc.stdin);
232
- proc.stdout.pipe(process.stdout);
233
- proc.stderr.pipe(process.stderr);
234
-
100
+ if (isMcpMode) {
101
+ extractAndRun("vibe-kanban-mcp", (bin) => {
102
+ const proc = spawn(bin, [], { stdio: "inherit" });
235
103
  proc.on("exit", (c) => process.exit(c || 0));
236
104
  proc.on("error", (e) => {
237
105
  console.error("❌ MCP server error:", e.message);
@@ -244,49 +112,13 @@ if (isMcpMode || isMcpSseMode) {
244
112
  process.on("SIGTERM", () => proc.kill("SIGTERM"));
245
113
  });
246
114
  } else {
247
- // Start only main backend server (no MCP server by default)
248
115
  console.log(`📦 Extracting automagik-forge...`);
249
-
250
- // Environment variables are loaded from .env file
251
- // Use safe defaults (localhost only) unless overridden
252
- const backendPort = process.env.BACKEND_PORT || process.env.PORT || "8887";
253
- const host = process.env.HOST || "127.0.0.1";
254
-
255
- // Extract and start main backend server
256
- extractAndRun("automagik-forge", (mainBin) => {
257
- console.log(`🚀 Starting main backend server on http://${host}:${backendPort}...`);
258
- const mainServerProc = spawn(mainBin, [], {
259
- stdio: ["pipe", "pipe", "pipe"],
260
- env: {
261
- ...process.env,
262
- BACKEND_PORT: backendPort,
263
- PORT: backendPort,
264
- HOST: host
265
- }
266
- });
267
-
268
- mainServerProc.stdout.on("data", (data) => {
269
- process.stdout.write(`${data}`);
270
- });
271
- mainServerProc.stderr.on("data", (data) => {
272
- process.stderr.write(`${data}`);
273
- });
274
-
275
- mainServerProc.on("exit", (code) => {
276
- console.error(`❌ Backend server exited with code ${code}`);
277
- process.exit(code || 1);
278
- });
279
-
280
- mainServerProc.on("error", (e) => {
281
- console.error("❌ Backend server error:", e.message);
282
- process.exit(1);
283
- });
284
-
285
- // Handle shutdown signals
286
- process.on("SIGINT", () => {
287
- console.log("\n🛑 Shutting down backend server...");
288
- mainServerProc.kill("SIGINT");
289
- });
290
- process.on("SIGTERM", () => mainServerProc.kill("SIGTERM"));
116
+ extractAndRun("vibe-kanban", (bin) => {
117
+ console.log(`🚀 Launching automagik-forge...`);
118
+ if (platform === "win32") {
119
+ execSync(`"${bin}"`, { stdio: "inherit" });
120
+ } else {
121
+ execSync(`"${bin}"`, { stdio: "inherit" });
122
+ }
291
123
  });
292
124
  }
package/package.json CHANGED
@@ -1,18 +1,17 @@
1
1
  {
2
2
  "name": "automagik-forge",
3
3
  "private": false,
4
- "version": "0.2.20",
4
+ "version": "0.3.0",
5
5
  "main": "index.js",
6
6
  "bin": {
7
7
  "automagik-forge": "bin/cli.js"
8
8
  },
9
9
  "keywords": [],
10
- "author": "Namastex Labs",
10
+ "author": "namastex",
11
11
  "license": "",
12
12
  "description": "NPX wrapper around automagik-forge and automagik-forge-mcp",
13
13
  "files": [
14
14
  "dist",
15
15
  "bin"
16
- ],
17
- "dependencies": {}
16
+ ]
18
17
  }