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.
- package/README.md +17 -4
- package/dist/cli/commands/extension.d.ts +4 -0
- package/dist/cli/commands/extension.d.ts.map +1 -0
- package/dist/cli/commands/extension.js +288 -0
- package/dist/cli/commands/extension.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +31 -35
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +86 -7
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +44 -41
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/index.js +48 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/wizard/prompts.d.ts +2 -1
- package/dist/cli/wizard/prompts.d.ts.map +1 -1
- package/dist/cli/wizard/prompts.js +13 -20
- package/dist/cli/wizard/prompts.js.map +1 -1
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +9 -0
- package/dist/core/agents.js.map +1 -1
- package/dist/core/config.d.ts +8 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +5 -8
- package/dist/core/config.js.map +1 -1
- package/dist/core/extension-ops.d.ts +32 -0
- package/dist/core/extension-ops.d.ts.map +1 -0
- package/dist/core/extension-ops.js +83 -0
- package/dist/core/extension-ops.js.map +1 -0
- package/dist/core/extensions.d.ts +53 -0
- package/dist/core/extensions.d.ts.map +1 -0
- package/dist/core/extensions.js +141 -0
- package/dist/core/extensions.js.map +1 -0
- package/dist/core/injections.d.ts +10 -0
- package/dist/core/injections.d.ts.map +1 -0
- package/dist/core/injections.js +154 -0
- package/dist/core/injections.js.map +1 -0
- package/dist/core/installer.d.ts +7 -3
- package/dist/core/installer.d.ts.map +1 -1
- package/dist/core/installer.js +68 -26
- package/dist/core/installer.js.map +1 -1
- package/dist/core/mcp.d.ts +12 -0
- package/dist/core/mcp.d.ts.map +1 -1
- package/dist/core/mcp.js +112 -67
- package/dist/core/mcp.js.map +1 -1
- package/dist/core/transformer.d.ts +10 -1
- package/dist/core/transformer.d.ts.map +1 -1
- package/dist/core/transformer.js +19 -1
- package/dist/core/transformer.js.map +1 -1
- package/dist/core/transformers/antigravity.d.ts +1 -0
- package/dist/core/transformers/antigravity.d.ts.map +1 -1
- package/dist/core/transformers/antigravity.js +19 -4
- package/dist/core/transformers/antigravity.js.map +1 -1
- package/dist/core/transformers/codex.d.ts +7 -0
- package/dist/core/transformers/codex.d.ts.map +1 -0
- package/dist/core/transformers/codex.js +24 -0
- package/dist/core/transformers/codex.js.map +1 -0
- package/dist/core/transformers/default.d.ts +1 -0
- package/dist/core/transformers/default.d.ts.map +1 -1
- package/dist/core/transformers/default.js +6 -0
- package/dist/core/transformers/default.js.map +1 -1
- package/dist/core/transformers/kilocode.js +1 -1
- package/dist/core/transformers/kilocode.js.map +1 -1
- package/dist/core/transformers/qwen.d.ts +7 -0
- package/dist/core/transformers/qwen.d.ts.map +1 -0
- package/dist/core/transformers/qwen.js +25 -0
- package/dist/core/transformers/qwen.js.map +1 -0
- package/dist/utils/fs.d.ts +0 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +1 -5
- package/dist/utils/fs.js.map +1 -1
- package/mcp/templates/playwright.json +4 -0
- package/package.json +16 -1
- package/skills/aif/SKILL.md +27 -52
- package/skills/aif-commit/SKILL.md +13 -1
- package/skills/aif-grounded/SKILL.md +90 -0
- package/skills/aif-implement/SKILL.md +39 -2
- package/skills/aif-implement/references/IMPLEMENTATION-GUIDE.md +16 -0
- package/skills/aif-loop/SKILL.md +2 -2
- package/dist/cli/wizard/detector.d.ts +0 -10
- package/dist/cli/wizard/detector.d.ts.map +0 -1
- package/dist/cli/wizard/detector.js +0 -231
- package/dist/cli/wizard/detector.js.map +0 -1
- package/skills/_templates/nextjs/nextjs-patterns/SKILL.md +0 -146
- package/skills/_templates/node-api/api-patterns/SKILL.md +0 -245
- package/skills/_templates/php/php-patterns/SKILL.md +0 -491
- package/skills/_templates/python/python-patterns/SKILL.md +0 -236
- package/skills/_templates/react/react-patterns/SKILL.md +0 -181
- package/skills/aif-deploy/SKILL.md +0 -138
package/README.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://www.npmjs.com/package/ai-factory">
|
|
3
|
+
<img src="https://img.shields.io/npm/v/ai-factory?label=version" alt="Version" />
|
|
4
|
+
</a>
|
|
5
|
+
<a href="https://aif.cutcode.dev/">
|
|
6
|
+
<img src="https://img.shields.io/badge/official%20site-aif.cutcode.dev-0ea5e9" alt="Official Site" />
|
|
7
|
+
</a>
|
|
8
|
+
<a href="https://github.com/lee-to/ai-factory/actions/workflows/ci.yml">
|
|
9
|
+
<img src="https://img.shields.io/github/actions/workflow/status/lee-to/ai-factory/ci.yml?branch=2.x&label=tests" alt="Tests" />
|
|
10
|
+
</a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
1
13
|

