@swarmify/agents-cli 1.5.14 → 1.5.16

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.

Potentially problematic release.


This version of @swarmify/agents-cli might be problematic. Click here for more details.

Files changed (50) hide show
  1. package/README.md +86 -291
  2. package/dist/index.js +879 -197
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/daemon.d.ts +22 -0
  5. package/dist/lib/daemon.d.ts.map +1 -0
  6. package/dist/lib/daemon.js +303 -0
  7. package/dist/lib/daemon.js.map +1 -0
  8. package/dist/lib/drive-server.d.ts +9 -0
  9. package/dist/lib/drive-server.d.ts.map +1 -0
  10. package/dist/lib/drive-server.js +217 -0
  11. package/dist/lib/drive-server.js.map +1 -0
  12. package/dist/lib/drives.d.ts +34 -0
  13. package/dist/lib/drives.d.ts.map +1 -0
  14. package/dist/lib/drives.js +267 -0
  15. package/dist/lib/drives.js.map +1 -0
  16. package/dist/lib/jobs.d.ts +53 -0
  17. package/dist/lib/jobs.d.ts.map +1 -0
  18. package/dist/lib/jobs.js +242 -0
  19. package/dist/lib/jobs.js.map +1 -0
  20. package/dist/lib/manifest.js +1 -1
  21. package/dist/lib/manifest.js.map +1 -1
  22. package/dist/lib/runner.d.ts +12 -0
  23. package/dist/lib/runner.d.ts.map +1 -0
  24. package/dist/lib/runner.js +266 -0
  25. package/dist/lib/runner.js.map +1 -0
  26. package/dist/lib/sandbox.d.ts +10 -0
  27. package/dist/lib/sandbox.d.ts.map +1 -0
  28. package/dist/lib/sandbox.js +166 -0
  29. package/dist/lib/sandbox.js.map +1 -0
  30. package/dist/lib/scheduler.d.ts +18 -0
  31. package/dist/lib/scheduler.d.ts.map +1 -0
  32. package/dist/lib/scheduler.js +64 -0
  33. package/dist/lib/scheduler.js.map +1 -0
  34. package/dist/lib/shims.d.ts +32 -0
  35. package/dist/lib/shims.d.ts.map +1 -0
  36. package/dist/lib/shims.js +181 -0
  37. package/dist/lib/shims.js.map +1 -0
  38. package/dist/lib/state.d.ts +5 -0
  39. package/dist/lib/state.d.ts.map +1 -1
  40. package/dist/lib/state.js +35 -0
  41. package/dist/lib/state.js.map +1 -1
  42. package/dist/lib/types.d.ts +10 -0
  43. package/dist/lib/types.d.ts.map +1 -1
  44. package/dist/lib/types.js.map +1 -1
  45. package/dist/lib/versions.d.ts +84 -0
  46. package/dist/lib/versions.d.ts.map +1 -0
  47. package/dist/lib/versions.js +297 -0
  48. package/dist/lib/versions.js.map +1 -0
  49. package/package.json +8 -5
  50. package/scripts/postinstall.js +72 -0
