ai-factory 2.0.0 → 2.2.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.
Files changed (91) hide show
  1. package/README.md +17 -4
  2. package/dist/cli/commands/extension.d.ts +4 -0
  3. package/dist/cli/commands/extension.d.ts.map +1 -0
  4. package/dist/cli/commands/extension.js +288 -0
  5. package/dist/cli/commands/extension.js.map +1 -0
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +31 -35
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/update.d.ts.map +1 -1
  10. package/dist/cli/commands/update.js +86 -7
  11. package/dist/cli/commands/update.js.map +1 -1
  12. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  13. package/dist/cli/commands/upgrade.js +44 -41
  14. package/dist/cli/commands/upgrade.js.map +1 -1
  15. package/dist/cli/index.js +48 -1
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/wizard/prompts.d.ts +2 -1
  18. package/dist/cli/wizard/prompts.d.ts.map +1 -1
  19. package/dist/cli/wizard/prompts.js +13 -20
  20. package/dist/cli/wizard/prompts.js.map +1 -1
  21. package/dist/core/agents.d.ts.map +1 -1
  22. package/dist/core/agents.js +9 -0
  23. package/dist/core/agents.js.map +1 -1
  24. package/dist/core/config.d.ts +8 -2
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +5 -8
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/extension-ops.d.ts +32 -0
  29. package/dist/core/extension-ops.d.ts.map +1 -0
  30. package/dist/core/extension-ops.js +83 -0
  31. package/dist/core/extension-ops.js.map +1 -0
  32. package/dist/core/extensions.d.ts +53 -0
  33. package/dist/core/extensions.d.ts.map +1 -0
  34. package/dist/core/extensions.js +141 -0
  35. package/dist/core/extensions.js.map +1 -0
  36. package/dist/core/injections.d.ts +10 -0
  37. package/dist/core/injections.d.ts.map +1 -0
  38. package/dist/core/injections.js +154 -0
  39. package/dist/core/injections.js.map +1 -0
  40. package/dist/core/installer.d.ts +7 -3
  41. package/dist/core/installer.d.ts.map +1 -1
  42. package/dist/core/installer.js +68 -26
  43. package/dist/core/installer.js.map +1 -1
  44. package/dist/core/mcp.d.ts +12 -0
  45. package/dist/core/mcp.d.ts.map +1 -1
  46. package/dist/core/mcp.js +112 -67
  47. package/dist/core/mcp.js.map +1 -1
  48. package/dist/core/transformer.d.ts +10 -1
  49. package/dist/core/transformer.d.ts.map +1 -1
  50. package/dist/core/transformer.js +19 -1
  51. package/dist/core/transformer.js.map +1 -1
  52. package/dist/core/transformers/antigravity.d.ts +1 -0
  53. package/dist/core/transformers/antigravity.d.ts.map +1 -1
  54. package/dist/core/transformers/antigravity.js +19 -4
  55. package/dist/core/transformers/antigravity.js.map +1 -1
  56. package/dist/core/transformers/codex.d.ts +7 -0
  57. package/dist/core/transformers/codex.d.ts.map +1 -0
  58. package/dist/core/transformers/codex.js +24 -0
  59. package/dist/core/transformers/codex.js.map +1 -0
  60. package/dist/core/transformers/default.d.ts +1 -0
  61. package/dist/core/transformers/default.d.ts.map +1 -1
  62. package/dist/core/transformers/default.js +6 -0
  63. package/dist/core/transformers/default.js.map +1 -1
  64. package/dist/core/transformers/kilocode.js +1 -1
  65. package/dist/core/transformers/kilocode.js.map +1 -1
  66. package/dist/core/transformers/qwen.d.ts +7 -0
  67. package/dist/core/transformers/qwen.d.ts.map +1 -0
  68. package/dist/core/transformers/qwen.js +25 -0
  69. package/dist/core/transformers/qwen.js.map +1 -0
  70. package/dist/utils/fs.d.ts +0 -2
  71. package/dist/utils/fs.d.ts.map +1 -1
  72. package/dist/utils/fs.js +1 -5
  73. package/dist/utils/fs.js.map +1 -1
  74. package/mcp/templates/playwright.json +4 -0
  75. package/package.json +16 -1
  76. package/skills/aif/SKILL.md +27 -52
  77. package/skills/aif-commit/SKILL.md +13 -1
  78. package/skills/aif-grounded/SKILL.md +90 -0
  79. package/skills/aif-implement/SKILL.md +39 -2
  80. package/skills/aif-implement/references/IMPLEMENTATION-GUIDE.md +16 -0
  81. package/skills/aif-loop/SKILL.md +2 -2
  82. package/dist/cli/wizard/detector.d.ts +0 -10
  83. package/dist/cli/wizard/detector.d.ts.map +0 -1
  84. package/dist/cli/wizard/detector.js +0 -231
  85. package/dist/cli/wizard/detector.js.map +0 -1
  86. package/skills/_templates/nextjs/nextjs-patterns/SKILL.md +0 -146
  87. package/skills/_templates/node-api/api-patterns/SKILL.md +0 -245
  88. package/skills/_templates/php/php-patterns/SKILL.md +0 -491
  89. package/skills/_templates/python/python-patterns/SKILL.md +0 -236
  90. package/skills/_templates/react/react-patterns/SKILL.md +0 -181
  91. package/skills/aif-deploy/SKILL.md +0 -138
