ai-factory 1.9.0 → 2.0.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 (160) hide show
  1. package/README.md +27 -13
  2. package/dist/cli/commands/init.d.ts.map +1 -1
  3. package/dist/cli/commands/init.js +100 -51
  4. package/dist/cli/commands/init.js.map +1 -1
  5. package/dist/cli/commands/update.d.ts.map +1 -1
  6. package/dist/cli/commands/update.js +32 -21
  7. package/dist/cli/commands/update.js.map +1 -1
  8. package/dist/cli/commands/upgrade.d.ts +2 -0
  9. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  10. package/dist/cli/commands/upgrade.js +179 -0
  11. package/dist/cli/commands/upgrade.js.map +1 -0
  12. package/dist/cli/index.js +5 -0
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/cli/wizard/detector.d.ts.map +1 -1
  15. package/dist/cli/wizard/detector.js +10 -11
  16. package/dist/cli/wizard/detector.js.map +1 -1
  17. package/dist/cli/wizard/prompts.d.ts +7 -5
  18. package/dist/cli/wizard/prompts.d.ts.map +1 -1
  19. package/dist/cli/wizard/prompts.js +66 -63
  20. package/dist/cli/wizard/prompts.js.map +1 -1
  21. package/dist/core/agents.d.ts +1 -0
  22. package/dist/core/agents.d.ts.map +1 -1
  23. package/dist/core/agents.js +15 -1
  24. package/dist/core/agents.js.map +1 -1
  25. package/dist/core/config.d.ts +14 -9
  26. package/dist/core/config.d.ts.map +1 -1
  27. package/dist/core/config.js +48 -10
  28. package/dist/core/config.js.map +1 -1
  29. package/dist/core/installer.d.ts +2 -2
  30. package/dist/core/installer.d.ts.map +1 -1
  31. package/dist/core/installer.js +4 -4
  32. package/dist/core/installer.js.map +1 -1
  33. package/dist/core/template.d.ts +1 -0
  34. package/dist/core/template.d.ts.map +1 -1
  35. package/dist/core/template.js +2 -1
  36. package/dist/core/template.js.map +1 -1
  37. package/dist/core/transformer.d.ts.map +1 -1
  38. package/dist/core/transformer.js +8 -11
  39. package/dist/core/transformer.js.map +1 -1
  40. package/dist/core/transformers/antigravity.js +19 -19
  41. package/dist/core/transformers/antigravity.js.map +1 -1
  42. package/dist/core/transformers/kilocode.d.ts +3 -2
  43. package/dist/core/transformers/kilocode.d.ts.map +1 -1
  44. package/dist/core/transformers/kilocode.js +14 -3
  45. package/dist/core/transformers/kilocode.js.map +1 -1
  46. package/dist/utils/fs.d.ts +2 -0
  47. package/dist/utils/fs.d.ts.map +1 -1
  48. package/dist/utils/fs.js +6 -0
  49. package/dist/utils/fs.js.map +1 -1
  50. package/package.json +2 -1
  51. package/skills/{ai-factory → aif}/SKILL.md +55 -30
  52. package/skills/aif-architecture/SKILL.md +338 -0
  53. package/skills/{best-practices → aif-best-practices}/SKILL.md +11 -8
  54. package/skills/{build-automation → aif-build-automation}/SKILL.md +5 -166
  55. package/skills/aif-build-automation/references/DOC-INTEGRATION.md +103 -0
  56. package/skills/aif-build-automation/references/SUMMARY-FORMAT.md +69 -0
  57. package/skills/{ci → aif-ci}/SKILL.md +15 -352
  58. package/skills/aif-ci/references/AUDIT-REPORT.md +79 -0
  59. package/skills/aif-ci/references/GITLAB-PATTERNS.md +65 -0
  60. package/skills/aif-ci/references/SERVICE-CONTAINERS.md +37 -0
  61. package/skills/aif-ci/references/TOOL-COMMANDS.md +119 -0
  62. package/skills/{commit → aif-commit}/SKILL.md +2 -2
  63. package/skills/{deploy → aif-deploy}/SKILL.md +6 -6
  64. package/skills/{dockerize → aif-dockerize}/SKILL.md +31 -431
  65. package/skills/aif-dockerize/references/AUDIT-GUIDE.md +125 -0
  66. package/skills/aif-dockerize/references/COMPOSE-PATTERNS.md +31 -0
  67. package/skills/aif-dockerize/references/DEPLOY-SCRIPTS.md +60 -0
  68. package/skills/aif-dockerize/references/FILE-ORGANIZATION.md +106 -0
  69. package/skills/aif-dockerize/references/SUMMARY-FORMAT.md +54 -0
  70. package/skills/{docs → aif-docs}/SKILL.md +9 -222
  71. package/skills/aif-docs/references/REVIEW-CHECKLISTS.md +95 -0
  72. package/skills/aif-docs/templates/html-template.html +103 -0
  73. package/skills/{evolve → aif-evolve}/SKILL.md +28 -29
  74. package/skills/{fix → aif-fix}/SKILL.md +43 -17
  75. package/skills/{implement → aif-implement}/SKILL.md +65 -160
  76. package/skills/aif-implement/references/IMPLEMENTATION-GUIDE.md +74 -0
  77. package/skills/aif-implement/references/LOGGING-GUIDE.md +65 -0
  78. package/skills/{improve → aif-improve}/SKILL.md +19 -19
  79. package/skills/aif-loop/SKILL.md +464 -0
  80. package/skills/aif-loop/references/CRITERIA-TEMPLATES.md +86 -0
  81. package/skills/aif-loop/references/PHASE-CONTRACTS.md +178 -0
  82. package/skills/aif-loop/references/RULE-SCHEMA.md +111 -0
  83. package/skills/aif-plan/SKILL.md +480 -0
  84. package/skills/aif-plan/references/EXAMPLES.md +104 -0
  85. package/skills/aif-plan/references/TASK-FORMAT.md +70 -0
  86. package/skills/{review → aif-review}/SKILL.md +4 -4
  87. package/skills/aif-roadmap/SKILL.md +273 -0
  88. package/skills/aif-rules/SKILL.md +105 -0
  89. package/skills/aif-security-checklist/SKILL.md +463 -0
  90. package/skills/aif-security-checklist/references/AUTH-PATTERNS.md +67 -0
  91. package/skills/aif-security-checklist/references/PROMPT-INJECTION.md +87 -0
  92. package/skills/aif-security-checklist/references/RACE-CONDITIONS.md +139 -0
  93. package/skills/{security-checklist → aif-security-checklist}/scripts/audit.sh +1 -1
  94. package/skills/{skill-generator → aif-skill-generator}/SKILL.md +26 -68
  95. package/skills/{skill-generator → aif-skill-generator}/references/LEARN-MODE.md +9 -9
  96. package/skills/aif-skill-generator/references/SECURITY-SCANNING.md +61 -0
  97. package/skills/{skill-generator → aif-skill-generator}/scripts/search-skills.py +1 -0
  98. package/skills/{skill-generator → aif-skill-generator}/scripts/validate.sh +16 -32
  99. package/skills/{verify → aif-verify}/SKILL.md +37 -25
  100. package/dist/core/transformers/spec-compliant.d.ts +0 -12
  101. package/dist/core/transformers/spec-compliant.d.ts.map +0 -1
  102. package/dist/core/transformers/spec-compliant.js +0 -22
  103. package/dist/core/transformers/spec-compliant.js.map +0 -1
  104. package/skills/architecture/SKILL.md +0 -364
  105. package/skills/feature/SKILL.md +0 -429
  106. package/skills/security-checklist/SKILL.md +0 -846
  107. package/skills/task/SKILL.md +0 -313
  108. /package/skills/{build-automation → aif-build-automation}/references/BEST-PRACTICES.md +0 -0
  109. /package/skills/{build-automation → aif-build-automation}/templates/justfile-go +0 -0
  110. /package/skills/{build-automation → aif-build-automation}/templates/justfile-node +0 -0
  111. /package/skills/{build-automation → aif-build-automation}/templates/justfile-php +0 -0
  112. /package/skills/{build-automation → aif-build-automation}/templates/justfile-python +0 -0
  113. /package/skills/{build-automation → aif-build-automation}/templates/magefile-basic.go +0 -0
  114. /package/skills/{build-automation → aif-build-automation}/templates/magefile-full.go +0 -0
  115. /package/skills/{build-automation → aif-build-automation}/templates/makefile-go.mk +0 -0
  116. /package/skills/{build-automation → aif-build-automation}/templates/makefile-node.mk +0 -0
  117. /package/skills/{build-automation → aif-build-automation}/templates/makefile-php.mk +0 -0
  118. /package/skills/{build-automation → aif-build-automation}/templates/makefile-python.mk +0 -0
  119. /package/skills/{build-automation → aif-build-automation}/templates/taskfile-go.yml +0 -0
  120. /package/skills/{build-automation → aif-build-automation}/templates/taskfile-node.yml +0 -0
  121. /package/skills/{build-automation → aif-build-automation}/templates/taskfile-php.yml +0 -0
  122. /package/skills/{build-automation → aif-build-automation}/templates/taskfile-python.yml +0 -0
  123. /package/skills/{ci → aif-ci}/references/BEST-PRACTICES.md +0 -0
  124. /package/skills/{ci → aif-ci}/templates/github/go.yml +0 -0
  125. /package/skills/{ci → aif-ci}/templates/github/java.yml +0 -0
  126. /package/skills/{ci → aif-ci}/templates/github/node.yml +0 -0
  127. /package/skills/{ci → aif-ci}/templates/github/php.yml +0 -0
  128. /package/skills/{ci → aif-ci}/templates/github/python.yml +0 -0
  129. /package/skills/{ci → aif-ci}/templates/github/rust.yml +0 -0
  130. /package/skills/{ci → aif-ci}/templates/gitlab/go.yml +0 -0
  131. /package/skills/{ci → aif-ci}/templates/gitlab/java.yml +0 -0
  132. /package/skills/{ci → aif-ci}/templates/gitlab/node.yml +0 -0
  133. /package/skills/{ci → aif-ci}/templates/gitlab/php.yml +0 -0
  134. /package/skills/{ci → aif-ci}/templates/gitlab/python.yml +0 -0
  135. /package/skills/{ci → aif-ci}/templates/gitlab/rust.yml +0 -0
  136. /package/skills/{dockerize → aif-dockerize}/references/BEST-PRACTICES.md +0 -0
  137. /package/skills/{dockerize → aif-dockerize}/references/SECURITY-CHECKLIST.md +0 -0
  138. /package/skills/{dockerize → aif-dockerize}/templates/backup.sh +0 -0
  139. /package/skills/{dockerize → aif-dockerize}/templates/compose-base.yml +0 -0
  140. /package/skills/{dockerize → aif-dockerize}/templates/compose-override-dev.yml +0 -0
  141. /package/skills/{dockerize → aif-dockerize}/templates/compose-production.yml +0 -0
  142. /package/skills/{dockerize → aif-dockerize}/templates/deploy.sh +0 -0
  143. /package/skills/{dockerize → aif-dockerize}/templates/dockerfile-go +0 -0
  144. /package/skills/{dockerize → aif-dockerize}/templates/dockerfile-node +0 -0
  145. /package/skills/{dockerize → aif-dockerize}/templates/dockerfile-php +0 -0
  146. /package/skills/{dockerize → aif-dockerize}/templates/dockerfile-python +0 -0
  147. /package/skills/{dockerize → aif-dockerize}/templates/dockerignore +0 -0
  148. /package/skills/{dockerize → aif-dockerize}/templates/health-check.sh +0 -0
  149. /package/skills/{dockerize → aif-dockerize}/templates/logs.sh +0 -0
  150. /package/skills/{dockerize → aif-dockerize}/templates/rollback.sh +0 -0
  151. /package/skills/{dockerize → aif-dockerize}/templates/update.sh +0 -0
  152. /package/skills/{skill-generator → aif-skill-generator}/references/BEST-PRACTICES.md +0 -0
  153. /package/skills/{skill-generator → aif-skill-generator}/references/EXAMPLES.md +0 -0
  154. /package/skills/{skill-generator → aif-skill-generator}/references/SPECIFICATION.md +0 -0
  155. /package/skills/{skill-generator → aif-skill-generator}/scripts/security-scan.py +0 -0
  156. /package/skills/{skill-generator → aif-skill-generator}/templates/basic.md +0 -0
  157. /package/skills/{skill-generator → aif-skill-generator}/templates/dynamic-context.md +0 -0
  158. /package/skills/{skill-generator → aif-skill-generator}/templates/research.md +0 -0
  159. /package/skills/{skill-generator → aif-skill-generator}/templates/task.md +0 -0
  160. /package/skills/{skill-generator → aif-skill-generator}/templates/visual.md +0 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![logo](https://github.com/lee-to/ai-factory/raw/main/art/promo.png)
1
+ ![logo](https://github.com/lee-to/ai-factory/raw/2.x/art/promo.png)
2
2
 
3
3
  # AI Factory
4
4
 
@@ -28,11 +28,13 @@ ai-factory init
28
28
  ## Installation
29
29
 
30
30
  ### Using npm
31
+
31
32
  ```bash
32
33
  npm install -g ai-factory
33
34
  ```
34
35
 
35
36
  ### Using mise
37
+
36
38
  ```bash
37
39
  mise use -g npm:ai-factory
38
40
  ```
@@ -53,10 +55,9 @@ This will:
53
55
  Then open your AI agent and start working:
54
56
 
55
57
  ```
56
- /ai-factory
58
+ /aif
57
59
  ```
58
60
 
59
-
60
61
  ## Usage
61
62
 
62
63
  If the package is installed:
@@ -69,26 +70,38 @@ Or running without installation via `npx`:
69
70
  npx ai-factory init
70
71
  ```
71
72
 
73
+ ### Upgrading from v1 to v2
74
+
75
+ ```bash
76
+ # 1) Update the CLI package
77
+ npm install -g ai-factory@latest
78
+
79
+ # 2) Migrate existing skills to v2 naming
80
+ ai-factory upgrade
81
+ ```
82
+
83
+ `ai-factory upgrade` removes old bare-named skills (`commit`, `feature`, etc.) and installs new `aif-*` prefixed versions. Custom skills are preserved.
84
+
72
85
  ### Example Workflow
73
86
 
74
87
  ```bash
75
88
  # Plan a feature — creates branch, analyzes codebase, builds step-by-step plan
76
- /ai-factory.feature Add user authentication with OAuth
89
+ /aif-plan Add user authentication with OAuth
77
90
 
78
91
  # Optionally refine the plan with deeper analysis
79
- /ai-factory.improve
92
+ /aif-improve
80
93
 
81
94
  # Execute the plan — implements tasks one by one, commits at checkpoints
82
- /ai-factory.implement
95
+ /aif-implement
83
96
 
84
97
  # Fix a bug — AI learns from every fix and gets smarter over time
85
- /ai-factory.fix TypeError: Cannot read property 'name' of undefined
98
+ /aif-fix TypeError: Cannot read property 'name' of undefined
86
99
 
87
100
  # Set up CI pipeline — GitHub Actions or GitLab CI with linting, SA, tests
88
- /ai-factory.ci github
101
+ /aif-ci github
89
102
 
90
103
  # Generate project documentation — README + docs/ with topics
91
- /ai-factory.docs
104
+ /aif-docs
92
105
  ```
93
106
 
94
107
  See the full [Development Workflow](docs/workflow.md) with diagram and decision table.
@@ -98,13 +111,13 @@ See the full [Development Workflow](docs/workflow.md) with diagram and decision
98
111
  AI Factory can generate and maintain your project docs with a single command:
99
112
 
100
113
  ```bash
101
- /ai-factory.docs # Creates README + docs/ structure from your codebase
102
- /ai-factory.docs --web # Also generates a static HTML documentation site
114
+ /aif-docs # Creates README + docs/ structure from your codebase
115
+ /aif-docs --web # Also generates a static HTML documentation site
103
116
  ```
104
117
 
105
118
  - **Generates docs from scratch** — analyzes your codebase and creates a lean README + detailed `docs/` pages by topic
106
119
  - **Cleans up scattered files** — finds loose CONTRIBUTING.md, ARCHITECTURE.md, SETUP.md in your root and consolidates them into a structured `docs/` directory
107
- - **Keeps docs in sync** — integrates with `/ai-factory.implement` so documentation is updated automatically after each feature
120
+ - **Keeps docs in sync** — integrates with `/aif-implement` so documentation is updated automatically after each feature
108
121
  - **Builds a docs website** — `--web` generates a static HTML site with navigation and dark mode, ready to host
109
122
 
110
123
  ---
@@ -115,6 +128,7 @@ AI Factory can generate and maintain your project docs with a single command:
115
128
  |-------|-------------|
116
129
  | [Getting Started](docs/getting-started.md) | What is AI Factory, supported agents, CLI commands |
117
130
  | [Development Workflow](docs/workflow.md) | Workflow diagram, when to use what, spec-driven approach |
131
+ | [Reflex Loop](docs/loop.md) | Iterative generate → evaluate → critique → refine workflow |
118
132
  | [Core Skills](docs/skills.md) | All slash commands — feature, task, fix, implement, evolve, docs, and more |
119
133
  | [Plan Files](docs/plan-files.md) | Plan files, self-improvement patches, skill acquisition |
120
134
  | [Security](docs/security.md) | Two-level security scanning for external skills |
@@ -122,7 +136,7 @@ AI Factory can generate and maintain your project docs with a single command:
122
136
 
123
137
  ---
124
138
 
125
- ![happy](https://github.com/lee-to/ai-factory/raw/main/art/happy.png)
139
+ ![happy](https://github.com/lee-to/ai-factory/raw/2.x/art/happy.png)
126
140
 
127
141
  ## Links
128
142
 
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AASA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0FjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAqCA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0HjD"}
@@ -2,76 +2,125 @@ import chalk from 'chalk';
2
2
  import path from 'path';
3
3
  import { runWizard } from '../wizard/prompts.js';
4
4
  import { installSkills } from '../../core/installer.js';
5
- import { createDefaultConfig, saveConfig, configExists } from '../../core/config.js';
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
8
  import { getTransformer } from '../../core/transformer.js';
9
+ import { WORKFLOW_SKILLS } from '../../core/transformer.js';
10
+ import { fileExists, removeDirectory, removeFile } from '../../utils/fs.js';
11
+ async function removeAgentSetup(projectDir, agent) {
12
+ const agentConfig = getAgentConfig(agent.id);
13
+ await removeDirectory(path.join(projectDir, agent.skillsDir));
14
+ if (agent.id === 'antigravity') {
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.
31
+ }
9
32
  export async function initCommand() {
10
33
  const projectDir = process.cwd();
11
34
  console.log(chalk.bold.blue('\n🏭 AI Factory - Project Setup\n'));
12
- if (await configExists(projectDir)) {
35
+ const hasExistingConfig = await configExists(projectDir);
36
+ const existingConfig = hasExistingConfig ? await loadConfig(projectDir) : null;
37
+ if (hasExistingConfig) {
13
38
  console.log(chalk.yellow('Warning: .ai-factory.json already exists.'));
14
- console.log('Use "ai-factory update" to update existing skills.\n');
39
+ console.log('Running init will reconfigure selected agents (add/remove) and reinstall base skills.\n');
15
40
  }
16
41
  try {
17
- const answers = await runWizard(projectDir);
42
+ const existingAgentIds = existingConfig?.agents.map(agent => agent.id) ?? [];
43
+ const answers = await runWizard(projectDir, existingAgentIds);
44
+ const selectedAgentIds = new Set(answers.agents.map(agent => agent.id));
45
+ const removedAgents = (existingConfig?.agents ?? []).filter(agent => !selectedAgentIds.has(agent.id));
46
+ if (removedAgents.length > 0) {
47
+ console.log(chalk.dim('\nRemoving deselected agent setups...\n'));
48
+ for (const removedAgent of removedAgents) {
49
+ await removeAgentSetup(projectDir, removedAgent);
50
+ console.log(chalk.yellow(` Removed: ${removedAgent.id}`));
51
+ }
52
+ }
18
53
  console.log(chalk.dim('\nInstalling skills...\n'));
19
- const installedSkills = await installSkills({
20
- projectDir,
21
- skillsDir: answers.skillsDir,
22
- skills: answers.selectedSkills,
23
- stack: null, // Stack-specific skills generated by /ai-factory in Claude
24
- agentId: answers.agent,
25
- });
26
- const config = createDefaultConfig(answers.agent);
27
- config.installedSkills = installedSkills;
28
- config.mcp = {
29
- github: answers.mcpGithub,
30
- filesystem: answers.mcpFilesystem,
31
- postgres: answers.mcpPostgres,
32
- };
33
- await saveConfig(projectDir, config);
34
- console.log(chalk.green('✓ Configuration saved to .ai-factory.json'));
35
- let configuredMcp = [];
36
- if (answers.mcpGithub || answers.mcpFilesystem || answers.mcpPostgres || answers.mcpChromeDevtools) {
37
- configuredMcp = await configureMcp(projectDir, {
38
- github: answers.mcpGithub,
39
- filesystem: answers.mcpFilesystem,
40
- postgres: answers.mcpPostgres,
41
- chromeDevtools: answers.mcpChromeDevtools,
42
- }, answers.agent);
54
+ const installedAgents = [];
55
+ const mcpSummary = {};
56
+ for (const agentSelection of answers.agents) {
57
+ const agentConfig = getAgentConfig(agentSelection.id);
58
+ const installedSkills = await installSkills({
59
+ projectDir,
60
+ skillsDir: agentConfig.skillsDir,
61
+ skills: answers.selectedSkills,
62
+ stack: null, // Stack-specific skills generated by /aif in Claude
63
+ agentId: agentSelection.id,
64
+ });
65
+ const configuredMcp = await configureMcp(projectDir, {
66
+ github: agentSelection.mcpGithub,
67
+ filesystem: agentSelection.mcpFilesystem,
68
+ postgres: agentSelection.mcpPostgres,
69
+ chromeDevtools: agentSelection.mcpChromeDevtools,
70
+ }, agentSelection.id);
43
71
  if (configuredMcp.length > 0) {
44
- console.log(chalk.green(`✓ MCP servers configured: ${configuredMcp.join(', ')}`));
72
+ mcpSummary[agentSelection.id] = configuredMcp;
45
73
  }
74
+ installedAgents.push({
75
+ id: agentSelection.id,
76
+ skillsDir: agentConfig.skillsDir,
77
+ installedSkills,
78
+ mcp: {
79
+ github: agentSelection.mcpGithub,
80
+ filesystem: agentSelection.mcpFilesystem,
81
+ postgres: agentSelection.mcpPostgres,
82
+ chromeDevtools: agentSelection.mcpChromeDevtools,
83
+ },
84
+ });
46
85
  }
86
+ await saveConfig(projectDir, {
87
+ version: getCurrentVersion(),
88
+ agents: installedAgents,
89
+ });
90
+ console.log(chalk.green('✓ Configuration saved to .ai-factory.json'));
47
91
  console.log(chalk.bold.green('\n✅ Setup complete!\n'));
48
- console.log(chalk.bold('Installed skills:'));
49
- for (const skill of installedSkills) {
50
- console.log(chalk.dim(` - ${skill}`));
51
- }
52
- console.log('');
53
- console.log(chalk.dim(`Skills directory: ${path.join(projectDir, answers.skillsDir)}`));
54
- if (configuredMcp.length > 0) {
55
- console.log(chalk.bold('\nMCP Configuration:'));
56
- const instructions = getMcpInstructions(configuredMcp);
57
- for (const instruction of instructions) {
58
- console.log(chalk.dim(` ${instruction}`));
92
+ for (const agent of installedAgents) {
93
+ const agentConfig = getAgentConfig(agent.id);
94
+ console.log(chalk.bold(`${agentConfig.displayName}:`));
95
+ console.log(chalk.dim(` Skills directory: ${path.join(projectDir, agent.skillsDir)}`));
96
+ console.log(chalk.dim(` Installed skills: ${agent.installedSkills.length}`));
97
+ const configuredMcp = mcpSummary[agent.id];
98
+ if (configuredMcp && configuredMcp.length > 0) {
99
+ console.log(chalk.green(` MCP servers configured: ${configuredMcp.join(', ')}`));
100
+ const instructions = getMcpInstructions(configuredMcp);
101
+ for (const instruction of instructions) {
102
+ console.log(chalk.dim(` ${instruction}`));
103
+ }
59
104
  }
105
+ console.log('');
60
106
  }
61
- const agentConfig = getAgentConfig(answers.agent);
62
- const transformer = getTransformer(answers.agent);
63
107
  console.log(chalk.bold('\nNext steps:'));
64
- const welcomeMessage = transformer.getWelcomeMessage?.();
65
- if (welcomeMessage) {
66
- for (const line of welcomeMessage) {
67
- console.log(chalk.dim(` ${line}`));
108
+ for (const [index, agent] of installedAgents.entries()) {
109
+ const agentConfig = getAgentConfig(agent.id);
110
+ const transformer = getTransformer(agent.id);
111
+ const welcomeMessage = transformer.getWelcomeMessage?.();
112
+ console.log(chalk.dim(` ${index + 1}. ${agentConfig.displayName}`));
113
+ if (welcomeMessage) {
114
+ for (const line of welcomeMessage) {
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'));
68
121
  }
69
122
  }
70
- else {
71
- console.log(chalk.dim(` 1. Open ${agentConfig.displayName} in this directory`));
72
- console.log(chalk.dim(' 2. Run /ai-factory to analyze project and generate stack-specific skills'));
73
- console.log(chalk.dim(' 3. Use /ai-factory.feature to start new features, /ai-factory.commit to commit'));
74
- }
123
+ console.log(chalk.dim(` ${installedAgents.length + 1}. Use /aif-plan and /aif-commit for daily workflow`));
75
124
  console.log('');
76
125
  }
77
126
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
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":"AAIA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DnD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAwEnD"}
@@ -13,33 +13,44 @@ export async function updateCommand() {
13
13
  const currentVersion = getCurrentVersion();
14
14
  console.log(chalk.dim(`Config version: ${config.version}`));
15
15
  console.log(chalk.dim(`Package version: ${currentVersion}\n`));
16
- // Check for new skills
17
- const availableSkills = await getAvailableSkills();
18
- const previousBaseSkills = config.installedSkills.filter(s => !s.includes('/'));
19
- const newSkills = availableSkills.filter(s => !previousBaseSkills.includes(s));
20
- if (newSkills.length > 0) {
21
- console.log(chalk.cyan(`📦 New skills available: ${newSkills.join(', ')}\n`));
22
- }
23
16
  console.log(chalk.dim('Updating skills...\n'));
24
17
  try {
25
- const updatedSkills = await updateSkills(config, projectDir);
18
+ const availableSkills = await getAvailableSkills();
19
+ const previousBaseSkillsByAgent = new Map();
20
+ for (const agent of config.agents) {
21
+ const previousBaseSkills = agent.installedSkills.filter(s => !s.includes('/'));
22
+ previousBaseSkillsByAgent.set(agent.id, previousBaseSkills);
23
+ const newSkills = availableSkills.filter(s => !previousBaseSkills.includes(s));
24
+ if (newSkills.length > 0) {
25
+ console.log(chalk.cyan(`📦 [${agent.id}] New skills available: ${newSkills.join(', ')}`));
26
+ }
27
+ }
28
+ if (config.agents.length > 0) {
29
+ console.log('');
30
+ }
31
+ for (const agent of config.agents) {
32
+ const updatedSkills = await updateSkills(agent, projectDir);
33
+ agent.installedSkills = updatedSkills;
34
+ }
26
35
  config.version = currentVersion;
27
- config.installedSkills = updatedSkills;
28
36
  await saveConfig(projectDir, config);
29
37
  console.log(chalk.green('✓ Skills updated successfully'));
30
38
  console.log(chalk.green('✓ Configuration updated'));
31
- // Separate base skills and custom skills for display
32
- const baseSkills = updatedSkills.filter(s => !s.includes('/'));
33
- const customSkills = updatedSkills.filter(s => s.includes('/'));
34
- console.log(chalk.bold('\nBase skills:'));
35
- for (const skill of baseSkills) {
36
- const isNew = newSkills.includes(skill);
37
- console.log(chalk.dim(` - ${skill}`) + (isNew ? chalk.green(' (new)') : ''));
38
- }
39
- if (customSkills.length > 0) {
40
- console.log(chalk.bold('\nCustom skills (preserved):'));
41
- for (const skill of customSkills) {
42
- console.log(chalk.dim(` - ${skill}`));
39
+ for (const agent of config.agents) {
40
+ const previousBaseSkills = previousBaseSkillsByAgent.get(agent.id) ?? [];
41
+ const newSkills = availableSkills.filter(s => !previousBaseSkills.includes(s));
42
+ const baseSkills = agent.installedSkills.filter(s => !s.includes('/'));
43
+ const customSkills = agent.installedSkills.filter(s => s.includes('/'));
44
+ console.log(chalk.bold(`\n[${agent.id}] Base skills:`));
45
+ for (const skill of baseSkills) {
46
+ const isNew = newSkills.includes(skill);
47
+ console.log(chalk.dim(` - ${skill}`) + (isNew ? chalk.green(' (new)') : ''));
48
+ }
49
+ if (customSkills.length > 0) {
50
+ console.log(chalk.bold(`[${agent.id}] Custom skills (preserved):`));
51
+ for (const skill of customSkills) {
52
+ console.log(chalk.dim(` - ${skill}`));
53
+ }
43
54
  }
44
55
  }
45
56
  console.log('');
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function upgradeCommand(): Promise<void>;
2
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAqEA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuIpD"}
@@ -0,0 +1,179 @@
1
+ import chalk from 'chalk';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { loadConfig, saveConfig, getCurrentVersion } from '../../core/config.js';
5
+ import { installSkills, getAvailableSkills } from '../../core/installer.js';
6
+ import { getAgentConfig } from '../../core/agents.js';
7
+ import { fileExists, removeDirectory, removeFile } from '../../utils/fs.js';
8
+ // Old v1 skill directory names that were renamed to aif-* in v2
9
+ const OLD_SKILL_NAMES = [
10
+ 'architecture',
11
+ 'best-practices',
12
+ 'build-automation',
13
+ 'ci',
14
+ 'commit',
15
+ 'deploy',
16
+ 'dockerize',
17
+ 'docs',
18
+ 'evolve',
19
+ 'feature',
20
+ 'fix',
21
+ 'implement',
22
+ 'improve',
23
+ 'review',
24
+ 'security-checklist',
25
+ 'skill-generator',
26
+ 'task',
27
+ 'verify',
28
+ ];
29
+ // Old v2 skill directory names before aif-* migration
30
+ const OLD_AIF_PREFIX_SKILL_NAMES = [
31
+ 'ai-factory',
32
+ 'ai-factory-architecture',
33
+ 'ai-factory-best-practices',
34
+ 'ai-factory-build-automation',
35
+ 'ai-factory-ci',
36
+ 'ai-factory-commit',
37
+ 'ai-factory-deploy',
38
+ 'ai-factory-dockerize',
39
+ 'ai-factory-docs',
40
+ 'ai-factory-evolve',
41
+ 'ai-factory-fix',
42
+ 'ai-factory-implement',
43
+ 'ai-factory-improve',
44
+ 'ai-factory-plan',
45
+ 'ai-factory-review',
46
+ 'ai-factory-roadmap',
47
+ 'ai-factory-rules',
48
+ 'ai-factory-security-checklist',
49
+ 'ai-factory-skill-generator',
50
+ 'ai-factory-verify',
51
+ // Transitional names that were removed earlier
52
+ 'ai-factory-task',
53
+ 'ai-factory-feature',
54
+ ];
55
+ // Old workflow skills stored as flat .md files by Antigravity transformer
56
+ const OLD_WORKFLOW_SKILLS = new Set([
57
+ 'commit',
58
+ 'deploy',
59
+ 'feature',
60
+ 'fix',
61
+ 'implement',
62
+ 'improve',
63
+ 'task',
64
+ 'verify',
65
+ ]);
66
+ export async function upgradeCommand() {
67
+ const projectDir = process.cwd();
68
+ console.log(chalk.bold.blue('\n🏭 AI Factory - Upgrade to v2\n'));
69
+ const config = await loadConfig(projectDir);
70
+ if (!config) {
71
+ console.log(chalk.red('Error: No .ai-factory.json found.'));
72
+ console.log(chalk.dim('Run "ai-factory init" to set up your project first.'));
73
+ process.exit(1);
74
+ }
75
+ if (config.agents.length === 0) {
76
+ console.log(chalk.red('Error: No agents configured in .ai-factory.json.'));
77
+ console.log(chalk.dim('Run "ai-factory init" to configure at least one agent.'));
78
+ process.exit(1);
79
+ }
80
+ // Step 1: Migrate legacy plan directories to .ai-factory/plans/
81
+ const featuresDir = path.join(projectDir, '.ai-factory', 'features');
82
+ const changesDir = path.join(projectDir, '.ai-factory', 'changes');
83
+ const plansDir = path.join(projectDir, '.ai-factory', 'plans');
84
+ if (await fileExists(changesDir) && !(await fileExists(plansDir))) {
85
+ await fs.move(changesDir, plansDir);
86
+ console.log(chalk.green('✓ Renamed .ai-factory/changes/ → .ai-factory/plans/\n'));
87
+ }
88
+ if (await fileExists(featuresDir) && !(await fileExists(plansDir))) {
89
+ await fs.move(featuresDir, plansDir);
90
+ console.log(chalk.green('✓ Renamed .ai-factory/features/ → .ai-factory/plans/\n'));
91
+ }
92
+ const availableSkills = await getAvailableSkills();
93
+ for (const agent of config.agents) {
94
+ const agentConfig = getAgentConfig(agent.id);
95
+ const skillsDir = path.join(projectDir, agent.skillsDir);
96
+ const isAntigravity = agent.id === 'antigravity';
97
+ let removedCount = 0;
98
+ console.log(chalk.dim(`Scanning for old-format skills [${agent.id}]...\n`));
99
+ for (const oldName of OLD_SKILL_NAMES) {
100
+ // Antigravity: old workflow skills were flat files in workflows/
101
+ if (isAntigravity && OLD_WORKFLOW_SKILLS.has(oldName)) {
102
+ const flatFile = path.join(projectDir, agentConfig.configDir, 'workflows', `${oldName}.md`);
103
+ if (await fileExists(flatFile)) {
104
+ await removeFile(flatFile);
105
+ console.log(chalk.yellow(` [${agent.id}] Removed workflow: ${oldName}.md`));
106
+ removedCount++;
107
+ }
108
+ }
109
+ // All agents: remove old skill directory
110
+ const oldDir = path.join(skillsDir, oldName);
111
+ if (await fileExists(oldDir)) {
112
+ await removeDirectory(oldDir);
113
+ console.log(chalk.yellow(` [${agent.id}] Removed skill: ${oldName}/`));
114
+ removedCount++;
115
+ }
116
+ }
117
+ // Remove old aif-task, aif-feature, and ai-factory-* skills
118
+ const obsoleteSkills = [
119
+ 'aif-task', 'aif-feature',
120
+ ...OLD_SKILL_NAMES.map(n => `ai-factory-${n}`),
121
+ ...OLD_AIF_PREFIX_SKILL_NAMES,
122
+ ];
123
+ for (const oldSkill of obsoleteSkills) {
124
+ const oldDir = path.join(skillsDir, oldSkill);
125
+ if (await fileExists(oldDir)) {
126
+ await removeDirectory(oldDir);
127
+ console.log(chalk.yellow(` [${agent.id}] Removed skill: ${oldSkill}/`));
128
+ removedCount++;
129
+ }
130
+ // Antigravity: remove flat workflow files
131
+ if (isAntigravity) {
132
+ const flatFile = path.join(projectDir, agentConfig.configDir, 'workflows', `${oldSkill}.md`);
133
+ if (await fileExists(flatFile)) {
134
+ await removeFile(flatFile);
135
+ console.log(chalk.yellow(` [${agent.id}] Removed workflow: ${oldSkill}.md`));
136
+ removedCount++;
137
+ }
138
+ }
139
+ }
140
+ if (removedCount === 0) {
141
+ console.log(chalk.dim(` [${agent.id}] No old-format skills found.\n`));
142
+ }
143
+ else {
144
+ console.log(chalk.dim(`\n [${agent.id}] Removed ${removedCount} old-format skill(s).\n`));
145
+ }
146
+ console.log(chalk.dim(`Installing new-format skills [${agent.id}]...\n`));
147
+ const customSkills = agent.installedSkills.filter(s => s.includes('/'));
148
+ const installedSkills = await installSkills({
149
+ projectDir,
150
+ skillsDir: agent.skillsDir,
151
+ skills: availableSkills,
152
+ stack: null,
153
+ agentId: agent.id,
154
+ });
155
+ agent.installedSkills = [...installedSkills, ...customSkills];
156
+ }
157
+ // Step 3: Update config to latest version and multi-agent schema
158
+ const currentVersion = getCurrentVersion();
159
+ config.version = currentVersion;
160
+ await saveConfig(projectDir, config);
161
+ // Step 4: Summary
162
+ console.log(chalk.green('✓ Upgrade to v2 complete!\n'));
163
+ for (const agent of config.agents) {
164
+ const baseSkills = agent.installedSkills.filter(s => !s.includes('/'));
165
+ const customSkills = agent.installedSkills.filter(s => s.includes('/'));
166
+ console.log(chalk.bold(`[${agent.id}] Installed skills:`));
167
+ for (const skill of baseSkills) {
168
+ console.log(chalk.dim(` - ${skill}`));
169
+ }
170
+ if (customSkills.length > 0) {
171
+ console.log(chalk.bold(`[${agent.id}] Custom skills (preserved):`));
172
+ for (const skill of customSkills) {
173
+ console.log(chalk.dim(` - ${skill}`));
174
+ }
175
+ }
176
+ console.log('');
177
+ }
178
+ }
179
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import { initCommand } from './commands/init.js';
3
3
  import { updateCommand } from './commands/update.js';
4
+ import { upgradeCommand } from './commands/upgrade.js';
4
5
  import { getCurrentVersion } from '../core/config.js';
5
6
  const program = new Command();
6
7
  program
@@ -15,5 +16,9 @@ program
15
16
  .command('update')
16
17
  .description('Update installed skills to latest version')
17
18
  .action(updateCommand);
19
+ program
20
+ .command('upgrade')
21
+ .description('Upgrade from v1 to v2 (removes old-format skills, installs new)')
22
+ .action(upgradeCommand);
18
23
  program.parse();
19
24
  //# sourceMappingURL=index.js.map