@antomanc/aginit 0.4.1 → 0.5.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 (112) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +108 -28
  3. package/THIRD_PARTY_NOTICES.md +92 -16
  4. package/dist/adapters/agent-docs.d.ts +32 -0
  5. package/dist/adapters/agent-docs.d.ts.map +1 -0
  6. package/dist/adapters/agent-docs.js +146 -0
  7. package/dist/adapters/agent-docs.js.map +1 -0
  8. package/dist/adapters/agents-md.d.ts +13 -1
  9. package/dist/adapters/agents-md.d.ts.map +1 -1
  10. package/dist/adapters/agents-md.js +137 -120
  11. package/dist/adapters/agents-md.js.map +1 -1
  12. package/dist/adapters/e2e.d.ts +15 -0
  13. package/dist/adapters/e2e.d.ts.map +1 -0
  14. package/dist/adapters/e2e.js +55 -0
  15. package/dist/adapters/e2e.js.map +1 -0
  16. package/dist/adapters/skills.d.ts +5 -0
  17. package/dist/adapters/skills.d.ts.map +1 -1
  18. package/dist/adapters/skills.js +17 -0
  19. package/dist/adapters/skills.js.map +1 -1
  20. package/dist/cli/capabilities.d.ts +17 -0
  21. package/dist/cli/capabilities.d.ts.map +1 -0
  22. package/dist/cli/capabilities.js +149 -0
  23. package/dist/cli/capabilities.js.map +1 -0
  24. package/dist/cli/doctor.d.ts +16 -0
  25. package/dist/cli/doctor.d.ts.map +1 -1
  26. package/dist/cli/doctor.js +90 -70
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/init.js +1 -1
  29. package/dist/cli/init.js.map +1 -1
  30. package/dist/cli/main.d.ts.map +1 -1
  31. package/dist/cli/main.js +117 -20
  32. package/dist/cli/main.js.map +1 -1
  33. package/dist/cli/new.d.ts +15 -1
  34. package/dist/cli/new.d.ts.map +1 -1
  35. package/dist/cli/new.js +157 -68
  36. package/dist/cli/new.js.map +1 -1
  37. package/dist/cli/wizard.d.ts +5 -0
  38. package/dist/cli/wizard.d.ts.map +1 -1
  39. package/dist/cli/wizard.js +104 -102
  40. package/dist/cli/wizard.js.map +1 -1
  41. package/dist/config/defaults.d.ts +14 -6
  42. package/dist/config/defaults.d.ts.map +1 -1
  43. package/dist/config/defaults.js +38 -174
  44. package/dist/config/defaults.js.map +1 -1
  45. package/dist/config/schema.d.ts +14 -0
  46. package/dist/config/schema.d.ts.map +1 -1
  47. package/dist/config/schema.js.map +1 -1
  48. package/dist/config/validation.d.ts +1 -0
  49. package/dist/config/validation.d.ts.map +1 -1
  50. package/dist/config/validation.js +63 -0
  51. package/dist/config/validation.js.map +1 -1
  52. package/dist/detect/index.d.ts +18 -0
  53. package/dist/detect/index.d.ts.map +1 -0
  54. package/dist/detect/index.js +120 -0
  55. package/dist/detect/index.js.map +1 -0
  56. package/dist/index.d.ts +5 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +5 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/presets/cli.d.ts.map +1 -1
  61. package/dist/presets/cli.js +7 -0
  62. package/dist/presets/cli.js.map +1 -1
  63. package/dist/presets/generic.d.ts.map +1 -1
  64. package/dist/presets/generic.js +4 -1
  65. package/dist/presets/generic.js.map +1 -1
  66. package/dist/presets/testing.d.ts +1 -1
  67. package/dist/presets/testing.d.ts.map +1 -1
  68. package/dist/presets/testing.js +22 -8
  69. package/dist/presets/testing.js.map +1 -1
  70. package/dist/presets/web.d.ts.map +1 -1
  71. package/dist/presets/web.js +5 -2
  72. package/dist/presets/web.js.map +1 -1
  73. package/dist/registry/catalog.d.ts +13 -0
  74. package/dist/registry/catalog.d.ts.map +1 -0
  75. package/dist/registry/catalog.js +544 -0
  76. package/dist/registry/catalog.js.map +1 -0
  77. package/dist/registry/index.d.ts +84 -0
  78. package/dist/registry/index.d.ts.map +1 -0
  79. package/dist/registry/index.js +309 -0
  80. package/dist/registry/index.js.map +1 -0
  81. package/dist/registry/setup.d.ts +14 -0
  82. package/dist/registry/setup.d.ts.map +1 -0
  83. package/dist/registry/setup.js +25 -0
  84. package/dist/registry/setup.js.map +1 -0
  85. package/dist/registry/types.d.ts +115 -0
  86. package/dist/registry/types.d.ts.map +1 -0
  87. package/dist/registry/types.js +2 -0
  88. package/dist/registry/types.js.map +1 -0
  89. package/package.json +3 -2
  90. package/src/adapters/agent-docs.ts +184 -0
  91. package/src/adapters/agents-md.ts +160 -137
  92. package/src/adapters/e2e.ts +58 -0
  93. package/src/adapters/skills.ts +18 -0
  94. package/src/cli/capabilities.ts +176 -0
  95. package/src/cli/doctor.ts +83 -66
  96. package/src/cli/init.ts +1 -1
  97. package/src/cli/main.ts +125 -20
  98. package/src/cli/new.ts +195 -74
  99. package/src/cli/wizard.ts +130 -103
  100. package/src/config/defaults.ts +57 -179
  101. package/src/config/schema.ts +15 -0
  102. package/src/config/validation.ts +56 -0
  103. package/src/detect/index.ts +134 -0
  104. package/src/index.ts +5 -0
  105. package/src/presets/cli.ts +6 -0
  106. package/src/presets/generic.ts +4 -1
  107. package/src/presets/testing.ts +29 -12
  108. package/src/presets/web.ts +4 -2
  109. package/src/registry/catalog.ts +569 -0
  110. package/src/registry/index.ts +395 -0
  111. package/src/registry/setup.ts +40 -0
  112. package/src/registry/types.ts +109 -0
