@swarmify/agents-cli 1.5.14 → 1.5.15

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 (48) hide show
  1. package/README.md +86 -291
  2. package/dist/index.js +893 -166
  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/runner.d.ts +12 -0
  21. package/dist/lib/runner.d.ts.map +1 -0
  22. package/dist/lib/runner.js +266 -0
  23. package/dist/lib/runner.js.map +1 -0
  24. package/dist/lib/sandbox.d.ts +10 -0
  25. package/dist/lib/sandbox.d.ts.map +1 -0
  26. package/dist/lib/sandbox.js +166 -0
  27. package/dist/lib/sandbox.js.map +1 -0
  28. package/dist/lib/scheduler.d.ts +18 -0
  29. package/dist/lib/scheduler.d.ts.map +1 -0
  30. package/dist/lib/scheduler.js +64 -0
  31. package/dist/lib/scheduler.js.map +1 -0
  32. package/dist/lib/shims.d.ts +32 -0
  33. package/dist/lib/shims.d.ts.map +1 -0
  34. package/dist/lib/shims.js +175 -0
  35. package/dist/lib/shims.js.map +1 -0
  36. package/dist/lib/state.d.ts +5 -0
  37. package/dist/lib/state.d.ts.map +1 -1
  38. package/dist/lib/state.js +35 -0
  39. package/dist/lib/state.js.map +1 -1
  40. package/dist/lib/types.d.ts +10 -0
  41. package/dist/lib/types.d.ts.map +1 -1
  42. package/dist/lib/types.js.map +1 -1
  43. package/dist/lib/versions.d.ts +79 -0
  44. package/dist/lib/versions.d.ts.map +1 -0
  45. package/dist/lib/versions.js +289 -0
  46. package/dist/lib/versions.js.map +1 -0
  47. package/package.json +8 -5
  48. package/scripts/postinstall.js +72 -0
