@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.
- package/README.md +86 -291
- package/dist/index.js +879 -197
- package/dist/index.js.map +1 -1
- package/dist/lib/daemon.d.ts +22 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +303 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/drive-server.d.ts +9 -0
- package/dist/lib/drive-server.d.ts.map +1 -0
- package/dist/lib/drive-server.js +217 -0
- package/dist/lib/drive-server.js.map +1 -0
- package/dist/lib/drives.d.ts +34 -0
- package/dist/lib/drives.d.ts.map +1 -0
- package/dist/lib/drives.js +267 -0
- package/dist/lib/drives.js.map +1 -0
- package/dist/lib/jobs.d.ts +53 -0
- package/dist/lib/jobs.d.ts.map +1 -0
- package/dist/lib/jobs.js +242 -0
- package/dist/lib/jobs.js.map +1 -0
- package/dist/lib/manifest.js +1 -1
- package/dist/lib/manifest.js.map +1 -1
- package/dist/lib/runner.d.ts +12 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +266 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/sandbox.d.ts +10 -0
- package/dist/lib/sandbox.d.ts.map +1 -0
- package/dist/lib/sandbox.js +166 -0
- package/dist/lib/sandbox.js.map +1 -0
- package/dist/lib/scheduler.d.ts +18 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +64 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/shims.d.ts +32 -0
- package/dist/lib/shims.d.ts.map +1 -0
- package/dist/lib/shims.js +181 -0
- package/dist/lib/shims.js.map +1 -0
- package/dist/lib/state.d.ts +5 -0
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +35 -0
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/types.d.ts +10 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/versions.d.ts +84 -0
- package/dist/lib/versions.d.ts.map +1 -0
- package/dist/lib/versions.js +297 -0
- package/dist/lib/versions.js.map +1 -0
- package/package.json +8 -5
- 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.
|
|
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/
|
|
18
|
-
"directory": "agents-cli"
|
|
18
|
+
"url": "git+https://github.com/muqsitnawaz/agents-cli.git"
|
|
19
19
|
},
|
|
20
|
-
"homepage": "https://
|
|
20
|
+
"homepage": "https://github.com/muqsitnawaz/agents-cli",
|
|
21
21
|
"bugs": {
|
|
22
|
-
"url": "https://github.com/muqsitnawaz/
|
|
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`);
|