@agentled/cli 0.6.6 → 0.7.1

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,133 @@
1
+ /**
2
+ * Bootstrap `~/.agentled/` on `agentled setup` runs.
3
+ *
4
+ * Writes:
5
+ * ~/.agentled/README.md (top-level pointer)
6
+ * ~/.agentled/.content-version (refresh marker)
7
+ * ~/.agentled/docs/WORKFLOW-SHAPE.md (canonical shape)
8
+ * ~/.agentled/docs/GETTING-STARTED.md (5-min first workflow)
9
+ * ~/.agentled/docs/GOTCHAS.md (silent failure modes)
10
+ * ~/.agentled/docs/PATTERNS.md (scaffold index)
11
+ * ~/.agentled/examples/scaffolds/* (copied from packages/cli/scaffolds/)
12
+ *
13
+ * **`docs/` and `examples/scaffolds/` are CLI-managed.** When the
14
+ * bundled `HOME_CONTENT_VERSION` advances past the on-disk marker, the
15
+ * bootstrap unconditionally rewrites every bundled file — user edits
16
+ * to those files WILL be overwritten. Treat them as read-only and put
17
+ * your own notes in `~/.agentled/docs/local/` (never touched) or in
18
+ * the per-workspace `agentled_<slug>/` folder.
19
+ *
20
+ * `config.json` is never touched.
21
+ *
22
+ * `HOME_CONTENT_VERSION` is decoupled from the CLI semver — it bumps
23
+ * only when bundled docs change, so a CLI patch release with no doc
24
+ * change does NOT trigger a rewrite.
25
+ *
26
+ * Idempotent: a re-run with the same marker version is a no-op.
27
+ */
28
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, copyFileSync } from 'node:fs';
29
+ import { join } from 'node:path';
30
+ import { homedir } from 'node:os';
31
+ import { bundledScaffoldsDir } from './workspace-folder.js';
32
+ import { HOME_CONTENT_VERSION, HOME_README_MD, WORKFLOW_SHAPE_MD, GETTING_STARTED_MD, GOTCHAS_MD, PATTERNS_MD, } from './agentled-home-content.js';
33
+ const MARKER_FILE = '.content-version';
34
+ function readMarker(homeDir) {
35
+ const path = join(homeDir, MARKER_FILE);
36
+ if (!existsSync(path))
37
+ return null;
38
+ try {
39
+ return readFileSync(path, 'utf-8').trim() || null;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ function writeMarker(homeDir) {
46
+ writeFileSync(join(homeDir, MARKER_FILE), HOME_CONTENT_VERSION + '\n');
47
+ }
48
+ /**
49
+ * Compare integer-like marker versions: -1, 0, 1.
50
+ *
51
+ * `HOME_CONTENT_VERSION` is intentionally an opaque integer string
52
+ * ("1", "2", …), but parsed defensively in case a future maintainer
53
+ * uses a semver-shaped value.
54
+ */
55
+ function compareVersions(a, b) {
56
+ const parse = (v) => v.replace(/^v/, '').split('-')[0].split('.').map(n => parseInt(n, 10) || 0);
57
+ const [a1, a2 = 0, a3 = 0] = parse(a);
58
+ const [b1, b2 = 0, b3 = 0] = parse(b);
59
+ if (a1 !== b1)
60
+ return a1 < b1 ? -1 : 1;
61
+ if (a2 !== b2)
62
+ return a2 < b2 ? -1 : 1;
63
+ if (a3 !== b3)
64
+ return a3 < b3 ? -1 : 1;
65
+ return 0;
66
+ }
67
+ function shouldRefresh(homeDir) {
68
+ const installed = readMarker(homeDir);
69
+ if (!installed)
70
+ return true; // first run
71
+ return compareVersions(installed, HOME_CONTENT_VERSION) < 0;
72
+ }
73
+ /**
74
+ * Copy bundled scaffold assets into `examples/scaffolds/`. Includes
75
+ * any `.json` pipeline scaffold and any `.md` companion documentation.
76
+ * Other extensions are skipped — keep this whitelist tight so a stray
77
+ * file in `packages/cli/scaffolds/` never lands in user-visible space.
78
+ */
79
+ function copyBundledScaffolds(targetDir) {
80
+ const sourceDir = bundledScaffoldsDir();
81
+ if (!existsSync(sourceDir))
82
+ return 0;
83
+ mkdirSync(targetDir, { recursive: true });
84
+ let count = 0;
85
+ for (const entry of readdirSync(sourceDir)) {
86
+ if (!entry.endsWith('.json') && !entry.endsWith('.md'))
87
+ continue;
88
+ const src = join(sourceDir, entry);
89
+ const dest = join(targetDir, entry);
90
+ copyFileSync(src, dest);
91
+ count++;
92
+ }
93
+ return count;
94
+ }
95
+ /**
96
+ * Idempotent. Creates `~/.agentled/` if missing and rewrites the
97
+ * bundled docs + scaffolds when the on-disk content version is older
98
+ * than `HOME_CONTENT_VERSION`. Bundled files are unconditionally
99
+ * overwritten on refresh; never touches `config.json` or any file
100
+ * under `docs/local/`.
101
+ */
102
+ export function bootstrapAgentledHome() {
103
+ const homeDir = join(homedir(), '.agentled');
104
+ const docsDir = join(homeDir, 'docs');
105
+ const examplesDir = join(homeDir, 'examples');
106
+ const scaffoldsDir = join(examplesDir, 'scaffolds');
107
+ if (!existsSync(homeDir))
108
+ mkdirSync(homeDir, { recursive: true });
109
+ if (!shouldRefresh(homeDir)) {
110
+ return {
111
+ homeDir,
112
+ refreshed: false,
113
+ scaffoldsCopied: 0,
114
+ version: readMarker(homeDir) ?? HOME_CONTENT_VERSION,
115
+ };
116
+ }
117
+ mkdirSync(docsDir, { recursive: true });
118
+ mkdirSync(scaffoldsDir, { recursive: true });
119
+ writeFileSync(join(homeDir, 'README.md'), HOME_README_MD);
120
+ writeFileSync(join(docsDir, 'WORKFLOW-SHAPE.md'), WORKFLOW_SHAPE_MD);
121
+ writeFileSync(join(docsDir, 'GETTING-STARTED.md'), GETTING_STARTED_MD);
122
+ writeFileSync(join(docsDir, 'GOTCHAS.md'), GOTCHAS_MD);
123
+ writeFileSync(join(docsDir, 'PATTERNS.md'), PATTERNS_MD);
124
+ const scaffoldsCopied = copyBundledScaffolds(scaffoldsDir);
125
+ writeMarker(homeDir);
126
+ return {
127
+ homeDir,
128
+ refreshed: true,
129
+ scaffoldsCopied,
130
+ version: HOME_CONTENT_VERSION,
131
+ };
132
+ }
133
+ //# sourceMappingURL=home-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-bootstrap.js","sourceRoot":"","sources":["../../src/utils/home-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
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
+ import { AgentledApiClient } from '@agentled/core';
13
+ export interface KnowledgeProbeResult {
14
+ /** Has the user (or an agent) populated the canonical company profile yet? */
15
+ profilePresent: boolean;
16
+ productsPresent: boolean;
17
+ /** Short snippet of the profile if present (first ~120 chars) for the summary line. */
18
+ profilePreview?: string;
19
+ /** Set if the probe failed entirely (network, permissions). Treat as "unknown". */
20
+ error?: string;
21
+ }
22
+ export declare function probeCompanyKnowledge(client: AgentledApiClient): Promise<KnowledgeProbeResult>;
23
+ export declare function summarizeKnowledgeProbe(r: KnowledgeProbeResult): string;
@@ -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;