@antomanc/aginit 0.1.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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +245 -0
  3. package/THIRD_PARTY_NOTICES.md +36 -0
  4. package/bin/aginit.js +8 -0
  5. package/dist/adapters/agents-md.d.ts +8 -0
  6. package/dist/adapters/agents-md.d.ts.map +1 -0
  7. package/dist/adapters/agents-md.js +121 -0
  8. package/dist/adapters/agents-md.js.map +1 -0
  9. package/dist/adapters/browser.d.ts +5 -0
  10. package/dist/adapters/browser.d.ts.map +1 -0
  11. package/dist/adapters/browser.js +42 -0
  12. package/dist/adapters/browser.js.map +1 -0
  13. package/dist/adapters/git.d.ts +5 -0
  14. package/dist/adapters/git.d.ts.map +1 -0
  15. package/dist/adapters/git.js +90 -0
  16. package/dist/adapters/git.js.map +1 -0
  17. package/dist/adapters/graft.d.ts +14 -0
  18. package/dist/adapters/graft.d.ts.map +1 -0
  19. package/dist/adapters/graft.js +56 -0
  20. package/dist/adapters/graft.js.map +1 -0
  21. package/dist/adapters/package-manager.d.ts +20 -0
  22. package/dist/adapters/package-manager.d.ts.map +1 -0
  23. package/dist/adapters/package-manager.js +89 -0
  24. package/dist/adapters/package-manager.js.map +1 -0
  25. package/dist/adapters/skills.d.ts +29 -0
  26. package/dist/adapters/skills.d.ts.map +1 -0
  27. package/dist/adapters/skills.js +80 -0
  28. package/dist/adapters/skills.js.map +1 -0
  29. package/dist/cli/doctor.d.ts +2 -0
  30. package/dist/cli/doctor.d.ts.map +1 -0
  31. package/dist/cli/doctor.js +212 -0
  32. package/dist/cli/doctor.js.map +1 -0
  33. package/dist/cli/init.d.ts +3 -0
  34. package/dist/cli/init.d.ts.map +1 -0
  35. package/dist/cli/init.js +32 -0
  36. package/dist/cli/init.js.map +1 -0
  37. package/dist/cli/main.d.ts +3 -0
  38. package/dist/cli/main.d.ts.map +1 -0
  39. package/dist/cli/main.js +162 -0
  40. package/dist/cli/main.js.map +1 -0
  41. package/dist/cli/new.d.ts +15 -0
  42. package/dist/cli/new.d.ts.map +1 -0
  43. package/dist/cli/new.js +161 -0
  44. package/dist/cli/new.js.map +1 -0
  45. package/dist/cli/wizard.d.ts +31 -0
  46. package/dist/cli/wizard.d.ts.map +1 -0
  47. package/dist/cli/wizard.js +260 -0
  48. package/dist/cli/wizard.js.map +1 -0
  49. package/dist/config/defaults.d.ts +8 -0
  50. package/dist/config/defaults.d.ts.map +1 -0
  51. package/dist/config/defaults.js +122 -0
  52. package/dist/config/defaults.js.map +1 -0
  53. package/dist/config/schema.d.ts +40 -0
  54. package/dist/config/schema.d.ts.map +1 -0
  55. package/dist/config/schema.js +4 -0
  56. package/dist/config/schema.js.map +1 -0
  57. package/dist/config/validation.d.ts +11 -0
  58. package/dist/config/validation.d.ts.map +1 -0
  59. package/dist/config/validation.js +99 -0
  60. package/dist/config/validation.js.map +1 -0
  61. package/dist/index.d.ts +16 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +16 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/presets/adr.d.ts +5 -0
  66. package/dist/presets/adr.d.ts.map +1 -0
  67. package/dist/presets/adr.js +33 -0
  68. package/dist/presets/adr.js.map +1 -0
  69. package/dist/presets/cli.d.ts +3 -0
  70. package/dist/presets/cli.d.ts.map +1 -0
  71. package/dist/presets/cli.js +126 -0
  72. package/dist/presets/cli.js.map +1 -0
  73. package/dist/presets/generic.d.ts +3 -0
  74. package/dist/presets/generic.d.ts.map +1 -0
  75. package/dist/presets/generic.js +29 -0
  76. package/dist/presets/generic.js.map +1 -0
  77. package/dist/presets/registry.d.ts +6 -0
  78. package/dist/presets/registry.d.ts.map +1 -0
  79. package/dist/presets/registry.js +20 -0
  80. package/dist/presets/registry.js.map +1 -0
  81. package/dist/presets/testing.d.ts +6 -0
  82. package/dist/presets/testing.d.ts.map +1 -0
  83. package/dist/presets/testing.js +46 -0
  84. package/dist/presets/testing.js.map +1 -0
  85. package/dist/presets/types.d.ts +14 -0
  86. package/dist/presets/types.d.ts.map +1 -0
  87. package/dist/presets/types.js +2 -0
  88. package/dist/presets/types.js.map +1 -0
  89. package/dist/presets/web.d.ts +3 -0
  90. package/dist/presets/web.d.ts.map +1 -0
  91. package/dist/presets/web.js +84 -0
  92. package/dist/presets/web.js.map +1 -0
  93. package/dist/utils/fs.d.ts +13 -0
  94. package/dist/utils/fs.d.ts.map +1 -0
  95. package/dist/utils/fs.js +60 -0
  96. package/dist/utils/fs.js.map +1 -0
  97. package/dist/utils/logger.d.ts +10 -0
  98. package/dist/utils/logger.d.ts.map +1 -0
  99. package/dist/utils/logger.js +20 -0
  100. package/dist/utils/logger.js.map +1 -0
  101. package/dist/utils/shell.d.ts +17 -0
  102. package/dist/utils/shell.d.ts.map +1 -0
  103. package/dist/utils/shell.js +87 -0
  104. package/dist/utils/shell.js.map +1 -0
  105. package/package.json +71 -0
  106. package/src/adapters/agents-md.ts +143 -0
  107. package/src/adapters/browser.ts +49 -0
  108. package/src/adapters/git.ts +100 -0
  109. package/src/adapters/graft.ts +80 -0
  110. package/src/adapters/package-manager.ts +116 -0
  111. package/src/adapters/skills.ts +117 -0
  112. package/src/cli/doctor.ts +244 -0
  113. package/src/cli/init.ts +34 -0
  114. package/src/cli/main.ts +191 -0
  115. package/src/cli/new.ts +200 -0
  116. package/src/cli/wizard.ts +300 -0
  117. package/src/config/defaults.ts +137 -0
  118. package/src/config/schema.ts +44 -0
  119. package/src/config/validation.ts +96 -0
  120. package/src/index.ts +15 -0
  121. package/src/presets/adr.ts +37 -0
  122. package/src/presets/cli.ts +136 -0
  123. package/src/presets/generic.ts +32 -0
  124. package/src/presets/registry.ts +24 -0
  125. package/src/presets/testing.ts +56 -0
  126. package/src/presets/types.ts +15 -0
  127. package/src/presets/web.ts +99 -0
  128. package/src/utils/fs.ts +79 -0
  129. package/src/utils/logger.ts +20 -0
  130. package/src/utils/shell.ts +116 -0