|
|
2
14
|
|
|
3
15
|
# AI Factory
|
|
@@ -16,12 +28,12 @@ ai-factory init
|
|
|
16
28
|
|
|
17
29
|
## Why AI Factory?
|
|
18
30
|
|
|
19
|
-
- **Zero configuration** —
|
|
31
|
+
- **Zero configuration** — installs relevant skills, configures integrations
|
|
20
32
|
- **Best practices built-in** — logging, commits, code review, all following industry standards
|
|
21
33
|
- **Spec-driven development** — AI follows plans, not random exploration. Predictable, resumable, reviewable
|
|
22
34
|
- **Community skills** — leverage [skills.sh](https://skills.sh) ecosystem or generate custom skills
|
|
23
|
-
- **
|
|
24
|
-
- **Multi-agent support** — Claude Code, Cursor, Windsurf, Roo Code, Kilo Code, Antigravity, OpenCode, Warp, Zencoder, Codex CLI, GitHub Copilot, Gemini CLI, Junie, or [any agent](docs/getting-started.md#supported-agents)
|
|
35
|
+
- **Stack-agnostic** — works with any language, framework, or platform
|
|
36
|
+
- **Multi-agent support** — Claude Code, Cursor, Windsurf, Roo Code, Kilo Code, Antigravity, OpenCode, Warp, Zencoder, Codex CLI, GitHub Copilot, Gemini CLI, Junie, Qwen Code, or [any agent](docs/getting-started.md#supported-agents)
|
|
25
37
|
|
|
26
38
|
---
|
|
27
39
|
|
|
@@ -48,7 +60,6 @@ ai-factory init
|
|
|
48
60
|
|
|
49
61
|
This will:
|
|
50
62
|
- Ask which AI agent you use
|
|
51
|
-
- Detect your project stack
|
|
52
63
|
- Install relevant skills
|
|
53
64
|
- Configure MCP servers (for supported agents)
|
|
54
65
|
|
|
@@ -132,6 +143,7 @@ AI Factory can generate and maintain your project docs with a single command:
|
|
|
132
143
|
| [Core Skills](docs/skills.md) | All slash commands — feature, task, fix, implement, evolve, docs, and more |
|
|
133
144
|
| [Plan Files](docs/plan-files.md) | Plan files, self-improvement patches, skill acquisition |
|
|
134
145
|
| [Security](docs/security.md) | Two-level security scanning for external skills |
|
|
146
|
+
| [Extensions](docs/extensions.md) | Writing and installing extensions — commands, injections, MCP, agents |
|
|
135
147
|
| [Configuration](docs/configuration.md) | `.ai-factory.json`, MCP servers, project structure, best practices |
|
|
136
148
|
|
|
137
149
|
---
|
|
@@ -140,6 +152,7 @@ AI Factory can generate and maintain your project docs with a single command:
|
|
|
140
152
|
|
|
141
153
|
## Links
|
|
142
154
|
|
|
155
|
+
- [Official Website](https://aif.cutcode.dev) - AI Factory website
|
|
143
156
|
- [skills.sh](https://skills.sh) - Skill marketplace
|
|
144
157
|
- [Agent Skills Spec](https://agentskills.io) - Skill specification
|
|
145
158
|
- [Claude Code](https://claude.ai/code) - Anthropic's AI coding agent
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/extension.ts"],"names":[],"mappings":"AA2BA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKvE;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ExE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC1D"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { loadConfig, saveConfig } from '../../core/config.js';
|
|
4
|
+
import { resolveExtension, commitExtensionInstall, removeExtensionFiles, getExtensionsDir, loadExtensionManifest, } from '../../core/extensions.js';
|
|
5
|
+
import { applySingleExtensionInjections, } from '../../core/injections.js';
|
|
6
|
+
import { configureExtensionMcpServers, removeExtensionMcpServers } from '../../core/mcp.js';
|
|
7
|
+
import { installExtensionSkills } from '../../core/installer.js';
|
|
8
|
+
import { readJsonFile } from '../../utils/fs.js';
|
|
9
|
+
import { getAgentConfig } from '../../core/agents.js';
|
|
10
|
+
import { removeSkillsForAllAgents, installExtensionSkillsForAllAgents, collectReplacedSkills, restoreBaseSkills, stripInjectionsForAllAgents, removeCustomSkillsForAllAgents, } from '../../core/extension-ops.js';
|
|
11
|
+
export async function extensionAddCommand(source) {
|
|
12
|
+
const projectDir = process.cwd();
|
|
13
|
+
console.log(chalk.bold.blue('\n🏭 AI Factory - Install Extension\n'));
|
|
14
|
+
const config = await loadConfig(projectDir);
|
|
15
|
+
if (!config) {
|
|
16
|
+
console.log(chalk.red('Error: No .ai-factory.json found.'));
|
|
17
|
+
console.log(chalk.dim('Run "ai-factory init" to set up your project first.'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
console.log(chalk.dim(`Installing from: ${source}\n`));
|
|
21
|
+
try {
|
|
22
|
+
const extensions = config.extensions ?? [];
|
|
23
|
+
// Phase 1: Resolve source — download/clone and validate manifest WITHOUT writing to project
|
|
24
|
+
const resolved = await resolveExtension(projectDir, source);
|
|
25
|
+
const manifest = resolved.manifest;
|
|
26
|
+
try {
|
|
27
|
+
const existIdx = extensions.findIndex(e => e.name === manifest.name);
|
|
28
|
+
const oldRecord = existIdx >= 0 ? { ...extensions[existIdx] } : null;
|
|
29
|
+
// Load old manifest from installed dir (still intact — we haven't overwritten yet)
|
|
30
|
+
const oldManifest = existIdx >= 0
|
|
31
|
+
? await loadExtensionManifest(path.join(getExtensionsDir(projectDir), manifest.name))
|
|
32
|
+
: null;
|
|
33
|
+
// Block conflicting replacements BEFORE copying any files
|
|
34
|
+
if (manifest.replaces) {
|
|
35
|
+
for (const [, baseSkillName] of Object.entries(manifest.replaces)) {
|
|
36
|
+
for (const other of extensions) {
|
|
37
|
+
if (other.name === manifest.name)
|
|
38
|
+
continue;
|
|
39
|
+
if (other.replacedSkills?.includes(baseSkillName)) {
|
|
40
|
+
throw new Error(`Conflict: skill "${baseSkillName}" is already replaced by extension "${other.name}". Remove it first.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Phase 2: Commit — copy resolved files to .ai-factory/extensions/<name>/
|
|
46
|
+
await commitExtensionInstall(projectDir, resolved);
|
|
47
|
+
// Clean up old state on re-install
|
|
48
|
+
if (existIdx >= 0) {
|
|
49
|
+
await stripInjectionsForAllAgents(projectDir, config.agents, manifest.name);
|
|
50
|
+
// Remove old replacement skills (installed under base names)
|
|
51
|
+
if (oldRecord?.replacedSkills?.length) {
|
|
52
|
+
await removeSkillsForAllAgents(projectDir, config.agents, oldRecord.replacedSkills);
|
|
53
|
+
await restoreBaseSkills(projectDir, config.agents, oldRecord.replacedSkills, new Set());
|
|
54
|
+
}
|
|
55
|
+
// Remove old extension custom skills using the OLD manifest (not the new one)
|
|
56
|
+
if (oldManifest) {
|
|
57
|
+
await removeCustomSkillsForAllAgents(projectDir, config.agents, oldManifest);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.green(`✓ Extension "${manifest.name}" v${manifest.version} installed`));
|
|
61
|
+
const extensionDir = path.join(getExtensionsDir(projectDir), manifest.name);
|
|
62
|
+
// Install replacement skills — only track successfully installed ones
|
|
63
|
+
const replacedSkills = [];
|
|
64
|
+
const replacesPaths = new Set();
|
|
65
|
+
if (manifest.replaces && Object.keys(manifest.replaces).length > 0) {
|
|
66
|
+
const nameOverrides = { ...manifest.replaces };
|
|
67
|
+
const replacePaths = Object.keys(manifest.replaces);
|
|
68
|
+
// Track per-agent success: only count as replaced if installed on ALL agents
|
|
69
|
+
const perAgentResults = new Map(); // baseName → success count
|
|
70
|
+
for (const agent of config.agents) {
|
|
71
|
+
const installed = await installExtensionSkills(projectDir, agent, extensionDir, replacePaths, nameOverrides);
|
|
72
|
+
for (const name of installed) {
|
|
73
|
+
perAgentResults.set(name, (perAgentResults.get(name) ?? 0) + 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const agentCount = config.agents.length;
|
|
77
|
+
for (const [extSkillPath, baseSkillName] of Object.entries(manifest.replaces)) {
|
|
78
|
+
replacesPaths.add(extSkillPath);
|
|
79
|
+
const successCount = perAgentResults.get(baseSkillName) ?? 0;
|
|
80
|
+
if (successCount === agentCount) {
|
|
81
|
+
replacedSkills.push(baseSkillName);
|
|
82
|
+
console.log(chalk.green(`✓ Replaced skill "${baseSkillName}" with "${path.basename(extSkillPath)}"`));
|
|
83
|
+
}
|
|
84
|
+
else if (successCount > 0) {
|
|
85
|
+
// Rollback: remove the replacement from agents where it did install, restore base skill
|
|
86
|
+
await removeSkillsForAllAgents(projectDir, config.agents, [baseSkillName]);
|
|
87
|
+
await restoreBaseSkills(projectDir, config.agents, [baseSkillName], new Set());
|
|
88
|
+
console.log(chalk.yellow(`⚠ Replacement "${baseSkillName}" only installed on ${successCount}/${agentCount} agents — rolled back, base skill restored`));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log(chalk.yellow(`⚠ Failed to replace skill "${baseSkillName}" — base skill preserved`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Install extension custom skills (excluding replacements)
|
|
96
|
+
if (manifest.skills?.length) {
|
|
97
|
+
const nonReplacementSkills = manifest.skills.filter(s => !replacesPaths.has(s));
|
|
98
|
+
if (nonReplacementSkills.length > 0) {
|
|
99
|
+
const results = await installExtensionSkillsForAllAgents(projectDir, config.agents, extensionDir, nonReplacementSkills);
|
|
100
|
+
for (const [agentId, installed] of results) {
|
|
101
|
+
if (installed.length > 0) {
|
|
102
|
+
console.log(chalk.green(`✓ Skills installed for ${agentId}: ${installed.join(', ')}`));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Save config AFTER all installations succeed
|
|
108
|
+
const record = { name: manifest.name, source, version: manifest.version, replacedSkills: replacedSkills.length > 0 ? replacedSkills : undefined };
|
|
109
|
+
if (existIdx >= 0) {
|
|
110
|
+
extensions[existIdx] = record;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
extensions.push(record);
|
|
114
|
+
}
|
|
115
|
+
config.extensions = extensions;
|
|
116
|
+
await saveConfig(projectDir, config);
|
|
117
|
+
// Apply injections for all agents
|
|
118
|
+
if (manifest.injections?.length) {
|
|
119
|
+
let totalInjections = 0;
|
|
120
|
+
for (const agent of config.agents) {
|
|
121
|
+
const count = await applySingleExtensionInjections(projectDir, agent, extensionDir, manifest);
|
|
122
|
+
totalInjections += count;
|
|
123
|
+
}
|
|
124
|
+
if (totalInjections > 0) {
|
|
125
|
+
console.log(chalk.green(`✓ Applied ${totalInjections} injection(s)`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Configure MCP servers for all agents that support it
|
|
129
|
+
if (manifest.mcpServers?.length) {
|
|
130
|
+
const mcpConfigured = await applyExtensionMcp(projectDir, config.agents.map(a => a.id), extensionDir, manifest);
|
|
131
|
+
if (mcpConfigured.length > 0) {
|
|
132
|
+
console.log(chalk.green(`✓ MCP servers configured: ${mcpConfigured.join(', ')}`));
|
|
133
|
+
for (const srv of manifest.mcpServers) {
|
|
134
|
+
if (srv.instruction) {
|
|
135
|
+
console.log(chalk.dim(` ${srv.instruction}`));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (manifest.agents?.length) {
|
|
141
|
+
console.log(chalk.dim(` Agents provided: ${manifest.agents.map(a => a.displayName).join(', ')}`));
|
|
142
|
+
}
|
|
143
|
+
if (manifest.commands?.length) {
|
|
144
|
+
console.log(chalk.dim(` Commands provided: ${manifest.commands.map(c => c.name).join(', ')}`));
|
|
145
|
+
}
|
|
146
|
+
if (manifest.skills?.length) {
|
|
147
|
+
console.log(chalk.dim(` Skills provided: ${manifest.skills.join(', ')}`));
|
|
148
|
+
}
|
|
149
|
+
console.log('');
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
await resolved.cleanup();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.log(chalk.red(`Error installing extension: ${error.message}`));
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export async function extensionRemoveCommand(name) {
|
|
161
|
+
const projectDir = process.cwd();
|
|
162
|
+
console.log(chalk.bold.blue('\n🏭 AI Factory - Remove Extension\n'));
|
|
163
|
+
const config = await loadConfig(projectDir);
|
|
164
|
+
if (!config) {
|
|
165
|
+
console.log(chalk.red('Error: No .ai-factory.json found.'));
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const extensions = config.extensions ?? [];
|
|
169
|
+
const index = extensions.findIndex(e => e.name === name);
|
|
170
|
+
if (index < 0) {
|
|
171
|
+
console.log(chalk.red(`Extension "${name}" is not installed.`));
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const extensionDir = path.join(getExtensionsDir(projectDir), name);
|
|
176
|
+
const manifest = await loadExtensionManifest(extensionDir);
|
|
177
|
+
// Strip injections before removing files
|
|
178
|
+
await stripInjectionsForAllAgents(projectDir, config.agents, name, manifest);
|
|
179
|
+
// Remove replacement skills (installed under base names)
|
|
180
|
+
const extRecord = extensions[index];
|
|
181
|
+
if (extRecord.replacedSkills?.length) {
|
|
182
|
+
const removed = await removeSkillsForAllAgents(projectDir, config.agents, extRecord.replacedSkills);
|
|
183
|
+
for (const [agentId, skills] of removed) {
|
|
184
|
+
if (skills.length > 0) {
|
|
185
|
+
console.log(chalk.green(`✓ Replacement skills removed for ${agentId}: ${skills.join(', ')}`));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Remove extension custom skills
|
|
190
|
+
if (manifest) {
|
|
191
|
+
const removed = await removeCustomSkillsForAllAgents(projectDir, config.agents, manifest);
|
|
192
|
+
for (const [agentId, skills] of removed) {
|
|
193
|
+
if (skills.length > 0) {
|
|
194
|
+
console.log(chalk.green(`✓ Skills removed for ${agentId}: ${skills.join(', ')}`));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Restore base skills if no other extension replaces them
|
|
199
|
+
if (extRecord.replacedSkills?.length) {
|
|
200
|
+
const stillReplaced = collectReplacedSkills(extensions, name);
|
|
201
|
+
const restored = await restoreBaseSkills(projectDir, config.agents, extRecord.replacedSkills, stillReplaced);
|
|
202
|
+
if (restored.length > 0) {
|
|
203
|
+
console.log(chalk.green(`✓ Restored base skills: ${restored.join(', ')}`));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Remove MCP servers
|
|
207
|
+
if (manifest?.mcpServers?.length) {
|
|
208
|
+
const mcpKeys = manifest.mcpServers.map(s => s.key);
|
|
209
|
+
for (const agent of config.agents) {
|
|
210
|
+
await removeExtensionMcpServers(projectDir, agent.id, mcpKeys);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
await removeExtensionFiles(projectDir, name);
|
|
214
|
+
extensions.splice(index, 1);
|
|
215
|
+
config.extensions = extensions;
|
|
216
|
+
await saveConfig(projectDir, config);
|
|
217
|
+
console.log(chalk.green(`✓ Extension "${name}" removed`));
|
|
218
|
+
console.log('');
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
console.log(chalk.red(`Error removing extension: ${error.message}`));
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export async function extensionListCommand() {
|
|
226
|
+
const projectDir = process.cwd();
|
|
227
|
+
const config = await loadConfig(projectDir);
|
|
228
|
+
if (!config) {
|
|
229
|
+
console.log(chalk.red('Error: No .ai-factory.json found.'));
|
|
230
|
+
process.exit(1);
|
|
231
|
+
}
|
|
232
|
+
const extensions = config.extensions ?? [];
|
|
233
|
+
if (extensions.length === 0) {
|
|
234
|
+
console.log(chalk.dim('\nNo extensions installed.\n'));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
console.log(chalk.bold('\nInstalled extensions:\n'));
|
|
238
|
+
for (const ext of extensions) {
|
|
239
|
+
console.log(` ${chalk.bold(ext.name)} ${chalk.dim(`v${ext.version}`)}`);
|
|
240
|
+
console.log(chalk.dim(` Source: ${ext.source}`));
|
|
241
|
+
const extensionDir = path.join(getExtensionsDir(projectDir), ext.name);
|
|
242
|
+
const manifest = await loadExtensionManifest(extensionDir);
|
|
243
|
+
if (manifest) {
|
|
244
|
+
if (manifest.description) {
|
|
245
|
+
console.log(chalk.dim(` ${manifest.description}`));
|
|
246
|
+
}
|
|
247
|
+
const features = [];
|
|
248
|
+
if (manifest.commands?.length)
|
|
249
|
+
features.push(`${manifest.commands.length} command(s)`);
|
|
250
|
+
if (manifest.agents?.length)
|
|
251
|
+
features.push(`${manifest.agents.length} agent(s)`);
|
|
252
|
+
if (manifest.injections?.length)
|
|
253
|
+
features.push(`${manifest.injections.length} injection(s)`);
|
|
254
|
+
if (manifest.skills?.length)
|
|
255
|
+
features.push(`${manifest.skills.length} skill(s)`);
|
|
256
|
+
if (manifest.mcpServers?.length)
|
|
257
|
+
features.push(`${manifest.mcpServers.length} MCP server(s)`);
|
|
258
|
+
if (features.length > 0) {
|
|
259
|
+
console.log(chalk.dim(` Provides: ${features.join(', ')}`));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
console.log('');
|
|
264
|
+
}
|
|
265
|
+
async function applyExtensionMcp(projectDir, agentIds, extensionDir, manifest) {
|
|
266
|
+
if (!manifest.mcpServers?.length)
|
|
267
|
+
return [];
|
|
268
|
+
const allConfigured = [];
|
|
269
|
+
for (const srv of manifest.mcpServers) {
|
|
270
|
+
const templatePath = path.join(extensionDir, srv.template);
|
|
271
|
+
const template = await readJsonFile(templatePath);
|
|
272
|
+
if (!template)
|
|
273
|
+
continue;
|
|
274
|
+
for (const agentId of agentIds) {
|
|
275
|
+
const agentConfig = getAgentConfig(agentId);
|
|
276
|
+
if (!agentConfig.supportsMcp)
|
|
277
|
+
continue;
|
|
278
|
+
const configured = await configureExtensionMcpServers(projectDir, agentId, [
|
|
279
|
+
{ key: srv.key, template },
|
|
280
|
+
]);
|
|
281
|
+
if (configured.length > 0 && !allConfigured.includes(srv.key)) {
|
|
282
|
+
allConfigured.push(srv.key);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return allConfigured;
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/cli/commands/extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA4IjD"}
|
|
@@ -5,29 +5,12 @@ import { installSkills } from '../../core/installer.js';
|
|
|
5
5
|
import { saveConfig, configExists, loadConfig, getCurrentVersion } from '../../core/config.js';
|
|
6
6
|
import { configureMcp, getMcpInstructions } from '../../core/mcp.js';
|
|
7
7
|
import { getAgentConfig } from '../../core/agents.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { cleanupAgentSetup, getAgentOnboarding } from '../../core/transformer.js';
|
|
9
|
+
import { removeDirectory } from '../../utils/fs.js';
|
|
10
|
+
import { applyExtensionInjections } from '../../core/injections.js';
|
|
11
11
|
async function removeAgentSetup(projectDir, agent) {
|
|
12
|
-
const agentConfig = getAgentConfig(agent.id);
|
|
13
12
|
await removeDirectory(path.join(projectDir, agent.skillsDir));
|
|
14
|
-
|
|
15
|
-
const workflowsDir = path.join(projectDir, agentConfig.configDir, 'workflows');
|
|
16
|
-
for (const workflow of WORKFLOW_SKILLS) {
|
|
17
|
-
const workflowFile = path.join(workflowsDir, `${workflow}.md`);
|
|
18
|
-
if (await fileExists(workflowFile)) {
|
|
19
|
-
await removeFile(workflowFile);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
for (const ruleFile of ['aif-guardrails.md', 'aif-conventions.md']) {
|
|
23
|
-
const rulePath = path.join(projectDir, agentConfig.configDir, 'rules', ruleFile);
|
|
24
|
-
if (await fileExists(rulePath)) {
|
|
25
|
-
await removeFile(rulePath);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Keep agent settings file intact: it may contain user-managed configuration
|
|
30
|
-
// unrelated to AI Factory.
|
|
13
|
+
await cleanupAgentSetup(agent.id, projectDir, agent.skillsDir);
|
|
31
14
|
}
|
|
32
15
|
export async function initCommand() {
|
|
33
16
|
const projectDir = process.cwd();
|
|
@@ -40,7 +23,7 @@ export async function initCommand() {
|
|
|
40
23
|
}
|
|
41
24
|
try {
|
|
42
25
|
const existingAgentIds = existingConfig?.agents.map(agent => agent.id) ?? [];
|
|
43
|
-
const answers = await runWizard(
|
|
26
|
+
const answers = await runWizard(existingAgentIds);
|
|
44
27
|
const selectedAgentIds = new Set(answers.agents.map(agent => agent.id));
|
|
45
28
|
const removedAgents = (existingConfig?.agents ?? []).filter(agent => !selectedAgentIds.has(agent.id));
|
|
46
29
|
if (removedAgents.length > 0) {
|
|
@@ -59,7 +42,6 @@ export async function initCommand() {
|
|
|
59
42
|
projectDir,
|
|
60
43
|
skillsDir: agentConfig.skillsDir,
|
|
61
44
|
skills: answers.selectedSkills,
|
|
62
|
-
stack: null, // Stack-specific skills generated by /aif in Claude
|
|
63
45
|
agentId: agentSelection.id,
|
|
64
46
|
});
|
|
65
47
|
const configuredMcp = await configureMcp(projectDir, {
|
|
@@ -67,6 +49,7 @@ export async function initCommand() {
|
|
|
67
49
|
filesystem: agentSelection.mcpFilesystem,
|
|
68
50
|
postgres: agentSelection.mcpPostgres,
|
|
69
51
|
chromeDevtools: agentSelection.mcpChromeDevtools,
|
|
52
|
+
playwright: agentSelection.mcpPlaywright,
|
|
70
53
|
}, agentSelection.id);
|
|
71
54
|
if (configuredMcp.length > 0) {
|
|
72
55
|
mcpSummary[agentSelection.id] = configuredMcp;
|
|
@@ -80,13 +63,26 @@ export async function initCommand() {
|
|
|
80
63
|
filesystem: agentSelection.mcpFilesystem,
|
|
81
64
|
postgres: agentSelection.mcpPostgres,
|
|
82
65
|
chromeDevtools: agentSelection.mcpChromeDevtools,
|
|
66
|
+
playwright: agentSelection.mcpPlaywright,
|
|
83
67
|
},
|
|
84
68
|
});
|
|
85
69
|
}
|
|
70
|
+
const existingExtensions = existingConfig?.extensions ?? [];
|
|
86
71
|
await saveConfig(projectDir, {
|
|
87
72
|
version: getCurrentVersion(),
|
|
88
73
|
agents: installedAgents,
|
|
74
|
+
extensions: existingExtensions,
|
|
89
75
|
});
|
|
76
|
+
// Re-apply extension injections after skill installation
|
|
77
|
+
if (existingExtensions.length > 0) {
|
|
78
|
+
let totalInjections = 0;
|
|
79
|
+
for (const agent of installedAgents) {
|
|
80
|
+
totalInjections += await applyExtensionInjections(projectDir, agent, existingExtensions);
|
|
81
|
+
}
|
|
82
|
+
if (totalInjections > 0) {
|
|
83
|
+
console.log(chalk.green(`✓ Re-applied ${totalInjections} extension injection(s)`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
90
86
|
console.log(chalk.green('✓ Configuration saved to .ai-factory.json'));
|
|
91
87
|
console.log(chalk.bold.green('\n✅ Setup complete!\n'));
|
|
92
88
|
for (const agent of installedAgents) {
|
|
@@ -105,22 +101,22 @@ export async function initCommand() {
|
|
|
105
101
|
console.log('');
|
|
106
102
|
}
|
|
107
103
|
console.log(chalk.bold('\nNext steps:'));
|
|
108
|
-
|
|
104
|
+
const onboardingByAgent = installedAgents.map(agent => ({
|
|
105
|
+
agent,
|
|
106
|
+
onboarding: getAgentOnboarding(agent.id),
|
|
107
|
+
}));
|
|
108
|
+
for (const [index, { agent, onboarding }] of onboardingByAgent.entries()) {
|
|
109
109
|
const agentConfig = getAgentConfig(agent.id);
|
|
110
|
-
const transformer = getTransformer(agent.id);
|
|
111
|
-
const welcomeMessage = transformer.getWelcomeMessage?.();
|
|
112
110
|
console.log(chalk.dim(` ${index + 1}. ${agentConfig.displayName}`));
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
console.log(chalk.dim(` ${line}`));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
console.log(chalk.dim(' Open the agent in this directory'));
|
|
120
|
-
console.log(chalk.dim(' Run /aif to analyze project and generate stack-specific skills'));
|
|
111
|
+
for (const line of onboarding.welcomeMessage) {
|
|
112
|
+
console.log(chalk.dim(` ${line}`));
|
|
121
113
|
}
|
|
122
114
|
}
|
|
123
|
-
|
|
115
|
+
const invocationHints = onboardingByAgent
|
|
116
|
+
.map(({ onboarding }) => onboarding.invocationHint)
|
|
117
|
+
.filter(Boolean)
|
|
118
|
+
.join('; ');
|
|
119
|
+
console.log(chalk.dim(` ${installedAgents.length + 1}. Use /aif-plan and /aif-commit for daily workflow${invocationHints ? ` (${invocationHints})` : ''}`));
|
|
124
120
|
console.log('');
|
|
125
121
|
}
|
|
126
122
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAA0B,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAYA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA0JnD"}
|