@swarmify/agents-cli 1.5.13 → 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.
Files changed (66) hide show
  1. package/README.md +93 -213
  2. package/dist/index.js +1194 -173
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/agents.d.ts.map +1 -1
  5. package/dist/lib/agents.js +19 -2
  6. package/dist/lib/agents.js.map +1 -1
  7. package/dist/lib/artifact-actions.d.ts +22 -0
  8. package/dist/lib/artifact-actions.d.ts.map +1 -0
  9. package/dist/lib/artifact-actions.js +55 -0
  10. package/dist/lib/artifact-actions.js.map +1 -0
  11. package/dist/lib/commands.d.ts.map +1 -1
  12. package/dist/lib/commands.js +3 -5
  13. package/dist/lib/commands.js.map +1 -1
  14. package/dist/lib/daemon.d.ts +22 -0
  15. package/dist/lib/daemon.d.ts.map +1 -0
  16. package/dist/lib/daemon.js +303 -0
  17. package/dist/lib/daemon.js.map +1 -0
  18. package/dist/lib/drive-server.d.ts +9 -0
  19. package/dist/lib/drive-server.d.ts.map +1 -0
  20. package/dist/lib/drive-server.js +217 -0
  21. package/dist/lib/drive-server.js.map +1 -0
  22. package/dist/lib/drives.d.ts +34 -0
  23. package/dist/lib/drives.d.ts.map +1 -0
  24. package/dist/lib/drives.js +267 -0
  25. package/dist/lib/drives.js.map +1 -0
  26. package/dist/lib/instructions.d.ts +31 -0
  27. package/dist/lib/instructions.d.ts.map +1 -0
  28. package/dist/lib/instructions.js +161 -0
  29. package/dist/lib/instructions.js.map +1 -0
  30. package/dist/lib/jobs.d.ts +53 -0
  31. package/dist/lib/jobs.d.ts.map +1 -0
  32. package/dist/lib/jobs.js +242 -0
  33. package/dist/lib/jobs.js.map +1 -0
  34. package/dist/lib/runner.d.ts +12 -0
  35. package/dist/lib/runner.d.ts.map +1 -0
  36. package/dist/lib/runner.js +266 -0
  37. package/dist/lib/runner.js.map +1 -0
  38. package/dist/lib/sandbox.d.ts +10 -0
  39. package/dist/lib/sandbox.d.ts.map +1 -0
  40. package/dist/lib/sandbox.js +166 -0
  41. package/dist/lib/sandbox.js.map +1 -0
  42. package/dist/lib/scheduler.d.ts +18 -0
  43. package/dist/lib/scheduler.d.ts.map +1 -0
  44. package/dist/lib/scheduler.js +64 -0
  45. package/dist/lib/scheduler.js.map +1 -0
  46. package/dist/lib/shims.d.ts +32 -0
  47. package/dist/lib/shims.d.ts.map +1 -0
  48. package/dist/lib/shims.js +175 -0
  49. package/dist/lib/shims.js.map +1 -0
  50. package/dist/lib/state.d.ts +5 -0
  51. package/dist/lib/state.d.ts.map +1 -1
  52. package/dist/lib/state.js +35 -0
  53. package/dist/lib/state.js.map +1 -1
  54. package/dist/lib/template.d.ts +24 -0
  55. package/dist/lib/template.d.ts.map +1 -0
  56. package/dist/lib/template.js +57 -0
  57. package/dist/lib/template.js.map +1 -0
  58. package/dist/lib/types.d.ts +11 -0
  59. package/dist/lib/types.d.ts.map +1 -1
  60. package/dist/lib/types.js.map +1 -1
  61. package/dist/lib/versions.d.ts +79 -0
  62. package/dist/lib/versions.d.ts.map +1 -0
  63. package/dist/lib/versions.js +289 -0
  64. package/dist/lib/versions.js.map +1 -0
  65. package/package.json +8 -5
  66. package/scripts/postinstall.js +72 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Template resolution utilities