@@ -0,0 +1,260 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import { validateProjectName, readProjectConfig } from '../config/validation.js';
4
+ import { detectPackageManager } from '../adapters/package-manager.js';
5
+ import { createProject } from './new.js';
6
+ import { initCurrentDirectory } from './init.js';
7
+ export function isInteractive() {
8
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY && !process.env.CI);
9
+ }
10
+ function assertNotCancelled(value) {
11
+ if (p.isCancel(value)) {
12
+ p.cancel('Operation cancelled.');
13
+ process.exit(0);
14
+ }
15
+ return value;
16
+ }
17
+ export async function promptNewProject(defaults) {
18
+ let projectName = defaults?.projectName || '';
19
+ if (!projectName) {
20
+ const res = await p.text({
21
+ message: 'What is your project name?',
22
+ placeholder: 'my-ai-project',
23
+ validate: (val) => {
24
+ if (!val || val.trim().length === 0)
25
+ return 'Project name is required';
26
+ try {
27
+ validateProjectName(val.trim());
28
+ }
29
+ catch (error) {
30
+ return error instanceof Error ? error.message : 'Invalid project name';
31
+ }
32
+ }
33
+ });
34
+ projectName = String(assertNotCancelled(res)).trim();
35
+ }
36
+ let preset = defaults?.preset;
37
+ if (!preset) {
38
+ const res = await p.select({
39
+ message: 'Select a project preset:',
40
+ initialValue: 'web',
41
+ options: [
42
+ {
43
+ value: 'web',
44
+ label: 'Web Application',
45
+ hint: 'React, Next.js, Vite, or agnostic + Vitest/Playwright'
46
+ },
47
+ { value: 'cli', label: 'CLI Tool', hint: 'TypeScript, Commander, Picocolors + Vitest' },
48
+ {
49
+ value: 'generic',
50
+ label: 'Generic / Existing Codebase',
51
+ hint: 'Codebase graph + agent intake guide'
52
+ }
53
+ ]
54
+ });
55
+ preset = assertNotCancelled(res);
56
+ }
57
+ let framework = defaults?.framework || 'none';
58
+ if (preset === 'web' && defaults?.framework === undefined) {
59
+ const res = await p.select({
60
+ message: 'Choose a web framework:',
61
+ initialValue: 'none',
62
+ options: [
63
+ {
64
+ value: 'none',
65
+ label: 'Framework-agnostic (Recommended)',
66
+ hint: 'Clean TypeScript + Vitest, zero bundler lock-in'
67
+ },
68
+ {
69
+ value: 'vite',
70
+ label: 'Vite',
71
+ hint: 'Official Vite React-TS scaffolder + Playwright E2E'
72
+ },
73
+ { value: 'next', label: 'Next.js', hint: 'Official create-next-app + Playwright E2E' }
74
+ ]
75
+ });
76
+ framework = assertNotCancelled(res);
77
+ }
78
+ let specWorkflow = defaults?.specWorkflow;
79
+ if (specWorkflow === undefined) {
80
+ const res = await p.select({
81
+ message: 'Select AI engineering workflow:',
82
+ initialValue: 'minimal',
83
+ options: [
84
+ {
85
+ value: 'minimal',
86
+ label: 'Standard Workflow (Recommended)',
87
+ hint: 'TDD, Code Review, Diagnosing Bugs'
88
+ },
89
+ {
90
+ value: 'spec',
91
+ label: 'Spec & Tickets Workflow',
92
+ hint: 'Adds to-spec, to-tickets, implement-spec'
93
+ }
94
+ ]
95
+ });
96
+ const selected = assertNotCancelled(res);
97
+ specWorkflow = selected === 'spec';
98
+ }
99
+ let packageManager = defaults?.packageManager;
100
+ if (!packageManager) {
101
+ const res = await p.select({
102
+ message: 'Select package manager:',
103
+ initialValue: 'pnpm',
104
+ options: [
105
+ {
106
+ value: 'pnpm',
107
+ label: 'pnpm (Recommended)',
108
+ hint: 'Fast, disk-efficient & compliant workspace'
109
+ },
110
+ { value: 'npm', label: 'npm', hint: 'Standard Node.js package manager' },
111
+ { value: 'yarn', label: 'yarn', hint: 'Yarn package manager' },
112
+ { value: 'bun', label: 'bun', hint: 'Fast all-in-one JavaScript runtime & toolkit' }
113
+ ]
114
+ });
115
+ packageManager = assertNotCancelled(res);
116
+ }
117
+ return {
118
+ projectName,
119
+ preset,
120
+ framework,
121
+ packageManager,
122
+ specWorkflow
123
+ };
124
+ }
125
+ export async function promptInitProject(defaults) {
126
+ const targetDir = defaults?.targetDir || process.cwd();
127
+ let preset = defaults?.preset;
128
+ if (!preset) {
129
+ const res = await p.select({
130
+ message: 'Select project preset to configure in this directory:',
131
+ initialValue: 'web',
132
+ options: [
133
+ { value: 'web', label: 'Web Application', hint: 'Impeccable UI, agent-browser, Vitest' },
134
+ { value: 'cli', label: 'CLI Tool', hint: 'TypeScript, Vitest' },
135
+ {
136
+ value: 'generic',
137
+ label: 'Generic Repository',
138
+ hint: 'Codebase graph + agent intake guide'
139
+ }
140
+ ]
141
+ });
142
+ preset = assertNotCancelled(res);
143
+ }
144
+ let framework = defaults?.framework || 'existing';
145
+ if (preset === 'web' && defaults?.framework === undefined) {
146
+ const res = await p.select({
147
+ message: 'Select web framework setting:',
148
+ initialValue: 'existing',
149
+ options: [
150
+ {
151
+ value: 'existing',
152
+ label: 'Existing Web Setup (Recommended)',
153
+ hint: 'Preserve existing bundler and dependencies'
154
+ },
155
+ { value: 'none', label: 'Framework-agnostic', hint: 'Baseline TypeScript' },
156
+ { value: 'vite', label: 'Vite', hint: 'Vite React setup' },
157
+ { value: 'next', label: 'Next.js', hint: 'Next.js setup' }
158
+ ]
159
+ });
160
+ framework = assertNotCancelled(res);
161
+ }
162
+ let specWorkflow = defaults?.specWorkflow;
163
+ if (specWorkflow === undefined) {
164
+ const res = await p.select({
165
+ message: 'Select AI engineering workflow:',
166
+ initialValue: 'minimal',
167
+ options: [
168
+ {
169
+ value: 'minimal',
170
+ label: 'Standard Workflow (Recommended)',
171
+ hint: 'TDD, Code Review, Diagnosing Bugs'
172
+ },
173
+ {
174
+ value: 'spec',
175
+ label: 'Spec & Tickets Workflow',
176
+ hint: 'Adds to-spec, to-tickets, implement-spec'
177
+ }
178
+ ]
179
+ });
180
+ const selected = assertNotCancelled(res);
181
+ specWorkflow = selected === 'spec';
182
+ }
183
+ // Auto-detect and preserve existing package manager without prompting
184
+ let packageManager = defaults?.packageManager;
185
+ if (!packageManager) {
186
+ const detected = detectPackageManager(targetDir);
187
+ if (detected) {
188
+ packageManager = detected;
189
+ }
190
+ else {
191
+ const res = await p.select({
192
+ message: 'Select package manager for this project:',
193
+ initialValue: 'pnpm',
194
+ options: [
195
+ { value: 'pnpm', label: 'pnpm (Recommended)', hint: 'Fast, disk-efficient workspace' },
196
+ { value: 'npm', label: 'npm', hint: 'Standard Node.js package manager' },
197
+ { value: 'yarn', label: 'yarn', hint: 'Yarn package manager' },
198
+ { value: 'bun', label: 'bun', hint: 'Fast runtime and package manager' }
199
+ ]
200
+ });
201
+ packageManager = assertNotCancelled(res);
202
+ }
203
+ }
204
+ return {
205
+ preset,
206
+ framework,
207
+ packageManager,
208
+ specWorkflow
209
+ };
210
+ }
211
+ export async function runInteractiveWizard() {
212
+ p.intro(pc.bgCyan(pc.black(' aginit ')) + pc.dim(' — AI-First Project Bootstrap'));
213
+ const action = assertNotCancelled(await p.select({
214
+ message: 'What would you like to do?',
215
+ initialValue: 'new',
216
+ options: [
217
+ {
218
+ value: 'new',
219
+ label: 'Create a brand new AI-first project',
220
+ hint: 'Scaffold in a new directory'
221
+ },
222
+ {
223
+ value: 'init',
224
+ label: 'Initialize AI capabilities in current directory',
225
+ hint: 'Add AGENTS.md, skills & Graft safely'
226
+ }
227
+ ]
228
+ }));
229
+ let complete;
230
+ if (action === 'new') {
231
+ const answers = await promptNewProject();
232
+ p.outro(pc.cyan(`Scaffolding "${answers.projectName}"...`));
233
+ complete = await createProject(answers.projectName, {
234
+ preset: answers.preset,
235
+ framework: answers.framework,
236
+ packageManager: answers.packageManager,
237
+ specWorkflow: answers.specWorkflow
238
+ });
239
+ }
240
+ else {
241
+ const saved = readProjectConfig(process.cwd());
242
+ if (saved) {
243
+ p.outro(pc.cyan('Configuring current directory using saved settings...'));
244
+ complete = await initCurrentDirectory();
245
+ }
246
+ else {
247
+ const answers = await promptInitProject();
248
+ p.outro(pc.cyan('Configuring current directory...'));
249
+ complete = await initCurrentDirectory({
250
+ preset: answers.preset,
251
+ framework: answers.framework,
252
+ packageManager: answers.packageManager,
253
+ specWorkflow: answers.specWorkflow
254
+ });
255
+ }
256
+ }
257
+ if (!complete)
258
+ process.exitCode = 1;
259
+ }
260
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/cli/wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { AginitConfig, PresetType, WebFramework, PackageManager } from './schema.js';
2
+ export interface DefaultConfigOptions {
3
+ framework?: WebFramework;
4
+ specWorkflow?: boolean;
5
+ packageManager?: PackageManager;
6
+ }
7
+ export declare function getDefaultConfig(name: string, preset: PresetType, options?: DefaultConfigOptions): AginitConfig;
8
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,oBAAyB,GACjC,YAAY,CA4Hd"}
@@ -0,0 +1,122 @@
1
+ export function getDefaultConfig(name, preset, options = {}) {
2
+ const specWorkflow = !!options.specWorkflow;
3
+ const packageManager = options.packageManager || 'pnpm';
4
+ const mattSkills = specWorkflow
5
+ ? ['tdd', 'code-review', 'diagnosing-bugs', 'to-spec', 'to-tickets', 'implement-spec']
6
+ : ['tdd', 'code-review', 'diagnosing-bugs'];
7
+ switch (preset) {
8
+ case 'web': {
9
+ const framework = options.framework || 'none';
10
+ const hasWebTarget = framework === 'vite' || framework === 'next';
11
+ return {
12
+ schemaVersion: '1.0.0',
13
+ name,
14
+ preset: 'web',
15
+ framework,
16
+ packageManager,
17
+ agents: {
18
+ primary: 'antigravity',
19
+ secondary: 'codex'
20
+ },
21
+ skills: {
22
+ workflow: specWorkflow ? 'spec' : 'minimal',
23
+ sources: [
24
+ {
25
+ package: 'mattpocock/skills',
26
+ skills: mattSkills
27
+ },
28
+ {
29
+ package: 'pbakaus/impeccable',
30
+ skills: ['impeccable']
31
+ },
32
+ {
33
+ package: 'vercel-labs/agent-browser',
34
+ skills: ['agent-browser']
35
+ }
36
+ ]
37
+ },
38
+ codebase: {
39
+ graft: true
40
+ },
41
+ browser: {
42
+ visualAgent: true,
43
+ playwright: hasWebTarget
44
+ },
45
+ docs: {
46
+ adr: true
47
+ },
48
+ github: {
49
+ ci: true
50
+ }
51
+ };
52
+ }
53
+ case 'cli':
54
+ return {
55
+ schemaVersion: '1.0.0',
56
+ name,
57
+ preset: 'cli',
58
+ packageManager,
59
+ agents: {
60
+ primary: 'antigravity',
61
+ secondary: 'codex'
62
+ },
63
+ skills: {
64
+ workflow: specWorkflow ? 'spec' : 'minimal',
65
+ sources: [
66
+ {
67
+ package: 'mattpocock/skills',
68
+ skills: mattSkills
69
+ }
70
+ ]
71
+ },
72
+ codebase: {
73
+ graft: true
74
+ },
75
+ browser: {
76
+ visualAgent: false,
77
+ playwright: false
78
+ },
79
+ docs: {
80
+ adr: true
81
+ },
82
+ github: {
83
+ ci: true
84
+ }
85
+ };
86
+ case 'generic':
87
+ default:
88
+ return {
89
+ schemaVersion: '1.0.0',
90
+ name,
91
+ preset: 'generic',
92
+ packageManager,
93
+ agents: {
94
+ primary: 'antigravity',
95
+ secondary: 'codex'
96
+ },
97
+ skills: {
98
+ workflow: specWorkflow ? 'spec' : 'minimal',
99
+ sources: [
100
+ {
101
+ package: 'mattpocock/skills',
102
+ skills: mattSkills
103
+ }
104
+ ]
105
+ },
106
+ codebase: {
107
+ graft: true
108
+ },
109
+ browser: {
110
+ visualAgent: false,
111
+ playwright: false
112
+ },
113
+ docs: {
114
+ adr: true
115
+ },
116
+ github: {
117
+ ci: false
118
+ }
119
+ };
120
+ }
121
+ }
122
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type PresetType = 'web' | 'cli' | 'generic';
2
+ export type WebFramework = 'none' | 'vite' | 'next' | 'existing';
3
+ export type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';
4
+ export interface SkillSourceConfig {
5
+ package: string;
6
+ skills: string[];
7
+ }
8
+ export interface AginitConfig {
9
+ schemaVersion: string;
10
+ name: string;
11
+ preset: PresetType;
12
+ framework?: WebFramework;
13
+ packageManager?: PackageManager;
14
+ agents: {
15
+ primary: string;
16
+ secondary: string;
17
+ };
18
+ skills: {
19
+ workflow?: 'minimal' | 'spec';
20
+ sources: SkillSourceConfig[];
21
+ };
22
+ codebase: {
23
+ graft: boolean;
24
+ };
25
+ browser: {
26
+ visualAgent: boolean;
27
+ playwright: boolean;
28
+ };
29
+ docs: {
30
+ adr: boolean;
31
+ };
32
+ github: {
33
+ ci: boolean;
34
+ };
35
+ }
36
+ export type AIProjectConfig = AginitConfig;
37
+ export declare const AGINIT_CONFIG_FILENAME = "aginit.config.json";
38
+ export declare const LEGACY_CONFIG_FILENAME = "ai.config.json";
39
+ export declare const AI_CONFIG_FILENAME = "aginit.config.json";
40
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;QAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;KAC9B,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE,OAAO,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACN,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;CACH;AAGD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC;AAE3C,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAC3D,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AACvD,eAAO,MAAM,kBAAkB,uBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const AGINIT_CONFIG_FILENAME = 'aginit.config.json';
2
+ export const LEGACY_CONFIG_FILENAME = 'ai.config.json';
3
+ export const AI_CONFIG_FILENAME = AGINIT_CONFIG_FILENAME;
4
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { AginitConfig } from './schema.js';
2
+ export declare const PRESETS: readonly ["web", "cli", "generic"];
3
+ export declare const FRAMEWORKS: readonly ["none", "vite", "next", "existing"];
4
+ export declare const SUPPORTED_PACKAGE_MANAGERS: readonly ["pnpm", "npm", "yarn", "bun"];
5
+ export declare function isRecord(value: unknown): value is Record<string, any>;
6
+ export declare function validateProjectName(name: string): void;
7
+ export declare function validateUpstreamArgument(value: unknown, label: string): asserts value is string;
8
+ export declare function validateConfig(value: unknown): AginitConfig;
9
+ export declare function readProjectConfig(dir: string): AginitConfig | null;
10
+ export declare function readPackageManifest(dir: string): Record<string, any> | null;
11
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAkD,MAAM,aAAa,CAAC;AAE3F,eAAO,MAAM,OAAO,oCAAqC,CAAC;AAC1D,eAAO,MAAM,UAAU,+CAAgD,CAAC;AACxE,eAAO,MAAM,0BAA0B,yCAA0C,CAAC;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAErE;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMtD;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAW/F;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAoC3D;AACD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYlE;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAgB3E"}
@@ -0,0 +1,99 @@
1
+ import path from 'node:path';
2
+ import { fileExists, readJsonFile } from '../utils/fs.js';
3
+ import { AGINIT_CONFIG_FILENAME, LEGACY_CONFIG_FILENAME } from './schema.js';
4
+ export const PRESETS = ['web', 'cli', 'generic'];
5
+ export const FRAMEWORKS = ['none', 'vite', 'next', 'existing'];
6
+ export const SUPPORTED_PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn', 'bun'];
7
+ export function isRecord(value) {
8
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
9
+ }
10
+ export function validateProjectName(name) {
11
+ if (!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(name) || name.length > 214) {
12
+ throw new Error('Invalid project name. Use a lowercase npm package name (letters, numbers, dots, dashes, underscores; optional @scope/name).');
13
+ }
14
+ }
15
+ export function validateUpstreamArgument(value, label) {
16
+ if (typeof value !== 'string' ||
17
+ !value.trim() ||
18
+ value.startsWith('-') ||
19
+ /[\x00-\x1f\x7f]/.test(value)) {
20
+ throw new Error(`Invalid ${label}: expected a nonempty value that does not begin with an option.`);
21
+ }
22
+ }
23
+ export function validateConfig(value) {
24
+ const fail = (field) => {
25
+ throw new Error(`Invalid project configuration: ${field}`);
26
+ };
27
+ if (!isRecord(value))
28
+ return fail('expected a JSON object');
29
+ if (value.schemaVersion !== undefined && value.schemaVersion !== '1.0.0')
30
+ fail('unsupported schemaVersion');
31
+ if (typeof value.name !== 'string' || !value.name)
32
+ fail('name');
33
+ if (!PRESETS.includes(value.preset))
34
+ fail('preset');
35
+ if (value.framework !== undefined && !FRAMEWORKS.includes(value.framework))
36
+ fail('framework');
37
+ if (value.packageManager !== undefined &&
38
+ !SUPPORTED_PACKAGE_MANAGERS.includes(value.packageManager))
39
+ fail('packageManager');
40
+ if (!isRecord(value.agents))
41
+ fail('agents');
42
+ for (const key of ['primary', 'secondary'])
43
+ validateUpstreamArgument(value.agents[key], `agent ${key}`);
44
+ if (!isRecord(value.skills) || !Array.isArray(value.skills.sources))
45
+ fail('skills.sources');
46
+ if (value.skills.workflow !== undefined && !['minimal', 'spec'].includes(value.skills.workflow))
47
+ fail('skills.workflow');
48
+ for (const source of value.skills.sources) {
49
+ if (!isRecord(source) || !Array.isArray(source.skills))
50
+ fail('skill source');
51
+ validateUpstreamArgument(source.package, 'skill package');
52
+ for (const skill of source.skills)
53
+ validateUpstreamArgument(skill, 'skill name');
54
+ }
55
+ for (const [section, keys] of Object.entries({
56
+ codebase: ['graft'],
57
+ browser: ['visualAgent', 'playwright'],
58
+ docs: ['adr'],
59
+ github: ['ci']
60
+ })) {
61
+ if (!isRecord(value[section]))
62
+ fail(section);
63
+ for (const key of keys)
64
+ if (typeof value[section][key] !== 'boolean')
65
+ fail(`${section}.${key}`);
66
+ }
67
+ return { ...value, schemaVersion: '1.0.0' };
68
+ }
69
+ export function readProjectConfig(dir) {
70
+ const file = [AGINIT_CONFIG_FILENAME, LEGACY_CONFIG_FILENAME]
71
+ .map((name) => path.join(dir, name))
72
+ .find(fileExists);
73
+ if (!file)
74
+ return null;
75
+ try {
76
+ return validateConfig(readJsonFile(file));
77
+ }
78
+ catch (error) {
79
+ throw new Error(`${path.basename(file)}: ${error instanceof Error ? error.message : String(error)}`);
80
+ }
81
+ }
82
+ export function readPackageManifest(dir) {
83
+ const file = path.join(dir, 'package.json');
84
+ if (!fileExists(file))
85
+ return null;
86
+ const pkg = readJsonFile(file);
87
+ if (!isRecord(pkg))
88
+ throw new Error('Invalid package.json: expected a JSON object.');
89
+ for (const key of ['scripts', 'dependencies', 'devDependencies']) {
90
+ if (pkg[key] !== undefined &&
91
+ (!isRecord(pkg[key]) || Object.values(pkg[key]).some((v) => typeof v !== 'string'))) {
92
+ throw new Error(`Invalid package.json: ${key} must contain string values.`);
93
+ }
94
+ }
95
+ if (pkg.name !== undefined && typeof pkg.name !== 'string')
96
+ throw new Error('Invalid package.json: name must be a string.');
97
+ return pkg;
98
+ }
99
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from './config/schema.js';
2
+ export * from './config/defaults.js';
3
+ export * from './config/validation.js';
4
+ export * from './presets/registry.js';
5
+ export * from './presets/types.js';
6
+ export * from './adapters/package-manager.js';
7
+ export * from './adapters/git.js';
8
+ export * from './adapters/skills.js';
9
+ export * from './adapters/graft.js';
10
+ export * from './adapters/agents-md.js';
11
+ export * from './adapters/browser.js';
12
+ export * from './cli/new.js';
13
+ export * from './cli/init.js';
14
+ export * from './cli/doctor.js';
15
+ export * from './cli/wizard.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from './config/schema.js';
2
+ export * from './config/defaults.js';
3
+ export * from './config/validation.js';
4
+ export * from './presets/registry.js';
5
+ export * from './presets/types.js';
6
+ export * from './adapters/package-manager.js';
7
+ export * from './adapters/git.js';
8
+ export * from './adapters/skills.js';
9
+ export * from './adapters/graft.js';
10
+ export * from './adapters/agents-md.js';
11
+ export * from './adapters/browser.js';
12
+ export * from './cli/new.js';
13
+ export * from './cli/init.js';
14
+ export * from './cli/doctor.js';
15
+ export * from './cli/wizard.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function setupAdr(targetDir: string, options?: {
2
+ dryRun?: boolean;
3
+ silent?: boolean;
4
+ }): void;
5
+ //# sourceMappingURL=adr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adr.d.ts","sourceRoot":"","sources":["../../src/presets/adr.ts"],"names":[],"mappings":"AA6BA,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,IAAI,CAIN"}