@@ -1,8 +1,8 @@
1
1
  import path from 'path';
2
- import { copyDirectory, getSkillsDir, ensureDir, listDirectories, readTextFile, writeTextFile } from '../utils/fs.js';
2
+ import { copyDirectory, getSkillsDir, ensureDir, listDirectories, readTextFile, writeTextFile, removeDirectory } from '../utils/fs.js';
3
3
  import { getAgentConfig } from './agents.js';
4
4
  import { processSkillTemplates, buildTemplateVars, processTemplate } from './template.js';
5
- import { getTransformer } from './transformer.js';
5
+ import { getTransformer, extractFrontmatterName, replaceFrontmatterName } from './transformer.js';
6
6
  async function installSkillWithTransformer(sourceSkillDir, skillName, projectDir, skillsDir, agentId, agentConfig) {
7
7
  const transformer = getTransformer(agentId);
8
8
  const skillMdPath = path.join(sourceSkillDir, 'SKILL.md');
@@ -10,7 +10,10 @@ async function installSkillWithTransformer(sourceSkillDir, skillName, projectDir
10
10
  if (!content) {
11
11
  throw new Error(`SKILL.md not found in ${sourceSkillDir}`);
12
12
  }
13
- const result = transformer.transform(skillName, content);
13
+ // If skill is installed under a different name (e.g. replacement), rewrite frontmatter name
14
+ const fmName = extractFrontmatterName(content);
15
+ const adjustedContent = (fmName && fmName !== skillName) ? replaceFrontmatterName(content, skillName) : content;
16
+ const result = transformer.transform(skillName, adjustedContent);
14
17
  const vars = buildTemplateVars(agentConfig);
15
18
  if (result.flat) {
16
19
  const targetPath = path.join(projectDir, agentConfig.configDir, result.targetDir, result.targetName);
@@ -22,11 +25,14 @@ async function installSkillWithTransformer(sourceSkillDir, skillName, projectDir
22
25
  if (result.content !== content) {
23
26
  await writeTextFile(path.join(targetSkillDir, 'SKILL.md'), result.content);
24
27
  }
28
+ else if (adjustedContent !== content) {
29
+ await writeTextFile(path.join(targetSkillDir, 'SKILL.md'), adjustedContent);
30
+ }
25
31
  await processSkillTemplates(targetSkillDir, agentConfig);
26
32
  }
27
33
  }
28
34
  export async function installSkills(options) {
29
- const { projectDir, skillsDir, skills, stack, agentId } = options;
35
+ const { projectDir, skillsDir, skills, agentId } = options;
30
36
  const installedSkills = [];
31
37
  const agentConfig = getAgentConfig(agentId);
32
38
  const targetDir = path.join(projectDir, skillsDir);
@@ -42,45 +48,81 @@ export async function installSkills(options) {
42
48
  console.warn(`Warning: Could not install skill "${skill}": ${error}`);
43
49
  }
44
50
  }
45
- if (stack) {
46
- const templateDir = path.join(packageSkillsDir, '_templates', stack);
47
- try {
48
- const templateSkills = await listDirectories(templateDir);
49
- for (const templateSkill of templateSkills) {
50
- const sourceDir = path.join(templateDir, templateSkill);
51
- await installSkillWithTransformer(sourceDir, templateSkill, projectDir, skillsDir, agentId, agentConfig);
52
- installedSkills.push(`${stack}/${templateSkill}`);
53
- }
54
- }
55
- catch {
56
- // Template not found, skip
57
- }
58
- }
59
51
  const transformer = getTransformer(agentId);
60
52
  if (transformer.postInstall) {
61
53
  await transformer.postInstall(projectDir);
62
54
  }
63
55
  return installedSkills;
64
56
  }
57
+ export function partitionSkills(skills) {
58
+ return {
59
+ base: skills.filter(s => !s.includes('/')),
60
+ custom: skills.filter(s => s.includes('/')),
61
+ };
62
+ }
65
63
  export async function getAvailableSkills() {
66
64
  const packageSkillsDir = getSkillsDir();
67
65
  const dirs = await listDirectories(packageSkillsDir);
68
66
  return dirs.filter(dir => !dir.startsWith('_'));
69
67
  }
70
- export async function getAvailableTemplates() {
71
- const templatesDir = path.join(getSkillsDir(), '_templates');
72
- return listDirectories(templatesDir);
68
+ export async function installExtensionSkills(projectDir, agentInstallation, extensionDir, skillPaths, nameOverrides) {
69
+ const agentConfig = getAgentConfig(agentInstallation.id);
70
+ const installed = [];
71
+ for (const skillPath of skillPaths) {
72
+ const sourceDir = path.join(extensionDir, skillPath);
73
+ const skillName = nameOverrides?.[skillPath] ?? path.basename(skillPath);
74
+ try {
75
+ await installSkillWithTransformer(sourceDir, skillName, projectDir, agentInstallation.skillsDir, agentInstallation.id, agentConfig);
76
+ installed.push(skillName);
77
+ }
78
+ catch (error) {
79
+ console.warn(`Warning: Could not install extension skill "${skillName}": ${error}`);
80
+ }
81
+ }
82
+ return installed;
73
83
  }
74
- export async function updateSkills(agentInstallation, projectDir) {
84
+ async function removeSkillsByName(projectDir, agentInstallation, skillNames) {
85
+ const agentConfig = getAgentConfig(agentInstallation.id);
86
+ const transformer = getTransformer(agentInstallation.id);
87
+ const removed = [];
88
+ for (const skillName of skillNames) {
89
+ try {
90
+ const result = transformer.transform(skillName, '');
91
+ if (result.flat) {
92
+ const targetPath = path.join(projectDir, agentConfig.configDir, result.targetDir, result.targetName);
93
+ await removeDirectory(targetPath);
94
+ }
95
+ else {
96
+ const targetSkillDir = path.join(projectDir, agentInstallation.skillsDir, result.targetDir);
97
+ await removeDirectory(targetSkillDir);
98
+ }
99
+ removed.push(skillName);
100
+ }
101
+ catch {
102
+ // Skill may not exist, ignore
103
+ }
104
+ }
105
+ return removed;
106
+ }
107
+ export async function removeExtensionSkills(projectDir, agentInstallation, skillPaths) {
108
+ return removeSkillsByName(projectDir, agentInstallation, skillPaths.map(p => path.basename(p)));
109
+ }
110
+ export async function updateSkills(agentInstallation, projectDir, excludeSkills) {
75
111
  const availableSkills = await getAvailableSkills();
76
- const customSkills = agentInstallation.installedSkills.filter(s => s.includes('/'));
112
+ const excludeSet = new Set(excludeSkills ?? []);
113
+ const skillsToInstall = availableSkills.filter(s => !excludeSet.has(s));
114
+ const { base: previousBaseSkills, custom } = partitionSkills(agentInstallation.installedSkills);
115
+ const availableSet = new Set(availableSkills);
116
+ const removedSkills = previousBaseSkills.filter(s => !availableSet.has(s) && !excludeSet.has(s));
117
+ if (removedSkills.length > 0) {
118
+ await removeSkillsByName(projectDir, agentInstallation, removedSkills);
119
+ }
77
120
  const installedBaseSkills = await installSkills({
78
121
  projectDir,
79
122
  skillsDir: agentInstallation.skillsDir,
80
- skills: availableSkills,
81
- stack: null,
123
+ skills: skillsToInstall,
82
124
  agentId: agentInstallation.id,
83
125
  });
84
- return [...installedBaseSkills, ...customSkills];
126
+ return [...installedBaseSkills, ...custom];
85
127
  }
86
128
  //# sourceMappingURL=installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,21 @@
1
+ interface McpServerConfig {
2
+ command: string;
3
+ args?: string[];
4
+ env?: Record<string, string>;
5
+ }
1
6
  export interface McpOptions {
2
7
  github: boolean;
3
8
  filesystem: boolean;
4
9
  postgres: boolean;
5
10
  chromeDevtools: boolean;
11
+ playwright: boolean;
6
12
  }
7
13
  export declare function configureMcp(projectDir: string, options: McpOptions, agentId?: string): Promise<string[]>;
8
14
  export declare function getMcpInstructions(servers: string[]): string[];
15
+ export declare function configureExtensionMcpServers(projectDir: string, agentId: string, servers: {
16
+ key: string;
17
+ template: McpServerConfig;
18
+ }[]): Promise<string[]>;
19
+ export declare function removeExtensionMcpServers(projectDir: string, agentId: string, keys: string[]): Promise<void>;
20
+ export {};
9
21
  //# sourceMappingURL=mcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/core/mcp.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAWD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqFzH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA4B9D"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/core/mcp.ts"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAQD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoFD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCzH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAK9D;AAED,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,EAAE,GACpD,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BnB;AAED,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf"}
package/dist/core/mcp.js CHANGED
@@ -9,93 +9,138 @@ function toOpenCodeFormat(config) {
9
9
  }
10
10
  return result;
11
11
  }
12
+ const MCP_SERVERS = [
13
+ {
14
+ key: 'github',
15
+ templateFile: 'github.json',
16
+ instruction: 'GitHub MCP: Set GITHUB_TOKEN environment variable with your GitHub personal access token',
17
+ },
18
+ {
19
+ key: 'filesystem',
20
+ templateFile: 'filesystem.json',
21
+ instruction: 'Filesystem MCP: No additional configuration needed. Server provides file access tools.',
22
+ },
23
+ {
24
+ key: 'postgres',
25
+ templateFile: 'postgres.json',
26
+ instruction: 'Postgres MCP: Set DATABASE_URL environment variable with your PostgreSQL connection string',
27
+ },
28
+ {
29
+ key: 'chromeDevtools',
30
+ templateFile: 'chrome-devtools.json',
31
+ instruction: 'Chrome Devtools MCP: No additional configuration needed. Server provides your coding agent control and inspect a live Chrome browser.',
32
+ },
33
+ {
34
+ key: 'playwright',
35
+ templateFile: 'playwright.json',
36
+ instruction: 'Playwright MCP: No additional configuration needed. Server provides browser automation via accessibility tree for web testing and interaction.',
37
+ },
38
+ ];
39
+ function isRecord(value) {
40
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
41
+ }
42
+ function ensureNestedRecord(object, key) {
43
+ const value = object[key];
44
+ if (isRecord(value)) {
45
+ return value;
46
+ }
47
+ const next = {};
48
+ object[key] = next;
49
+ return next;
50
+ }
51
+ async function loadSettings(settingsPath) {
52
+ if (!(await fileExists(settingsPath))) {
53
+ return {};
54
+ }
55
+ const parsed = await readJsonFile(settingsPath);
56
+ return isRecord(parsed) ? parsed : {};
57
+ }
58
+ function applyServerConfig(settings, format, key, template) {
59
+ if (format === 'opencode') {
60
+ ensureNestedRecord(settings, 'mcp')[key] = toOpenCodeFormat(template);
61
+ return;
62
+ }
63
+ ensureNestedRecord(settings, 'mcpServers')[key] = template;
64
+ }
12
65
  export async function configureMcp(projectDir, options, agentId = 'claude') {
13
66
  const agent = getAgentConfig(agentId);
14
67
  if (!agent.supportsMcp || !agent.settingsFile) {
15
68
  return [];
16
69
  }
17
- const isOpenCode = agentId === 'opencode';
70
+ const format = agentId === 'opencode' ? 'opencode' : 'standard';
18
71
  const configuredServers = [];
19
72
  const settingsPath = path.join(projectDir, agent.settingsFile);
20
73
  const settingsDir = path.dirname(settingsPath);
21
74
  await ensureDir(settingsDir);
22
75
  const mcpTemplatesDir = path.join(getMcpDir(), 'templates');
23
- if (isOpenCode) {
24
- let settings = {};
25
- if (await fileExists(settingsPath)) {
26
- const existing = await readJsonFile(settingsPath);
27
- if (existing) {
28
- settings = existing;
29
- }
76
+ const settings = await loadSettings(settingsPath);
77
+ for (const server of MCP_SERVERS) {
78
+ if (!options[server.key]) {
79
+ continue;
30
80
  }
31
- if (!settings.mcp) {
32
- settings.mcp = {};
33
- }
34
- const serverEntries = [
35
- ['github', 'github.json'],
36
- ['filesystem', 'filesystem.json'],
37
- ['postgres', 'postgres.json'],
38
- ['chromeDevtools', 'chrome-devtools.json'],
39
- ];
40
- for (const [key, file] of serverEntries) {
41
- if (options[key]) {
42
- const template = await readJsonFile(path.join(mcpTemplatesDir, file));
43
- if (template) {
44
- settings.mcp[key] = toOpenCodeFormat(template);
45
- configuredServers.push(key);
46
- }
47
- }
48
- }
49
- if (configuredServers.length > 0) {
50
- await writeJsonFile(settingsPath, settings);
81
+ const template = await readJsonFile(path.join(mcpTemplatesDir, server.templateFile));
82
+ if (!template) {
83
+ continue;
51
84
  }
85
+ applyServerConfig(settings, format, server.key, template);
86
+ configuredServers.push(server.key);
52
87
  }
53
- else {
54
- let settings = {};
55
- if (await fileExists(settingsPath)) {
56
- const existing = await readJsonFile(settingsPath);
57
- if (existing) {
58
- settings = existing;
59
- }
60
- }
61
- if (!settings.mcpServers) {
62
- settings.mcpServers = {};
63
- }
64
- const serverEntries = [
65
- ['github', 'github.json'],
66
- ['filesystem', 'filesystem.json'],
67
- ['postgres', 'postgres.json'],
68
- ['chromeDevtools', 'chrome-devtools.json'],
69
- ];
70
- for (const [key, file] of serverEntries) {
71
- if (options[key]) {
72
- const template = await readJsonFile(path.join(mcpTemplatesDir, file));
73
- if (template) {
74
- settings.mcpServers[key] = template;
75
- configuredServers.push(key);
76
- }
77
- }
78
- }
79
- if (configuredServers.length > 0) {
80
- await writeJsonFile(settingsPath, settings);
81
- }
88
+ if (configuredServers.length > 0) {
89
+ await writeJsonFile(settingsPath, settings);
82
90
  }
83
91
  return configuredServers;
84
92
  }
85
93
  export function getMcpInstructions(servers) {
86
- const instructions = [];
87
- if (servers.includes('github')) {
88
- instructions.push('GitHub MCP: Set GITHUB_TOKEN environment variable with your GitHub personal access token');
94
+ const selected = new Set(servers);
95
+ return MCP_SERVERS
96
+ .filter(server => selected.has(server.key))
97
+ .map(server => server.instruction);
98
+ }
99
+ export async function configureExtensionMcpServers(projectDir, agentId, servers) {
100
+ const agent = getAgentConfig(agentId);
101
+ if (!agent.supportsMcp || !agent.settingsFile) {
102
+ return [];
103
+ }
104
+ const format = agentId === 'opencode' ? 'opencode' : 'standard';
105
+ const settingsPath = path.join(projectDir, agent.settingsFile);
106
+ await ensureDir(path.dirname(settingsPath));
107
+ const settings = await loadSettings(settingsPath);
108
+ const configured = [];
109
+ for (const { key, template } of servers) {
110
+ if (format === 'opencode') {
111
+ ensureNestedRecord(settings, 'mcp')[key] = toOpenCodeFormat(template);
112
+ }
113
+ else {
114
+ ensureNestedRecord(settings, 'mcpServers')[key] = template;
115
+ }
116
+ configured.push(key);
89
117
  }
90
- if (servers.includes('filesystem')) {
91
- instructions.push('Filesystem MCP: No additional configuration needed. Server provides file access tools.');
118
+ if (configured.length > 0) {
119
+ await writeJsonFile(settingsPath, settings);
92
120
  }
93
- if (servers.includes('postgres')) {
94
- instructions.push('Postgres MCP: Set DATABASE_URL environment variable with your PostgreSQL connection string');
121
+ return configured;
122
+ }
123
+ export async function removeExtensionMcpServers(projectDir, agentId, keys) {
124
+ const agent = getAgentConfig(agentId);
125
+ if (!agent.supportsMcp || !agent.settingsFile) {
126
+ return;
127
+ }
128
+ const format = agentId === 'opencode' ? 'opencode' : 'standard';
129
+ const settingsPath = path.join(projectDir, agent.settingsFile);
130
+ const settings = await loadSettings(settingsPath);
131
+ const containerKey = format === 'opencode' ? 'mcp' : 'mcpServers';
132
+ const container = settings[containerKey];
133
+ if (!isRecord(container))
134
+ return;
135
+ let changed = false;
136
+ for (const key of keys) {
137
+ if (key in container) {
138
+ delete container[key];
139
+ changed = true;
140
+ }
95
141
  }
96
- if (servers.includes('chromeDevtools')) {
97
- instructions.push('Chrome Devtools MCP: No additional configuration needed. Server provides your coding agent control and inspect a live Chrome browser.');
142
+ if (changed) {
143
+ await writeJsonFile(settingsPath, settings);
98
144
  }
99
- return instructions;
100
145
  }
101
146
  //# sourceMappingURL=mcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/core/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/core/mcp.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,21 @@ export interface TransformResult {
7
7
  export interface AgentTransformer {
8
8
  transform(skillName: string, content: string): TransformResult;
9
9
  postInstall?(projectDir: string): Promise<void>;
10
- getWelcomeMessage?(): string[];
10
+ getWelcomeMessage(): string[];
11
+ getInvocationHint?(): string;
12
+ cleanup?(projectDir: string, skillsDir: string): Promise<void>;
13
+ }
14
+ export interface AgentOnboarding {
15
+ welcomeMessage: string[];
16
+ invocationHint: string | null;
11
17
  }
12
18
  export declare const WORKFLOW_SKILLS: Set<string>;
13
19
  export declare function sanitizeName(name: string): string;
14
20
  export declare function extractFrontmatterName(content: string): string | null;
15
21
  export declare function replaceFrontmatterName(content: string, newName: string): string;
16
22
  export declare function simplifyFrontmatter(content: string): string;
23
+ export declare function rewriteInvocationPrefix(content: string, mapInvocation: (invocation: string) => string): string;
17
24
  export declare function getTransformer(agentId: string): AgentTransformer;
25
+ export declare function getAgentOnboarding(agentId: string): AgentOnboarding;
26
+ export declare function cleanupAgentSetup(agentId: string, projectDir: string, skillsDir: string): Promise<void>;
18
27
  //# sourceMappingURL=transformer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/core/transformer.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;IAC/D,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,iBAAiB,CAAC,IAAI,MAAM,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,aAS1B,CAAC;AAEH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW3D;AAOD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAGhE"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/core/transformer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;IAC/D,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,IAAI,MAAM,CAAC;IAC7B,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,eAAO,MAAM,eAAe,aAQ1B,CAAC;AAEH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW3D;AAID,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAC5C,MAAM,CAKR;AASD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAGhE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAMnE;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G"}
@@ -1,10 +1,11 @@
1
1
  import { DefaultTransformer } from './transformers/default.js';
2
2
  import { KiloCodeTransformer } from './transformers/kilocode.js';
3
3
  import { AntigravityTransformer } from './transformers/antigravity.js';
4
+ import { CodexTransformer } from './transformers/codex.js';
5
+ import { QwenTransformer } from './transformers/qwen.js';
4
6
  export const WORKFLOW_SKILLS = new Set([
5
7
  'aif',
6
8
  'aif-commit',
7
- 'aif-deploy',
8
9
  'aif-fix',
9
10
  'aif-implement',
10
11
  'aif-improve',
@@ -32,12 +33,29 @@ export function simplifyFrontmatter(content) {
32
33
  const newFrontmatter = `---\ndescription: ${descMatch[1].trim()}\n---`;
33
34
  return content.replace(/^---\n[\s\S]*?\n---/, newFrontmatter);
34
35
  }
36
+ const INVOCATION_PATTERN = /(^|[^A-Za-z0-9_-])\/(aif(?:-[a-z0-9-]+)?)/g;
37
+ export function rewriteInvocationPrefix(content, mapInvocation) {
38
+ return content.replace(INVOCATION_PATTERN, (_match, prefix, invocation) => `${prefix}${mapInvocation(invocation)}`);
39
+ }
35
40
  const registry = {
41
+ codex: () => new CodexTransformer(),
36
42
  kilocode: () => new KiloCodeTransformer(),
43
+ qwen: () => new QwenTransformer(),
37
44
  antigravity: () => new AntigravityTransformer(),
38
45
  };
39
46
  export function getTransformer(agentId) {
40
47
  const factory = registry[agentId];
41
48
  return factory ? factory() : new DefaultTransformer();
42
49
  }
50
+ export function getAgentOnboarding(agentId) {
51
+ const transformer = getTransformer(agentId);
52
+ return {
53
+ welcomeMessage: transformer.getWelcomeMessage(),
54
+ invocationHint: transformer.getInvocationHint?.() ?? null,
55
+ };
56
+ }
57
+ export async function cleanupAgentSetup(agentId, projectDir, skillsDir) {
58
+ const transformer = getTransformer(agentId);
59
+ await transformer.cleanup?.(projectDir, skillsDir);
60
+ }
43
61
  //# sourceMappingURL=transformer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/core/transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAevE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,eAAe;IACf,aAAa;IACb,UAAU;IACV,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,OAAe;IACrE,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAE9D,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC;IAE/B,MAAM,cAAc,GAAG,qBAAqB,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;IACvE,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,QAAQ,GAA2C;IACvD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;IACzC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;CAChD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/core/transformer.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { AgentTransformer, TransformResult } from '../transformer.js';
2
2
  export declare class AntigravityTransformer implements AgentTransformer {
3
3
  transform(skillName: string, content: string): TransformResult;
4
4
  postInstall(projectDir: string): Promise<void>;
5
+ cleanup(projectDir: string, skillsDir: string): Promise<void>;
5
6
  getWelcomeMessage(): string[];
6
7
  }
7
8
  //# sourceMappingURL=antigravity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/core/transformers/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK3E,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe;IAkBxD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgEpD,iBAAiB,IAAI,MAAM,EAAE;CAS9B"}
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/core/transformers/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK3E,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe;IAkBxD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D9C,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnE,iBAAiB,IAAI,MAAM,EAAE;CAS9B"}
@@ -1,5 +1,5 @@
1
1
  import { WORKFLOW_SKILLS, simplifyFrontmatter } from '../transformer.js';
2
- import { writeTextFile } from '../../utils/fs.js';
2
+ import { writeTextFile, fileExists, removeFile } from '../../utils/fs.js';
3
3
  import path from 'path';
4
4
  export class AntigravityTransformer {
5
5
  transform(skillName, content) {
@@ -57,14 +57,13 @@ Action-oriented skills that execute specific tasks:
57
57
  - \`aif-implement.md\` — Execute plans step by step
58
58
  - \`aif-commit.md\` — Create conventional commits
59
59
  - \`aif-review.md\` — Code review checklist
60
- - \`aif-deploy.md\` — Deployment automation
61
60
  - \`aif-ci.md\` — CI/CD pipeline setup
62
61
 
63
62
  ### Skills (.agent/skills/)
64
63
  Knowledge-based skills providing guidelines and patterns:
65
64
  - \`best-practices/\` — Code quality standards
66
65
  - \`architecture/\` — Architecture decision records
67
- - Stack-specific skills generated by \`/aif\`
66
+ - Project-relevant skills generated by \`/aif\`
68
67
 
69
68
  ### Rules (.agent/rules/)
70
69
  Always-active guardrails and conventions that apply to every interaction.
@@ -78,13 +77,29 @@ Always-active guardrails and conventions that apply to every interaction.
78
77
  await writeTextFile(path.join(rulesDir, 'aif-guardrails.md'), guardrailsContent);
79
78
  await writeTextFile(path.join(rulesDir, 'aif-conventions.md'), conventionsContent);
80
79
  }
80
+ async cleanup(projectDir, skillsDir) {
81
+ const configDir = path.dirname(skillsDir);
82
+ const workflowsDir = path.join(projectDir, configDir, 'workflows');
83
+ for (const workflow of WORKFLOW_SKILLS) {
84
+ const workflowFile = path.join(workflowsDir, `${workflow}.md`);
85
+ if (await fileExists(workflowFile)) {
86
+ await removeFile(workflowFile);
87
+ }
88
+ }
89
+ for (const ruleFile of ['aif-guardrails.md', 'aif-conventions.md']) {
90
+ const rulePath = path.join(projectDir, configDir, 'rules', ruleFile);
91
+ if (await fileExists(rulePath)) {
92
+ await removeFile(rulePath);
93
+ }
94
+ }
95
+ }
81
96
  getWelcomeMessage() {
82
97
  return [
83
98
  '1. Open Antigravity in this directory',
84
99
  '2. Action skills installed as workflows in .agent/workflows/ (flat files)',
85
100
  '3. Knowledge skills installed in .agent/skills/ (directories)',
86
101
  '4. Rules installed in .agent/rules/ (guardrails and conventions)',
87
- '5. Run /aif to analyze project and generate stack-specific skills',
102
+ '5. Run /aif to analyze project and generate project-relevant skills',
88
103
  ];
89
104
  }
90
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/core/transformers/antigravity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,OAAO,sBAAsB;IACjC,SAAS,CAAC,SAAiB,EAAE,OAAe;QAC1C,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,GAAG,SAAS,KAAK;gBAC7B,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;gBACrC,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;YACtB,OAAO;YACP,IAAI,EAAE,KAAK;SACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB7B,CAAC;QAEE,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B9B,CAAC;QAEE,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACjF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,uCAAuC;YACvC,2EAA2E;YAC3E,+DAA+D;YAC/D,kEAAkE;YAClE,mEAAmE;SACpE,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/core/transformers/antigravity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,OAAO,sBAAsB;IACjC,SAAS,CAAC,SAAiB,EAAE,OAAe;QAC1C,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,GAAG,SAAS,KAAK;gBAC7B,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;gBACrC,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;YACtB,OAAO;YACP,IAAI,EAAE,KAAK;SACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB7B,CAAC;QAEE,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAC;QAEE,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACjF,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,SAAiB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACnE,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;YAC/D,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrE,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,uCAAuC;YACvC,2EAA2E;YAC3E,+DAA+D;YAC/D,kEAAkE;YAClE,qEAAqE;SACtE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { AgentTransformer, TransformResult } from '../transformer.js';
2
+ export declare class CodexTransformer implements AgentTransformer {
3
+ transform(skillName: string, content: string): TransformResult;
4
+ getWelcomeMessage(): string[];
5
+ getInvocationHint(): string;
6
+ }
7
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/core/transformers/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAO3E,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe;IAS9D,iBAAiB,IAAI,MAAM,EAAE;IAO7B,iBAAiB,IAAI,MAAM;CAG5B"}