@@ -0,0 +1,297 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { exec } from 'child_process';
4
+ import { promisify } from 'util';
5
+ import { getVersionsDir, ensureAgentsDir, readMeta, writeMeta } from './state.js';
6
+ import { AGENTS } from './agents.js';
7
+ const execAsync = promisify(exec);
8
+ /**
9
+ * Parse agent@version syntax.
10
+ * Examples:
11
+ * "claude@1.5.0" -> { agent: "claude", version: "1.5.0" }
12
+ * "claude" -> { agent: "claude", version: "latest" }
13
+ * "codex@latest" -> { agent: "codex", version: "latest" }
14
+ */
15
+ export function parseAgentSpec(spec) {
16
+ const parts = spec.split('@');
17
+ const agentName = parts[0].toLowerCase();
18
+ const version = parts[1] || 'latest';
19
+ if (!AGENTS[agentName]) {
20
+ return null;
21
+ }
22
+ return {
23
+ agent: agentName,
24
+ version,
25
+ };
26
+ }
27
+ /**
28
+ * Get the directory where a specific version is installed.
29
+ */
30
+ export function getVersionDir(agent, version) {
31
+ return path.join(getVersionsDir(), agent, version);
32
+ }
33
+ /**
34
+ * Get the binary path for a specific agent version.
35
+ */
36
+ export function getBinaryPath(agent, version) {
37
+ const versionDir = getVersionDir(agent, version);
38
+ const agentConfig = AGENTS[agent];
39
+ return path.join(versionDir, 'node_modules', '.bin', agentConfig.cliCommand);
40
+ }
41
+ /**
42
+ * Get the isolated HOME directory for a specific agent version.
43
+ * Each version has its own config isolation (like jobs sandbox).
44
+ */
45
+ export function getVersionHomePath(agent, version) {
46
+ return path.join(getVersionDir(agent, version), 'home');
47
+ }
48
+ /**
49
+ * Check if a specific version is installed.
50
+ */
51
+ export function isVersionInstalled(agent, version) {
52
+ const binaryPath = getBinaryPath(agent, version);
53
+ return fs.existsSync(binaryPath);
54
+ }
55
+ /**
56
+ * List all installed versions for an agent.
57
+ */
58
+ export function listInstalledVersions(agent) {
59
+ const agentVersionsDir = path.join(getVersionsDir(), agent);
60
+ if (!fs.existsSync(agentVersionsDir)) {
61
+ return [];
62
+ }
63
+ const entries = fs.readdirSync(agentVersionsDir, { withFileTypes: true });
64
+ const versions = [];
65
+ for (const entry of entries) {
66
+ if (entry.isDirectory()) {
67
+ const binaryPath = getBinaryPath(agent, entry.name);
68
+ if (fs.existsSync(binaryPath)) {
69
+ versions.push(entry.name);
70
+ }
71
+ }
72
+ }
73
+ return versions.sort(compareVersions);
74
+ }
75
+ /**
76
+ * Get the global default version for an agent.
77
+ */
78
+ export function getGlobalDefault(agent) {
79
+ const meta = readMeta();
80
+ return meta.versions?.[agent]?.default || null;
81
+ }
82
+ /**
83
+ * Set the global default version for an agent.
84
+ */
85
+ export function setGlobalDefault(agent, version) {
86
+ const meta = readMeta();
87
+ if (!meta.versions) {
88
+ meta.versions = {};
89
+ }
90
+ if (!meta.versions[agent]) {
91
+ meta.versions[agent] = { installed: [], default: null };
92
+ }
93
+ meta.versions[agent].default = version;
94
+ writeMeta(meta);
95
+ }
96
+ /**
97
+ * Get versions state for an agent from meta.
98
+ */
99
+ export function getAgentVersionsState(agent) {
100
+ const meta = readMeta();
101
+ return meta.versions?.[agent] || { installed: [], default: null };
102
+ }
103
+ /**
104
+ * Update versions state in meta after install/remove.
105
+ */
106
+ export function updateVersionsState(agent, state) {
107
+ const meta = readMeta();
108
+ if (!meta.versions) {
109
+ meta.versions = {};
110
+ }
111
+ meta.versions[agent] = state;
112
+ writeMeta(meta);
113
+ }
114
+ /**
115
+ * Install a specific version of an agent.
116
+ */
117
+ export async function installVersion(agent, version, onProgress) {
118
+ const agentConfig = AGENTS[agent];
119
+ if (!agentConfig.npmPackage) {
120
+ return { success: false, installedVersion: version, error: 'Agent has no npm package' };
121
+ }
122
+ ensureAgentsDir();
123
+ const versionDir = getVersionDir(agent, version);
124
+ // Create version directory and isolated home
125
+ fs.mkdirSync(versionDir, { recursive: true });
126
+ fs.mkdirSync(path.join(versionDir, 'home'), { recursive: true });
127
+ // Initialize package.json
128
+ const packageJson = {
129
+ name: `agents-${agent}-${version}`,
130
+ version: '1.0.0',
131
+ private: true,
132
+ };
133
+ fs.writeFileSync(path.join(versionDir, 'package.json'), JSON.stringify(packageJson, null, 2));
134
+ // Install the package
135
+ const packageSpec = version === 'latest'
136
+ ? agentConfig.npmPackage
137
+ : `${agentConfig.npmPackage}@${version}`;
138
+ try {
139
+ onProgress?.(`Installing ${packageSpec}...`);
140
+ const { stdout } = await execAsync(`npm install ${packageSpec}`, { cwd: versionDir });
141
+ // Determine the actual installed version
142
+ let installedVersion = version;
143
+ if (version === 'latest') {
144
+ const pkgJsonPath = path.join(versionDir, 'node_modules', agentConfig.npmPackage.replace(/^@/, '').split('/')[0], 'package.json');
145
+ // Try to read the actual version from installed package
146
+ try {
147
+ const installedPkgPath = path.join(versionDir, 'node_modules', agentConfig.npmPackage, 'package.json');
148
+ if (fs.existsSync(installedPkgPath)) {
149
+ const installedPkg = JSON.parse(fs.readFileSync(installedPkgPath, 'utf-8'));
150
+ installedVersion = installedPkg.version;
151
+ // Rename the directory to the actual version
152
+ if (installedVersion !== 'latest') {
153
+ const actualVersionDir = getVersionDir(agent, installedVersion);
154
+ if (!fs.existsSync(actualVersionDir)) {
155
+ fs.renameSync(versionDir, actualVersionDir);
156
+ }
157
+ else {
158
+ // Already exists, remove the 'latest' dir
159
+ fs.rmSync(versionDir, { recursive: true, force: true });
160
+ }
161
+ }
162
+ }
163
+ }
164
+ catch {
165
+ // Keep as 'latest' if we can't determine version
166
+ }
167
+ }
168
+ // Update state
169
+ const state = getAgentVersionsState(agent);
170
+ if (!state.installed.includes(installedVersion)) {
171
+ state.installed.push(installedVersion);
172
+ state.installed.sort(compareVersions);
173
+ }
174
+ // Set as default if first install
175
+ if (!state.default) {
176
+ state.default = installedVersion;
177
+ }
178
+ updateVersionsState(agent, state);
179
+ return { success: true, installedVersion };
180
+ }
181
+ catch (err) {
182
+ // Clean up on failure
183
+ if (fs.existsSync(versionDir)) {
184
+ fs.rmSync(versionDir, { recursive: true, force: true });
185
+ }
186
+ return { success: false, installedVersion: version, error: err.message };
187
+ }
188
+ }
189
+ /**
190
+ * Remove a specific version of an agent.
191
+ */
192
+ export function removeVersion(agent, version) {
193
+ const versionDir = getVersionDir(agent, version);
194
+ if (!fs.existsSync(versionDir)) {
195
+ return false;
196
+ }
197
+ fs.rmSync(versionDir, { recursive: true, force: true });
198
+ // Update state
199
+ const state = getAgentVersionsState(agent);
200
+ state.installed = state.installed.filter((v) => v !== version);
201
+ // Clear default if it was removed
202
+ if (state.default === version) {
203
+ state.default = state.installed.length > 0 ? state.installed[state.installed.length - 1] : null;
204
+ }
205
+ updateVersionsState(agent, state);
206
+ return true;
207
+ }
208
+ /**
209
+ * Remove all versions of an agent.
210
+ */
211
+ export function removeAllVersions(agent) {
212
+ const versions = listInstalledVersions(agent);
213
+ let removed = 0;
214
+ for (const version of versions) {
215
+ if (removeVersion(agent, version)) {
216
+ removed++;
217
+ }
218
+ }
219
+ // Clean up the agent directory
220
+ const agentDir = path.join(getVersionsDir(), agent);
221
+ if (fs.existsSync(agentDir)) {
222
+ fs.rmSync(agentDir, { recursive: true, force: true });
223
+ }
224
+ return removed;
225
+ }
226
+ /**
227
+ * Get the resolved version for an agent in the current context.
228
+ * Checks project manifest first, then global default.
229
+ */
230
+ export function resolveVersion(agent, projectPath) {
231
+ // Check project manifest
232
+ if (projectPath) {
233
+ const version = getProjectVersion(agent, projectPath);
234
+ if (version) {
235
+ return version;
236
+ }
237
+ }
238
+ // Fall back to global default
239
+ return getGlobalDefault(agent);
240
+ }
241
+ /**
242
+ * Get version specified in project manifest.
243
+ */
244
+ export function getProjectVersion(agent, startPath) {
245
+ let dir = path.resolve(startPath);
246
+ while (dir !== path.dirname(dir)) {
247
+ const manifestPath = path.join(dir, '.agents', 'agents.yaml');
248
+ if (fs.existsSync(manifestPath)) {
249
+ try {
250
+ const content = fs.readFileSync(manifestPath, 'utf-8');
251
+ // Simple YAML parsing for clis section
252
+ const clisMatch = content.match(new RegExp(`${agent}:[\\s\\S]*?version:\\s*['"]?([^'"\n]+)['"]?`, 'm'));
253
+ if (clisMatch) {
254
+ return clisMatch[1].trim();
255
+ }
256
+ }
257
+ catch {
258
+ // Ignore parsing errors
259
+ }
260
+ }
261
+ dir = path.dirname(dir);
262
+ }
263
+ return null;
264
+ }
265
+ /**
266
+ * Compare semver versions for sorting.
267
+ */
268
+ export function compareVersions(a, b) {
269
+ const aParts = a.split('.').map((n) => parseInt(n, 10) || 0);
270
+ const bParts = b.split('.').map((n) => parseInt(n, 10) || 0);
271
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
272
+ const aVal = aParts[i] || 0;
273
+ const bVal = bParts[i] || 0;
274
+ if (aVal !== bVal) {
275
+ return aVal - bVal;
276
+ }
277
+ }
278
+ return 0;
279
+ }
280
+ /**
281
+ * Get actual version from an installed 'latest' directory.
282
+ */
283
+ export async function getInstalledVersion(agent, version) {
284
+ const binaryPath = getBinaryPath(agent, version);
285
+ if (!fs.existsSync(binaryPath)) {
286
+ return null;
287
+ }
288
+ try {
289
+ const { stdout } = await execAsync(`${binaryPath} --version`);
290
+ const match = stdout.match(/(\d+\.\d+\.\d+)/);
291
+ return match ? match[1] : version;
292
+ }
293
+ catch {
294
+ return version;
295
+ }
296
+ }
297
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/lib/versions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swarmify/agents-cli",
3
- "version": "1.5.14",
3
+ "version": "1.5.16",
4
4
  "description": "Your multi-Agent manager - Agent CLIs, Agent Skills, MCP Servers, Hooks and settings",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,20 +10,21 @@
