@agentled/cli 0.6.7 → 0.7.2

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.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Read `knowledge.company.profile` (and `.products`) from the workspace KG.
3
+ *
4
+ * Used by `agentled setup` to decide whether to prompt the user for company
5
+ * information or skip straight to "workspace already configured". We probe
6
+ * only the new keys; legacy `.company` / `company.offering` are not checked
7
+ * — we focus on new clients and keep this clean.
8
+ *
9
+ * Uses the typed `AgentledApiClient.getKnowledgeText` surface. Failures are
10
+ * non-fatal: setup must not break on a network blip or a missing endpoint.
11
+ */
12
+ async function fetchKnowledgeText(client, key) {
13
+ try {
14
+ const res = (await client.getKnowledgeText(key));
15
+ if (!res)
16
+ return null;
17
+ // The API returns `content` for upsert/get parity, but tolerate `text`
18
+ // as a defensive fallback for older response shapes.
19
+ const value = res.content ?? res.text ?? null;
20
+ return typeof value === 'string' ? value : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ export async function probeCompanyKnowledge(client) {
27
+ try {
28
+ const [profile, products] = await Promise.all([
29
+ fetchKnowledgeText(client, 'knowledge.company.profile'),
30
+ fetchKnowledgeText(client, 'knowledge.company.products'),
31
+ ]);
32
+ const profilePresent = typeof profile === 'string' && profile.trim().length > 0;
33
+ const productsPresent = typeof products === 'string' && products.trim().length > 0;
34
+ return {
35
+ profilePresent,
36
+ productsPresent,
37
+ profilePreview: profilePresent && profile ? profile.trim().slice(0, 120) : undefined,
38
+ };
39
+ }
40
+ catch (err) {
41
+ return {
42
+ profilePresent: false,
43
+ productsPresent: false,
44
+ error: err?.message ?? String(err),
45
+ };
46
+ }
47
+ }
48
+ export function summarizeKnowledgeProbe(r) {
49
+ if (r.error)
50
+ return `Could not read workspace knowledge (${r.error}). You can run \`agentled workspace company-profile\` later.`;
51
+ if (r.profilePresent) {
52
+ const preview = r.profilePreview ? ` — "${r.profilePreview}${r.profilePreview.length >= 120 ? '…' : ''}"` : '';
53
+ return `Workspace already configured (knowledge.company.profile is set${preview}).`;
54
+ }
55
+ return 'Workspace knowledge is empty — collecting company profile now.';
56
+ }
57
+ //# sourceMappingURL=knowledge-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-probe.js","sourceRoot":"","sources":["../../src/utils/knowledge-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,KAAK,UAAU,kBAAkB,CAAC,MAAyB,EAAE,GAAW;IACpE,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAA6D,CAAC;QAC7G,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAyB;IACjE,IAAI,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1C,kBAAkB,CAAC,MAAM,EAAE,2BAA2B,CAAC;YACvD,kBAAkB,CAAC,MAAM,EAAE,4BAA4B,CAAC;SAC3D,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEnF,OAAO;YACH,cAAc;YACd,eAAe;YACf,cAAc,EAAE,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;SACvF,CAAC;IACN,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,OAAO;YACH,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;YACtB,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;SACrC,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,CAAuB;IAC3D,IAAI,CAAC,CAAC,KAAK;QAAE,OAAO,uCAAuC,CAAC,CAAC,KAAK,8DAA8D,CAAC;IACjI,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,OAAO,iEAAiE,OAAO,IAAI,CAAC;IACxF,CAAC;IACD,OAAO,gEAAgE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * MCP client detection and config writing for `agentled setup`.
3
+ *
4
+ * Lifted from agentled-mcp-server/src/setup.ts so the CLI orchestrates the
5
+ * full onboarding without depending on the mcp-server's setup flag (which
6
+ * is being deprecated in favor of `agentled setup`).
7
+ *
8
+ * Detects Claude Code, Codex, Claude Desktop, Cursor, Windsurf and writes
9
+ * the AgentLed MCP server entry into the appropriate config location.
10
+ */
11
+ export type McpClient = 'claude-code' | 'claude-desktop' | 'codex' | 'cursor' | 'windsurf' | 'unknown';
12
+ export interface McpConfigureResult {
13
+ client: McpClient;
14
+ success: boolean;
15
+ /** Where the config was written (or attempted) */
16
+ configPath: string | null;
17
+ /** Manual instructions to print if auto-config failed */
18
+ fallbackHint?: string;
19
+ }
20
+ export declare function getClientLabel(client: McpClient): string;
21
+ export declare function detectMcpClient(): McpClient;
22
+ /**
23
+ * Auto-detect the user's MCP client and register the AgentLed MCP server.
24
+ * Returns a result describing what happened, including a fallback hint when
25
+ * the client is unknown or the config write failed.
26
+ */
27
+ export declare function configureMcp(apiKey: string, baseUrl: string): Promise<McpConfigureResult>;
@@ -0,0 +1,190 @@
1
+ /**
2
+ * MCP client detection and config writing for `agentled setup`.
3
+ *
4
+ * Lifted from agentled-mcp-server/src/setup.ts so the CLI orchestrates the
5
+ * full onboarding without depending on the mcp-server's setup flag (which
6
+ * is being deprecated in favor of `agentled setup`).
7
+ *
8
+ * Detects Claude Code, Codex, Claude Desktop, Cursor, Windsurf and writes
9
+ * the AgentLed MCP server entry into the appropriate config location.
10
+ */
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { join, dirname } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ import { spawn } from 'node:child_process';
15
+ export function getClientLabel(client) {
16
+ switch (client) {
17
+ case 'claude-code': return 'Claude Code';
18
+ case 'claude-desktop': return 'Claude Desktop';
19
+ case 'codex': return 'Codex';
20
+ case 'cursor': return 'Cursor';
21
+ case 'windsurf': return 'Windsurf';
22
+ default: return 'Unknown';
23
+ }
24
+ }
25
+ export function detectMcpClient() {
26
+ if (existsSync(join(homedir(), '.claude')))
27
+ return 'claude-code';
28
+ if (existsSync(join(homedir(), '.codex')))
29
+ return 'codex';
30
+ const desktop = getClaudeDesktopConfigPath();
31
+ if (desktop && existsSync(dirname(desktop)))
32
+ return 'claude-desktop';
33
+ if (existsSync(join(homedir(), '.cursor')))
34
+ return 'cursor';
35
+ if (existsSync(join(homedir(), '.windsurf')))
36
+ return 'windsurf';
37
+ return 'unknown';
38
+ }
39
+ function getClaudeDesktopConfigPath() {
40
+ if (process.platform === 'darwin') {
41
+ return join(homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
42
+ }
43
+ if (process.platform === 'win32') {
44
+ return join(process.env.APPDATA || '', 'Claude', 'claude_desktop_config.json');
45
+ }
46
+ return join(homedir(), '.config', 'Claude', 'claude_desktop_config.json');
47
+ }
48
+ function getMcpJsonPath(client) {
49
+ if (client === 'cursor')
50
+ return join(homedir(), '.cursor', 'mcp.json');
51
+ if (client === 'windsurf')
52
+ return join(homedir(), '.windsurf', 'mcp.json');
53
+ return null;
54
+ }
55
+ function configureClaudeCode(apiKey, baseUrl) {
56
+ return new Promise(resolve => {
57
+ try {
58
+ // Server name must precede -e/--env (Claude Code 2.1+ parser quirk).
59
+ const child = spawn('claude', [
60
+ 'mcp', 'add',
61
+ '--transport', 'stdio',
62
+ '--scope', 'user',
63
+ 'agentled',
64
+ '-e', `AGENTLED_API_KEY=${apiKey}`,
65
+ ...(baseUrl !== 'https://www.agentled.app' ? ['-e', `AGENTLED_URL=${baseUrl}`] : []),
66
+ '--', 'npx', '-y', '@agentled/mcp-server',
67
+ ], { stdio: 'inherit' });
68
+ child.on('close', code => resolve(code === 0));
69
+ child.on('error', () => resolve(false));
70
+ }
71
+ catch {
72
+ resolve(false);
73
+ }
74
+ });
75
+ }
76
+ function configureCodex(apiKey, baseUrl) {
77
+ return new Promise(resolve => {
78
+ try {
79
+ const child = spawn('codex', [
80
+ 'mcp', 'add', 'agentled',
81
+ '--env', `AGENTLED_API_KEY=${apiKey}`,
82
+ ...(baseUrl !== 'https://www.agentled.app' ? ['--env', `AGENTLED_URL=${baseUrl}`] : []),
83
+ '--', 'npx', '-y', '@agentled/mcp-server',
84
+ ], { stdio: 'inherit' });
85
+ child.on('close', code => resolve(code === 0));
86
+ child.on('error', () => resolve(false));
87
+ }
88
+ catch {
89
+ resolve(false);
90
+ }
91
+ });
92
+ }
93
+ function writeMcpJsonConfig(configPath, apiKey, baseUrl) {
94
+ try {
95
+ let config = {};
96
+ if (existsSync(configPath)) {
97
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
98
+ }
99
+ if (!config.mcpServers)
100
+ config.mcpServers = {};
101
+ const env = { AGENTLED_API_KEY: apiKey };
102
+ if (baseUrl !== 'https://www.agentled.app')
103
+ env.AGENTLED_URL = baseUrl;
104
+ config.mcpServers.agentled = {
105
+ command: 'npx',
106
+ args: ['-y', '@agentled/mcp-server'],
107
+ env,
108
+ };
109
+ mkdirSync(dirname(configPath), { recursive: true });
110
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
111
+ return true;
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ function manualSnippet(apiKey, baseUrl) {
118
+ const envArgs = baseUrl !== 'https://www.agentled.app'
119
+ ? `-e AGENTLED_API_KEY=${apiKey} -e AGENTLED_URL=${baseUrl}`
120
+ : `-e AGENTLED_API_KEY=${apiKey}`;
121
+ const lines = [
122
+ 'Could not auto-detect your MCP client. Add manually:',
123
+ '',
124
+ 'Claude Code:',
125
+ ` claude mcp add --transport stdio --scope user agentled ${envArgs} -- npx -y @agentled/mcp-server`,
126
+ '',
127
+ 'Codex / Cursor / Windsurf — add to your MCP config JSON:',
128
+ ' {',
129
+ ' "agentled": {',
130
+ ' "command": "npx",',
131
+ ' "args": ["-y", "@agentled/mcp-server"],',
132
+ ` "env": { "AGENTLED_API_KEY": "${apiKey}"${baseUrl !== 'https://www.agentled.app' ? `, "AGENTLED_URL": "${baseUrl}"` : ''} }`,
133
+ ' }',
134
+ ' }',
135
+ ];
136
+ return lines.join('\n');
137
+ }
138
+ /**
139
+ * Auto-detect the user's MCP client and register the AgentLed MCP server.
140
+ * Returns a result describing what happened, including a fallback hint when
141
+ * the client is unknown or the config write failed.
142
+ */
143
+ export async function configureMcp(apiKey, baseUrl) {
144
+ const client = detectMcpClient();
145
+ if (client === 'claude-code') {
146
+ const ok = await configureClaudeCode(apiKey, baseUrl);
147
+ return {
148
+ client,
149
+ success: ok,
150
+ configPath: ok ? '~/.claude.json (via `claude mcp add`)' : null,
151
+ fallbackHint: ok ? undefined : manualSnippet(apiKey, baseUrl),
152
+ };
153
+ }
154
+ if (client === 'codex') {
155
+ const ok = await configureCodex(apiKey, baseUrl);
156
+ return {
157
+ client,
158
+ success: ok,
159
+ configPath: ok ? '~/.codex/config (via `codex mcp add`)' : null,
160
+ fallbackHint: ok ? undefined : manualSnippet(apiKey, baseUrl),
161
+ };
162
+ }
163
+ if (client === 'claude-desktop') {
164
+ const path = getClaudeDesktopConfigPath();
165
+ const ok = path ? writeMcpJsonConfig(path, apiKey, baseUrl) : false;
166
+ return {
167
+ client,
168
+ success: ok,
169
+ configPath: path,
170
+ fallbackHint: ok ? undefined : manualSnippet(apiKey, baseUrl),
171
+ };
172
+ }
173
+ if (client === 'cursor' || client === 'windsurf') {
174
+ const path = getMcpJsonPath(client);
175
+ const ok = path ? writeMcpJsonConfig(path, apiKey, baseUrl) : false;
176
+ return {
177
+ client,
178
+ success: ok,
179
+ configPath: path,
180
+ fallbackHint: ok ? undefined : manualSnippet(apiKey, baseUrl),
181
+ };
182
+ }
183
+ return {
184
+ client: 'unknown',
185
+ success: false,
186
+ configPath: null,
187
+ fallbackHint: manualSnippet(apiKey, baseUrl),
188
+ };
189
+ }
190
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/utils/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,14 @@
12
12
  * - Reads a `version:` frontmatter field from each `SKILL.md`
13
13
  * - Leaves newer or hand-edited skills alone (unless --force)
14
14
  * - Reports status so we can print a one-line summary after `auth login`
15
+ *
16
+ * Targets:
17
+ * - Claude Code / Claude Desktop → `~/.claude/skills/` (global) or
18
+ * `./.claude/skills/` (project) via the `global` option.
19
+ * - Codex → `~/.codex/instructions/` via `targetDir` override (set by the
20
+ * `agentled setup` orchestrator after detecting a Codex install).
21
+ * - Cursor / Windsurf → not auto-installed (no native skills surface);
22
+ * the orchestrator skips this step and prints a hint.
15
23
  */
16
24
  export type SkillInstallOutcome = 'installed' | 'updated' | 'up-to-date' | 'newer-local' | 'hand-edited' | 'forced';
17
25
  export interface SkillInstallResult {
@@ -26,17 +34,17 @@ export interface InstallSkillsOptions {
26
34
  global?: boolean;
27
35
  /** overwrite regardless of version comparison or local edits */
28
36
  force?: boolean;
37
+ /**
38
+ * Override the target directory entirely. Used by the orchestrator to
39
+ * route Codex installs to `~/.codex/instructions/` and (in future) any
40
+ * other client-specific skill location.
41
+ */
42
+ targetDir?: string;
29
43
  }
30
- /**
31
- * Locate the `skills/` directory that ships with @agentled/cli.
32
- *
33
- * When running from source (`node dist/index.js`) the layout is:
34
- * packages/cli/dist/utils/skills.js → packages/cli/skills/…
35
- * When installed globally via npm, the package layout is the same relative
36
- * structure (`dist/utils/skills.js` → `skills/`).
37
- */
38
44
  export declare function resolveBundledSkillsDir(): string;
39
45
  export declare function getSkillsTargetDir(global: boolean): string;
46
+ /** Codex's skill/instruction directory — separate from Claude's. */
47
+ export declare function getCodexInstructionsDir(): string;
40
48
  export declare function installSkills(options?: InstallSkillsOptions): SkillInstallResult[];
41
49
  export declare function describeSkillsInstall(results: SkillInstallResult[], targetDir: string): string;
42
50
  /**
@@ -12,22 +12,21 @@
12
12
  * - Reads a `version:` frontmatter field from each `SKILL.md`
13
13
  * - Leaves newer or hand-edited skills alone (unless --force)
14
14
  * - Reports status so we can print a one-line summary after `auth login`
15
+ *
16
+ * Targets:
17
+ * - Claude Code / Claude Desktop → `~/.claude/skills/` (global) or
18
+ * `./.claude/skills/` (project) via the `global` option.
19
+ * - Codex → `~/.codex/instructions/` via `targetDir` override (set by the
20
+ * `agentled setup` orchestrator after detecting a Codex install).
21
+ * - Cursor / Windsurf → not auto-installed (no native skills surface);
22
+ * the orchestrator skips this step and prints a hint.
15
23
  */
16
24
  import { existsSync, readFileSync, mkdirSync, readdirSync, statSync, cpSync } from 'node:fs';
17
25
  import { join, dirname, resolve } from 'node:path';
18
26
  import { fileURLToPath } from 'node:url';
19
27
  import { homedir } from 'node:os';
20
- /**
21
- * Locate the `skills/` directory that ships with @agentled/cli.
22
- *
23
- * When running from source (`node dist/index.js`) the layout is:
24
- * packages/cli/dist/utils/skills.js → packages/cli/skills/…
25
- * When installed globally via npm, the package layout is the same relative
26
- * structure (`dist/utils/skills.js` → `skills/`).
27
- */
28
28
  export function resolveBundledSkillsDir() {
29
29
  const here = fileURLToPath(import.meta.url);
30
- // dist/utils/skills.js → package root is two levels up
31
30
  const pkgRoot = resolve(dirname(here), '..', '..');
32
31
  return join(pkgRoot, 'skills');
33
32
  }
@@ -36,14 +35,13 @@ export function getSkillsTargetDir(global) {
36
35
  ? join(homedir(), '.claude', 'skills')
37
36
  : join(process.cwd(), '.claude', 'skills');
38
37
  }
39
- /**
40
- * Parse a `version:` field out of the YAML-style frontmatter at the top of a
41
- * SKILL.md file. Returns null if no frontmatter or no version field is present.
42
- */
38
+ /** Codex's skill/instruction directory — separate from Claude's. */
39
+ export function getCodexInstructionsDir() {
40
+ return join(homedir(), '.codex', 'instructions');
41
+ }
43
42
  function parseSkillVersion(skillMdPath) {
44
43
  try {
45
44
  const content = readFileSync(skillMdPath, 'utf-8');
46
- // Only inspect frontmatter (between the first two --- delimiters)
47
45
  const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
48
46
  if (!fmMatch)
49
47
  return null;
@@ -54,10 +52,6 @@ function parseSkillVersion(skillMdPath) {
54
52
  return null;
55
53
  }
56
54
  }
57
- /**
58
- * Compare two semver-ish version strings. Returns -1, 0, or 1.
59
- * Handles missing prereleases by treating undefined segments as 0.
60
- */
61
55
  function compareVersions(a, b) {
62
56
  const parse = (v) => v.replace(/^v/, '').split('.').map(n => parseInt(n, 10) || 0);
63
57
  const [a1, a2 = 0, a3 = 0] = parse(a);
@@ -70,14 +64,6 @@ function compareVersions(a, b) {
70
64
  return a3 < b3 ? -1 : 1;
71
65
  return 0;
72
66
  }
73
- /**
74
- * Recursively hash-compare two directories by content. Returns true if the
75
- * byte contents of every file match (directory structure + file bytes).
76
- *
77
- * Used to detect hand-edited installs: if the installed version matches the
78
- * bundled version but the bytes differ, the user (or a prior agent session)
79
- * has customised the skill and we should not overwrite without --force.
80
- */
81
67
  function directoriesIdentical(a, b) {
82
68
  try {
83
69
  const aEntries = readdirSync(a).sort();
@@ -115,7 +101,7 @@ export function installSkills(options = {}) {
115
101
  if (!existsSync(sourceDir)) {
116
102
  throw new Error(`Bundled skills directory not found at ${sourceDir}`);
117
103
  }
118
- const targetBase = getSkillsTargetDir(options.global ?? false);
104
+ const targetBase = options.targetDir ?? getSkillsTargetDir(options.global ?? false);
119
105
  const results = [];
120
106
  const skills = readdirSync(sourceDir, { withFileTypes: true })
121
107
  .filter(d => d.isDirectory())
@@ -199,7 +185,7 @@ export function summarizeForLoginBanner(results, targetDir) {
199
185
  const updatable = results.filter(r => r.outcome === 'up-to-date' && r.installedVersion && r.bundledVersion && compareVersions(r.installedVersion, r.bundledVersion) < 0);
200
186
  if (fresh.length > 0) {
201
187
  const names = fresh.map(r => `${r.skill} v${r.bundledVersion}`).join(', ');
202
- return `Installed Claude Code skill: ${names} → ${targetDir}`;
188
+ return `Installed Agentled skill: ${names} → ${targetDir}`;
203
189
  }
204
190
  if (stale.length > 0) {
205
191
  const r = stale[0];
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Best-effort "new version available" check against the npm registry.
3
+ *
4
+ * Compares the locally-installed @agentled/cli version (from package.json)
5
+ * against the latest published on npm and prints a one-line warning if the
6
+ * user is behind. Never blocks setup on failure — a flaky network or
7
+ * registry should not prevent first-time onboarding.
8
+ */
9
+ /**
10
+ * Read the version field from this package's own package.json. Returns
11
+ * '0.0.0-dev' as a fallback so a missing/unreadable file doesn't crash setup.
12
+ */
13
+ export declare function getInstalledCliVersion(): string;
14
+ export interface VersionCheckResult {
15
+ installed: string;
16
+ latest: string | null;
17
+ /** True if the registry returned a version newer than installed. */
18
+ outdated: boolean;
19
+ /** Set when the registry could not be reached or parsed. */
20
+ error?: string;
21
+ }
22
+ export declare function checkCliVersion(): Promise<VersionCheckResult>;
23
+ /** One-line summary suitable for the setup banner. Returns null if there is nothing to say. */
24
+ export declare function summarizeVersionCheck(r: VersionCheckResult): string | null;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Best-effort "new version available" check against the npm registry.
3
+ *
4
+ * Compares the locally-installed @agentled/cli version (from package.json)
5
+ * against the latest published on npm and prints a one-line warning if the
6
+ * user is behind. Never blocks setup on failure — a flaky network or
7
+ * registry should not prevent first-time onboarding.
8
+ */
9
+ import { readFileSync } from 'node:fs';
10
+ import { dirname, resolve } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ const REGISTRY_URL = 'https://registry.npmjs.org/@agentled/cli/latest';
13
+ const TIMEOUT_MS = 3000;
14
+ /**
15
+ * Read the version field from this package's own package.json. Returns
16
+ * '0.0.0-dev' as a fallback so a missing/unreadable file doesn't crash setup.
17
+ */
18
+ export function getInstalledCliVersion() {
19
+ try {
20
+ const here = fileURLToPath(import.meta.url);
21
+ // dist/utils/version-check.js → package root is two levels up
22
+ const pkgRoot = resolve(dirname(here), '..', '..');
23
+ const pkg = JSON.parse(readFileSync(resolve(pkgRoot, 'package.json'), 'utf-8'));
24
+ return typeof pkg.version === 'string' ? pkg.version : '0.0.0-dev';
25
+ }
26
+ catch {
27
+ return '0.0.0-dev';
28
+ }
29
+ }
30
+ /** Compare two semver-ish strings: -1, 0, 1. Prerelease suffixes are ignored. */
31
+ function compareVersions(a, b) {
32
+ const parse = (v) => v.replace(/^v/, '').split('-')[0].split('.').map(n => parseInt(n, 10) || 0);
33
+ const [a1, a2 = 0, a3 = 0] = parse(a);
34
+ const [b1, b2 = 0, b3 = 0] = parse(b);
35
+ if (a1 !== b1)
36
+ return a1 < b1 ? -1 : 1;
37
+ if (a2 !== b2)
38
+ return a2 < b2 ? -1 : 1;
39
+ if (a3 !== b3)
40
+ return a3 < b3 ? -1 : 1;
41
+ return 0;
42
+ }
43
+ export async function checkCliVersion() {
44
+ const installed = getInstalledCliVersion();
45
+ const ac = new AbortController();
46
+ const timer = setTimeout(() => ac.abort(), TIMEOUT_MS);
47
+ try {
48
+ const res = await fetch(REGISTRY_URL, { signal: ac.signal });
49
+ if (!res.ok) {
50
+ return { installed, latest: null, outdated: false, error: `HTTP ${res.status}` };
51
+ }
52
+ const data = (await res.json());
53
+ const latest = typeof data.version === 'string' ? data.version : null;
54
+ if (!latest) {
55
+ return { installed, latest: null, outdated: false, error: 'No version field in registry response' };
56
+ }
57
+ return {
58
+ installed,
59
+ latest,
60
+ outdated: compareVersions(installed, latest) < 0,
61
+ };
62
+ }
63
+ catch (err) {
64
+ return { installed, latest: null, outdated: false, error: err?.message ?? String(err) };
65
+ }
66
+ finally {
67
+ clearTimeout(timer);
68
+ }
69
+ }
70
+ /** One-line summary suitable for the setup banner. Returns null if there is nothing to say. */
71
+ export function summarizeVersionCheck(r) {
72
+ if (r.outdated && r.latest) {
73
+ return `New @agentled/cli version available: v${r.installed} → v${r.latest}. Update with: npm install -g @agentled/cli@latest`;
74
+ }
75
+ return null;
76
+ }
77
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"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"}
package/llms.txt CHANGED
@@ -4,9 +4,20 @@
4
4
 
5
5
  ## Quick Start
6
6
 
7
+ One command: browser sign-in → workspace folder → MCP auto-config → skill install → knowledge probe.
8
+
9
+ ```bash
10
+ npx @agentled/cli setup
11
+ ```
12
+
13
+ Global home is `~/.agentled/` (config + on-demand examples). Per-workspace artifacts live in `agentled_<slug>/` in the current directory. Best-practice patterns: https://github.com/Agentled/agentic-ops.
14
+
15
+ ## Components (à-la-carte)
16
+
7
17
  ```bash
8
18
  npm i -g @agentled/cli
9
- agentled auth login
19
+ agentled auth login # browser auth + workspace selection + skill install
20
+ agentled init # scaffold agentled_<slug>/
10
21
  agentled auth current
11
22
  agentled workflows list
12
23
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentled/cli",
3
- "version": "0.6.7",
3
+ "version": "0.7.2",
4
4
  "description": "CLI for Agentled — manage workflows, apps, and knowledge from the command line. Zero context-window cost for AI agents.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -47,10 +47,10 @@
47
47
  "homepage": "https://www.agentled.app",
48
48
  "repository": {
49
49
  "type": "git",
50
- "url": "https://github.com/agentled/agentled"
50
+ "url": "https://github.com/agentled/mcp-server"
51
51
  },
52
52
  "bugs": {
53
- "url": "https://github.com/agentled/agentled/issues"
53
+ "url": "https://www.agentled.ai/en/contact-us"
54
54
  },
55
55
  "license": "MIT"
56
56
  }