agent-switchboard 0.2.2 → 0.3.0
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/README.md +68 -42
- package/dist/agents/registry.d.ts +0 -6
- package/dist/agents/registry.js +3 -13
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/trae.d.ts +16 -0
- package/dist/agents/trae.js +36 -0
- package/dist/agents/trae.js.map +1 -0
- package/dist/commands/distribution.d.ts +3 -4
- package/dist/commands/distribution.js +18 -116
- package/dist/commands/distribution.js.map +1 -1
- package/dist/config/application-config.d.ts +1 -1
- package/dist/config/application-config.js +2 -10
- package/dist/config/application-config.js.map +1 -1
- package/dist/config/mcp-config.js +1 -3
- package/dist/config/mcp-config.js.map +1 -1
- package/dist/config/paths.d.ts +24 -3
- package/dist/config/paths.js +63 -5
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schemas.d.ts +331 -43
- package/dist/config/schemas.js +109 -15
- package/dist/config/schemas.js.map +1 -1
- package/dist/config/switchboard-config.js +0 -1
- package/dist/config/switchboard-config.js.map +1 -1
- package/dist/extensions/api.d.ts +49 -0
- package/dist/extensions/api.js +41 -0
- package/dist/extensions/api.js.map +1 -0
- package/dist/extensions/loader.d.ts +17 -0
- package/dist/extensions/loader.js +73 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/hooks/distribution.js +1 -16
- package/dist/hooks/distribution.js.map +1 -1
- package/dist/index.js +59 -113
- package/dist/index.js.map +1 -1
- package/dist/library/distribute-bundle.js +1 -19
- package/dist/library/distribute-bundle.js.map +1 -1
- package/dist/library/fs.d.ts +12 -0
- package/dist/library/fs.js +81 -0
- package/dist/library/fs.js.map +1 -1
- package/dist/library/sources.d.ts +6 -1
- package/dist/library/sources.js +73 -16
- package/dist/library/sources.js.map +1 -1
- package/dist/rules/agents.d.ts +0 -4
- package/dist/rules/agents.js +0 -8
- package/dist/rules/agents.js.map +1 -1
- package/dist/rules/distribution.d.ts +1 -2
- package/dist/rules/distribution.js +20 -71
- package/dist/rules/distribution.js.map +1 -1
- package/dist/skills/distribution.d.ts +0 -22
- package/dist/skills/distribution.js +84 -157
- package/dist/skills/distribution.js.map +1 -1
- package/dist/skills/importer.js +2 -33
- package/dist/skills/importer.js.map +1 -1
- package/dist/subagents/codex-distribute.d.ts +13 -0
- package/dist/subagents/codex-distribute.js +273 -0
- package/dist/subagents/codex-distribute.js.map +1 -0
- package/dist/subagents/distribution.d.ts +3 -4
- package/dist/subagents/distribution.js +30 -410
- package/dist/subagents/distribution.js.map +1 -1
- package/dist/targets/builtin/claude-code.d.ts +2 -0
- package/dist/targets/builtin/claude-code.js +73 -0
- package/dist/targets/builtin/claude-code.js.map +1 -0
- package/dist/targets/builtin/claude-desktop.d.ts +2 -0
- package/dist/targets/builtin/claude-desktop.js +10 -0
- package/dist/targets/builtin/claude-desktop.js.map +1 -0
- package/dist/targets/builtin/codex.d.ts +3 -0
- package/dist/targets/builtin/codex.js +57 -0
- package/dist/targets/builtin/codex.js.map +1 -0
- package/dist/targets/builtin/common.d.ts +22 -0
- package/dist/targets/builtin/common.js +55 -0
- package/dist/targets/builtin/common.js.map +1 -0
- package/dist/targets/builtin/cursor.d.ts +2 -0
- package/dist/targets/builtin/cursor.js +95 -0
- package/dist/targets/builtin/cursor.js.map +1 -0
- package/dist/targets/builtin/gemini.d.ts +2 -0
- package/dist/targets/builtin/gemini.js +62 -0
- package/dist/targets/builtin/gemini.js.map +1 -0
- package/dist/targets/builtin/index.d.ts +10 -0
- package/dist/targets/builtin/index.js +19 -0
- package/dist/targets/builtin/index.js.map +1 -0
- package/dist/targets/builtin/opencode.d.ts +2 -0
- package/dist/targets/builtin/opencode.js +67 -0
- package/dist/targets/builtin/opencode.js.map +1 -0
- package/dist/targets/builtin/trae.d.ts +3 -0
- package/dist/targets/builtin/trae.js +54 -0
- package/dist/targets/builtin/trae.js.map +1 -0
- package/dist/targets/dsl/compiler.d.ts +13 -0
- package/dist/targets/dsl/compiler.js +215 -0
- package/dist/targets/dsl/compiler.js.map +1 -0
- package/dist/targets/dsl/index.d.ts +2 -0
- package/dist/targets/dsl/index.js +3 -0
- package/dist/targets/dsl/index.js.map +1 -0
- package/dist/targets/dsl/transforms.d.ts +77 -0
- package/dist/targets/dsl/transforms.js +159 -0
- package/dist/targets/dsl/transforms.js.map +1 -0
- package/dist/targets/init.d.ts +14 -0
- package/dist/targets/init.js +28 -0
- package/dist/targets/init.js.map +1 -0
- package/dist/targets/registry.d.ts +36 -0
- package/dist/targets/registry.js +97 -0
- package/dist/targets/registry.js.map +1 -0
- package/dist/targets/types.d.ts +91 -0
- package/dist/targets/types.js +28 -0
- package/dist/targets/types.js.map +1 -0
- package/dist/ui/plugin-ui.d.ts +1 -1
- package/dist/ui/plugin-ui.js +5 -12
- package/dist/ui/plugin-ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { CodexAgent } from '../../agents/codex.js';
|
|
3
|
+
import { getCodexDir, getProjectCodexSkillsDir } from '../../config/paths.js';
|
|
4
|
+
import { distributeCodexSubagents } from '../../subagents/codex-distribute.js';
|
|
5
|
+
import { extractMdId, resolveProjectRoot } from './common.js';
|
|
6
|
+
const adapter = new CodexAgent();
|
|
7
|
+
export const codexTarget = {
|
|
8
|
+
id: 'codex',
|
|
9
|
+
mcp: {
|
|
10
|
+
configPath: () => adapter.configPath(),
|
|
11
|
+
projectConfigPath: (root) => adapter.projectConfigPath(root),
|
|
12
|
+
applyConfig: (config) => adapter.applyConfig(config),
|
|
13
|
+
applyProjectConfig: (root, config) => adapter.applyProjectConfig(root, config),
|
|
14
|
+
},
|
|
15
|
+
rules: {
|
|
16
|
+
resolveFilePath: (scope) => {
|
|
17
|
+
const root = resolveProjectRoot(scope);
|
|
18
|
+
if (root)
|
|
19
|
+
return path.join(root, 'AGENTS.md');
|
|
20
|
+
return path.join(getCodexDir(), 'AGENTS.md');
|
|
21
|
+
},
|
|
22
|
+
render: (content) => content,
|
|
23
|
+
},
|
|
24
|
+
commands: {
|
|
25
|
+
resolveTargetDir: () => path.join(getCodexDir(), 'prompts'),
|
|
26
|
+
getFilename: (id) => `${id}.md`,
|
|
27
|
+
render: (entry) => {
|
|
28
|
+
const desc = entry.metadata.description?.trim();
|
|
29
|
+
const header = desc && desc.length > 0 ? `<!-- ${desc} -->\n\n` : '';
|
|
30
|
+
return ('<!-- [deprecated] Codex custom prompts are deprecated. ' +
|
|
31
|
+
'Consider migrating to skills: https://developers.openai.com/codex/skills -->\n\n' +
|
|
32
|
+
`${header}${entry.content.trimStart()}`);
|
|
33
|
+
},
|
|
34
|
+
extractIdFromFilename: extractMdId,
|
|
35
|
+
},
|
|
36
|
+
agents: {
|
|
37
|
+
custom: true,
|
|
38
|
+
distribute: distributeCodexSubagents,
|
|
39
|
+
},
|
|
40
|
+
skills: {
|
|
41
|
+
resolveParentDir: (scope) => {
|
|
42
|
+
const root = resolveProjectRoot(scope);
|
|
43
|
+
if (root)
|
|
44
|
+
return getProjectCodexSkillsDir(root);
|
|
45
|
+
return path.join(getCodexDir(), 'skills');
|
|
46
|
+
},
|
|
47
|
+
resolveTargetDir: (id, scope) => {
|
|
48
|
+
const root = resolveProjectRoot(scope);
|
|
49
|
+
if (root)
|
|
50
|
+
return path.join(getProjectCodexSkillsDir(root), id);
|
|
51
|
+
return path.join(getCodexDir(), 'skills', id);
|
|
52
|
+
},
|
|
53
|
+
isReservedDir: (id) => id === '.system',
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
export const CODEX_SKILLS_RESERVED_DIRS = new Set(['.system']);
|
|
57
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/targets/builtin/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for built-in target implementations.
|
|
3
|
+
*/
|
|
4
|
+
import type { ConfigScope } from '../../config/scope.js';
|
|
5
|
+
import type { GenericLibraryEntry } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Extract platform-specific extras from a library entry's frontmatter.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getPlatformExtras(entry: GenericLibraryEntry, platformKey: string): Record<string, unknown> | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Build frontmatter by merging base description with platform-specific extras.
|
|
12
|
+
* Common pattern used by claude-code, opencode, and similar markdown-based targets.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildPlatformFrontmatter(entry: GenericLibraryEntry, platformKey: string): Record<string, unknown>;
|
|
15
|
+
/** MDC frontmatter wrapper for rules (used by cursor, trae) */
|
|
16
|
+
export declare function wrapMdcFrontmatter(body: string): string;
|
|
17
|
+
/** Extract entry ID from a .md filename */
|
|
18
|
+
export declare function extractMdId(filename: string): string | null;
|
|
19
|
+
/** Extract entry ID from a .toml filename */
|
|
20
|
+
export declare function extractTomlId(filename: string): string | null;
|
|
21
|
+
/** Resolve project root, returning undefined if not set */
|
|
22
|
+
export declare function resolveProjectRoot(scope?: ConfigScope): string | undefined;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for built-in target implementations.
|
|
3
|
+
*/
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
/**
|
|
6
|
+
* Extract platform-specific extras from a library entry's frontmatter.
|
|
7
|
+
*/
|
|
8
|
+
export function getPlatformExtras(entry, platformKey) {
|
|
9
|
+
const extras = entry.metadata.extras;
|
|
10
|
+
if (!extras)
|
|
11
|
+
return undefined;
|
|
12
|
+
const val = extras[platformKey];
|
|
13
|
+
return typeof val === 'object' && val !== null ? val : undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build frontmatter by merging base description with platform-specific extras.
|
|
17
|
+
* Common pattern used by claude-code, opencode, and similar markdown-based targets.
|
|
18
|
+
*/
|
|
19
|
+
export function buildPlatformFrontmatter(entry, platformKey) {
|
|
20
|
+
const base = {};
|
|
21
|
+
if (entry.metadata.description)
|
|
22
|
+
base.description = entry.metadata.description;
|
|
23
|
+
const extras = getPlatformExtras(entry, platformKey);
|
|
24
|
+
if (extras) {
|
|
25
|
+
for (const [k, v] of Object.entries(extras))
|
|
26
|
+
base[k] = v;
|
|
27
|
+
}
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
/** MDC frontmatter wrapper for rules (used by cursor, trae) */
|
|
31
|
+
export function wrapMdcFrontmatter(body) {
|
|
32
|
+
const lines = ['---', 'description: Agent Switchboard Rules', 'alwaysApply: true', '---', ''];
|
|
33
|
+
if (body.length > 0) {
|
|
34
|
+
lines.push(body);
|
|
35
|
+
}
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
}
|
|
38
|
+
/** Extract entry ID from a .md filename */
|
|
39
|
+
export function extractMdId(filename) {
|
|
40
|
+
if (filename.endsWith('.md'))
|
|
41
|
+
return filename.slice(0, -3);
|
|
42
|
+
if (filename.endsWith('.markdown'))
|
|
43
|
+
return filename.slice(0, -9);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/** Extract entry ID from a .toml filename */
|
|
47
|
+
export function extractTomlId(filename) {
|
|
48
|
+
return filename.endsWith('.toml') ? filename.slice(0, -5) : null;
|
|
49
|
+
}
|
|
50
|
+
/** Resolve project root, returning undefined if not set */
|
|
51
|
+
export function resolveProjectRoot(scope) {
|
|
52
|
+
const p = scope?.project?.trim();
|
|
53
|
+
return p && p.length > 0 ? path.resolve(p) : undefined;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/targets/builtin/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,WAAmB;IAEnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAE,GAA+B,CAAC,CAAC,CAAC,SAAS,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAA0B,EAC1B,WAAmB;IAEnB,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW;QAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC9E,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,sCAAsC,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { CursorAgent } from '../../agents/cursor.js';
|
|
3
|
+
import { getCursorDir, getProjectCursorDir } from '../../config/paths.js';
|
|
4
|
+
import { wrapFrontmatter } from '../../util/frontmatter.js';
|
|
5
|
+
import { extractMdId, resolveProjectRoot } from './common.js';
|
|
6
|
+
const adapter = new CursorAgent();
|
|
7
|
+
const CURSOR_SUBAGENT_FIELDS = new Set([
|
|
8
|
+
'name',
|
|
9
|
+
'description',
|
|
10
|
+
'model',
|
|
11
|
+
'readonly',
|
|
12
|
+
'is_background',
|
|
13
|
+
]);
|
|
14
|
+
function buildCursorSubagentFrontmatter(entry) {
|
|
15
|
+
const base = {};
|
|
16
|
+
if (entry.metadata.description)
|
|
17
|
+
base.description = entry.metadata.description;
|
|
18
|
+
base.name = entry.id;
|
|
19
|
+
const extras = entry.metadata.extras;
|
|
20
|
+
const cursor = extras?.cursor;
|
|
21
|
+
if (cursor && typeof cursor === 'object') {
|
|
22
|
+
for (const [k, v] of Object.entries(cursor)) {
|
|
23
|
+
if (CURSOR_SUBAGENT_FIELDS.has(k))
|
|
24
|
+
base[k] = v;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!base.name)
|
|
28
|
+
base.name = entry.id;
|
|
29
|
+
if (!base.model)
|
|
30
|
+
base.model = 'inherit';
|
|
31
|
+
return base;
|
|
32
|
+
}
|
|
33
|
+
export const cursorTarget = {
|
|
34
|
+
id: 'cursor',
|
|
35
|
+
mcp: {
|
|
36
|
+
configPath: () => adapter.configPath(),
|
|
37
|
+
projectConfigPath: (root) => adapter.projectConfigPath(root),
|
|
38
|
+
applyConfig: (config) => adapter.applyConfig(config),
|
|
39
|
+
applyProjectConfig: (root, config) => adapter.applyProjectConfig(root, config),
|
|
40
|
+
},
|
|
41
|
+
rules: {
|
|
42
|
+
resolveFilePath: (scope) => {
|
|
43
|
+
const root = resolveProjectRoot(scope);
|
|
44
|
+
if (root)
|
|
45
|
+
return path.join(getProjectCursorDir(root), 'rules', 'asb-rules.mdc');
|
|
46
|
+
return path.join(getCursorDir(), 'rules', 'asb-rules.mdc');
|
|
47
|
+
},
|
|
48
|
+
render: (content) => {
|
|
49
|
+
const lines = ['---', 'description: Agent Switchboard Rules', 'alwaysApply: true', '---', ''];
|
|
50
|
+
if (content.length > 0)
|
|
51
|
+
lines.push(content);
|
|
52
|
+
return lines.join('\n');
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
commands: {
|
|
56
|
+
resolveTargetDir: (scope) => {
|
|
57
|
+
const root = resolveProjectRoot(scope);
|
|
58
|
+
if (root)
|
|
59
|
+
return path.join(getProjectCursorDir(root), 'commands');
|
|
60
|
+
return path.join(getCursorDir(), 'commands');
|
|
61
|
+
},
|
|
62
|
+
getFilename: (id) => `${id}.md`,
|
|
63
|
+
render: (entry) => `${entry.content.trimEnd()}\n`,
|
|
64
|
+
extractIdFromFilename: extractMdId,
|
|
65
|
+
},
|
|
66
|
+
agents: {
|
|
67
|
+
resolveTargetDir: (scope) => {
|
|
68
|
+
const root = resolveProjectRoot(scope);
|
|
69
|
+
if (root)
|
|
70
|
+
return path.join(getProjectCursorDir(root), 'agents');
|
|
71
|
+
return path.join(getCursorDir(), 'agents');
|
|
72
|
+
},
|
|
73
|
+
getFilename: (id) => `${id}.md`,
|
|
74
|
+
render: (entry) => {
|
|
75
|
+
const fm = buildCursorSubagentFrontmatter(entry);
|
|
76
|
+
return wrapFrontmatter(fm, entry.content);
|
|
77
|
+
},
|
|
78
|
+
extractIdFromFilename: extractMdId,
|
|
79
|
+
},
|
|
80
|
+
skills: {
|
|
81
|
+
resolveParentDir: (scope) => {
|
|
82
|
+
const root = resolveProjectRoot(scope);
|
|
83
|
+
if (root)
|
|
84
|
+
return path.join(getProjectCursorDir(root), 'skills');
|
|
85
|
+
return path.join(getCursorDir(), 'skills');
|
|
86
|
+
},
|
|
87
|
+
resolveTargetDir: (id, scope) => {
|
|
88
|
+
const root = resolveProjectRoot(scope);
|
|
89
|
+
if (root)
|
|
90
|
+
return path.join(getProjectCursorDir(root), 'skills', id);
|
|
91
|
+
return path.join(getCursorDir(), 'skills', id);
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/targets/builtin/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { stringify as toToml } from '@iarna/toml';
|
|
3
|
+
import { GeminiAgent } from '../../agents/gemini.js';
|
|
4
|
+
import { getGeminiDir, getProjectGeminiDir } from '../../config/paths.js';
|
|
5
|
+
import { extractTomlId, getPlatformExtras, resolveProjectRoot } from './common.js';
|
|
6
|
+
const adapter = new GeminiAgent();
|
|
7
|
+
function renderGeminiCommand(entry) {
|
|
8
|
+
const g = getPlatformExtras(entry, 'gemini');
|
|
9
|
+
const obj = { prompt: entry.content.trimStart() };
|
|
10
|
+
if (entry.metadata.description)
|
|
11
|
+
obj.description = entry.metadata.description;
|
|
12
|
+
if (g) {
|
|
13
|
+
for (const [k, v] of Object.entries(g))
|
|
14
|
+
obj[k] = v;
|
|
15
|
+
}
|
|
16
|
+
// biome-ignore lint/suspicious/noExplicitAny: TOML stringify expects JSON-like values
|
|
17
|
+
return toToml(obj);
|
|
18
|
+
}
|
|
19
|
+
export const geminiTarget = {
|
|
20
|
+
id: 'gemini',
|
|
21
|
+
mcp: {
|
|
22
|
+
configPath: () => adapter.configPath(),
|
|
23
|
+
projectConfigPath: (root) => adapter.projectConfigPath(root),
|
|
24
|
+
applyConfig: (config) => adapter.applyConfig(config),
|
|
25
|
+
applyProjectConfig: (root, config) => adapter.applyProjectConfig(root, config),
|
|
26
|
+
},
|
|
27
|
+
rules: {
|
|
28
|
+
resolveFilePath: (scope) => {
|
|
29
|
+
const root = resolveProjectRoot(scope);
|
|
30
|
+
if (root)
|
|
31
|
+
return path.join(root, 'AGENTS.md');
|
|
32
|
+
return path.join(getGeminiDir(), 'AGENTS.md');
|
|
33
|
+
},
|
|
34
|
+
render: (content) => content,
|
|
35
|
+
},
|
|
36
|
+
commands: {
|
|
37
|
+
resolveTargetDir: (scope) => {
|
|
38
|
+
const root = resolveProjectRoot(scope);
|
|
39
|
+
if (root)
|
|
40
|
+
return path.join(getProjectGeminiDir(root), 'commands');
|
|
41
|
+
return path.join(getGeminiDir(), 'commands');
|
|
42
|
+
},
|
|
43
|
+
getFilename: (id) => `${id}.toml`,
|
|
44
|
+
render: renderGeminiCommand,
|
|
45
|
+
extractIdFromFilename: extractTomlId,
|
|
46
|
+
},
|
|
47
|
+
skills: {
|
|
48
|
+
resolveParentDir: (scope) => {
|
|
49
|
+
const root = resolveProjectRoot(scope);
|
|
50
|
+
if (root)
|
|
51
|
+
return path.join(getProjectGeminiDir(root), 'skills');
|
|
52
|
+
return path.join(getGeminiDir(), 'skills');
|
|
53
|
+
},
|
|
54
|
+
resolveTargetDir: (id, scope) => {
|
|
55
|
+
const root = resolveProjectRoot(scope);
|
|
56
|
+
if (root)
|
|
57
|
+
return path.join(getProjectGeminiDir(root), 'skills', id);
|
|
58
|
+
return path.join(getGeminiDir(), 'skills', id);
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/targets/builtin/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ApplicationTarget } from '../types.js';
|
|
2
|
+
import { claudeCodeTarget } from './claude-code.js';
|
|
3
|
+
import { claudeDesktopTarget } from './claude-desktop.js';
|
|
4
|
+
import { codexTarget } from './codex.js';
|
|
5
|
+
import { cursorTarget } from './cursor.js';
|
|
6
|
+
import { geminiTarget } from './gemini.js';
|
|
7
|
+
import { opencodeTarget } from './opencode.js';
|
|
8
|
+
import { traeCnTarget, traeTarget } from './trae.js';
|
|
9
|
+
export declare const BUILTIN_TARGETS: readonly ApplicationTarget[];
|
|
10
|
+
export { claudeCodeTarget, claudeDesktopTarget, codexTarget, cursorTarget, geminiTarget, opencodeTarget, traeTarget, traeCnTarget, };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { claudeCodeTarget } from './claude-code.js';
|
|
2
|
+
import { claudeDesktopTarget } from './claude-desktop.js';
|
|
3
|
+
import { codexTarget } from './codex.js';
|
|
4
|
+
import { cursorTarget } from './cursor.js';
|
|
5
|
+
import { geminiTarget } from './gemini.js';
|
|
6
|
+
import { opencodeTarget } from './opencode.js';
|
|
7
|
+
import { traeCnTarget, traeTarget } from './trae.js';
|
|
8
|
+
export const BUILTIN_TARGETS = [
|
|
9
|
+
claudeCodeTarget,
|
|
10
|
+
claudeDesktopTarget,
|
|
11
|
+
codexTarget,
|
|
12
|
+
cursorTarget,
|
|
13
|
+
geminiTarget,
|
|
14
|
+
opencodeTarget,
|
|
15
|
+
traeTarget,
|
|
16
|
+
traeCnTarget,
|
|
17
|
+
];
|
|
18
|
+
export { claudeCodeTarget, claudeDesktopTarget, codexTarget, cursorTarget, geminiTarget, opencodeTarget, traeTarget, traeCnTarget, };
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/targets/builtin/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAAiC;IAC3D,gBAAgB;IAChB,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,YAAY;CACb,CAAC;AAEF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,GACb,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { OpencodeAgent } from '../../agents/opencode.js';
|
|
3
|
+
import { getOpencodePath, getOpencodeRoot, getProjectOpencodePath, getProjectOpencodeRoot, } from '../../config/paths.js';
|
|
4
|
+
import { wrapFrontmatter } from '../../util/frontmatter.js';
|
|
5
|
+
import { buildPlatformFrontmatter, extractMdId, resolveProjectRoot } from './common.js';
|
|
6
|
+
const adapter = new OpencodeAgent();
|
|
7
|
+
export const opencodeTarget = {
|
|
8
|
+
id: 'opencode',
|
|
9
|
+
mcp: {
|
|
10
|
+
configPath: () => adapter.configPath(),
|
|
11
|
+
projectConfigPath: (root) => adapter.projectConfigPath(root),
|
|
12
|
+
applyConfig: (config) => adapter.applyConfig(config),
|
|
13
|
+
applyProjectConfig: (root, config) => adapter.applyProjectConfig(root, config),
|
|
14
|
+
},
|
|
15
|
+
rules: {
|
|
16
|
+
resolveFilePath: (scope) => {
|
|
17
|
+
const root = resolveProjectRoot(scope);
|
|
18
|
+
if (root)
|
|
19
|
+
return path.join(root, 'AGENTS.md');
|
|
20
|
+
return getOpencodePath('AGENTS.md');
|
|
21
|
+
},
|
|
22
|
+
render: (content) => content,
|
|
23
|
+
},
|
|
24
|
+
commands: {
|
|
25
|
+
resolveTargetDir: (scope) => {
|
|
26
|
+
const root = resolveProjectRoot(scope);
|
|
27
|
+
if (root)
|
|
28
|
+
return getProjectOpencodePath(root, 'command');
|
|
29
|
+
return getOpencodePath('command');
|
|
30
|
+
},
|
|
31
|
+
getFilename: (id) => `${id}.md`,
|
|
32
|
+
render: (entry) => {
|
|
33
|
+
const fm = buildPlatformFrontmatter(entry, 'opencode');
|
|
34
|
+
return wrapFrontmatter(fm, entry.content);
|
|
35
|
+
},
|
|
36
|
+
extractIdFromFilename: extractMdId,
|
|
37
|
+
},
|
|
38
|
+
agents: {
|
|
39
|
+
resolveTargetDir: (scope) => {
|
|
40
|
+
const root = resolveProjectRoot(scope);
|
|
41
|
+
if (root)
|
|
42
|
+
return getProjectOpencodePath(root, 'agent');
|
|
43
|
+
return getOpencodePath('agent');
|
|
44
|
+
},
|
|
45
|
+
getFilename: (id) => `${id}.md`,
|
|
46
|
+
render: (entry) => {
|
|
47
|
+
const fm = buildPlatformFrontmatter(entry, 'opencode');
|
|
48
|
+
return wrapFrontmatter(fm, entry.content);
|
|
49
|
+
},
|
|
50
|
+
extractIdFromFilename: extractMdId,
|
|
51
|
+
},
|
|
52
|
+
skills: {
|
|
53
|
+
resolveParentDir: (scope) => {
|
|
54
|
+
const root = resolveProjectRoot(scope);
|
|
55
|
+
if (root)
|
|
56
|
+
return path.join(getProjectOpencodeRoot(root), 'skill');
|
|
57
|
+
return path.join(getOpencodeRoot(), 'skill');
|
|
58
|
+
},
|
|
59
|
+
resolveTargetDir: (id, scope) => {
|
|
60
|
+
const root = resolveProjectRoot(scope);
|
|
61
|
+
if (root)
|
|
62
|
+
return path.join(getProjectOpencodeRoot(root), 'skill', id);
|
|
63
|
+
return path.join(getOpencodeRoot(), 'skill', id);
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/targets/builtin/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { TraeAgent } from '../../agents/trae.js';
|
|
3
|
+
import { getProjectTraeDir, getTraeDataDir } from '../../config/paths.js';
|
|
4
|
+
import { resolveProjectRoot, wrapMdcFrontmatter } from './common.js';
|
|
5
|
+
/**
|
|
6
|
+
* Trae infers transport from `url` (HTTP/SSE) vs `command` (stdio) and does
|
|
7
|
+
* not recognize the explicit `type` field. Strip it to avoid unknown-key
|
|
8
|
+
* warnings or parse errors in the IDE.
|
|
9
|
+
*/
|
|
10
|
+
function stripMcpType(config) {
|
|
11
|
+
const servers = {};
|
|
12
|
+
for (const [name, server] of Object.entries(config.mcpServers)) {
|
|
13
|
+
servers[name] = { ...server, type: undefined };
|
|
14
|
+
}
|
|
15
|
+
return { mcpServers: servers };
|
|
16
|
+
}
|
|
17
|
+
function createTraeTarget(variant) {
|
|
18
|
+
const adapter = new TraeAgent(variant);
|
|
19
|
+
return {
|
|
20
|
+
id: variant,
|
|
21
|
+
mcp: {
|
|
22
|
+
configPath: () => adapter.configPath(),
|
|
23
|
+
projectConfigPath: (root) => adapter.projectConfigPath(root),
|
|
24
|
+
applyConfig: (config) => adapter.applyConfig(stripMcpType(config)),
|
|
25
|
+
applyProjectConfig: (root, config) => adapter.applyProjectConfig(root, stripMcpType(config)),
|
|
26
|
+
},
|
|
27
|
+
rules: {
|
|
28
|
+
resolveFilePath: (scope) => {
|
|
29
|
+
const root = resolveProjectRoot(scope);
|
|
30
|
+
if (root)
|
|
31
|
+
return path.join(getProjectTraeDir(root), 'rules', 'asb-rules.md');
|
|
32
|
+
return path.join(getTraeDataDir(variant), 'user_rules', 'asb-rules.md');
|
|
33
|
+
},
|
|
34
|
+
render: wrapMdcFrontmatter,
|
|
35
|
+
},
|
|
36
|
+
skills: {
|
|
37
|
+
resolveParentDir: (scope) => {
|
|
38
|
+
const root = resolveProjectRoot(scope);
|
|
39
|
+
if (root)
|
|
40
|
+
return path.join(getProjectTraeDir(root), 'skills');
|
|
41
|
+
return path.join(getTraeDataDir(variant), 'skills');
|
|
42
|
+
},
|
|
43
|
+
resolveTargetDir: (id, scope) => {
|
|
44
|
+
const root = resolveProjectRoot(scope);
|
|
45
|
+
if (root)
|
|
46
|
+
return path.join(getProjectTraeDir(root), 'skills', id);
|
|
47
|
+
return path.join(getTraeDataDir(variant), 'skills', id);
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export const traeTarget = createTraeTarget('trae');
|
|
53
|
+
export const traeCnTarget = createTraeTarget('trae-cn');
|
|
54
|
+
//# sourceMappingURL=trae.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trae.js","sourceRoot":"","sources":["../../../src/targets/builtin/trae.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAC;AAG5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAErE;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAkE;IAGtF,MAAM,OAAO,GAA+C,EAAE,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,MAAkC,EAAE,IAAI,EAAE,SAAS,EAGxE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoB;IAC5C,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAEvC,OAAO;QACL,EAAE,EAAE,OAAO;QAEX,GAAG,EAAE;YACH,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE;YACtC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAClE,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;SAC7F;QAED,KAAK,EAAE;YACL,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;gBAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,EAAE,kBAAkB;SAC3B;QAED,MAAM,EAAE;YACN,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;YACD,gBAAgB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;gBAC9B,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiles a config-driven TargetSpec (from [targets.<id>] in config.toml)
|
|
3
|
+
* into a fully functional ApplicationTarget.
|
|
4
|
+
*
|
|
5
|
+
* The spec is intentionally permissive at the Zod schema level (passthrough);
|
|
6
|
+
* structural validation happens here at compile time with clear error messages.
|
|
7
|
+
*/
|
|
8
|
+
import type { ApplicationTarget } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Compile a TargetSpec into a fully functional ApplicationTarget.
|
|
11
|
+
* Throws descriptive errors on invalid specs.
|
|
12
|
+
*/
|
|
13
|
+
export declare function compileTargetSpec(id: string, spec: Record<string, unknown>): ApplicationTarget;
|