10
10
  },
11
11
  "files": [
12
12
  "dist",
13
+ "scripts",
13
14
  "CHANGELOG.md"
14
15
  ],
15
16
  "repository": {
16
17
  "type": "git",
17
- "url": "git+https://github.com/muqsitnawaz/swarmify.git",
18
- "directory": "agents-cli"
18
+ "url": "git+https://github.com/muqsitnawaz/agents-cli.git"
19
19
  },
20
- "homepage": "https://swarmify.co/#agents-cli",
20
+ "homepage": "https://github.com/muqsitnawaz/agents-cli",
21
21
  "bugs": {
22
- "url": "https://github.com/muqsitnawaz/swarmify/issues"
22
+ "url": "https://github.com/muqsitnawaz/agents-cli/issues"
23
23
  },
24
24
  "scripts": {
25
25
  "build": "tsc",
26
26
  "prepublishOnly": "tsc",
27
+ "postinstall": "node scripts/postinstall.js",
27
28
  "dev": "tsx src/index.ts",
28
29
  "start": "node dist/index.js",
29
30
  "test": "vitest run",
@@ -51,8 +52,10 @@
51
52
  },
52
53
  "dependencies": {
53
54
  "@inquirer/prompts": "^7.0.0",
55
+ "@modelcontextprotocol/sdk": "^1.26.0",
54
56
  "chalk": "^5.3.0",
55
57
  "commander": "^12.1.0",
58
+ "croner": "^9.0.0",
56
59
  "diff": "^7.0.0",
57
60
  "ora": "^8.1.0",
58
61
  "semver": "^7.6.0",
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ // Runs after npm install -g @swarmify/agents-cli
3
+ // Sets up PATH for version switching
4
+
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as os from 'os';
8
+
9
+ const HOME = os.homedir();
10
+ const SHIMS_DIR = path.join(HOME, '.agents', 'shims');
11
+ const AGENTS_DIR = path.join(HOME, '.agents');
12
+
13
+ // Only run for global installs
14
+ if (!process.env.npm_config_global && !process.argv.includes('-g')) {
15
+ process.exit(0);
16
+ }
17
+
18
+ // Create directories
19
+ fs.mkdirSync(SHIMS_DIR, { recursive: true });
20
+ fs.mkdirSync(AGENTS_DIR, { recursive: true });
21
+
22
+ // Detect shell rc file
23
+ function getShellRc() {
24
+ const shell = process.env.SHELL || '/bin/bash';
25
+ const shellName = path.basename(shell);
26
+
27
+ switch (shellName) {
28
+ case 'zsh':
29
+ return path.join(HOME, '.zshrc');
30
+ case 'fish':
31
+ return path.join(HOME, '.config', 'fish', 'config.fish');
32
+ case 'bash':
33
+ const bashProfile = path.join(HOME, '.bash_profile');
34
+ if (fs.existsSync(bashProfile)) {
35
+ return bashProfile;
36
+ }
37
+ return path.join(HOME, '.bashrc');
38
+ default:
39
+ return path.join(HOME, '.profile');
40
+ }
41
+ }
42
+
43
+ const rcFile = getShellRc();
44
+ const shellName = path.basename(process.env.SHELL || '/bin/bash');
45
+
46
+ // Check if already configured
47
+ let alreadyConfigured = false;
48
+ if (fs.existsSync(rcFile)) {
49
+ const content = fs.readFileSync(rcFile, 'utf-8');
50
+ alreadyConfigured = content.includes('.agents/shims');
51
+ }
52
+
53
+ if (alreadyConfigured) {
54
+ process.exit(0);
55
+ }
56
+
57
+ // Add to shell rc
58
+ const exportLine = shellName === 'fish'
59
+ ? `fish_add_path ${SHIMS_DIR}`
60
+ : `export PATH="${SHIMS_DIR}:$PATH"`;
61
+
62
+ const addition = `
63
+ # agents-cli: version switching for AI coding agents
64
+ ${exportLine}
65
+ `;
66
+
67
+ // Ensure parent directory exists (for fish)
68
+ fs.mkdirSync(path.dirname(rcFile), { recursive: true });
69
+ fs.appendFileSync(rcFile, addition);
70
+
71
+ console.log(`\n Added ${SHIMS_DIR} to PATH in ${path.basename(rcFile)}`);
72
+ console.log(` Restart your shell to enable version switching\n`);