@agents-dev/cli 0.8.1 → 0.8.3
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/CHANGELOG.md +56 -0
- package/README.md +325 -68
- package/dist/cli.js +38 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.js +46 -13
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-test.js +8 -2
- package/dist/commands/mcp-test.js.map +1 -1
- package/dist/commands/reset.js +9 -0
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/start.js +20 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.js +99 -23
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.js +42 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/antigravity.d.ts +10 -0
- package/dist/core/antigravity.js +52 -0
- package/dist/core/antigravity.js.map +1 -0
- package/dist/core/config.js +8 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/gitignore.js +4 -1
- package/dist/core/gitignore.js.map +1 -1
- package/dist/core/mcp.js +23 -5
- package/dist/core/mcp.js.map +1 -1
- package/dist/core/mcpCrud.js +2 -1
- package/dist/core/mcpCrud.js.map +1 -1
- package/dist/core/opencode.d.ts +7 -0
- package/dist/core/opencode.js +22 -0
- package/dist/core/opencode.js.map +1 -0
- package/dist/core/paths.d.ts +6 -0
- package/dist/core/paths.js +7 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/core/renderers.d.ts +8 -0
- package/dist/core/renderers.js +57 -0
- package/dist/core/renderers.js.map +1 -1
- package/dist/core/shell.d.ts +1 -0
- package/dist/core/shell.js +17 -4
- package/dist/core/shell.js.map +1 -1
- package/dist/core/skills.js +12 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/sync.js +129 -6
- package/dist/core/sync.js.map +1 -1
- package/dist/core/updateCheck.d.ts +24 -0
- package/dist/core/updateCheck.js +227 -0
- package/dist/core/updateCheck.js.map +1 -0
- package/dist/core/version.d.ts +1 -0
- package/dist/core/version.js +2 -0
- package/dist/core/version.js.map +1 -0
- package/dist/core/windsurf.d.ts +8 -0
- package/dist/core/windsurf.js +29 -0
- package/dist/core/windsurf.js.map +1 -0
- package/dist/integrations/opencode.d.ts +7 -0
- package/dist/integrations/opencode.js +9 -0
- package/dist/integrations/opencode.js.map +1 -0
- package/dist/integrations/registry.js +3 -1
- package/dist/integrations/registry.js.map +1 -1
- package/dist/integrations/windsurf.d.ts +0 -2
- package/dist/integrations/windsurf.js +1 -9
- package/dist/integrations/windsurf.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/docs/EXAMPLES.md +18 -29
- package/docs/README.md +1 -0
- package/docs/agents-system.md +12 -2
- package/docs/screenshot.jpg +0 -0
- package/package.json +7 -3
- package/templates/agents/README.md +4 -1
- package/dist/commands/migrate.d.ts +0 -4
- package/dist/commands/migrate.js +0 -71
- package/dist/commands/migrate.js.map +0 -1
- package/dist/core/catalog.d.ts +0 -8
- package/dist/core/catalog.js +0 -141
- package/dist/core/catalog.js.map +0 -1
- package/dist/core/linking.d.ts +0 -8
- package/dist/core/linking.js +0 -41
- package/dist/core/linking.js.map +0 -1
- package/dist/core/windsurfPaths.d.ts +0 -8
- package/dist/core/windsurfPaths.js +0 -43
- package/dist/core/windsurfPaths.js.map +0 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { pathExists, readJson, writeJsonAtomic } from './fs.js';
|
|
4
|
+
import { getProjectPaths } from './paths.js';
|
|
5
|
+
import * as ui from './ui.js';
|
|
6
|
+
const NPM_LATEST_URL = 'https://registry.npmjs.org/@agents-dev/cli/latest';
|
|
7
|
+
const DEFAULT_TIMEOUT_MS = 1500;
|
|
8
|
+
const STARTUP_RECHECK_MS = 6 * 60 * 60 * 1000;
|
|
9
|
+
export const UPGRADE_COMMAND = 'npm install -g @agents-dev/cli@latest';
|
|
10
|
+
export async function checkForUpdates(options) {
|
|
11
|
+
const now = new Date();
|
|
12
|
+
const nowIso = now.toISOString();
|
|
13
|
+
const timeoutMs = normalizeTimeout(options.timeoutMs);
|
|
14
|
+
const storage = await loadStorageState(options.projectRoot);
|
|
15
|
+
const metadata = readUpdateMetadata(storage.document);
|
|
16
|
+
const channel = resolveUpdateChannel();
|
|
17
|
+
if (!channel.ok) {
|
|
18
|
+
metadata.lastSeenVersion = options.currentVersion;
|
|
19
|
+
writeUpdateMetadata(storage.document, storage.kind, metadata);
|
|
20
|
+
await writeJsonAtomic(storage.filePath, storage.document);
|
|
21
|
+
return {
|
|
22
|
+
currentVersion: options.currentVersion,
|
|
23
|
+
latestVersion: normalizeVersion(metadata.latestVersion),
|
|
24
|
+
isOutdated: false,
|
|
25
|
+
upgradeCommand: UPGRADE_COMMAND,
|
|
26
|
+
checkedAt: metadata.lastCheckedAt ?? nowIso,
|
|
27
|
+
source: 'unavailable',
|
|
28
|
+
error: channel.error
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
let source = 'cache';
|
|
32
|
+
let latestVersion = normalizeVersion(metadata.latestVersion);
|
|
33
|
+
let errorMessage;
|
|
34
|
+
const shouldRefresh = options.forceRefresh === true || !isRecent(metadata.lastCheckedAt, STARTUP_RECHECK_MS);
|
|
35
|
+
if (!latestVersion || shouldRefresh) {
|
|
36
|
+
const fetched = await fetchLatestVersion(timeoutMs);
|
|
37
|
+
if (fetched.version) {
|
|
38
|
+
latestVersion = fetched.version;
|
|
39
|
+
metadata.latestVersion = fetched.version;
|
|
40
|
+
metadata.lastCheckedAt = nowIso;
|
|
41
|
+
source = 'network';
|
|
42
|
+
}
|
|
43
|
+
else if (latestVersion) {
|
|
44
|
+
source = 'cache-stale';
|
|
45
|
+
errorMessage = fetched.error;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
source = 'unavailable';
|
|
49
|
+
errorMessage = fetched.error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
metadata.lastSeenVersion = options.currentVersion;
|
|
53
|
+
const isOutdated = compareVersions(options.currentVersion, latestVersion) < 0;
|
|
54
|
+
if (isOutdated && options.markNotifiedIfOutdated) {
|
|
55
|
+
metadata.lastNotifiedAt = nowIso;
|
|
56
|
+
}
|
|
57
|
+
writeUpdateMetadata(storage.document, storage.kind, metadata);
|
|
58
|
+
await writeJsonAtomic(storage.filePath, storage.document);
|
|
59
|
+
return {
|
|
60
|
+
currentVersion: options.currentVersion,
|
|
61
|
+
latestVersion,
|
|
62
|
+
isOutdated,
|
|
63
|
+
upgradeCommand: UPGRADE_COMMAND,
|
|
64
|
+
checkedAt: metadata.lastCheckedAt ?? nowIso,
|
|
65
|
+
source,
|
|
66
|
+
error: errorMessage
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export async function maybeNotifyAboutUpdate(args) {
|
|
70
|
+
try {
|
|
71
|
+
const status = await checkForUpdates({
|
|
72
|
+
currentVersion: args.currentVersion,
|
|
73
|
+
projectRoot: args.projectRoot,
|
|
74
|
+
markNotifiedIfOutdated: true
|
|
75
|
+
});
|
|
76
|
+
if (!status.isOutdated || !status.latestVersion)
|
|
77
|
+
return;
|
|
78
|
+
ui.blank();
|
|
79
|
+
ui.warning(`Update available: ${status.currentVersion} -> ${status.latestVersion}`);
|
|
80
|
+
ui.hint(`Run "${status.upgradeCommand}"`);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Update checks should never block command execution.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function loadStorageState(projectRoot) {
|
|
87
|
+
const projectLocalPath = projectRoot ? getProjectPaths(projectRoot).agentsLocal : undefined;
|
|
88
|
+
if (projectLocalPath && (await pathExists(projectLocalPath))) {
|
|
89
|
+
return {
|
|
90
|
+
kind: 'project-local',
|
|
91
|
+
filePath: projectLocalPath,
|
|
92
|
+
document: await readDocument(projectLocalPath)
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const globalPath = path.join(os.homedir(), '.agents-dev', 'update-check.json');
|
|
96
|
+
return {
|
|
97
|
+
kind: 'global',
|
|
98
|
+
filePath: globalPath,
|
|
99
|
+
document: await readDocument(globalPath)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async function readDocument(filePath) {
|
|
103
|
+
if (!(await pathExists(filePath)))
|
|
104
|
+
return {};
|
|
105
|
+
try {
|
|
106
|
+
const parsed = await readJson(filePath);
|
|
107
|
+
return typeof parsed === 'object' && parsed !== null ? parsed : {};
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function readUpdateMetadata(document) {
|
|
114
|
+
const meta = asObject(document.meta);
|
|
115
|
+
const updateCheck = asObject(meta?.updateCheck);
|
|
116
|
+
return {
|
|
117
|
+
lastCheckedAt: asString(updateCheck?.lastCheckedAt),
|
|
118
|
+
lastSeenVersion: asString(updateCheck?.lastSeenVersion),
|
|
119
|
+
lastNotifiedAt: asString(updateCheck?.lastNotifiedAt),
|
|
120
|
+
latestVersion: asString(updateCheck?.latestVersion)
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function writeUpdateMetadata(document, kind, metadata) {
|
|
124
|
+
if (kind === 'project-local' && !asObject(document.mcpServers)) {
|
|
125
|
+
document.mcpServers = {};
|
|
126
|
+
}
|
|
127
|
+
const meta = asObject(document.meta) ?? {};
|
|
128
|
+
meta.updateCheck = {
|
|
129
|
+
...(asObject(meta.updateCheck) ?? {}),
|
|
130
|
+
...metadata
|
|
131
|
+
};
|
|
132
|
+
document.meta = meta;
|
|
133
|
+
}
|
|
134
|
+
async function fetchLatestVersion(timeoutMs) {
|
|
135
|
+
const controller = new AbortController();
|
|
136
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
137
|
+
try {
|
|
138
|
+
const response = await fetch(NPM_LATEST_URL, {
|
|
139
|
+
headers: { Accept: 'application/json' },
|
|
140
|
+
signal: controller.signal
|
|
141
|
+
});
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
return { version: null, error: `registry request failed (${response.status})` };
|
|
144
|
+
}
|
|
145
|
+
const payload = await response.json();
|
|
146
|
+
const version = normalizeVersion(typeof payload.version === 'string' ? payload.version : null);
|
|
147
|
+
if (!version) {
|
|
148
|
+
return { version: null, error: 'invalid registry response' };
|
|
149
|
+
}
|
|
150
|
+
return { version };
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
154
|
+
return { version: null, error: message };
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
clearTimeout(timeout);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function normalizeTimeout(input) {
|
|
161
|
+
if (!Number.isFinite(input))
|
|
162
|
+
return DEFAULT_TIMEOUT_MS;
|
|
163
|
+
if (!input || input <= 0)
|
|
164
|
+
return DEFAULT_TIMEOUT_MS;
|
|
165
|
+
return Math.floor(input);
|
|
166
|
+
}
|
|
167
|
+
function isRecent(value, thresholdMs) {
|
|
168
|
+
if (!value)
|
|
169
|
+
return false;
|
|
170
|
+
const parsed = Date.parse(value);
|
|
171
|
+
if (!Number.isFinite(parsed))
|
|
172
|
+
return false;
|
|
173
|
+
return Date.now() - parsed <= thresholdMs;
|
|
174
|
+
}
|
|
175
|
+
function normalizeVersion(value) {
|
|
176
|
+
if (!value)
|
|
177
|
+
return null;
|
|
178
|
+
const trimmed = value.trim();
|
|
179
|
+
if (!trimmed)
|
|
180
|
+
return null;
|
|
181
|
+
return trimmed.startsWith('v') ? trimmed.slice(1) : trimmed;
|
|
182
|
+
}
|
|
183
|
+
function compareVersions(current, latest) {
|
|
184
|
+
if (!latest)
|
|
185
|
+
return 0;
|
|
186
|
+
const a = parseSemver(current);
|
|
187
|
+
const b = parseSemver(latest);
|
|
188
|
+
if (!a || !b)
|
|
189
|
+
return 0;
|
|
190
|
+
for (let i = 0; i < 3; i += 1) {
|
|
191
|
+
if (a[i] === b[i])
|
|
192
|
+
continue;
|
|
193
|
+
return a[i] < b[i] ? -1 : 1;
|
|
194
|
+
}
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
function parseSemver(value) {
|
|
198
|
+
const match = value.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
|
|
199
|
+
if (!match)
|
|
200
|
+
return null;
|
|
201
|
+
const major = Number.parseInt(match[1], 10);
|
|
202
|
+
const minor = Number.parseInt(match[2], 10);
|
|
203
|
+
const patch = Number.parseInt(match[3], 10);
|
|
204
|
+
if (![major, minor, patch].every((part) => Number.isInteger(part))) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
return [major, minor, patch];
|
|
208
|
+
}
|
|
209
|
+
function asObject(value) {
|
|
210
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
211
|
+
return undefined;
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
function asString(value) {
|
|
215
|
+
return typeof value === 'string' ? value : undefined;
|
|
216
|
+
}
|
|
217
|
+
function resolveUpdateChannel() {
|
|
218
|
+
const raw = (process.env.AGENTS_UPDATE_CHANNEL ?? 'stable').trim().toLowerCase();
|
|
219
|
+
if (!raw || raw === 'stable') {
|
|
220
|
+
return { ok: true, value: 'stable' };
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
ok: false,
|
|
224
|
+
error: `unsupported update channel "${raw}" (only "stable" is currently supported)`
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=updateCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/core/updateCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CLI_VERSION = "0.8.3";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface WindsurfMcpPayload {
|
|
2
|
+
mcpServers?: Record<string, unknown>;
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
}
|
|
5
|
+
export declare function getWindsurfGlobalMcpPath(): string;
|
|
6
|
+
export declare function readWindsurfMcp(pathToRead: string): Promise<WindsurfMcpPayload | undefined>;
|
|
7
|
+
export declare function writeWindsurfMcp(pathToWrite: string, payload: WindsurfMcpPayload): Promise<void>;
|
|
8
|
+
export declare function normalizeWindsurfMcpPayload(payload: WindsurfMcpPayload): WindsurfMcpPayload;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ensureDir, pathExists, readJson, writeJsonAtomic } from './fs.js';
|
|
4
|
+
export function getWindsurfGlobalMcpPath() {
|
|
5
|
+
const override = process.env.AGENTS_WINDSURF_MCP_PATH;
|
|
6
|
+
if (override && override.trim().length > 0) {
|
|
7
|
+
return path.resolve(override);
|
|
8
|
+
}
|
|
9
|
+
return path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json');
|
|
10
|
+
}
|
|
11
|
+
export async function readWindsurfMcp(pathToRead) {
|
|
12
|
+
if (!(await pathExists(pathToRead)))
|
|
13
|
+
return undefined;
|
|
14
|
+
return readJson(pathToRead);
|
|
15
|
+
}
|
|
16
|
+
export async function writeWindsurfMcp(pathToWrite, payload) {
|
|
17
|
+
await ensureDir(path.dirname(pathToWrite));
|
|
18
|
+
await writeJsonAtomic(pathToWrite, normalizeWindsurfMcpPayload(payload));
|
|
19
|
+
}
|
|
20
|
+
export function normalizeWindsurfMcpPayload(payload) {
|
|
21
|
+
return {
|
|
22
|
+
...payload,
|
|
23
|
+
mcpServers: isRecord(payload.mcpServers) ? payload.mcpServers : {}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function isRecord(value) {
|
|
27
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/core/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO1E,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAA;IACrD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACrD,OAAO,QAAQ,CAAqB,UAAU,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAA2B;IACrF,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAC1C,MAAM,eAAe,CAAC,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA2B;IACrE,OAAO;QACL,GAAG,OAAO;QACV,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;KACnE,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { renderOpencodeMcp } from '../core/renderers.js';
|
|
2
|
+
export function buildOpencodePayload(servers) {
|
|
3
|
+
const rendered = renderOpencodeMcp(servers);
|
|
4
|
+
return {
|
|
5
|
+
payload: { mcp: rendered.mcp },
|
|
6
|
+
warnings: rendered.warnings
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/integrations/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAI/D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO;QACL,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;QAC9B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAA;AACH,CAAC"}
|
|
@@ -4,7 +4,9 @@ export const INTEGRATIONS = [
|
|
|
4
4
|
{ id: 'gemini', label: 'Gemini CLI', requiredBinary: 'gemini' },
|
|
5
5
|
{ id: 'copilot_vscode', label: 'Copilot VS Code', requiredBinary: 'code' },
|
|
6
6
|
{ id: 'cursor', label: 'Cursor', requiredBinary: 'cursor-agent' },
|
|
7
|
-
{ id: 'antigravity', label: 'Antigravity', requiredBinary: 'antigravity' }
|
|
7
|
+
{ id: 'antigravity', label: 'Antigravity', requiredBinary: 'antigravity' },
|
|
8
|
+
{ id: 'windsurf', label: 'Windsurf' },
|
|
9
|
+
{ id: 'opencode', label: 'OpenCode' }
|
|
8
10
|
];
|
|
9
11
|
export const INTEGRATION_IDS = INTEGRATIONS.map((item) => item.id);
|
|
10
12
|
export function parseIntegrationList(input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE;IACxD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE;IAChE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE;IAC/D,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE;IAC1E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE;IACjE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE;IACxD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE;IAChE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE;IAC/D,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE;IAC1E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE;IACjE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE;IAC1E,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;CACtC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAsB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAErF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,MAAM,GAAG,KAAK;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;IAElB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAuB,CAAC,CAAC,CAAA;IAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxG,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAA2B,CAAC,CAAC,CAAA;AAClD,CAAC"}
|
|
@@ -5,5 +5,3 @@ export declare function buildWindsurfPayload(servers: ResolvedMcpServer[]): {
|
|
|
5
5
|
};
|
|
6
6
|
warnings: string[];
|
|
7
7
|
};
|
|
8
|
-
export declare function toManagedWindsurfName(projectHash: string, serverName: string): string;
|
|
9
|
-
export declare function deriveWindsurfProjectHash(projectRoot: string): string;
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import { renderWindsurfMcp } from '../core/renderers.js';
|
|
4
2
|
export function buildWindsurfPayload(servers) {
|
|
5
3
|
const rendered = renderWindsurfMcp(servers);
|
|
6
4
|
return {
|
|
7
|
-
payload: { mcpServers: rendered.
|
|
5
|
+
payload: { mcpServers: rendered.mcpServers },
|
|
8
6
|
warnings: rendered.warnings
|
|
9
7
|
};
|
|
10
8
|
}
|
|
11
|
-
export function toManagedWindsurfName(projectHash, serverName) {
|
|
12
|
-
return `agents__${projectHash}__${serverName}`;
|
|
13
|
-
}
|
|
14
|
-
export function deriveWindsurfProjectHash(projectRoot) {
|
|
15
|
-
return createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 12);
|
|
16
|
-
}
|
|
17
9
|
//# sourceMappingURL=windsurf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/integrations/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/integrations/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAI/D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO;QACL,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC5C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAA;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const AGENTS_SCHEMA_VERSION = 3;
|
|
2
|
-
export type IntegrationName = 'codex' | 'claude' | 'gemini' | 'copilot_vscode' | 'cursor' | 'antigravity';
|
|
2
|
+
export type IntegrationName = 'codex' | 'claude' | 'gemini' | 'copilot_vscode' | 'cursor' | 'antigravity' | 'windsurf' | 'opencode';
|
|
3
3
|
export type SyncMode = 'source-only' | 'commit-generated';
|
|
4
4
|
export type McpTransportType = 'stdio' | 'http' | 'sse';
|
|
5
5
|
export interface AgentsConfig {
|
|
@@ -40,8 +40,17 @@ export interface McpServerDefinition {
|
|
|
40
40
|
targets?: IntegrationName[];
|
|
41
41
|
enabled?: boolean;
|
|
42
42
|
}
|
|
43
|
+
export interface UpdateCheckMetadata {
|
|
44
|
+
lastCheckedAt?: string;
|
|
45
|
+
lastSeenVersion?: string;
|
|
46
|
+
lastNotifiedAt?: string;
|
|
47
|
+
latestVersion?: string;
|
|
48
|
+
}
|
|
43
49
|
export interface LocalOverridesFile {
|
|
44
50
|
mcpServers: Record<string, Partial<McpServerDefinition>>;
|
|
51
|
+
meta?: {
|
|
52
|
+
updateCheck?: UpdateCheckMetadata;
|
|
53
|
+
};
|
|
45
54
|
}
|
|
46
55
|
export interface VscodeSettingsState {
|
|
47
56
|
managedPaths: string[];
|
package/docs/EXAMPLES.md
CHANGED
|
@@ -77,33 +77,6 @@ Each project has its own `.agents/` config. No conflicts.
|
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
80
|
-
## CI/CD Integration
|
|
81
|
-
|
|
82
|
-
**.github/workflows/validate-agents.yml:**
|
|
83
|
-
```yaml
|
|
84
|
-
name: Validate Agents Config
|
|
85
|
-
|
|
86
|
-
on:
|
|
87
|
-
pull_request:
|
|
88
|
-
paths:
|
|
89
|
-
- '.agents/**'
|
|
90
|
-
|
|
91
|
-
jobs:
|
|
92
|
-
validate:
|
|
93
|
-
runs-on: ubuntu-latest
|
|
94
|
-
steps:
|
|
95
|
-
- uses: actions/checkout@v4
|
|
96
|
-
- uses: actions/setup-node@v4
|
|
97
|
-
with:
|
|
98
|
-
node-version: '20'
|
|
99
|
-
- run: npm install -g @agents-dev/cli
|
|
100
|
-
- run: agents doctor
|
|
101
|
-
- run: agents mcp test --json
|
|
102
|
-
- run: agents sync --check
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
80
|
## Monorepo
|
|
108
81
|
|
|
109
82
|
**Root (company-wide servers):**
|
|
@@ -196,8 +169,8 @@ Add to `.bashrc`:
|
|
|
196
169
|
```bash
|
|
197
170
|
agents_prompt() {
|
|
198
171
|
if [ -d ".agents" ]; then
|
|
199
|
-
|
|
200
|
-
[ "$
|
|
172
|
+
MCP_COUNT=$(agents status --fast --json 2>/dev/null | jq -r '.mcp.configured')
|
|
173
|
+
[ "${MCP_COUNT:-0}" -gt 0 ] && echo " 🟢" || echo " 🟡"
|
|
201
174
|
fi
|
|
202
175
|
}
|
|
203
176
|
|
|
@@ -209,3 +182,19 @@ PS1='$(agents_prompt) '"$PS1"
|
|
|
209
182
|
## More Examples?
|
|
210
183
|
|
|
211
184
|
[Open a discussion](https://github.com/amtiYo/agents/discussions) and share your workflow!
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Windsurf + OpenCode
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cd ~/my-project
|
|
192
|
+
agents init
|
|
193
|
+
agents connect --llm windsurf,opencode
|
|
194
|
+
agents sync
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Result:**
|
|
198
|
+
- Windsurf MCP is written to `~/.codeium/windsurf/mcp_config.json`
|
|
199
|
+
- OpenCode MCP is written to project `opencode.json`
|
|
200
|
+
- Skills are available from `.agents/skills` (Windsurf also gets `.windsurf/skills`)
|
package/docs/README.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
### Tools
|
|
17
17
|
- [Codex](https://developers.openai.com/codex) | [Claude Code](https://code.claude.com/docs) | [Gemini CLI](https://geminicli.com/docs)
|
|
18
18
|
- [Cursor](https://cursor.com/docs) | [Copilot](https://github.com/features/copilot) | [Antigravity](https://antigravity.google/docs)
|
|
19
|
+
- [Windsurf](https://docs.windsurf.com/windsurf/cascade) | [OpenCode](https://opencode.ai/docs/)
|
|
19
20
|
|
|
20
21
|
## Contributing
|
|
21
22
|
|
package/docs/agents-system.md
CHANGED
|
@@ -68,7 +68,9 @@ project/
|
|
|
68
68
|
| **Gemini** | `.gemini/settings.json` |
|
|
69
69
|
| **Cursor** | `.cursor/mcp.json` + CLI enable |
|
|
70
70
|
| **Copilot** | `.vscode/mcp.json` |
|
|
71
|
-
| **Antigravity** |
|
|
71
|
+
| **Antigravity** | Global user profile `mcp.json` (not project-local) |
|
|
72
|
+
| **Windsurf** | Global user profile `~/.codeium/windsurf/mcp_config.json` |
|
|
73
|
+
| **OpenCode** | `opencode.json` (`mcp` block) |
|
|
72
74
|
|
|
73
75
|
## VS Code Integration
|
|
74
76
|
|
|
@@ -81,6 +83,9 @@ project/
|
|
|
81
83
|
"**/.cursor": true,
|
|
82
84
|
"**/.gemini": true,
|
|
83
85
|
"**/.antigravity": true,
|
|
86
|
+
"**/.windsurf": true,
|
|
87
|
+
"**/.opencode": true,
|
|
88
|
+
"**/opencode.json": true,
|
|
84
89
|
"**/.agents/generated": true
|
|
85
90
|
}
|
|
86
91
|
}
|
|
@@ -97,6 +102,9 @@ project/
|
|
|
97
102
|
| **Claude** | Symlink to `.claude/skills/` |
|
|
98
103
|
| **Cursor** | Symlink to `.cursor/skills/` |
|
|
99
104
|
| **Gemini** | Symlink to `.gemini/skills/` |
|
|
105
|
+
| **Antigravity** | Reuses `.gemini/skills/` bridge |
|
|
106
|
+
| **Windsurf** | Symlink to `.windsurf/skills/` |
|
|
107
|
+
| **OpenCode** | Reads `.agents/skills/` directly |
|
|
100
108
|
|
|
101
109
|
**Validation:** `agents doctor` checks frontmatter (`name`, `description`)
|
|
102
110
|
|
|
@@ -171,7 +179,9 @@ project/
|
|
|
171
179
|
**Gitignored:**
|
|
172
180
|
- ❌ `.agents/local.json`
|
|
173
181
|
- ❌ `.agents/generated/`
|
|
174
|
-
- ❌ `.codex/`, `.claude/`, `.cursor/`, `.gemini
|
|
182
|
+
- ❌ `.codex/`, `.claude/`, `.cursor/`, `.gemini/`
|
|
183
|
+
- ❌ `.windsurf/`, `.opencode/`, `opencode.json`
|
|
184
|
+
- ❌ legacy `.antigravity/` (if present from older versions)
|
|
175
185
|
|
|
176
186
|
---
|
|
177
187
|
|
package/docs/screenshot.jpg
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agents-dev/cli",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "One config to rule them all — Practical standard layer for multi-LLM development. Sync MCP servers, skills, and AGENTS.md across Codex, Claude Code, Gemini CLI, Cursor, Copilot, and
|
|
3
|
+
"version": "0.8.3",
|
|
4
|
+
"description": "One config to rule them all — Practical standard layer for multi-LLM development. Sync MCP servers, skills, and AGENTS.md across Codex, Claude Code, Gemini CLI, Cursor, Copilot, Antigravity, Windsurf, and OpenCode.",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build": "tsc -p tsconfig.json",
|
|
7
|
+
"build": "node -e \"const fs=require('node:fs'); fs.rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
|
|
8
8
|
"dev": "tsx src/cli.ts",
|
|
9
9
|
"lint": "eslint .",
|
|
10
10
|
"test": "vitest run",
|
|
11
|
+
"test:fast": "vitest run --exclude \"tests/**/*.integration.test.ts\"",
|
|
12
|
+
"test:integration": "vitest run integration.test.ts",
|
|
11
13
|
"prepack": "npm run build"
|
|
12
14
|
},
|
|
13
15
|
"bin": {
|
|
@@ -35,6 +37,8 @@
|
|
|
35
37
|
"cursor",
|
|
36
38
|
"copilot",
|
|
37
39
|
"antigravity",
|
|
40
|
+
"windsurf",
|
|
41
|
+
"opencode",
|
|
38
42
|
"ai-coding",
|
|
39
43
|
"llm-tools",
|
|
40
44
|
"config-sync",
|
|
@@ -22,4 +22,7 @@ Project-local standard for AGENTS.md + MCP + SKILLS.
|
|
|
22
22
|
- `.vscode/mcp.json`
|
|
23
23
|
- `.vscode/settings.json`
|
|
24
24
|
- `.cursor/mcp.json`
|
|
25
|
-
-
|
|
25
|
+
- `opencode.json`
|
|
26
|
+
- `.windsurf/skills/`
|
|
27
|
+
- `~/.codeium/windsurf/mcp_config.json` (global)
|
|
28
|
+
- `Antigravity User/mcp.json` (global)
|
package/dist/commands/migrate.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { cp, mkdir } from 'node:fs/promises';
|
|
3
|
-
import { createDefaultProjectConfig, loadLegacyConfig, saveProjectConfig } from '../core/config.js';
|
|
4
|
-
import { ensureDir, pathExists, readJson, writeJsonAtomic } from '../core/fs.js';
|
|
5
|
-
import { getProjectPaths } from '../core/paths.js';
|
|
6
|
-
import { MCP_SELECTION_SCHEMA_VERSION } from '../types.js';
|
|
7
|
-
export async function runMigrate(options) {
|
|
8
|
-
const projectRoot = path.resolve(options.projectRoot);
|
|
9
|
-
const paths = getProjectPaths(projectRoot);
|
|
10
|
-
if (await pathExists(paths.agentsProject)) {
|
|
11
|
-
process.stdout.write(`Migration skipped: already using ${paths.agentsProject}\n`);
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
if (!(await pathExists(paths.agentsLegacyConfig))) {
|
|
15
|
-
throw new Error(`Legacy config not found at ${paths.agentsLegacyConfig}`);
|
|
16
|
-
}
|
|
17
|
-
const legacyConfig = await loadLegacyConfig(projectRoot);
|
|
18
|
-
const legacyRegistry = (await pathExists(paths.mcpLegacyRegistry))
|
|
19
|
-
? await readJson(paths.mcpLegacyRegistry)
|
|
20
|
-
: { mcpServers: {} };
|
|
21
|
-
const backupDir = await createBackup(paths);
|
|
22
|
-
const projectConfig = mapLegacyConfig(legacyConfig);
|
|
23
|
-
await saveProjectConfig(projectRoot, projectConfig);
|
|
24
|
-
const selectedServers = Object.entries(legacyRegistry.mcpServers ?? {})
|
|
25
|
-
.filter(([, server]) => server.enabled !== false)
|
|
26
|
-
.map(([name]) => name)
|
|
27
|
-
.sort((a, b) => a.localeCompare(b));
|
|
28
|
-
const selection = {
|
|
29
|
-
schemaVersion: MCP_SELECTION_SCHEMA_VERSION,
|
|
30
|
-
preset: 'migrated-v1',
|
|
31
|
-
selectedMcpServers: selectedServers
|
|
32
|
-
};
|
|
33
|
-
await writeJsonAtomic(paths.mcpSelection, selection);
|
|
34
|
-
const localPayload = {
|
|
35
|
-
mcpServers: legacyRegistry.mcpServers ?? {}
|
|
36
|
-
};
|
|
37
|
-
await writeJsonAtomic(paths.mcpLocal, localPayload);
|
|
38
|
-
process.stdout.write(`Migrated v1 -> v2 in ${projectRoot}\n`);
|
|
39
|
-
process.stdout.write(`Backup created at ${backupDir}\n`);
|
|
40
|
-
process.stdout.write(`Created:\n- .agents/project.json\n- .agents/mcp/selection.json\n- .agents/mcp/local.json\n`);
|
|
41
|
-
}
|
|
42
|
-
function mapLegacyConfig(legacy) {
|
|
43
|
-
const config = createDefaultProjectConfig(legacy.projectRoot, legacy.linkMode);
|
|
44
|
-
config.enabledIntegrations = [...legacy.enabledIntegrations];
|
|
45
|
-
config.lastSync = legacy.lastSync;
|
|
46
|
-
config.syncMode = 'source-only';
|
|
47
|
-
config.selectedSkillPacks = [];
|
|
48
|
-
config.selectedSkills = [];
|
|
49
|
-
return config;
|
|
50
|
-
}
|
|
51
|
-
async function createBackup(paths) {
|
|
52
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
53
|
-
const backupDir = path.join(paths.agentsBackupDir, timestamp);
|
|
54
|
-
await ensureDir(backupDir);
|
|
55
|
-
const filesToBackup = [
|
|
56
|
-
paths.agentsLegacyConfig,
|
|
57
|
-
paths.mcpLegacyRegistry,
|
|
58
|
-
paths.mcpLocal
|
|
59
|
-
];
|
|
60
|
-
for (const filePath of filesToBackup) {
|
|
61
|
-
if (!(await pathExists(filePath)))
|
|
62
|
-
continue;
|
|
63
|
-
const dest = path.join(backupDir, path.basename(filePath));
|
|
64
|
-
await ensureDir(path.dirname(dest));
|
|
65
|
-
await cp(filePath, dest, { recursive: true });
|
|
66
|
-
}
|
|
67
|
-
// keep backup folder visible even if no files were copied
|
|
68
|
-
await mkdir(backupDir, { recursive: true });
|
|
69
|
-
return backupDir;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/core/catalog.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { CatalogFile } from '../types.js';
|
|
2
|
-
export declare function getDefaultCatalog(): CatalogFile;
|
|
3
|
-
export declare function ensureGlobalCatalog(): Promise<{
|
|
4
|
-
path: string;
|
|
5
|
-
catalog: CatalogFile;
|
|
6
|
-
created: boolean;
|
|
7
|
-
}>;
|
|
8
|
-
export declare function validateCatalog(catalog: CatalogFile): void;
|