package/dist/cli/main.js CHANGED
@@ -3,12 +3,13 @@ import { readFileSync } from 'node:fs';
3
3
  import { createProject } from './new.js';
4
4
  import { initCurrentDirectory } from './init.js';
5
5
  import { runDoctor } from './doctor.js';
6
- import { claudeCodeEnabled, ensureClaudeSkillLinks, updateSkills } from '../adapters/skills.js';
6
+ import { ensureClaudeSkillLinks, updateSkills } from '../adapters/skills.js';
7
7
  import { ignoreVendoredSkills } from '../adapters/tool-ignores.js';
8
- import { setupClaudeMarkdown } from '../adapters/agents-md.js';
9
8
  import { buildGraft } from '../adapters/graft.js';
10
9
  import { readProjectConfig } from '../config/validation.js';
11
10
  import { logger } from '../utils/logger.js';
11
+ import { changeCapabilities, listCapabilities } from './capabilities.js';
12
+ import { syncAgentDocs } from './new.js';
12
13
  import { isInteractive, promptNewProject, promptInitProject, runInteractiveWizard } from './wizard.js';
13
14
  /**
14
15
  * Read the version from package.json so releases only bump one place.
@@ -23,23 +24,80 @@ function readVersion() {
23
24
  return '0.0.0';
24
25
  }
25
26
  }
27
+ const list = (value, previous = []) => [
28
+ ...previous,
29
+ ...value
30
+ .split(',')
31
+ .map((item) => item.trim())
32
+ .filter(Boolean)
33
+ ];
34
+ /** v2 profile options shared by the root command, `new` and `init`. */
35
+ function withProfileOptions(command) {
36
+ return command
37
+ .option('--platform <platform>', 'Platform: auto | web | mobile-native | mobile-rn | backend | cli')
38
+ .option('--methodology <preset>', 'Workflow skills: pocock | superpowers | minimal')
39
+ .option('--design <design>', 'Design system: impeccable | none')
40
+ .option('--testing <engine>', 'Testing: e2e | playwright | vitest | native')
41
+ .option('--ui-driver <driver>', 'UI driver: auto | agent-browser | agent-device | none')
42
+ .option('--addons <ids>', 'Add-ons: context-mode, worktrunk, chrome-devtools-mcp, browserskill', list)
43
+ .option('--add-skill <owner/repo>', 'Add a skill repository as a custom capability (repeatable)', list)
44
+ .option('--without <id>', 'Disable a capability, e.g. graft or humanizer (repeatable)', list);
45
+ }
46
+ function profileFlags(options) {
47
+ return {
48
+ platform: options.platform === 'auto' ? undefined : options.platform,
49
+ methodology: options.methodology,
50
+ design: options.design,
51
+ testing: options.testing,
52
+ uiDriver: options.uiDriver,
53
+ addons: options.addons,
54
+ addSkills: options.addSkill,
55
+ without: options.without
56
+ };
57
+ }
26
58
  export function createCliProgram() {
27
59
  const program = new Command();
28
60
  program
29
61
  .name('aginit')
30
62
  .description('Set up a new or existing project for AI coding agents')
31
- .version(readVersion());
32
- // Root action: interactive wizard when in TTY, else display help
33
- program.action(async () => {
34
- if (isInteractive()) {
35
- await runInteractiveWizard();
36
- }
37
- else {
38
- program.outputHelp();
63
+ .version(readVersion())
64
+ .enablePositionalOptions()
65
+ .option('-p, --preset <preset>', 'Project preset: web | cli | generic')
66
+ .option('-f, --framework <framework>', 'Web framework: none | vite | next | existing')
67
+ .option('-m, --package-manager <pm>', 'Package manager: pnpm | npm | yarn | bun')
68
+ .option('--no-skills', 'Skip installing AI skills')
69
+ .option('--no-graft', 'Skip codebase graph (Graft) setup')
70
+ .option('--no-git', 'Skip git repository initialization')
71
+ .option('--dry-run', 'Simulate setup without writing changes to disk')
72
+ .option('-y, --yes', 'Initialize the current directory without prompts (saved or detected settings)');
73
+ withProfileOptions(program);
74
+ // Root action: `aginit [options]` initializes the current directory. Bare
75
+ // `aginit` opens the wizard in a TTY and prints help otherwise, so a stray
76
+ // invocation in CI never rewrites a project.
77
+ program.action(async (options, command) => {
78
+ const explicit = command.options.some((option) => command.getOptionValueSource(option.attributeName()) === 'cli');
79
+ if (!explicit) {
80
+ if (isInteractive())
81
+ await runInteractiveWizard();
82
+ else
83
+ program.outputHelp();
84
+ return;
39
85
  }
86
+ const complete = await initCurrentDirectory({
87
+ preset: options.preset,
88
+ framework: options.framework,
89
+ packageManager: options.packageManager,
90
+ skills: options.skills,
91
+ graft: options.graft,
92
+ git: options.git,
93
+ dryRun: options.dryRun,
94
+ profile: profileFlags(options)
95
+ });
96
+ if (!complete && !options.dryRun)
97
+ process.exitCode = 1;
40
98
  });
41
99
  // Command: new
42
- program
100
+ const newCommand = program
43
101
  .command('new [projectName]')
44
102
  .description('Create a brand new AI-first project')
45
103
  .option('-p, --preset <preset>', 'Project preset: web | cli | generic', 'generic')
@@ -48,12 +106,14 @@ export function createCliProgram() {
48
106
  .option('--no-skills', 'Skip installing AI skills')
49
107
  .option('--no-graft', 'Skip codebase graph (Graft) setup')
50
108
  .option('--no-git', 'Skip git repository initialization')
51
- .option('--dry-run', 'Simulate creation without writing changes to disk')
109
+ .option('--dry-run', 'Simulate creation without writing changes to disk');
110
+ withProfileOptions(newCommand)
52
111
  .action(async (projectName, options, command) => {
53
112
  let finalName = projectName;
54
113
  let finalPreset = options.preset;
55
114
  let finalFramework = options.framework;
56
115
  let finalPackageManager = options.packageManager;
116
+ let finalProfile = profileFlags(options);
57
117
  if (!finalName) {
58
118
  if (!isInteractive()) {
59
119
  program.error("error: missing required argument 'projectName'");
@@ -67,12 +127,14 @@ export function createCliProgram() {
67
127
  : undefined,
68
128
  packageManager: command.getOptionValueSource('packageManager') === 'cli'
69
129
  ? options.packageManager
70
- : undefined
130
+ : undefined,
131
+ profile: finalProfile
71
132
  });
72
133
  finalName = answers.projectName;
73
134
  finalPreset = answers.preset;
74
135
  finalFramework = answers.framework;
75
136
  finalPackageManager = answers.packageManager;
137
+ finalProfile = answers.profile;
76
138
  }
77
139
  const complete = await createProject(finalName, {
78
140
  preset: finalPreset,
@@ -81,13 +143,14 @@ export function createCliProgram() {
81
143
  skills: options.skills,
82
144
  graft: options.graft,
83
145
  git: options.git,
84
- dryRun: options.dryRun
146
+ dryRun: options.dryRun,
147
+ profile: finalProfile
85
148
  });
86
149
  if (!complete && !options.dryRun)
87
150
  process.exitCode = 1;
88
151
  });
89
152
  // Command: init
90
- program
153
+ const initCommand = program
91
154
  .command('init')
92
155
  .description('Initialize or update AI-first capabilities in the current directory')
93
156
  .option('-p, --preset <preset>', 'Project preset: web | cli | generic')
@@ -97,23 +160,28 @@ export function createCliProgram() {
97
160
  .option('--no-graft', 'Skip codebase graph (Graft) setup')
98
161
  .option('--no-git', 'Skip git repository initialization')
99
162
  .option('--dry-run', 'Simulate setup without writing changes to disk')
163
+ .option('-y, --yes', 'Skip the prompts and use saved or detected settings');
164
+ withProfileOptions(initCommand)
100
165
  .action(async (options, command) => {
101
166
  let finalPreset = options.preset;
102
167
  let finalFramework = options.framework;
103
168
  let finalPackageManager = options.packageManager;
169
+ let finalProfile = profileFlags(options);
104
170
  const isPresetExplicit = command.getOptionValueSource('preset') === 'cli';
105
171
  const isFrameworkExplicit = command.getOptionValueSource('framework') === 'cli';
106
172
  const isPmExplicit = command.getOptionValueSource('packageManager') === 'cli';
107
173
  const savedConfig = readProjectConfig(process.cwd());
108
- if (isInteractive() && !isPresetExplicit && !options.dryRun && !savedConfig) {
174
+ if (isInteractive() && !isPresetExplicit && !options.dryRun && !options.yes && !savedConfig) {
109
175
  const answers = await promptInitProject({
110
176
  preset: isPresetExplicit ? options.preset : undefined,
111
177
  framework: isFrameworkExplicit ? options.framework : undefined,
112
- packageManager: isPmExplicit ? options.packageManager : undefined
178
+ packageManager: isPmExplicit ? options.packageManager : undefined,
179
+ profile: finalProfile
113
180
  });
114
181
  finalPreset = answers.preset;
115
182
  finalFramework = answers.framework;
116
183
  finalPackageManager = answers.packageManager;
184
+ finalProfile = answers.profile;
117
185
  }
118
186
  const complete = await initCurrentDirectory({
119
187
  preset: finalPreset,
@@ -122,11 +190,40 @@ export function createCliProgram() {
122
190
  skills: options.skills,
123
191
  graft: options.graft,
124
192
  git: options.git,
125
- dryRun: options.dryRun
193
+ dryRun: options.dryRun,
194
+ profile: finalProfile
126
195
  });
127
196
  if (!complete && !options.dryRun)
128
197
  process.exitCode = 1;
129
198
  });
199
+ // Command: list
200
+ program
201
+ .command('list')
202
+ .description('List every capability in the registry and which ones this project enables')
203
+ .option('-d, --dir <path>', 'Project directory', process.cwd())
204
+ .action((options) => listCapabilities(options.dir));
205
+ // Command: add
206
+ program
207
+ .command('add <capabilities...>')
208
+ .description('Enable capabilities (registry ids or owner/repo skill repositories)')
209
+ .option('--dry-run', 'Simulate the change')
210
+ .action(async (ids, options) => {
211
+ const ok = await changeCapabilities(process.cwd(), { add: ids.flatMap((id) => list(id)) }, {
212
+ dryRun: options.dryRun
213
+ });
214
+ if (!ok && !options.dryRun)
215
+ process.exitCode = 1;
216
+ });
217
+ // Command: remove
218
+ program
219
+ .command('remove <capabilities...>')
220
+ .description('Disable capabilities and remove the skills they installed')
221
+ .option('--dry-run', 'Simulate the change')
222
+ .action(async (ids, options) => {
223
+ const ok = await changeCapabilities(process.cwd(), { remove: ids.flatMap((id) => list(id)) }, { dryRun: options.dryRun });
224
+ if (!ok && !options.dryRun)
225
+ process.exitCode = 1;
226
+ });
130
227
  // Command: doctor
131
228
  program
132
229
  .command('doctor')
@@ -148,8 +245,8 @@ export function createCliProgram() {
148
245
  ? true
149
246
  : await updateSkills(targetDir, { dryRun: options.dryRun })) &&
150
247
  (config ? await ensureClaudeSkillLinks(targetDir, config, { dryRun: options.dryRun }) : true);
151
- if (config && claudeCodeEnabled(config))
152
- setupClaudeMarkdown(targetDir, { dryRun: options.dryRun });
248
+ if (config)
249
+ syncAgentDocs(targetDir, config, { dryRun: options.dryRun });
153
250
  if (config?.skills.sources.length !== 0) {
154
251
  const advice = ignoreVendoredSkills(targetDir, { dryRun: options.dryRun, silent: true });
155
252
  for (const line of advice)
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
package/dist/cli/new.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { PresetType, WebFramework, PackageManager } from '../config/schema.js';
1
+ import { AginitConfig, PresetType, WebFramework, PackageManager } from '../config/schema.js';
2
+ import { CapabilityDescriptor, MicroDoc, ProfileFlags } from '../registry/index.js';
2
3
  export interface NewProjectOptions {
3
4
  preset?: PresetType;
4
5
  framework?: WebFramework;
@@ -9,6 +10,19 @@ export interface NewProjectOptions {
9
10
  dryRun?: boolean;
10
11
  targetDir?: string;
11
12
  silent?: boolean;
13
+ /** v2 profile flags: --platform, --methodology, --design, --testing, --ui-driver, ... */
14
+ profile?: ProfileFlags;
12
15
  }
13
16
  export declare function createProject(projectName: string, options?: NewProjectOptions): Promise<boolean>;
17
+ /** Binaries of active capabilities that are not on PATH (setups report their own). */
18
+ export declare function missingBinaries(active: CapabilityDescriptor[], setups: string[]): Promise<Array<{
19
+ name: string;
20
+ bin: string;
21
+ install: string;
22
+ }>>;
23
+ /** Refresh AGENTS.md, CLAUDE.md and docs/agents/ from the config. */
24
+ export declare function syncAgentDocs(targetDir: string, config: AginitConfig, options?: {
25
+ dryRun?: boolean;
26
+ silent?: boolean;
27
+ }): MicroDoc[];
14
28
  //# sourceMappingURL=new.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/cli/new.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,qBAAqB,CAAC;AAwB7B,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAmKlB"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/cli/new.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EAEZ,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAGL,oBAAoB,EAKpB,QAAQ,EAGR,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAe9B,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAiGD,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CA+IlB;AAED,sFAAsF;AACtF,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAAE,EAC9B,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAUhE;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,QAAQ,EAAE,CAMZ"}
package/dist/cli/new.js CHANGED
@@ -1,17 +1,99 @@
1
1
  import path from 'node:path';
2
2
  import pc from 'picocolors';
3
- import { getDefaultConfig, upgradeLegacySkillConfig } from '../config/defaults.js';
3
+ import { getDefaultConfig, presetPlatform, upgradeLegacySkillConfig } from '../config/defaults.js';
4
4
  import { AGINIT_CONFIG_FILENAME } from '../config/schema.js';
5
5
  import { getPreset } from '../presets/registry.js';
6
6
  import { setupGit } from '../adapters/git.js';
7
7
  import { setupAgentsMarkdown, setupClaudeMarkdown } from '../adapters/agents-md.js';
8
8
  import { claudeCodeEnabled, installAllSkills, skillAgents } from '../adapters/skills.js';
9
- import { initGraft } from '../adapters/graft.js';
10
9
  import { ignoreVendoredSkills } from '../adapters/tool-ignores.js';
11
- import { agentBrowserConfigured, agentBrowserStubInstalled, setupAgentBrowser } from '../adapters/agent-browser.js';
12
- import { ensureDir, writeJsonFile } from '../utils/fs.js';
10
+ import { agentBrowserStubInstalled } from '../adapters/agent-browser.js';
11
+ import { microDocPath, projectProfile, resolvePlatformStack, setupMicroDocs } from '../adapters/agent-docs.js';
12
+ import { detectProject } from '../detect/index.js';
13
+ import { activeCapabilities, applyResolvedProfile, e2eDirFor, hasProfileFlags, inferCapabilities, isNodeStack, PLATFORMS, resolveCapabilities } from '../registry/index.js';
14
+ import { SETUP_LABELS, SETUPS } from '../registry/setup.js';
15
+ import { commandExists } from '../utils/shell.js';
16
+ import { ensureDir, fileExists, writeJsonFile } from '../utils/fs.js';
13
17
  import { readProjectConfig, readPackageManifest, validateConfig, validateProjectName, PRESETS, FRAMEWORKS, SUPPORTED_PACKAGE_MANAGERS } from '../config/validation.js';
14
18
  import { logger } from '../utils/logger.js';
19
+ /**
20
+ * Work out the config to save. A saved config is reused as written, so plain
21
+ * reruns are deterministic; profile flags (and --preset/--framework for the
22
+ * browser switches) are applied on top of it.
23
+ */
24
+ function resolveConfig(projectName, targetDir, options, existingConfig, manifest) {
25
+ const flags = options.profile ?? {};
26
+ const detected = detectProject(targetDir);
27
+ const saved = existingConfig ? resolvePlatformStack(existingConfig, targetDir) : null;
28
+ const presetHint = options.preset ?? existingConfig?.preset;
29
+ const platform = flags.platform ??
30
+ existingConfig?.platform ??
31
+ (options.preset && options.preset !== 'generic'
32
+ ? presetPlatform(options.preset)
33
+ : (saved?.platform ?? detected.platform ?? presetPlatform(presetHint ?? 'generic')));
34
+ const stack = existingConfig?.stack ??
35
+ (detected.stack !== 'unknown'
36
+ ? detected.stack
37
+ : platform === 'mobile-native'
38
+ ? 'unknown'
39
+ : 'node');
40
+ const presetName = options.preset ?? existingConfig?.preset ?? 'generic';
41
+ const framework = options.framework ?? (presetName === 'web' ? existingConfig?.framework : undefined);
42
+ if (presetName !== 'web' && framework && framework !== 'none' && framework !== 'existing')
43
+ throw new Error('A web framework requires --preset web.');
44
+ if (presetName === 'web' && framework === 'existing' && !manifest)
45
+ throw new Error('An existing web framework requires an existing package.json. Use --framework none for a new baseline.');
46
+ if (!isNodeStack(stack) && options.preset && options.preset !== 'generic')
47
+ throw new Error(`--preset ${options.preset} scaffolds a Node.js project, but this is a ${stack} project. ` +
48
+ 'Use --preset generic (the default) to keep the project root free of package.json.');
49
+ const packageManager = options.packageManager ?? existingConfig?.packageManager ?? 'pnpm';
50
+ const defaults = getDefaultConfig(projectName, presetName, {
51
+ framework,
52
+ packageManager,
53
+ platform,
54
+ stack,
55
+ flags,
56
+ skills: options.skills !== false,
57
+ // A generic preset leaves an existing package.json (and its test runner) alone.
58
+ harness: !(presetName === 'generic' && manifest !== null)
59
+ });
60
+ if (!existingConfig)
61
+ return validateConfig(defaults);
62
+ let config = {
63
+ ...existingConfig,
64
+ name: projectName,
65
+ preset: presetName,
66
+ ...(isNodeStack(stack) || existingConfig.packageManager !== undefined ? { packageManager } : {}),
67
+ ...(presetName === 'web' ? { framework: framework ?? 'none' } : {}),
68
+ browser: options.framework !== undefined || options.preset !== undefined
69
+ ? { ...existingConfig.browser, ...defaults.browser }
70
+ : existingConfig.browser,
71
+ skills: upgradeLegacySkillConfig(existingConfig.skills)
72
+ };
73
+ if (hasProfileFlags(flags)) {
74
+ const base = existingConfig.capabilities ?? inferCapabilities(existingConfig);
75
+ const profile = resolveCapabilities({
76
+ platform,
77
+ stack,
78
+ framework,
79
+ base,
80
+ basePlatform: saved.platform,
81
+ flags,
82
+ custom: existingConfig.customCapabilities
83
+ }, existingConfig.disabledCapabilities);
84
+ config = applyResolvedProfile({ ...config, platform, stack }, profile, {
85
+ skills: true,
86
+ previous: [...base, ...(existingConfig.customCapabilities ?? []).map((c) => c.id)]
87
+ });
88
+ }
89
+ else if (config.capabilities && config.browser.playwright !== existingConfig.browser.playwright) {
90
+ // --framework turned the Playwright switch; keep the capability list in step.
91
+ config.capabilities = config.browser.playwright
92
+ ? [...config.capabilities, 'playwright']
93
+ : config.capabilities.filter((id) => id !== 'playwright');
94
+ }
95
+ return validateConfig(config);
96
+ }
15
97
  export async function createProject(projectName, options = {}) {
16
98
  validateProjectName(projectName);
17
99
  if (options.preset !== undefined && !PRESETS.includes(options.preset))
@@ -21,52 +103,41 @@ export async function createProject(projectName, options = {}) {
21
103
  if (options.packageManager !== undefined &&
22
104
  !SUPPORTED_PACKAGE_MANAGERS.includes(options.packageManager))
23
105
  throw new Error('Invalid package manager.');
106
+ if (options.profile?.platform !== undefined && !PLATFORMS.includes(options.profile.platform))
107
+ throw new Error(`Invalid platform. Valid platforms are: ${PLATFORMS.join(', ')}`);
24
108
  const defaultDir = projectName.startsWith('@') && projectName.includes('/')
25
109
  ? projectName.split('/').pop()
26
110
  : projectName;
27
111
  const targetDir = path.resolve(options.targetDir || path.join(process.cwd(), defaultDir));
28
112
  const existingConfig = readProjectConfig(targetDir);
29
113
  const manifest = readPackageManifest(targetDir); // Validate before creating or modifying anything.
30
- const presetName = options.preset ?? existingConfig?.preset ?? 'generic';
31
- const framework = options.framework ?? (presetName === 'web' ? existingConfig?.framework : undefined);
32
- if (presetName !== 'web' && framework && framework !== 'none' && framework !== 'existing')
33
- throw new Error('A web framework requires --preset web.');
34
- if (presetName === 'web' && framework === 'existing' && !manifest)
35
- throw new Error('An existing web framework requires an existing package.json. Use --framework none for a new baseline.');
36
- const packageManager = options.packageManager ?? existingConfig?.packageManager ?? 'pnpm';
37
- const dryRun = !!options.dryRun;
38
- const silent = !!options.silent;
39
- const presetHandler = getPreset(presetName);
40
- const defaults = getDefaultConfig(projectName, presetName, {
41
- framework,
42
- packageManager
43
- });
44
- const config = validateConfig(existingConfig
45
- ? {
46
- ...existingConfig,
47
- name: projectName,
48
- preset: presetName,
49
- packageManager,
50
- ...(presetName === 'web' ? { framework: framework ?? 'none' } : {}),
51
- browser: options.framework !== undefined || options.preset !== undefined
52
- ? { ...existingConfig.browser, ...defaults.browser }
53
- : existingConfig.browser,
54
- skills: upgradeLegacySkillConfig(existingConfig.skills)
55
- }
56
- : defaults);
57
- if (presetName !== 'web')
114
+ const config = resolveConfig(projectName, targetDir, options, existingConfig, manifest);
115
+ if (config.preset !== 'web')
58
116
  delete config.framework;
59
117
  if (options.graft === false)
60
118
  config.codebase = { ...config.codebase, graft: false };
61
119
  if (options.skills === false && !existingConfig)
62
120
  config.skills.sources = [];
121
+ const presetName = config.preset;
122
+ const packageManager = config.packageManager ?? 'pnpm';
123
+ const { platform, stack } = resolvePlatformStack(config, targetDir);
124
+ const dryRun = !!options.dryRun;
125
+ const silent = !!options.silent;
126
+ const presetHandler = getPreset(presetName);
127
+ const active = activeCapabilities(config);
63
128
  if (!silent)
64
- logger.banner(`Aginit — ${projectName}`, `Preset: ${presetName} | PM: ${packageManager} | Target: ${targetDir}${dryRun ? ' (DRY RUN)' : ''}`);
129
+ logger.banner(`Aginit — ${projectName}`, `Preset: ${presetName} | Platform: ${platform} (${stack})${isNodeStack(stack) ? ` | PM: ${packageManager}` : ''} | Target: ${targetDir}${dryRun ? ' (DRY RUN)' : ''}`);
130
+ if (!silent)
131
+ logger.dim(`Capabilities: ${active.map((c) => c.id).join(', ') || 'none'}`);
65
132
  let complete = true;
66
- // The agent-browser skill stub is inert without its CLI and browser
67
- // binaries, so provisioning them gets its own step when the skill applies.
68
- const agentBrowserWanted = agentBrowserConfigured(config.skills.sources) || agentBrowserStubInstalled(targetDir);
69
- const totalSteps = agentBrowserWanted ? 7 : 6;
133
+ const installSkills = options.skills !== false && config.skills.sources.length > 0;
134
+ // Upstream setups (agent-browser runtime, e2e, Graft) in registry order, Graft last
135
+ // so its first index sees every generated file.
136
+ const setups = active
137
+ .flatMap((capability) => capability.install.flatMap((step) => (step.kind === 'setup' ? [step.setup] : [])))
138
+ .filter((setup) => !(setup === 'graft' && options.graft === false))
139
+ .sort((a, b) => Number(a === 'graft') - Number(b === 'graft'));
140
+ const totalSteps = 6 + setups.length;
70
141
  let currentStep = 1;
71
142
  // Scaffold into the clean directory before Git adds files that upstream tools reject.
72
143
  if (!silent)
@@ -93,18 +164,16 @@ export async function createProject(projectName, options = {}) {
93
164
  });
94
165
  if (!silent)
95
166
  logger.success(`Wrote ${AGINIT_CONFIG_FILENAME}`);
96
- // Step 4: Write or update AGENTS.md intake contract
167
+ // Step 4: AGENTS.md (task routing) and the docs/agents/ micro-docs it routes to
97
168
  if (!silent)
98
- logger.step(currentStep++, totalSteps, 'Generating AGENTS.md intake guidance');
99
- setupAgentsMarkdown(targetDir, config, { dryRun, silent });
100
- if (claudeCodeEnabled(config))
101
- setupClaudeMarkdown(targetDir, { dryRun, silent });
169
+ logger.step(currentStep++, totalSteps, 'Generating AGENTS.md and docs/agents/');
170
+ const docs = syncAgentDocs(targetDir, config, { dryRun, silent });
102
171
  if (!silent)
103
- logger.success('Configured AGENTS.md');
172
+ logger.success(`Configured AGENTS.md${docs.length ? ` and ${docs.map(microDocPath).join(', ')}` : ''}`);
104
173
  // Step 5: Install skills via skills.sh engine
105
174
  if (!silent)
106
175
  logger.step(currentStep++, totalSteps, 'Installing upstream skills via skills.sh');
107
- if (options.skills !== false && config.skills.sources.length > 0) {
176
+ if (installSkills) {
108
177
  const { installed, failed } = await installAllSkills(targetDir, config.skills.sources, {
109
178
  agents: skillAgents(config),
110
179
  dryRun,
@@ -123,37 +192,33 @@ export async function createProject(projectName, options = {}) {
123
192
  else if (!silent) {
124
193
  logger.dim('Skills installation skipped (--no-skills or empty configuration)');
125
194
  }
126
- if ((options.skills !== false && config.skills.sources.length > 0) || agentBrowserWanted) {
195
+ const agentBrowserStub = agentBrowserStubInstalled(targetDir);
196
+ if (installSkills || agentBrowserStub) {
127
197
  const advice = ignoreVendoredSkills(targetDir, { dryRun, silent: true });
128
198
  if (!silent)
129
199
  for (const line of advice)
130
200
  logger.warn(line);
131
201
  }
132
- // Provision the agent-browser runtime the skill stub drives
133
- if (agentBrowserWanted) {
202
+ // A stub installed earlier still needs its runtime, even when skills are skipped now.
203
+ if (agentBrowserStub && !setups.includes('agent-browser'))
204
+ setups.unshift('agent-browser');
205
+ for (const setup of setups) {
134
206
  if (!silent)
135
- logger.step(currentStep++, totalSteps, 'Provisioning agent-browser runtime');
136
- const abOk = await setupAgentBrowser({ dryRun, silent, cwd: targetDir });
137
- complete &&= abOk;
138
- if (!silent && abOk)
139
- logger.success('agent-browser runtime ready (CLI + browser)');
207
+ logger.step(currentStep++, totalSteps, SETUP_LABELS[setup]);
208
+ const ok = await SETUPS[setup]({ targetDir, config, platform, stack, dryRun, silent });
209
+ complete &&= ok;
210
+ if (ok && !silent)
211
+ logger.success(`${setup} ready`);
140
212
  }
141
- // Codebase intelligence (Graft)
213
+ // CLIs aginit does not install: report the missing ones with their install command.
142
214
  if (!silent)
143
- logger.step(currentStep++, totalSteps, 'Configuring codebase intelligence');
144
- if (config.codebase.graft && options.graft !== false) {
145
- const graftOk = await initGraft(targetDir, {
146
- dryRun,
147
- silent,
148
- claude: claudeCodeEnabled(config)
149
- });
150
- complete &&= graftOk;
151
- if (graftOk && !silent) {
152
- logger.success('Graft context graph initialized');
153
- }
154
- }
155
- else if (!silent) {
156
- logger.dim('Graft setup skipped (--no-graft or codebase.graft: false)');
215
+ logger.step(currentStep++, totalSteps, 'Checking capability CLIs');
216
+ const missing = await missingBinaries(active, setups);
217
+ if (!silent) {
218
+ if (missing.length === 0)
219
+ logger.success('Every capability CLI is available');
220
+ for (const { name, bin, install } of missing)
221
+ logger.warn(`${name} needs the \`${bin}\` CLI: ${install}`);
157
222
  }
158
223
  if (!silent) {
159
224
  console.log();
@@ -166,11 +231,35 @@ export async function createProject(projectName, options = {}) {
166
231
  const relativeTarget = path.relative(process.cwd(), targetDir);
167
232
  if (relativeTarget)
168
233
  console.log(pc.cyan(` cd ${relativeTarget}`));
169
- console.log(pc.cyan(` ${packageManager} install`));
234
+ if (isNodeStack(stack) && (manifest || fileExists(path.join(targetDir, 'package.json')) || dryRun))
235
+ console.log(pc.cyan(` ${packageManager} install`));
236
+ if (active.some((c) => c.id === 'e2e') && e2eDirFor(stack))
237
+ console.log(pc.cyan(` (cd ${e2eDirFor(stack)} && npm install)`));
170
238
  console.log(pc.cyan(' Open the repository in your AI coding agent'));
171
239
  console.log(pc.dim(' Prompt the agent: ') + pc.bold(pc.green('"bootstrap this project"')));
172
240
  console.log();
173
241
  }
174
242
  return complete;
175
243
  }
244
+ /** Binaries of active capabilities that are not on PATH (setups report their own). */
245
+ export async function missingBinaries(active, setups) {
246
+ const missing = [];
247
+ for (const capability of active) {
248
+ if (capability.install.some((step) => step.kind === 'setup' && setups.includes(step.setup)))
249
+ continue;
250
+ for (const step of capability.install)
251
+ if (step.kind === 'binary' && !(await commandExists(step.bin)))
252
+ missing.push({ name: capability.name, bin: step.bin, install: step.install });
253
+ }
254
+ return missing;
255
+ }
256
+ /** Refresh AGENTS.md, CLAUDE.md and docs/agents/ from the config. */
257
+ export function syncAgentDocs(targetDir, config, options = {}) {
258
+ const scripts = readPackageManifest(targetDir)?.scripts;
259
+ const docs = setupMicroDocs(targetDir, projectProfile(config, { targetDir, scripts }), options);
260
+ setupAgentsMarkdown(targetDir, config, { ...options, docs });
261
+ if (claudeCodeEnabled(config))
262
+ setupClaudeMarkdown(targetDir, options);
263
+ return docs;
264
+ }
176
265
  //# sourceMappingURL=new.js.map