@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.
- package/CHANGELOG.md +28 -0
- package/README.md +108 -28
- package/THIRD_PARTY_NOTICES.md +92 -16
- package/dist/adapters/agent-docs.d.ts +32 -0
- package/dist/adapters/agent-docs.d.ts.map +1 -0
- package/dist/adapters/agent-docs.js +146 -0
- package/dist/adapters/agent-docs.js.map +1 -0
- package/dist/adapters/agents-md.d.ts +13 -1
- package/dist/adapters/agents-md.d.ts.map +1 -1
- package/dist/adapters/agents-md.js +137 -120
- package/dist/adapters/agents-md.js.map +1 -1
- package/dist/adapters/e2e.d.ts +15 -0
- package/dist/adapters/e2e.d.ts.map +1 -0
- package/dist/adapters/e2e.js +55 -0
- package/dist/adapters/e2e.js.map +1 -0
- package/dist/adapters/skills.d.ts +5 -0
- package/dist/adapters/skills.d.ts.map +1 -1
- package/dist/adapters/skills.js +17 -0
- package/dist/adapters/skills.js.map +1 -1
- package/dist/cli/capabilities.d.ts +17 -0
- package/dist/cli/capabilities.d.ts.map +1 -0
- package/dist/cli/capabilities.js +149 -0
- package/dist/cli/capabilities.js.map +1 -0
- package/dist/cli/doctor.d.ts +16 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +90 -70
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/init.js +1 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +117 -20
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/new.d.ts +15 -1
- package/dist/cli/new.d.ts.map +1 -1
- package/dist/cli/new.js +157 -68
- package/dist/cli/new.js.map +1 -1
- package/dist/cli/wizard.d.ts +5 -0
- package/dist/cli/wizard.d.ts.map +1 -1
- package/dist/cli/wizard.js +104 -102
- package/dist/cli/wizard.js.map +1 -1
- package/dist/config/defaults.d.ts +14 -6
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +38 -174
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +14 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/validation.d.ts +1 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +63 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/detect/index.d.ts +18 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +120 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/presets/cli.d.ts.map +1 -1
- package/dist/presets/cli.js +7 -0
- package/dist/presets/cli.js.map +1 -1
- package/dist/presets/generic.d.ts.map +1 -1
- package/dist/presets/generic.js +4 -1
- package/dist/presets/generic.js.map +1 -1
- package/dist/presets/testing.d.ts +1 -1
- package/dist/presets/testing.d.ts.map +1 -1
- package/dist/presets/testing.js +22 -8
- package/dist/presets/testing.js.map +1 -1
- package/dist/presets/web.d.ts.map +1 -1
- package/dist/presets/web.js +5 -2
- package/dist/presets/web.js.map +1 -1
- package/dist/registry/catalog.d.ts +13 -0
- package/dist/registry/catalog.d.ts.map +1 -0
- package/dist/registry/catalog.js +544 -0
- package/dist/registry/catalog.js.map +1 -0
- package/dist/registry/index.d.ts +84 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +309 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/setup.d.ts +14 -0
- package/dist/registry/setup.d.ts.map +1 -0
- package/dist/registry/setup.js +25 -0
- package/dist/registry/setup.js.map +1 -0
- package/dist/registry/types.d.ts +115 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +2 -0
- package/dist/registry/types.js.map +1 -0
- package/package.json +3 -2
- package/src/adapters/agent-docs.ts +184 -0
- package/src/adapters/agents-md.ts +160 -137
- package/src/adapters/e2e.ts +58 -0
- package/src/adapters/skills.ts +18 -0
- package/src/cli/capabilities.ts +176 -0
- package/src/cli/doctor.ts +83 -66
- package/src/cli/init.ts +1 -1
- package/src/cli/main.ts +125 -20
- package/src/cli/new.ts +195 -74
- package/src/cli/wizard.ts +130 -103
- package/src/config/defaults.ts +57 -179
- package/src/config/schema.ts +15 -0
- package/src/config/validation.ts +56 -0
- package/src/detect/index.ts +134 -0
- package/src/index.ts +5 -0
- package/src/presets/cli.ts +6 -0
- package/src/presets/generic.ts +4 -1
- package/src/presets/testing.ts +29 -12
- package/src/presets/web.ts +4 -2
- package/src/registry/catalog.ts +569 -0
- package/src/registry/index.ts +395 -0
- package/src/registry/setup.ts +40 -0
- package/src/registry/types.ts +109 -0
package/dist/config/defaults.js
CHANGED
|
@@ -1,181 +1,45 @@
|
|
|
1
|
+
import { applyResolvedProfile, isNodeStack, MATT_POCOCK_SKILLS, resolveCapabilities } from '../registry/index.js';
|
|
2
|
+
export { MATT_POCOCK_SKILLS };
|
|
3
|
+
export function presetPlatform(preset) {
|
|
4
|
+
return preset === 'web' ? 'web' : 'cli';
|
|
5
|
+
}
|
|
1
6
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* The `misc` (rarely used) and `in-progress` categories are deliberately
|
|
6
|
-
* excluded. Re-evaluate when the upstream repository reshuffles categories.
|
|
7
|
+
* A fresh config: the preset's scaffolding settings plus the capabilities the
|
|
8
|
+
* registry enables for the platform, stack and profile flags.
|
|
7
9
|
*/
|
|
8
|
-
export const MATT_POCOCK_SKILLS = [
|
|
9
|
-
// engineering
|
|
10
|
-
'ask-matt',
|
|
11
|
-
'code-review',
|
|
12
|
-
'codebase-design',
|
|
13
|
-
'diagnosing-bugs',
|
|
14
|
-
'domain-modeling',
|
|
15
|
-
'grill-with-docs',
|
|
16
|
-
'implement',
|
|
17
|
-
'implement-spec',
|
|
18
|
-
'improve-codebase-architecture',
|
|
19
|
-
'pr',
|
|
20
|
-
'prototype',
|
|
21
|
-
'research',
|
|
22
|
-
'retro',
|
|
23
|
-
'setup-matt-pocock-skills',
|
|
24
|
-
'tdd',
|
|
25
|
-
'to-spec',
|
|
26
|
-
'to-tickets',
|
|
27
|
-
'triage',
|
|
28
|
-
'wayfinder',
|
|
29
|
-
'wizard',
|
|
30
|
-
// productivity
|
|
31
|
-
'grill-me',
|
|
32
|
-
'grilling',
|
|
33
|
-
'handoff',
|
|
34
|
-
'teach',
|
|
35
|
-
'to-questionnaire',
|
|
36
|
-
'wait-what',
|
|
37
|
-
'writing-for-agents'
|
|
38
|
-
];
|
|
39
10
|
export function getDefaultConfig(name, preset, options = {}) {
|
|
40
11
|
const packageManager = options.packageManager || 'pnpm';
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
skills: ['impeccable']
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
package: 'vercel-labs/agent-browser',
|
|
76
|
-
skills: ['agent-browser']
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
},
|
|
80
|
-
codebase: {
|
|
81
|
-
graft: true
|
|
82
|
-
},
|
|
83
|
-
browser: {
|
|
84
|
-
visualAgent: true,
|
|
85
|
-
playwright: hasWebTarget
|
|
86
|
-
},
|
|
87
|
-
docs: {
|
|
88
|
-
adr: true
|
|
89
|
-
},
|
|
90
|
-
github: {
|
|
91
|
-
ci: true
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
case 'cli':
|
|
96
|
-
return {
|
|
97
|
-
schemaVersion: '1.0.0',
|
|
98
|
-
name,
|
|
99
|
-
preset: 'cli',
|
|
100
|
-
packageManager,
|
|
101
|
-
agents: {
|
|
102
|
-
primary: 'antigravity',
|
|
103
|
-
secondary: 'codex',
|
|
104
|
-
claudeCode: true
|
|
105
|
-
},
|
|
106
|
-
skills: {
|
|
107
|
-
sources: [
|
|
108
|
-
{
|
|
109
|
-
package: 'mattpocock/skills',
|
|
110
|
-
skills: [...MATT_POCOCK_SKILLS]
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
package: 'blader/humanizer',
|
|
114
|
-
skills: ['humanizer']
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
package: 'dietrichgebert/ponytail',
|
|
118
|
-
skills: ['ponytail']
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
codebase: {
|
|
123
|
-
graft: true
|
|
124
|
-
},
|
|
125
|
-
browser: {
|
|
126
|
-
visualAgent: false,
|
|
127
|
-
playwright: false
|
|
128
|
-
},
|
|
129
|
-
docs: {
|
|
130
|
-
adr: true
|
|
131
|
-
},
|
|
132
|
-
github: {
|
|
133
|
-
ci: true
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
case 'generic':
|
|
137
|
-
default:
|
|
138
|
-
return {
|
|
139
|
-
schemaVersion: '1.0.0',
|
|
140
|
-
name,
|
|
141
|
-
preset: 'generic',
|
|
142
|
-
packageManager,
|
|
143
|
-
agents: {
|
|
144
|
-
primary: 'antigravity',
|
|
145
|
-
secondary: 'codex',
|
|
146
|
-
claudeCode: true
|
|
147
|
-
},
|
|
148
|
-
skills: {
|
|
149
|
-
sources: [
|
|
150
|
-
{
|
|
151
|
-
package: 'mattpocock/skills',
|
|
152
|
-
skills: [...MATT_POCOCK_SKILLS]
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
package: 'blader/humanizer',
|
|
156
|
-
skills: ['humanizer']
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
package: 'dietrichgebert/ponytail',
|
|
160
|
-
skills: ['ponytail']
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
|
-
codebase: {
|
|
165
|
-
graft: true
|
|
166
|
-
},
|
|
167
|
-
browser: {
|
|
168
|
-
visualAgent: false,
|
|
169
|
-
playwright: false
|
|
170
|
-
},
|
|
171
|
-
docs: {
|
|
172
|
-
adr: true
|
|
173
|
-
},
|
|
174
|
-
github: {
|
|
175
|
-
ci: false
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
}
|
|
12
|
+
const platform = options.platform ?? presetPlatform(preset);
|
|
13
|
+
const stack = options.stack ?? 'node';
|
|
14
|
+
const framework = preset === 'web' ? options.framework || 'none' : undefined;
|
|
15
|
+
const base = {
|
|
16
|
+
schemaVersion: '1.0.0',
|
|
17
|
+
name,
|
|
18
|
+
preset,
|
|
19
|
+
...(framework ? { framework } : {}),
|
|
20
|
+
// Only Node projects have a package manager; the others use their host toolchain.
|
|
21
|
+
...(isNodeStack(stack) ? { packageManager } : {}),
|
|
22
|
+
platform,
|
|
23
|
+
stack,
|
|
24
|
+
agents: {
|
|
25
|
+
primary: 'antigravity',
|
|
26
|
+
secondary: 'codex',
|
|
27
|
+
claudeCode: true
|
|
28
|
+
},
|
|
29
|
+
skills: { sources: [] },
|
|
30
|
+
codebase: { graft: true },
|
|
31
|
+
browser: { visualAgent: false, playwright: false },
|
|
32
|
+
docs: { adr: true },
|
|
33
|
+
github: { ci: preset !== 'generic' }
|
|
34
|
+
};
|
|
35
|
+
const profile = resolveCapabilities({
|
|
36
|
+
platform,
|
|
37
|
+
stack,
|
|
38
|
+
framework,
|
|
39
|
+
harness: options.harness,
|
|
40
|
+
flags: options.flags
|
|
41
|
+
});
|
|
42
|
+
return applyResolvedProfile(base, profile, { skills: options.skills !== false });
|
|
179
43
|
}
|
|
180
44
|
/** The skill selections that older versions of aginit wrote as defaults. */
|
|
181
45
|
const LEGACY_MATT_SKILL_SELECTIONS = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CustomCapabilityConfig, Platform, Stack } from '../registry/types.js';
|
|
1
2
|
export type PresetType = 'web' | 'cli' | 'generic';
|
|
2
3
|
export type WebFramework = 'none' | 'vite' | 'next' | 'existing';
|
|
3
4
|
export type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';
|
|
@@ -42,6 +43,19 @@ export interface AginitConfig {
|
|
|
42
43
|
github: {
|
|
43
44
|
ci: boolean;
|
|
44
45
|
};
|
|
46
|
+
/** Target platform. Missing in pre-v2 configs; detected from the project then. */
|
|
47
|
+
platform?: Platform;
|
|
48
|
+
/** Host toolchain. Missing in pre-v2 configs; detected from the project then. */
|
|
49
|
+
stack?: Stack;
|
|
50
|
+
/**
|
|
51
|
+
* Enabled capability ids from the registry (src/registry/catalog.ts).
|
|
52
|
+
* Missing in pre-v2 configs; inferred from skills.sources and the switches above.
|
|
53
|
+
*/
|
|
54
|
+
capabilities?: string[];
|
|
55
|
+
/** Skill repositories added on top of the registry; always enabled unless disabled. */
|
|
56
|
+
customCapabilities?: CustomCapabilityConfig[];
|
|
57
|
+
/** Capability ids to keep off, even when a preset or platform default would enable them. */
|
|
58
|
+
disabledCapabilities?: string[];
|
|
45
59
|
}
|
|
46
60
|
export type AIProjectConfig = AginitConfig;
|
|
47
61
|
export declare const AGINIT_CONFIG_FILENAME = "aginit.config.json";
|
|
@@ -1 +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;QAClB;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN;;;;WAIG;QACH,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;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEpF,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;QAClB;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN;;;;WAIG;QACH,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;IACF,kFAAkF;IAClF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iFAAiF;IACjF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uFAAuF;IACvF,kBAAkB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC9C,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAkEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { AginitConfig } from './schema.js';
|
|
|
2
2
|
export declare const PRESETS: readonly ['web', 'cli', 'generic'];
|
|
3
3
|
export declare const FRAMEWORKS: readonly ['none', 'vite', 'next', 'existing'];
|
|
4
4
|
export declare const SUPPORTED_PACKAGE_MANAGERS: readonly ['pnpm', 'npm', 'yarn', 'bun'];
|
|
5
|
+
export declare const STACKS: readonly ['node', 'react-native', 'flutter', 'swift', 'kotlin', 'rust', 'python', 'go', 'unknown'];
|
|
5
6
|
export declare function isRecord(value: unknown): value is Record<string, any>;
|
|
6
7
|
export declare function validateProjectName(name: string): void;
|
|
7
8
|
export declare function validateUpstreamArgument(value: unknown, label: string): asserts value is string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAkD,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAkD,MAAM,aAAa,CAAC;AAI3F,eAAO,MAAM,OAAO,YAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;AAC1D,eAAO,MAAM,UAAU,YAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AACxE,eAAO,MAAM,0BAA0B,YAAI,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAClF,eAAO,MAAM,MAAM,YACjB,MAAM,EACN,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,SAAS,CACD,CAAC;AAWX,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,CAuE3D;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"}
|
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { fileExists, readJsonFile } from '../utils/fs.js';
|
|
3
3
|
import { AGINIT_CONFIG_FILENAME, LEGACY_CONFIG_FILENAME } from './schema.js';
|
|
4
|
+
import { CATALOG } from '../registry/catalog.js';
|
|
5
|
+
import { PLATFORMS } from '../registry/index.js';
|
|
4
6
|
export const PRESETS = ['web', 'cli', 'generic'];
|
|
5
7
|
export const FRAMEWORKS = ['none', 'vite', 'next', 'existing'];
|
|
6
8
|
export const SUPPORTED_PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn', 'bun'];
|
|
9
|
+
export const STACKS = [
|
|
10
|
+
'node',
|
|
11
|
+
'react-native',
|
|
12
|
+
'flutter',
|
|
13
|
+
'swift',
|
|
14
|
+
'kotlin',
|
|
15
|
+
'rust',
|
|
16
|
+
'python',
|
|
17
|
+
'go',
|
|
18
|
+
'unknown'
|
|
19
|
+
];
|
|
20
|
+
const CATEGORIES = [
|
|
21
|
+
'methodology',
|
|
22
|
+
'discipline',
|
|
23
|
+
'design',
|
|
24
|
+
'codebase-graph',
|
|
25
|
+
'ui-driver',
|
|
26
|
+
'testing-engine',
|
|
27
|
+
'context-guard',
|
|
28
|
+
'custom'
|
|
29
|
+
];
|
|
7
30
|
export function isRecord(value) {
|
|
8
31
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
9
32
|
}
|
|
@@ -54,6 +77,46 @@ export function validateConfig(value) {
|
|
|
54
77
|
for (const skill of source.skills)
|
|
55
78
|
validateUpstreamArgument(skill, 'skill name');
|
|
56
79
|
}
|
|
80
|
+
if (value.platform !== undefined && !PLATFORMS.includes(value.platform))
|
|
81
|
+
fail('platform');
|
|
82
|
+
if (value.stack !== undefined && !STACKS.includes(value.stack))
|
|
83
|
+
fail('stack');
|
|
84
|
+
for (const key of ['capabilities', 'disabledCapabilities']) {
|
|
85
|
+
if (value[key] === undefined)
|
|
86
|
+
continue;
|
|
87
|
+
if (!Array.isArray(value[key]))
|
|
88
|
+
fail(key);
|
|
89
|
+
for (const id of value[key])
|
|
90
|
+
validateUpstreamArgument(id, `${key} entry`);
|
|
91
|
+
}
|
|
92
|
+
if (value.customCapabilities !== undefined) {
|
|
93
|
+
if (!Array.isArray(value.customCapabilities))
|
|
94
|
+
fail('customCapabilities');
|
|
95
|
+
const seen = new Set();
|
|
96
|
+
for (const custom of value.customCapabilities) {
|
|
97
|
+
if (!isRecord(custom))
|
|
98
|
+
fail('customCapabilities entry');
|
|
99
|
+
validateUpstreamArgument(custom.id, 'custom capability id');
|
|
100
|
+
if (seen.has(custom.id) || CATALOG.some((entry) => entry.id === custom.id))
|
|
101
|
+
fail(`customCapabilities: duplicate id "${custom.id}"`);
|
|
102
|
+
seen.add(custom.id);
|
|
103
|
+
if (typeof custom.repo !== 'string' || !/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(custom.repo))
|
|
104
|
+
fail(`customCapabilities.${custom.id}.repo (expected owner/repo)`);
|
|
105
|
+
if (custom.skills !== undefined) {
|
|
106
|
+
if (!Array.isArray(custom.skills))
|
|
107
|
+
fail(`customCapabilities.${custom.id}.skills`);
|
|
108
|
+
for (const skill of custom.skills)
|
|
109
|
+
validateUpstreamArgument(skill, 'skill name');
|
|
110
|
+
}
|
|
111
|
+
if (custom.category !== undefined && !CATEGORIES.includes(custom.category))
|
|
112
|
+
fail(`customCapabilities.${custom.id}.category`);
|
|
113
|
+
if (custom.binary !== undefined &&
|
|
114
|
+
(!isRecord(custom.binary) ||
|
|
115
|
+
typeof custom.binary.install !== 'string' ||
|
|
116
|
+
!/^[a-zA-Z0-9._-]+$/.test(String(custom.binary.bin))))
|
|
117
|
+
fail(`customCapabilities.${custom.id}.binary`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
57
120
|
for (const [section, keys] of Object.entries({
|
|
58
121
|
codebase: ['graft'],
|
|
59
122
|
browser: ['visualAgent', 'playwright'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAgB,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAgB,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAClF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM;IACN,cAAc;IACd,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,SAAS;CACD,CAAC;AACX,MAAM,UAAU,GAAG;IACjB,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,QAAQ;CACA,CAAC;AACX,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC1F,MAAM,IAAI,KAAK,CACb,6HAA6H,CAC9H,CAAC;IACJ,CAAC;AACH,CAAC;AACD,MAAM,UAAU,wBAAwB,CAAC,KAAc,EAAE,KAAa;IACpE,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,IAAI,EAAE;QACb,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,iEAAiE,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAG,CAAC,KAAa,EAAS,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO;QACtE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9F,IACE,KAAK,CAAC,cAAc,KAAK,SAAS;QAClC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;QAE1D,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACxC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;QACvF,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7F,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7E,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;YAAE,wBAAwB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAS;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,wBAAwB,CAAC,EAAE,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxD,wBAAwB,CAAC,MAAM,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACxE,IAAI,CAAC,qCAAqC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC5F,IAAI,CAAC,sBAAsB,MAAM,CAAC,EAAE,6BAA6B,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;oBAAE,IAAI,CAAC,sBAAsB,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;gBAClF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;oBAAE,wBAAwB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACxE,IAAI,CAAC,sBAAsB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;YACnD,IACE,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC3B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBACvB,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;oBACzC,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEvD,IAAI,CAAC,sBAAsB,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC3C,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;QACtC,IAAI,EAAE,CAAC,KAAK,CAAC;QACb,MAAM,EAAE,CAAC,IAAI,CAAC;KACf,CAAC,EAAE,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,OAAO,EAAkB,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACnC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,YAAY,CAAU,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;AACH,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,YAAY,CAAU,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrF,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACjE,IACE,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YACtB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,EACnF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,8BAA8B,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QACxD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PackageManager } from '../config/schema.js';
|
|
2
|
+
import { Platform, ProjectCommands, Stack } from '../registry/types.js';
|
|
3
|
+
export interface DetectedProject {
|
|
4
|
+
/** null when nothing marks the platform (empty directory). */
|
|
5
|
+
platform: Platform | null;
|
|
6
|
+
stack: Stack;
|
|
7
|
+
}
|
|
8
|
+
/** Read the project's markers (pubspec.yaml, Package.swift, gradle, package.json, ...). */
|
|
9
|
+
export declare function detectProject(dir: string): DetectedProject;
|
|
10
|
+
/**
|
|
11
|
+
* The project's own commands: package scripts for Node projects, the host
|
|
12
|
+
* toolchain otherwise. Commands that would be guesses are left out.
|
|
13
|
+
*/
|
|
14
|
+
export declare function projectCommands(dir: string, stack: Stack, options?: {
|
|
15
|
+
packageManager?: PackageManager;
|
|
16
|
+
scripts?: Record<string, string>;
|
|
17
|
+
}): ProjectCommands;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/detect/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;CACd;AAkCD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CA4B1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAClF,eAAe,CAiDjB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readJsonFile, readTextFile } from '../utils/fs.js';
|
|
4
|
+
import { getPackageManagerAdapter } from '../adapters/package-manager.js';
|
|
5
|
+
const WEB_FRAMEWORKS = [
|
|
6
|
+
'next',
|
|
7
|
+
'vite',
|
|
8
|
+
'astro',
|
|
9
|
+
'react',
|
|
10
|
+
'react-dom',
|
|
11
|
+
'vue',
|
|
12
|
+
'nuxt',
|
|
13
|
+
'svelte',
|
|
14
|
+
'@sveltejs/kit',
|
|
15
|
+
'@angular/core',
|
|
16
|
+
'solid-js',
|
|
17
|
+
'@remix-run/react',
|
|
18
|
+
'preact'
|
|
19
|
+
];
|
|
20
|
+
function entries(dir) {
|
|
21
|
+
try {
|
|
22
|
+
return fs.readdirSync(dir);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const hasXcodeProject = (dir) => entries(dir).some((name) => name.endsWith('.xcodeproj'));
|
|
29
|
+
function gradleFiles(dir) {
|
|
30
|
+
return ['build.gradle', 'build.gradle.kts', 'settings.gradle', 'settings.gradle.kts']
|
|
31
|
+
.map((name) => readTextFile(path.join(dir, name)))
|
|
32
|
+
.filter((text) => text !== null);
|
|
33
|
+
}
|
|
34
|
+
/** Read the project's markers (pubspec.yaml, Package.swift, gradle, package.json, ...). */
|
|
35
|
+
export function detectProject(dir) {
|
|
36
|
+
const exists = (file) => fs.existsSync(path.join(dir, file));
|
|
37
|
+
const pkg = readJsonFile(path.join(dir, 'package.json'));
|
|
38
|
+
const deps = { ...pkg?.dependencies, ...pkg?.devDependencies };
|
|
39
|
+
if (exists('pubspec.yaml'))
|
|
40
|
+
return { platform: 'mobile-native', stack: 'flutter' };
|
|
41
|
+
const expoApp = /"expo"\s*:/.test(readTextFile(path.join(dir, 'app.json')) ?? '');
|
|
42
|
+
if (deps['react-native'] || deps.expo || expoApp)
|
|
43
|
+
return { platform: 'mobile-rn', stack: 'react-native' };
|
|
44
|
+
if (exists('Package.swift') || hasXcodeProject(dir) || hasXcodeProject(path.join(dir, 'ios'))) {
|
|
45
|
+
const manifest = readTextFile(path.join(dir, 'Package.swift')) ?? '';
|
|
46
|
+
const apple = !exists('Package.swift') || /\.(iOS|macOS|tvOS|watchOS|visionOS)\(/.test(manifest);
|
|
47
|
+
return { platform: apple ? 'mobile-native' : 'cli', stack: 'swift' };
|
|
48
|
+
}
|
|
49
|
+
const androidGradle = gradleFiles(path.join(dir, 'android'));
|
|
50
|
+
const rootGradle = gradleFiles(dir);
|
|
51
|
+
if (androidGradle.length > 0 || rootGradle.some((text) => /com\.android|android\s*\{/.test(text)))
|
|
52
|
+
return { platform: 'mobile-native', stack: 'kotlin' };
|
|
53
|
+
if (pkg) {
|
|
54
|
+
const web = WEB_FRAMEWORKS.some((name) => deps[name]);
|
|
55
|
+
return { platform: web ? 'web' : 'cli', stack: 'node' };
|
|
56
|
+
}
|
|
57
|
+
if (rootGradle.length > 0)
|
|
58
|
+
return { platform: 'backend', stack: 'kotlin' };
|
|
59
|
+
if (exists('Cargo.toml'))
|
|
60
|
+
return { platform: 'cli', stack: 'rust' };
|
|
61
|
+
if (exists('go.mod'))
|
|
62
|
+
return { platform: 'backend', stack: 'go' };
|
|
63
|
+
if (exists('pyproject.toml') || exists('requirements.txt'))
|
|
64
|
+
return { platform: 'backend', stack: 'python' };
|
|
65
|
+
return { platform: null, stack: 'unknown' };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The project's own commands: package scripts for Node projects, the host
|
|
69
|
+
* toolchain otherwise. Commands that would be guesses are left out.
|
|
70
|
+
*/
|
|
71
|
+
export function projectCommands(dir, stack, options = {}) {
|
|
72
|
+
const exists = (file) => fs.existsSync(path.join(dir, file));
|
|
73
|
+
switch (stack) {
|
|
74
|
+
case 'node':
|
|
75
|
+
case 'react-native': {
|
|
76
|
+
const scripts = options.scripts ??
|
|
77
|
+
readJsonFile(path.join(dir, 'package.json'))?.scripts ??
|
|
78
|
+
{};
|
|
79
|
+
const pm = getPackageManagerAdapter(options.packageManager);
|
|
80
|
+
const run = (name) => (Object.hasOwn(scripts, name) ? pm.runCmd(name) : undefined);
|
|
81
|
+
return {
|
|
82
|
+
dev: run('dev'),
|
|
83
|
+
build: run('build'),
|
|
84
|
+
typecheck: run('typecheck'),
|
|
85
|
+
lint: run('lint'),
|
|
86
|
+
test: run('test'),
|
|
87
|
+
unitTest: run('test:unit'),
|
|
88
|
+
e2e: run('test:e2e')
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
case 'flutter':
|
|
92
|
+
return { lint: 'flutter analyze', test: 'flutter test' };
|
|
93
|
+
case 'swift':
|
|
94
|
+
return exists('Package.swift')
|
|
95
|
+
? { build: 'swift build', test: 'swift test' }
|
|
96
|
+
: {
|
|
97
|
+
build: 'xcodebuild build -scheme <Scheme>',
|
|
98
|
+
test: "xcodebuild test -scheme <Scheme> -destination 'platform=iOS Simulator,name=<Device>'"
|
|
99
|
+
};
|
|
100
|
+
case 'kotlin': {
|
|
101
|
+
const nested = fs.existsSync(path.join(dir, 'android'));
|
|
102
|
+
const android = nested || gradleFiles(dir).some((text) => /com\.android|android\s*\{/.test(text));
|
|
103
|
+
const gradlew = nested ? 'cd android && ./gradlew' : './gradlew';
|
|
104
|
+
return {
|
|
105
|
+
build: `${gradlew} build`,
|
|
106
|
+
...(android ? { lint: `${gradlew} lint` } : {}),
|
|
107
|
+
test: `${gradlew} test`
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
case 'rust':
|
|
111
|
+
return { build: 'cargo build', typecheck: 'cargo check', lint: 'cargo clippy', test: 'cargo test' };
|
|
112
|
+
case 'go':
|
|
113
|
+
return { build: 'go build ./...', lint: 'go vet ./...', test: 'go test ./...' };
|
|
114
|
+
case 'python':
|
|
115
|
+
return { test: exists('uv.lock') ? 'uv run pytest' : 'pytest' };
|
|
116
|
+
case 'unknown':
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/detect/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,4 +14,9 @@ export * from './cli/new.js';
|
|
|
14
14
|
export * from './cli/init.js';
|
|
15
15
|
export * from './cli/doctor.js';
|
|
16
16
|
export * from './cli/wizard.js';
|
|
17
|
+
export * from './registry/index.js';
|
|
18
|
+
export * from './detect/index.js';
|
|
19
|
+
export * from './adapters/agent-docs.js';
|
|
20
|
+
export * from './adapters/e2e.js';
|
|
21
|
+
export * from './cli/capabilities.js';
|
|
17
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
|
|
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,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,4 +14,9 @@ export * from './cli/new.js';
|
|
|
14
14
|
export * from './cli/init.js';
|
|
15
15
|
export * from './cli/doctor.js';
|
|
16
16
|
export * from './cli/wizard.js';
|
|
17
|
+
export * from './registry/index.js';
|
|
18
|
+
export * from './detect/index.js';
|
|
19
|
+
export * from './adapters/agent-docs.js';
|
|
20
|
+
export * from './adapters/e2e.js';
|
|
21
|
+
export * from './cli/capabilities.js';
|
|
17
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
|
|
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,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/presets/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/presets/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,SAAS,EAAE,aAqIvB,CAAC"}
|
package/dist/presets/cli.js
CHANGED
|
@@ -3,6 +3,7 @@ import { fileExists, safeWriteFile, writeJsonFile } from '../utils/fs.js';
|
|
|
3
3
|
import { readPackageManifest } from '../config/validation.js';
|
|
4
4
|
import { addTestingDependencies, setupTesting, VITEST_VERSION } from './testing.js';
|
|
5
5
|
import { setupAdr } from './adr.js';
|
|
6
|
+
import { activeIds } from '../registry/index.js';
|
|
6
7
|
export const cliPreset = {
|
|
7
8
|
name: 'cli',
|
|
8
9
|
description: 'AI-first TypeScript CLI application with Commander, Picocolors, and Vitest',
|
|
@@ -11,6 +12,12 @@ export const cliPreset = {
|
|
|
11
12
|
const pm = ctx.config.packageManager || 'pnpm';
|
|
12
13
|
const existing = readPackageManifest(targetDir);
|
|
13
14
|
if (existing) {
|
|
15
|
+
// An existing project keeps its own runner unless Vitest is a selected capability.
|
|
16
|
+
if (!activeIds(ctx.config).has('vitest')) {
|
|
17
|
+
if (ctx.config.docs.adr)
|
|
18
|
+
setupAdr(targetDir, { dryRun, silent });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
14
21
|
const hadVitestScript = Object.values(existing.scripts || {}).some((script) => typeof script === 'string' && /^vitest(?:\s|$)/.test(script));
|
|
15
22
|
addTestingDependencies(existing);
|
|
16
23
|
writeJsonFile(path.join(targetDir, 'package.json'), existing, {
|