agent-switchboard 0.1.9 → 0.1.10
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/dist/agents/adapter.d.ts +17 -2
- package/dist/agents/claude-code.d.ts +8 -0
- package/dist/agents/claude-code.js +20 -0
- package/dist/agents/claude-code.js.map +1 -1
- package/dist/agents/codex.d.ts +7 -0
- package/dist/agents/codex.js +16 -6
- package/dist/agents/codex.js.map +1 -1
- package/dist/agents/cursor.d.ts +7 -0
- package/dist/agents/cursor.js +20 -3
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/gemini.d.ts +7 -0
- package/dist/agents/gemini.js +21 -3
- package/dist/agents/gemini.js.map +1 -1
- package/dist/agents/json-utils.js +6 -11
- package/dist/agents/json-utils.js.map +1 -1
- package/dist/agents/opencode.d.ts +8 -0
- package/dist/agents/opencode.js +18 -4
- package/dist/agents/opencode.js.map +1 -1
- package/dist/commands/distribution.js +27 -11
- package/dist/commands/distribution.js.map +1 -1
- package/dist/commands/importer.js +4 -16
- package/dist/commands/importer.js.map +1 -1
- package/dist/commands/inventory.js +23 -36
- package/dist/commands/inventory.js.map +1 -1
- package/dist/config/mcp-config.d.ts +6 -18
- package/dist/config/mcp-config.js +33 -65
- package/dist/config/mcp-config.js.map +1 -1
- package/dist/config/schemas.d.ts +1 -9
- package/dist/config/schemas.js +1 -2
- package/dist/config/schemas.js.map +1 -1
- package/dist/index.js +128 -244
- package/dist/index.js.map +1 -1
- package/dist/library/distribute-bundle.d.ts +7 -1
- package/dist/library/distribute-bundle.js +57 -0
- package/dist/library/distribute-bundle.js.map +1 -1
- package/dist/library/distribute.d.ts +11 -1
- package/dist/library/distribute.js +41 -0
- package/dist/library/distribute.js.map +1 -1
- package/dist/library/state.d.ts +3 -0
- package/dist/library/state.js +23 -0
- package/dist/library/state.js.map +1 -1
- package/dist/skills/distribution.js +20 -10
- package/dist/skills/distribution.js.map +1 -1
- package/dist/subagents/distribution.js +18 -6
- package/dist/subagents/distribution.js.map +1 -1
- package/dist/subagents/importer.js +4 -16
- package/dist/subagents/importer.js.map +1 -1
- package/dist/subagents/inventory.js +27 -68
- package/dist/subagents/inventory.js.map +1 -1
- package/dist/ui/library-selector.d.ts +1 -0
- package/dist/ui/library-selector.js +1 -1
- package/dist/ui/library-selector.js.map +1 -1
- package/dist/ui/mcp-ui.d.ts +6 -4
- package/dist/ui/mcp-ui.js +10 -11
- package/dist/ui/mcp-ui.js.map +1 -1
- package/dist/ui/rule-ui.js +3 -73
- package/dist/ui/rule-ui.js.map +1 -1
- package/dist/util/cli.d.ts +22 -0
- package/dist/util/cli.js +55 -0
- package/dist/util/cli.js.map +1 -1
- package/dist/util/extras.d.ts +3 -0
- package/dist/util/extras.js +29 -0
- package/dist/util/extras.js.map +1 -1
- package/dist/util/markdown.d.ts +10 -0
- package/dist/util/markdown.js +22 -0
- package/dist/util/markdown.js.map +1 -1
- package/package.json +1 -1
package/dist/agents/adapter.d.ts
CHANGED
|
@@ -15,13 +15,20 @@ export interface AgentAdapter {
|
|
|
15
15
|
*/
|
|
16
16
|
readonly id: string;
|
|
17
17
|
/**
|
|
18
|
-
* Returns the absolute path to the agent's config file
|
|
18
|
+
* Returns the absolute path to the agent's global config file
|
|
19
19
|
* @returns Absolute path to the config file
|
|
20
20
|
* @example "/Users/username/.claude.json"
|
|
21
21
|
*/
|
|
22
22
|
configPath(): string;
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Returns the absolute path to the agent's project-level config file
|
|
25
|
+
* @param projectRoot - Absolute path to the project root directory
|
|
26
|
+
* @returns Absolute path to the project config file, or undefined if not supported
|
|
27
|
+
* @example "/path/to/project/.mcp.json"
|
|
28
|
+
*/
|
|
29
|
+
projectConfigPath?(projectRoot: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Applies MCP config to the agent's global config file
|
|
25
32
|
* - Merges with existing config (preserves unknown fields)
|
|
26
33
|
* - The 'enabled' field is excluded from the input
|
|
27
34
|
* @param config - MCP servers to apply (without 'enabled')
|
|
@@ -29,4 +36,12 @@ export interface AgentAdapter {
|
|
|
29
36
|
applyConfig(config: {
|
|
30
37
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
31
38
|
}): void;
|
|
39
|
+
/**
|
|
40
|
+
* Applies MCP config to the agent's project-level config file
|
|
41
|
+
* @param projectRoot - Absolute path to the project root directory
|
|
42
|
+
* @param config - MCP servers to apply (without 'enabled')
|
|
43
|
+
*/
|
|
44
|
+
applyProjectConfig?(projectRoot: string, config: {
|
|
45
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
46
|
+
}): void;
|
|
32
47
|
}
|
|
@@ -11,7 +11,15 @@ import type { AgentAdapter } from './adapter.js';
|
|
|
11
11
|
export declare class ClaudeCodeAgent implements AgentAdapter {
|
|
12
12
|
readonly id: "claude-code";
|
|
13
13
|
configPath(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Project-level config: <project>/.mcp.json
|
|
16
|
+
* Note: .claude/.mcp.json is NOT supported by Claude Code (known bug)
|
|
17
|
+
*/
|
|
18
|
+
projectConfigPath(projectRoot: string): string;
|
|
14
19
|
applyConfig(config: {
|
|
15
20
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
16
21
|
}): void;
|
|
22
|
+
applyProjectConfig(projectRoot: string, config: {
|
|
23
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
24
|
+
}): void;
|
|
17
25
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Claude Code agent adapter
|
|
3
3
|
* Manages MCP server configuration for Claude Code CLI
|
|
4
4
|
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import nodePath from 'node:path';
|
|
5
7
|
import { getClaudeJsonPath } from '../config/paths.js';
|
|
6
8
|
import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from './json-utils.js';
|
|
7
9
|
/**
|
|
@@ -13,11 +15,29 @@ export class ClaudeCodeAgent {
|
|
|
13
15
|
configPath() {
|
|
14
16
|
return getClaudeJsonPath();
|
|
15
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Project-level config: <project>/.mcp.json
|
|
20
|
+
* Note: .claude/.mcp.json is NOT supported by Claude Code (known bug)
|
|
21
|
+
*/
|
|
22
|
+
projectConfigPath(projectRoot) {
|
|
23
|
+
return nodePath.join(nodePath.resolve(projectRoot), '.mcp.json');
|
|
24
|
+
}
|
|
16
25
|
applyConfig(config) {
|
|
17
26
|
const path = this.configPath();
|
|
18
27
|
const agentConfig = loadJsonFile(path, { mcpServers: {} });
|
|
19
28
|
const merged = mergeMcpIntoAgent(agentConfig, config.mcpServers);
|
|
20
29
|
saveJsonFile(path, merged);
|
|
21
30
|
}
|
|
31
|
+
applyProjectConfig(projectRoot, config) {
|
|
32
|
+
const configPath = this.projectConfigPath(projectRoot);
|
|
33
|
+
// For project-level .mcp.json, only write mcpServers (no merge with existing non-mcp fields)
|
|
34
|
+
const existing = loadJsonFile(configPath, { mcpServers: {} });
|
|
35
|
+
const merged = mergeMcpIntoAgent(existing, config.mcpServers);
|
|
36
|
+
// Ensure parent directory exists
|
|
37
|
+
const dir = nodePath.dirname(configPath);
|
|
38
|
+
if (!fs.existsSync(dir))
|
|
39
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
40
|
+
saveJsonFile(configPath, merged);
|
|
41
|
+
}
|
|
22
42
|
}
|
|
23
43
|
//# sourceMappingURL=claude-code.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,OAAO,eAAe;IACjB,EAAE,GAAG,aAAsB,CAAC;IAErC,UAAU;QACR,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agents/claude-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,OAAO,eAAe;IACjB,EAAE,GAAG,aAAsB,CAAC;IAErC,UAAU;QACR,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,CAAkB,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,6FAA6F;QAC7F,MAAM,QAAQ,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QACxF,iCAAiC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
|
package/dist/agents/codex.d.ts
CHANGED
|
@@ -11,9 +11,16 @@ import type { AgentAdapter } from './adapter.js';
|
|
|
11
11
|
export declare class CodexAgent implements AgentAdapter {
|
|
12
12
|
readonly id: "codex";
|
|
13
13
|
configPath(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Project-level config: <project>/.codex/config.toml
|
|
16
|
+
*/
|
|
17
|
+
projectConfigPath(projectRoot: string): string;
|
|
14
18
|
applyConfig(config: {
|
|
15
19
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
16
20
|
}): void;
|
|
21
|
+
applyProjectConfig(projectRoot: string, config: {
|
|
22
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
23
|
+
}): void;
|
|
17
24
|
private _loadConfig;
|
|
18
25
|
private _saveConfig;
|
|
19
26
|
}
|
package/dist/agents/codex.js
CHANGED
|
@@ -15,20 +15,30 @@ export class CodexAgent {
|
|
|
15
15
|
configPath() {
|
|
16
16
|
return getCodexConfigPath();
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Project-level config: <project>/.codex/config.toml
|
|
20
|
+
*/
|
|
21
|
+
projectConfigPath(projectRoot) {
|
|
22
|
+
return path.join(path.resolve(projectRoot), '.codex', 'config.toml');
|
|
23
|
+
}
|
|
18
24
|
applyConfig(config) {
|
|
19
|
-
const content = this._loadConfig();
|
|
25
|
+
const content = this._loadConfig(this.configPath());
|
|
26
|
+
const updated = mergeConfig(content, config.mcpServers);
|
|
27
|
+
this._saveConfig(this.configPath(), updated);
|
|
28
|
+
}
|
|
29
|
+
applyProjectConfig(projectRoot, config) {
|
|
30
|
+
const configPath = this.projectConfigPath(projectRoot);
|
|
31
|
+
const content = this._loadConfig(configPath);
|
|
20
32
|
const updated = mergeConfig(content, config.mcpServers);
|
|
21
|
-
this._saveConfig(updated);
|
|
33
|
+
this._saveConfig(configPath, updated);
|
|
22
34
|
}
|
|
23
|
-
_loadConfig() {
|
|
24
|
-
const configPath = this.configPath();
|
|
35
|
+
_loadConfig(configPath) {
|
|
25
36
|
if (!fs.existsSync(configPath)) {
|
|
26
37
|
return '';
|
|
27
38
|
}
|
|
28
39
|
return fs.readFileSync(configPath, 'utf-8');
|
|
29
40
|
}
|
|
30
|
-
_saveConfig(content) {
|
|
31
|
-
const configPath = this.configPath();
|
|
41
|
+
_saveConfig(configPath, content) {
|
|
32
42
|
const dirPath = path.dirname(configPath);
|
|
33
43
|
if (!fs.existsSync(dirPath)) {
|
|
34
44
|
fs.mkdirSync(dirPath, { recursive: true });
|
package/dist/agents/codex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,EAAE,GAAG,OAAgB,CAAC;IAE/B,UAAU;QACR,OAAO,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/cursor.d.ts
CHANGED
|
@@ -14,7 +14,14 @@ import type { AgentAdapter } from './adapter.js';
|
|
|
14
14
|
export declare class CursorAgent implements AgentAdapter {
|
|
15
15
|
readonly id: "cursor";
|
|
16
16
|
configPath(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Project-level config: <project>/.cursor/mcp.json
|
|
19
|
+
*/
|
|
20
|
+
projectConfigPath(projectRoot: string): string;
|
|
17
21
|
applyConfig(config: {
|
|
18
22
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
19
23
|
}): void;
|
|
24
|
+
applyProjectConfig(projectRoot: string, config: {
|
|
25
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
26
|
+
}): void;
|
|
20
27
|
}
|
package/dist/agents/cursor.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Cursor agent adapter
|
|
3
3
|
* Manages MCP server configuration for Cursor IDE
|
|
4
4
|
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
5
6
|
import os from 'node:os';
|
|
6
7
|
import path from 'node:path';
|
|
7
8
|
import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from './json-utils.js';
|
|
@@ -21,11 +22,27 @@ export class CursorAgent {
|
|
|
21
22
|
: os.homedir();
|
|
22
23
|
return path.join(base, '.cursor', 'mcp.json');
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Project-level config: <project>/.cursor/mcp.json
|
|
27
|
+
*/
|
|
28
|
+
projectConfigPath(projectRoot) {
|
|
29
|
+
return path.join(path.resolve(projectRoot), '.cursor', 'mcp.json');
|
|
30
|
+
}
|
|
24
31
|
applyConfig(config) {
|
|
25
|
-
const
|
|
26
|
-
const agentConfig = loadJsonFile(
|
|
32
|
+
const configPath = this.configPath();
|
|
33
|
+
const agentConfig = loadJsonFile(configPath, { mcpServers: {} });
|
|
27
34
|
const merged = mergeMcpIntoAgent(agentConfig, config.mcpServers);
|
|
28
|
-
saveJsonFile(
|
|
35
|
+
saveJsonFile(configPath, merged);
|
|
36
|
+
}
|
|
37
|
+
applyProjectConfig(projectRoot, config) {
|
|
38
|
+
const configPath = this.projectConfigPath(projectRoot);
|
|
39
|
+
const existing = loadJsonFile(configPath, { mcpServers: {} });
|
|
40
|
+
const merged = mergeMcpIntoAgent(existing, config.mcpServers);
|
|
41
|
+
// Ensure .cursor directory exists
|
|
42
|
+
const dir = path.dirname(configPath);
|
|
43
|
+
if (!fs.existsSync(dir))
|
|
44
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
45
|
+
saveJsonFile(configPath, merged);
|
|
29
46
|
}
|
|
30
47
|
}
|
|
31
48
|
//# sourceMappingURL=cursor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC1E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC1E,CAAC,CAAE,OAAO,CAAC,GAAG,CAAC,eAA0B;YACzC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QACxF,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
|
package/dist/agents/gemini.d.ts
CHANGED
|
@@ -14,7 +14,14 @@ import type { AgentAdapter } from './adapter.js';
|
|
|
14
14
|
export declare class GeminiAgent implements AgentAdapter {
|
|
15
15
|
readonly id: "gemini";
|
|
16
16
|
configPath(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Project-level config: <project>/.gemini/settings.json
|
|
19
|
+
*/
|
|
20
|
+
projectConfigPath(projectRoot: string): string;
|
|
17
21
|
applyConfig(config: {
|
|
18
22
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
19
23
|
}): void;
|
|
24
|
+
applyProjectConfig(projectRoot: string, config: {
|
|
25
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
26
|
+
}): void;
|
|
20
27
|
}
|
package/dist/agents/gemini.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Gemini CLI agent adapter
|
|
3
3
|
* Manages MCP server configuration for Gemini CLI
|
|
4
4
|
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
5
7
|
import { getGeminiSettingsPath } from '../config/paths.js';
|
|
6
8
|
import { loadJsonFile, mergeMcpIntoAgent, saveJsonFile, } from './json-utils.js';
|
|
7
9
|
/**
|
|
@@ -17,11 +19,27 @@ export class GeminiAgent {
|
|
|
17
19
|
configPath() {
|
|
18
20
|
return getGeminiSettingsPath();
|
|
19
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Project-level config: <project>/.gemini/settings.json
|
|
24
|
+
*/
|
|
25
|
+
projectConfigPath(projectRoot) {
|
|
26
|
+
return path.join(path.resolve(projectRoot), '.gemini', 'settings.json');
|
|
27
|
+
}
|
|
20
28
|
applyConfig(config) {
|
|
21
|
-
const
|
|
22
|
-
const agentConfig = loadJsonFile(
|
|
29
|
+
const configPath = this.configPath();
|
|
30
|
+
const agentConfig = loadJsonFile(configPath, { mcpServers: {} });
|
|
23
31
|
const merged = mergeMcpIntoAgent(agentConfig, config.mcpServers);
|
|
24
|
-
saveJsonFile(
|
|
32
|
+
saveJsonFile(configPath, merged);
|
|
33
|
+
}
|
|
34
|
+
applyProjectConfig(projectRoot, config) {
|
|
35
|
+
const configPath = this.projectConfigPath(projectRoot);
|
|
36
|
+
const existing = loadJsonFile(configPath, { mcpServers: {} });
|
|
37
|
+
const merged = mergeMcpIntoAgent(existing, config.mcpServers);
|
|
38
|
+
// Ensure .gemini directory exists
|
|
39
|
+
const dir = path.dirname(configPath);
|
|
40
|
+
if (!fs.existsSync(dir))
|
|
41
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
42
|
+
saveJsonFile(configPath, merged);
|
|
25
43
|
}
|
|
26
44
|
}
|
|
27
45
|
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,QAAiB,CAAC;IAEhC,UAAU;QACR,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,MAAkE;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QAC3F,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,CAChB,WAAmB,EACnB,MAAkE;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAkB,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAoC,CAAC,CAAC;QACxF,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -14,18 +14,13 @@ export function saveJsonFile(filePath, data) {
|
|
|
14
14
|
}
|
|
15
15
|
export function mergeMcpIntoAgent(agentConfig, mcpServers) {
|
|
16
16
|
const merged = { ...agentConfig };
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return merged;
|
|
21
|
-
}
|
|
22
|
-
if (!merged.mcpServers) {
|
|
23
|
-
merged.mcpServers = {};
|
|
24
|
-
}
|
|
25
|
-
const target = merged.mcpServers;
|
|
17
|
+
// Replace mcpServers entirely - only keep servers in the new config
|
|
18
|
+
// This ensures disabled servers are removed from target
|
|
19
|
+
merged.mcpServers = {};
|
|
26
20
|
for (const [name, server] of Object.entries(mcpServers)) {
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
// Preserve existing server-specific settings (if any) while applying new config
|
|
22
|
+
const existing = agentConfig.mcpServers?.[name] ?? {};
|
|
23
|
+
merged.mcpServers[name] = { ...existing, ...server };
|
|
29
24
|
}
|
|
30
25
|
return merged;
|
|
31
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,MAAM,UAAU,YAAY,CAAmB,QAAgB,EAAE,QAAW;IAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAA4B,EAC5B,UAAkC;IAElC,MAAM,MAAM,GAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnD,
|
|
1
|
+
{"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/agents/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,MAAM,UAAU,YAAY,CAAmB,QAAgB,EAAE,QAAW;IAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAClD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAA4B,EAC5B,UAAkC;IAElC,MAAM,MAAM,GAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnD,oEAAoE;IACpE,wDAAwD;IACxD,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,gFAAgF;QAChF,MAAM,QAAQ,GAAI,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,CAA6B,IAAI,EAAE,CAAC;QACnF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -7,7 +7,15 @@ import type { AgentAdapter } from './adapter.js';
|
|
|
7
7
|
export declare class OpencodeAgent implements AgentAdapter {
|
|
8
8
|
readonly id: "opencode";
|
|
9
9
|
configPath(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Project-level config: <project>/.opencode/opencode.json
|
|
12
|
+
*/
|
|
13
|
+
projectConfigPath(projectRoot: string): string;
|
|
10
14
|
applyConfig(config: {
|
|
11
15
|
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
12
16
|
}): void;
|
|
17
|
+
applyProjectConfig(projectRoot: string, config: {
|
|
18
|
+
mcpServers: Record<string, Omit<McpServer, 'enabled'>>;
|
|
19
|
+
}): void;
|
|
20
|
+
private _applyToPath;
|
|
13
21
|
}
|
package/dist/agents/opencode.js
CHANGED
|
@@ -4,14 +4,25 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import fs from 'node:fs';
|
|
6
6
|
import path from 'node:path';
|
|
7
|
-
import { getOpencodePath } from '../config/paths.js';
|
|
7
|
+
import { getOpencodePath, getProjectOpencodePath } from '../config/paths.js';
|
|
8
8
|
export class OpencodeAgent {
|
|
9
9
|
id = 'opencode';
|
|
10
10
|
configPath() {
|
|
11
11
|
return getOpencodePath('opencode.json');
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Project-level config: <project>/.opencode/opencode.json
|
|
15
|
+
*/
|
|
16
|
+
projectConfigPath(projectRoot) {
|
|
17
|
+
return getProjectOpencodePath(projectRoot, 'opencode.json');
|
|
18
|
+
}
|
|
13
19
|
applyConfig(config) {
|
|
14
|
-
|
|
20
|
+
this._applyToPath(this.configPath(), config);
|
|
21
|
+
}
|
|
22
|
+
applyProjectConfig(projectRoot, config) {
|
|
23
|
+
this._applyToPath(this.projectConfigPath(projectRoot), config);
|
|
24
|
+
}
|
|
25
|
+
_applyToPath(filePath, config) {
|
|
15
26
|
// Load existing
|
|
16
27
|
let current = {};
|
|
17
28
|
if (fs.existsSync(filePath)) {
|
|
@@ -25,9 +36,12 @@ export class OpencodeAgent {
|
|
|
25
36
|
}
|
|
26
37
|
}
|
|
27
38
|
const out = { ...current };
|
|
28
|
-
|
|
39
|
+
// Replace mcp entirely - only keep servers in the new config
|
|
40
|
+
// This ensures disabled servers are removed from target
|
|
41
|
+
const mcpOut = {};
|
|
29
42
|
for (const [name, server] of Object.entries(config.mcpServers)) {
|
|
30
|
-
|
|
43
|
+
// Preserve existing server-specific settings (if any) while applying new config
|
|
44
|
+
const prev = { ...(current.mcp?.[name] ?? {}) };
|
|
31
45
|
// Cast to extended type to access potential additional fields
|
|
32
46
|
const extServer = server;
|
|
33
47
|
// Map stdio/local vs http/remote
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,35 +6,37 @@ import { loadLibraryStateSection } from '../library/state.js';
|
|
|
6
6
|
import { wrapFrontmatter } from '../util/frontmatter.js';
|
|
7
7
|
import { loadCommandLibrary } from './library.js';
|
|
8
8
|
export function resolveCommandFilePath(platform, id, scope) {
|
|
9
|
+
return path.join(resolveCommandTargetDir(platform, scope), getCommandFilename(platform, id));
|
|
10
|
+
}
|
|
11
|
+
function resolveCommandTargetDir(platform, scope) {
|
|
9
12
|
const projectRoot = scope?.project?.trim();
|
|
10
13
|
switch (platform) {
|
|
11
14
|
case 'claude-code': {
|
|
12
|
-
// Project-level supported: .claude/commands/
|
|
13
15
|
if (projectRoot && projectRoot.length > 0) {
|
|
14
|
-
return path.join(getProjectClaudeDir(projectRoot), 'commands'
|
|
16
|
+
return path.join(getProjectClaudeDir(projectRoot), 'commands');
|
|
15
17
|
}
|
|
16
|
-
return path.join(getClaudeDir(), 'commands'
|
|
18
|
+
return path.join(getClaudeDir(), 'commands');
|
|
17
19
|
}
|
|
18
20
|
case 'codex': {
|
|
19
|
-
|
|
20
|
-
return path.join(getCodexDir(), 'prompts', `${id}.md`);
|
|
21
|
+
return path.join(getCodexDir(), 'prompts');
|
|
21
22
|
}
|
|
22
23
|
case 'gemini': {
|
|
23
|
-
// Project-level supported: .gemini/commands/
|
|
24
24
|
if (projectRoot && projectRoot.length > 0) {
|
|
25
|
-
return path.join(getProjectGeminiDir(projectRoot), 'commands'
|
|
25
|
+
return path.join(getProjectGeminiDir(projectRoot), 'commands');
|
|
26
26
|
}
|
|
27
|
-
return path.join(getGeminiDir(), 'commands'
|
|
27
|
+
return path.join(getGeminiDir(), 'commands');
|
|
28
28
|
}
|
|
29
29
|
case 'opencode': {
|
|
30
|
-
// Project-level supported: .opencode/command/
|
|
31
30
|
if (projectRoot && projectRoot.length > 0) {
|
|
32
|
-
return getProjectOpencodePath(projectRoot, 'command'
|
|
31
|
+
return getProjectOpencodePath(projectRoot, 'command');
|
|
33
32
|
}
|
|
34
|
-
return getOpencodePath('command'
|
|
33
|
+
return getOpencodePath('command');
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
}
|
|
37
|
+
function getCommandFilename(platform, id) {
|
|
38
|
+
return platform === 'gemini' ? `${id}.toml` : `${id}.md`;
|
|
39
|
+
}
|
|
38
40
|
function buildFrontmatterForClaude(entry) {
|
|
39
41
|
const base = {};
|
|
40
42
|
if (entry.metadata.description)
|
|
@@ -103,12 +105,26 @@ export function distributeCommands(scope) {
|
|
|
103
105
|
selected.push(e);
|
|
104
106
|
}
|
|
105
107
|
const platforms = ['claude-code', 'codex', 'gemini', 'opencode'];
|
|
108
|
+
// Cleanup config to remove orphan command files
|
|
109
|
+
const cleanup = {
|
|
110
|
+
resolveTargetDir: (p) => resolveCommandTargetDir(p, scope),
|
|
111
|
+
extractId: (filename) => {
|
|
112
|
+
// Try both extensions since we don't know platform in extractId
|
|
113
|
+
if (filename.endsWith('.toml'))
|
|
114
|
+
return filename.slice(0, -5);
|
|
115
|
+
if (filename.endsWith('.md'))
|
|
116
|
+
return filename.slice(0, -3);
|
|
117
|
+
return null;
|
|
118
|
+
},
|
|
119
|
+
};
|
|
106
120
|
return distributeLibrary({
|
|
107
121
|
section: 'commands',
|
|
108
122
|
selected,
|
|
109
123
|
platforms,
|
|
110
124
|
resolveFilePath: (p, e) => resolveCommandFilePath(p, e.id, scope),
|
|
111
125
|
render: (p, e) => renderForPlatform(p, e),
|
|
126
|
+
getId: (e) => e.id,
|
|
127
|
+
cleanup,
|
|
112
128
|
scope,
|
|
113
129
|
});
|
|
114
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/commands/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/commands/distribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { wrapFrontmatter } from '../util/frontmatter.js';
|
|
4
|
-
import {
|
|
4
|
+
import { extractMergedFrontmatter, slugify } from '../util/markdown.js';
|
|
5
5
|
function parseTomlString(content, key) {
|
|
6
6
|
// Naive TOML key = "value" or key = """multiline"""
|
|
7
7
|
const triple = new RegExp(`^\\s*${key}\\s*=\\s*"""([\\s\\S]*?)"""`, 'm');
|
|
@@ -14,7 +14,6 @@ function parseTomlString(content, key) {
|
|
|
14
14
|
return m1[1] ?? '';
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
17
|
-
// Using shared stripYamlFrontmatter from util/markdown
|
|
18
17
|
export function importCommandFromFile(platform, filePath) {
|
|
19
18
|
if (!fs.existsSync(filePath)) {
|
|
20
19
|
throw new Error(`Source file not found: ${filePath}`);
|
|
@@ -25,23 +24,12 @@ export function importCommandFromFile(platform, filePath) {
|
|
|
25
24
|
case 'claude-code':
|
|
26
25
|
case 'opencode': {
|
|
27
26
|
// Strip any existing frontmatter and wrap into library schema (description + extras.<platform>)
|
|
28
|
-
const extracted =
|
|
29
|
-
|
|
30
|
-
let meta = extracted.meta ?? {};
|
|
31
|
-
if (!meta || typeof meta !== 'object')
|
|
32
|
-
meta = {};
|
|
33
|
-
// Attempt to strip accidental second frontmatter at body start
|
|
34
|
-
const second = body.match(FRONTMATTER_PATTERN);
|
|
35
|
-
if (second && second.index === 0) {
|
|
36
|
-
const stripped = stripYamlFrontmatter(body);
|
|
37
|
-
meta = { ...meta, ...(stripped.meta ?? {}) };
|
|
38
|
-
body = stripped.body;
|
|
39
|
-
}
|
|
40
|
-
const metaRecord = meta;
|
|
27
|
+
const extracted = extractMergedFrontmatter(raw);
|
|
28
|
+
const metaRecord = extracted.meta;
|
|
41
29
|
const description = typeof metaRecord.description === 'string' ? metaRecord.description : '';
|
|
42
30
|
const rest = Object.fromEntries(Object.entries(metaRecord).filter(([k]) => k !== 'description'));
|
|
43
31
|
const fm = { description, extras: { [platform]: rest } };
|
|
44
|
-
const bodyNoFrontmatter = body.replace(/^\s*---\s*[\s\S]*?\r?\n---\s*\r?\n?/, '');
|
|
32
|
+
const bodyNoFrontmatter = extracted.body.replace(/^\s*---\s*[\s\S]*?\r?\n---\s*\r?\n?/, '');
|
|
45
33
|
return { slug: baseSlug, content: wrapFrontmatter(fm, bodyNoFrontmatter) };
|
|
46
34
|
}
|
|
47
35
|
case 'codex': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../../src/commands/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../../src/commands/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIxE,SAAS,eAAe,CAAC,OAAe,EAAE,GAAW;IACnD,oDAAoD;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,6BAA6B,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,yBAAyB,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,MAAM,UAAU,qBAAqB,CACnC,QAAyB,EACzB,QAAgB;IAEhB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,gGAAgG;YAChG,MAAM,SAAS,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;YAClC,MAAM,WAAW,GACf,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAE,UAAU,CAAC,WAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAChE,CAAC;YACF,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACzD,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;YAC5F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,+DAA+D;YAC/D,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,gFAAgF;YAChF,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,wEAAwE;YACxE,MAAM,KAAK,GAAQ,QAAQ,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC"}
|