3
+ * Ported from agents/halo/cli/pkg/template
4
+ */
5
+ /**
6
+ * Resolve template placeholders with artifact and preflight data
7
+ * Replaces {{artifact.*}} and {{preflight.*}} patterns
8
+ *
9
+ * @param tmpl - Template string with placeholders
10
+ * @param artifact - Map of artifact key-value pairs
11
+ * @param preflight - Map of preflight data (can contain strings or string arrays)
12
+ * @returns Resolved template string
13
+ */
14
+ export function resolveTemplate(tmpl, artifact, preflight) {
15
+ let result = tmpl;
16
+ // Replace {{artifact.*}}
17
+ result = result.replace(/\{\{artifact\.(\w+)\}\}/g, (_, key) => {
18
+ return artifact[key] ?? '';
19
+ });
20
+ // Replace {{preflight.*}}
21
+ result = result.replace(/\{\{preflight\.(\w+)\}\}/g, (_, key) => {
22
+ const val = preflight[key];
23
+ if (val === undefined || val === null) {
24
+ return '';
25
+ }
26
+ if (typeof val === 'string') {
27
+ return val;
28
+ }
29
+ if (Array.isArray(val)) {
30
+ return val.join(',');
31
+ }
32
+ return '';
33
+ });
34
+ return result;
35
+ }
36
+ /**
37
+ * Extract all template variables from a template string
38
+ * @param tmpl - Template string
39
+ * @returns Object with artifact and preflight variable names
40
+ */
41
+ export function extractTemplateVariables(tmpl) {
42
+ const artifact = [];
43
+ const preflight = [];
44
+ const re = /\{\{(\w+)\.(\w+)\}\}/g;
45
+ let match;
46
+ while ((match = re.exec(tmpl)) !== null) {
47
+ const [, prefix, key] = match;
48
+ if (prefix === 'artifact' && !artifact.includes(key)) {
49
+ artifact.push(key);
50
+ }
51
+ else if (prefix === 'preflight' && !preflight.includes(key)) {
52
+ preflight.push(key);
53
+ }
54
+ }
55
+ return { artifact, preflight };
56
+ }
57
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAAgC,EAChC,SAAsD;IAEtD,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,yBAAyB;IACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC7D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC9D,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IAInD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,EAAE,GAAG,uBAAuB,CAAC;IACnC,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QAC9B,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
@@ -10,6 +10,7 @@ export interface AgentConfig {
10
10
  commandsSubdir: string;
11
11
  skillsDir: string;
12
12
  hooksDir: string;
13
+ instructionsFile: string;
13
14
  format: 'markdown' | 'toml';
14
15
  variableSyntax: string;
15
16
  supportsHooks: boolean;
@@ -45,10 +46,15 @@ export interface InstalledHook {
45
46
  scope: 'user' | 'project';
46
47
  agent: AgentId;
47
48
  }
49
+ export interface DriveManifestEntry {
50
+ description?: string;
51
+ project?: string;
52
+ }
48
53
  export interface Manifest {
49
54
  clis?: Partial<Record<AgentId, CliConfig>>;
50
55
  dependencies?: Record<string, string>;
51
56
  mcp?: Record<string, McpServerConfig>;
57
+ drives?: Record<string, DriveManifestEntry>;
52
58
  defaults?: {
53
59
  method?: 'symlink' | 'copy';
54
60
  scope?: 'global' | 'project';
@@ -193,11 +199,16 @@ export interface ScopeConfig {
193
199
  priority: number;
194
200
  readonly?: boolean;
195
201
  }
202
+ export interface AgentVersionsState {
203
+ installed: string[];
204
+ default: string | null;
205
+ }
196
206
  export interface Meta {
197
207
  version: string;
198
208
  scopes: Record<ScopeName, ScopeConfig>;
199
209
  registries?: Record<RegistryType, Record<string, RegistryConfig>>;
200
210
  clis: Partial<Record<AgentId, CliState>>;
211
+ versions?: Partial<Record<AgentId, AgentVersionsState>>;
201
212
  packages: Record<string, PackageState>;
202
213
  commands: Record<string, CommandState>;
203
214
  skills: Record<string, SkillState>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAoIA,MAAM,CAAC,MAAM,gBAAgB,GAAiC;IAC5D,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAW5D,MAAM,CAAC,MAAM,kBAAkB,GAAyD;IACtF,GAAG,EAAE;QACH,QAAQ,EAAE;YACR,GAAG,EAAE,6CAA6C;YAClD,OAAO,EAAE,IAAI;SACd;KACF;IACD,KAAK,EAAE;IACL,qEAAqE;IACrE,+EAA+E;KAChF;CACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AA2IA,MAAM,CAAC,MAAM,gBAAgB,GAAiC;IAC5D,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAW5D,MAAM,CAAC,MAAM,kBAAkB,GAAyD;IACtF,GAAG,EAAE;QACH,QAAQ,EAAE;YACR,GAAG,EAAE,6CAA6C;YAClD,OAAO,EAAE,IAAI;SACd;KACF;IACD,KAAK,EAAE;IACL,qEAAqE;IACrE,+EAA+E;KAChF;CACF,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { AgentId, AgentVersionsState } from './types.js';
2
+ export interface AgentSpec {
3
+ agent: AgentId;
4
+ version: string;
5
+ }
6
+ /**
7
+ * Parse agent@version syntax.
8
+ * Examples:
9
+ * "claude@1.5.0" -> { agent: "claude", version: "1.5.0" }
10
+ * "claude" -> { agent: "claude", version: "latest" }
11
+ * "codex@latest" -> { agent: "codex", version: "latest" }
12
+ */
13
+ export declare function parseAgentSpec(spec: string): AgentSpec | null;
14
+ /**
15
+ * Get the directory where a specific version is installed.
16
+ */
17
+ export declare function getVersionDir(agent: AgentId, version: string): string;
18
+ /**
19
+ * Get the binary path for a specific agent version.
20
+ */
21
+ export declare function getBinaryPath(agent: AgentId, version: string): string;
22
+ /**
23
+ * Check if a specific version is installed.
24
+ */
25
+ export declare function isVersionInstalled(agent: AgentId, version: string): boolean;
26
+ /**
27
+ * List all installed versions for an agent.
28
+ */
29
+ export declare function listInstalledVersions(agent: AgentId): string[];
30
+ /**
31
+ * Get the global default version for an agent.
32
+ */
33
+ export declare function getGlobalDefault(agent: AgentId): string | null;
34
+ /**
35
+ * Set the global default version for an agent.
36
+ */
37
+ export declare function setGlobalDefault(agent: AgentId, version: string): void;
38
+ /**
39
+ * Get versions state for an agent from meta.
40
+ */
41
+ export declare function getAgentVersionsState(agent: AgentId): AgentVersionsState;
42
+ /**
43
+ * Update versions state in meta after install/remove.
44
+ */
45
+ export declare function updateVersionsState(agent: AgentId, state: AgentVersionsState): void;
46
+ /**
47
+ * Install a specific version of an agent.
48
+ */
49
+ export declare function installVersion(agent: AgentId, version: string, onProgress?: (message: string) => void): Promise<{
50
+ success: boolean;
51
+ installedVersion: string;
52
+ error?: string;
53
+ }>;
54
+ /**
55
+ * Remove a specific version of an agent.
56
+ */
57
+ export declare function removeVersion(agent: AgentId, version: string): boolean;
58
+ /**
59
+ * Remove all versions of an agent.
60
+ */
61
+ export declare function removeAllVersions(agent: AgentId): number;
62
+ /**
63
+ * Get the resolved version for an agent in the current context.
64
+ * Checks project manifest first, then global default.
65
+ */
66
+ export declare function resolveVersion(agent: AgentId, projectPath?: string): string | null;
67
+ /**
68
+ * Get version specified in project manifest.
69
+ */
70
+ export declare function getProjectVersion(agent: AgentId, startPath: string): string | null;
71
+ /**
72
+ * Compare semver versions for sorting.
73
+ */
74
+ export declare function compareVersions(a: string, b: string): number;
75
+ /**
76
+ * Get actual version from an installed 'latest' directory.
77
+ */
78
+ export declare function getInstalledVersion(agent: AgentId, version: string): Promise<string | null>;
79
+ //# sourceMappingURL=versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/lib/versions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAM9D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAa7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAmB9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAUtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAGxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAOnF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+EzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAqBtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqBlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajG"}
@@ -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":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAe,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAOlC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAErC,IAAI,CAAC,MAAM,CAAC,SAAoB,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAoB;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAe;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAe;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,OAAe;IAChE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,OAAe;IAC9D,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,OAAO,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,KAAyB;IAC3E,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC7B,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAc,EACd,OAAe,EACf,UAAsC;IAEtC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;IAC1F,CAAC;IAED,eAAe,EAAE,CAAC;IAClB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjD,2BAA2B;IAC3B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,0BAA0B;IAC1B,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,UAAU,KAAK,IAAI,OAAO,EAAE;QAClC,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;KACd,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9F,sBAAsB;IACtB,MAAM,WAAW,GAAG,OAAO,KAAK,QAAQ;QACtC,CAAC,CAAC,WAAW,CAAC,UAAU;QACxB,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,UAAU,EAAE,CAAC,cAAc,WAAW,KAAK,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAEtF,yCAAyC;QACzC,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAClI,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBACvG,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC5E,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC;oBAExC,6CAA6C;oBAC7C,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;wBAClC,MAAM,gBAAgB,GAAG,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BACrC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;wBAC9C,CAAC;6BAAM,CAAC;4BACN,0CAA0C;4BAC1C,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC1D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxC,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAC;QACnC,CAAC;QAED,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAElC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB;QACtB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAe;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,eAAe;IACf,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IAE/D,kCAAkC;IAClC,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,CAAC;IAED,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAElC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,WAAoB;IACjE,yBAAyB;IACzB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,SAAiB;IACjE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAElC,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,uCAAuC;gBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,6CAA6C,EAAE,GAAG,CAAC,CAAC,CAAC;gBACxG,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAc,EAAE,OAAe;IACvE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,UAAU,YAAY,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swarmify/agents-cli",
3
- "version": "1.5.13",
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`);