@@ -0,0 +1,289 @@
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
+ * Check if a specific version is installed.
43
+ */
44
+ export function isVersionInstalled(agent, version) {
45
+ const binaryPath = getBinaryPath(agent, version);
46
+ return fs.existsSync(binaryPath);
47
+ }
48
+ /**
49
+ * List all installed versions for an agent.
50
+ */
51
+ export function listInstalledVersions(agent) {
52
+ const agentVersionsDir = path.join(getVersionsDir(), agent);
53
+ if (!fs.existsSync(agentVersionsDir)) {
54
+ return [];
55
+ }
56
+ const entries = fs.readdirSync(agentVersionsDir, { withFileTypes: true });
57
+ const versions = [];
58
+ for (const entry of entries) {
59
+ if (entry.isDirectory()) {
60
+ const binaryPath = getBinaryPath(agent, entry.name);
61
+ if (fs.existsSync(binaryPath)) {
62
+ versions.push(entry.name);
63
+ }
64
+ }
65
+ }
66
+ return versions.sort(compareVersions);
67
+ }
68
+ /**
69
+ * Get the global default version for an agent.
70
+ */
71
+ export function getGlobalDefault(agent) {
72
+ const meta = readMeta();
73
+ return meta.versions?.[agent]?.default || null;
74
+ }
75
+ /**
76
+ * Set the global default version for an agent.
77
+ */
78
+ export function setGlobalDefault(agent, version) {
79
+ const meta = readMeta();
80
+ if (!meta.versions) {
81
+ meta.versions = {};
82
+ }
83
+ if (!meta.versions[agent]) {
84
+ meta.versions[agent] = { installed: [], default: null };
85
+ }
86
+ meta.versions[agent].default = version;
87
+ writeMeta(meta);
88
+ }
89
+ /**
90
+ * Get versions state for an agent from meta.
91
+ */
92
+ export function getAgentVersionsState(agent) {
93
+ const meta = readMeta();
94
+ return meta.versions?.[agent] || { installed: [], default: null };
95
+ }
96
+ /**
97
+ * Update versions state in meta after install/remove.
98
+ */
99
+ export function updateVersionsState(agent, state) {
100
+ const meta = readMeta();
101
+ if (!meta.versions) {
102
+ meta.versions = {};
103
+ }
104
+ meta.versions[agent] = state;
105
+ writeMeta(meta);
106
+ }
107
+ /**
108
+ * Install a specific version of an agent.
109
+ */
110
+ export async function installVersion(agent, version, onProgress) {
111
+ const agentConfig = AGENTS[agent];
112
+ if (!agentConfig.npmPackage) {
113
+ return { success: false, installedVersion: version, error: 'Agent has no npm package' };
114
+ }
115
+ ensureAgentsDir();
116
+ const versionDir = getVersionDir(agent, version);
117
+ // Create version directory
118
+ fs.mkdirSync(versionDir, { recursive: true });
119
+ // Initialize package.json
120
+ const packageJson = {
121
+ name: `agents-${agent}-${version}`,
122
+ version: '1.0.0',
123
+ private: true,
124
+ };
125
+ fs.writeFileSync(path.join(versionDir, 'package.json'), JSON.stringify(packageJson, null, 2));
126
+ // Install the package
127
+ const packageSpec = version === 'latest'
128
+ ? agentConfig.npmPackage
129
+ : `${agentConfig.npmPackage}@${version}`;
130
+ try {
131
+ onProgress?.(`Installing ${packageSpec}...`);
132
+ const { stdout } = await execAsync(`npm install ${packageSpec}`, { cwd: versionDir });
133
+ // Determine the actual installed version
134
+ let installedVersion = version;
135
+ if (version === 'latest') {
136
+ const pkgJsonPath = path.join(versionDir, 'node_modules', agentConfig.npmPackage.replace(/^@/, '').split('/')[0], 'package.json');
137
+ // Try to read the actual version from installed package
138
+ try {
139
+ const installedPkgPath = path.join(versionDir, 'node_modules', agentConfig.npmPackage, 'package.json');
140
+ if (fs.existsSync(installedPkgPath)) {
141
+ const installedPkg = JSON.parse(fs.readFileSync(installedPkgPath, 'utf-8'));
142
+ installedVersion = installedPkg.version;
143
+ // Rename the directory to the actual version
144
+ if (installedVersion !== 'latest') {
145
+ const actualVersionDir = getVersionDir(agent, installedVersion);
146
+ if (!fs.existsSync(actualVersionDir)) {
147
+ fs.renameSync(versionDir, actualVersionDir);
148
+ }
149
+ else {
150
+ // Already exists, remove the 'latest' dir
151
+ fs.rmSync(versionDir, { recursive: true, force: true });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ catch {
157
+ // Keep as 'latest' if we can't determine version
158
+ }
159
+ }
160
+ // Update state
161
+ const state = getAgentVersionsState(agent);
162
+ if (!state.installed.includes(installedVersion)) {
163
+ state.installed.push(installedVersion);
164
+ state.installed.sort(compareVersions);
165
+ }
166
+ // Set as default if first install
167
+ if (!state.default) {
168
+ state.default = installedVersion;
169
+ }
170
+ updateVersionsState(agent, state);
171
+ return { success: true, installedVersion };
172
+ }
173
+ catch (err) {
174
+ // Clean up on failure
175
+ if (fs.existsSync(versionDir)) {
176
+ fs.rmSync(versionDir, { recursive: true, force: true });
177
+ }
178
+ return { success: false, installedVersion: version, error: err.message };
179
+ }
180
+ }
181
+ /**
182
+ * Remove a specific version of an agent.
183
+ */
184
+ export function removeVersion(agent, version) {
185
+ const versionDir = getVersionDir(agent, version);
186
+ if (!fs.existsSync(versionDir)) {
187
+ return false;
188
+ }
189
+ fs.rmSync(versionDir, { recursive: true, force: true });
190
+ // Update state
191
+ const state = getAgentVersionsState(agent);
192
+ state.installed = state.installed.filter((v) => v !== version);
193
+ // Clear default if it was removed
194
+ if (state.default === version) {
195
+ state.default = state.installed.length > 0 ? state.installed[state.installed.length - 1] : null;
196
+ }
197
+ updateVersionsState(agent, state);
198
+ return true;
199
+ }
200
+ /**
201
+ * Remove all versions of an agent.
202
+ */
203
+ export function removeAllVersions(agent) {
204
+ const versions = listInstalledVersions(agent);
205
+ let removed = 0;
206
+ for (const version of versions) {
207
+ if (removeVersion(agent, version)) {
208
+ removed++;
209
+ }
210
+ }
211
+ // Clean up the agent directory
212
+ const agentDir = path.join(getVersionsDir(), agent);
213
+ if (fs.existsSync(agentDir)) {
214
+ fs.rmSync(agentDir, { recursive: true, force: true });
215
+ }
216
+ return removed;
217
+ }
218
+ /**
219
+ * Get the resolved version for an agent in the current context.
220
+ * Checks project manifest first, then global default.
221
+ */
222
+ export function resolveVersion(agent, projectPath) {
223
+ // Check project manifest
224
+ if (projectPath) {
225
+ const version = getProjectVersion(agent, projectPath);
226
+ if (version) {
227
+ return version;
228
+ }
229
+ }
230
+ // Fall back to global default
231
+ return getGlobalDefault(agent);
232
+ }
233
+ /**
234
+ * Get version specified in project manifest.
235
+ */
236
+ export function getProjectVersion(agent, startPath) {
237
+ let dir = path.resolve(startPath);
238
+ while (dir !== path.dirname(dir)) {
239
+ const manifestPath = path.join(dir, '.agents', 'agents.yaml');
240
+ if (fs.existsSync(manifestPath)) {
241
+ try {
242
+ const content = fs.readFileSync(manifestPath, 'utf-8');
243
+ // Simple YAML parsing for clis section
244
+ const clisMatch = content.match(new RegExp(`${agent}:[\\s\\S]*?version:\\s*['"]?([^'"\n]+)['"]?`, 'm'));
245
+ if (clisMatch) {
246
+ return clisMatch[1].trim();
247
+ }
248
+ }
249
+ catch {
250
+ // Ignore parsing errors
251
+ }
252
+ }
253
+ dir = path.dirname(dir);
254
+ }
255
+ return null;
256
+ }
257
+ /**
258
+ * Compare semver versions for sorting.
259
+ */
260
+ export function compareVersions(a, b) {
261
+ const aParts = a.split('.').map((n) => parseInt(n, 10) || 0);
262
+ const bParts = b.split('.').map((n) => parseInt(n, 10) || 0);
263
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
264
+ const aVal = aParts[i] || 0;
265
+ const bVal = bParts[i] || 0;
266
+ if (aVal !== bVal) {
267
+ return aVal - bVal;
268
+ }
269
+ }
270
+ return 0;
271
+ }
272
+ /**
273
+ * Get actual version from an installed 'latest' directory.
274
+ */
275
+ export async function getInstalledVersion(agent, version) {
276
+ const binaryPath = getBinaryPath(agent, version);
277
+ if (!fs.existsSync(binaryPath)) {
278
+ return null;
279
+ }
280
+ try {
281
+ const { stdout } = await execAsync(`${binaryPath} --version`);
282
+ const match = stdout.match(/(\d+\.\d+\.\d+)/);
283
+ return match ? match[1] : version;
284
+ }
285
+ catch {
286
+ return version;
287
+ }
288
+ }
289
+ //# 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.15",
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`);