@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.
- package/LICENSE +21 -0
- package/README.md +245 -0
- package/THIRD_PARTY_NOTICES.md +36 -0
- package/bin/aginit.js +8 -0
- package/dist/adapters/agents-md.d.ts +8 -0
- package/dist/adapters/agents-md.d.ts.map +1 -0
- package/dist/adapters/agents-md.js +121 -0
- package/dist/adapters/agents-md.js.map +1 -0
- package/dist/adapters/browser.d.ts +5 -0
- package/dist/adapters/browser.d.ts.map +1 -0
- package/dist/adapters/browser.js +42 -0
- package/dist/adapters/browser.js.map +1 -0
- package/dist/adapters/git.d.ts +5 -0
- package/dist/adapters/git.d.ts.map +1 -0
- package/dist/adapters/git.js +90 -0
- package/dist/adapters/git.js.map +1 -0
- package/dist/adapters/graft.d.ts +14 -0
- package/dist/adapters/graft.d.ts.map +1 -0
- package/dist/adapters/graft.js +56 -0
- package/dist/adapters/graft.js.map +1 -0
- package/dist/adapters/package-manager.d.ts +20 -0
- package/dist/adapters/package-manager.d.ts.map +1 -0
- package/dist/adapters/package-manager.js +89 -0
- package/dist/adapters/package-manager.js.map +1 -0
- package/dist/adapters/skills.d.ts +29 -0
- package/dist/adapters/skills.d.ts.map +1 -0
- package/dist/adapters/skills.js +80 -0
- package/dist/adapters/skills.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +212 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +32 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +162 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/new.d.ts +15 -0
- package/dist/cli/new.d.ts.map +1 -0
- package/dist/cli/new.js +161 -0
- package/dist/cli/new.js.map +1 -0
- package/dist/cli/wizard.d.ts +31 -0
- package/dist/cli/wizard.d.ts.map +1 -0
- package/dist/cli/wizard.js +260 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +122 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/schema.d.ts +40 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +4 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validation.d.ts +11 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +99 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/presets/adr.d.ts +5 -0
- package/dist/presets/adr.d.ts.map +1 -0
- package/dist/presets/adr.js +33 -0
- package/dist/presets/adr.js.map +1 -0
- package/dist/presets/cli.d.ts +3 -0
- package/dist/presets/cli.d.ts.map +1 -0
- package/dist/presets/cli.js +126 -0
- package/dist/presets/cli.js.map +1 -0
- package/dist/presets/generic.d.ts +3 -0
- package/dist/presets/generic.d.ts.map +1 -0
- package/dist/presets/generic.js +29 -0
- package/dist/presets/generic.js.map +1 -0
- package/dist/presets/registry.d.ts +6 -0
- package/dist/presets/registry.d.ts.map +1 -0
- package/dist/presets/registry.js +20 -0
- package/dist/presets/registry.js.map +1 -0
- package/dist/presets/testing.d.ts +6 -0
- package/dist/presets/testing.d.ts.map +1 -0
- package/dist/presets/testing.js +46 -0
- package/dist/presets/testing.js.map +1 -0
- package/dist/presets/types.d.ts +14 -0
- package/dist/presets/types.d.ts.map +1 -0
- package/dist/presets/types.js +2 -0
- package/dist/presets/types.js.map +1 -0
- package/dist/presets/web.d.ts +3 -0
- package/dist/presets/web.d.ts.map +1 -0
- package/dist/presets/web.js +84 -0
- package/dist/presets/web.js.map +1 -0
- package/dist/utils/fs.d.ts +13 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +60 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +20 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shell.d.ts +17 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +87 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +71 -0
- package/src/adapters/agents-md.ts +143 -0
- package/src/adapters/browser.ts +49 -0
- package/src/adapters/git.ts +100 -0
- package/src/adapters/graft.ts +80 -0
- package/src/adapters/package-manager.ts +116 -0
- package/src/adapters/skills.ts +117 -0
- package/src/cli/doctor.ts +244 -0
- package/src/cli/init.ts +34 -0
- package/src/cli/main.ts +191 -0
- package/src/cli/new.ts +200 -0
- package/src/cli/wizard.ts +300 -0
- package/src/config/defaults.ts +137 -0
- package/src/config/schema.ts +44 -0
- package/src/config/validation.ts +96 -0
- package/src/index.ts +15 -0
- package/src/presets/adr.ts +37 -0
- package/src/presets/cli.ts +136 -0
- package/src/presets/generic.ts +32 -0
- package/src/presets/registry.ts +24 -0
- package/src/presets/testing.ts +56 -0
- package/src/presets/types.ts +15 -0
- package/src/presets/web.ts +99 -0
- package/src/utils/fs.ts +79 -0
- package/src/utils/logger.ts +20 -0
- package/src/utils/shell.ts +116 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileExists, readTextFile, safeWriteFile } from '../utils/fs.js';
|
|
3
|
+
import { commandExists, runExecutable } from '../utils/shell.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export async function isGraftInstalled() {
|
|
6
|
+
return await commandExists('graft');
|
|
7
|
+
}
|
|
8
|
+
export async function initGraft(targetDir, options = {}) {
|
|
9
|
+
const { dryRun = false, silent = false } = options;
|
|
10
|
+
const installed = dryRun || (await isGraftInstalled());
|
|
11
|
+
if (!installed) {
|
|
12
|
+
if (!silent) {
|
|
13
|
+
logger.warn('Graft CLI is not installed. Install it with `npm install -g @nanonets/graft`, then rerun aginit init.');
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (!silent)
|
|
18
|
+
logger.dim('Initializing Graft context graph...');
|
|
19
|
+
// Run graft init with antigravity and agents, without touching global system files (--no-global)
|
|
20
|
+
const res = await runExecutable('graft', ['init', '--no-global', '--agents', 'antigravity', 'agents', '-y'], {
|
|
21
|
+
cwd: targetDir,
|
|
22
|
+
dryRun,
|
|
23
|
+
silent: true
|
|
24
|
+
});
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
logger.warn(`Graft initialization warning: ${res.stderr || res.stdout}`);
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
export async function buildGraft(targetDir, options = {}) {
|
|
32
|
+
const { dryRun = false } = options;
|
|
33
|
+
const installed = dryRun || (await isGraftInstalled());
|
|
34
|
+
if (!installed)
|
|
35
|
+
return false;
|
|
36
|
+
const res = await runExecutable('graft', ['build'], { cwd: targetDir, dryRun, silent: true });
|
|
37
|
+
return res.ok;
|
|
38
|
+
}
|
|
39
|
+
export async function uninstallGraft(targetDir, options = {}) {
|
|
40
|
+
const { dryRun = false } = options;
|
|
41
|
+
const installed = dryRun || (await isGraftInstalled());
|
|
42
|
+
if (installed) {
|
|
43
|
+
await runExecutable('graft', ['uninstall'], { cwd: targetDir, dryRun, silent: true });
|
|
44
|
+
}
|
|
45
|
+
// Also clean up AGENTS.md fenced section if any remain
|
|
46
|
+
const agentsPath = path.join(targetDir, 'AGENTS.md');
|
|
47
|
+
if (fileExists(agentsPath)) {
|
|
48
|
+
const content = readTextFile(agentsPath) || '';
|
|
49
|
+
const cleaned = content
|
|
50
|
+
.replace(/<!-- graft:start -->[\s\S]*?<!-- graft:end -->\n?/g, '')
|
|
51
|
+
.trim();
|
|
52
|
+
safeWriteFile(agentsPath, cleaned + '\n', { overwrite: true, dryRun });
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=graft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graft.js","sourceRoot":"","sources":["../../src/adapters/graft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PackageManager } from '../config/schema.js';
|
|
2
|
+
export interface PackageManagerAdapter {
|
|
3
|
+
name: PackageManager;
|
|
4
|
+
installCmd: string;
|
|
5
|
+
runCmd: (script: string) => string;
|
|
6
|
+
execCmd: (pkg: string, args?: string[]) => string;
|
|
7
|
+
lockfile: string;
|
|
8
|
+
scaffoldViteCmd: (template?: string) => string;
|
|
9
|
+
scaffoldNextCmd: () => string;
|
|
10
|
+
}
|
|
11
|
+
export declare const PACKAGE_MANAGERS: Record<PackageManager, PackageManagerAdapter>;
|
|
12
|
+
export declare function getPackageManagerAdapter(pm?: PackageManager): PackageManagerAdapter;
|
|
13
|
+
export declare function detectPackageManager(dir: string): PackageManager | null;
|
|
14
|
+
/** Yarn Classic lacks dlx; npx fetches tools while --use-yarn selects the app manager.
|
|
15
|
+
* Commands used for execution; string helpers above are for displaying commands only. */
|
|
16
|
+
export declare function scaffoldCommand(pm: PackageManager, framework: 'vite' | 'next'): {
|
|
17
|
+
executable: string;
|
|
18
|
+
args: string[];
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/adapters/package-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,qBAAqB,CA8C1E,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,GAAE,cAAuB,GAAG,qBAAqB,CAE3F;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAcvE;AAED;yFACyF;AACzF,wBAAgB,eAAe,CAC7B,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CA4BxC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export const PACKAGE_MANAGERS = {
|
|
4
|
+
pnpm: {
|
|
5
|
+
name: 'pnpm',
|
|
6
|
+
installCmd: 'pnpm install',
|
|
7
|
+
runCmd: (script) => `pnpm ${script}`,
|
|
8
|
+
execCmd: (pkg, args = []) => `pnpm dlx ${pkg}${args.length ? ' ' + args.join(' ') : ''}`,
|
|
9
|
+
lockfile: 'pnpm-lock.yaml',
|
|
10
|
+
scaffoldViteCmd: (template = 'react-ts') => `pnpm create vite . --template ${template}`,
|
|
11
|
+
scaffoldNextCmd: () => `pnpm create next-app . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-pnpm`
|
|
12
|
+
},
|
|
13
|
+
npm: {
|
|
14
|
+
name: 'npm',
|
|
15
|
+
installCmd: 'npm install',
|
|
16
|
+
runCmd: (script) => `npm run ${script}`,
|
|
17
|
+
execCmd: (pkg, args = []) => `npx -y ${pkg}${args.length ? ' ' + args.join(' ') : ''}`,
|
|
18
|
+
lockfile: 'package-lock.json',
|
|
19
|
+
scaffoldViteCmd: (template = 'react-ts') => `npm create vite@latest . -- --template ${template}`,
|
|
20
|
+
scaffoldNextCmd: () => `npx -y create-next-app@latest . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-npm`
|
|
21
|
+
},
|
|
22
|
+
yarn: {
|
|
23
|
+
name: 'yarn',
|
|
24
|
+
installCmd: 'yarn install',
|
|
25
|
+
runCmd: (script) => `yarn ${script}`,
|
|
26
|
+
execCmd: (pkg, args = []) => `yarn dlx ${pkg}${args.length ? ' ' + args.join(' ') : ''}`,
|
|
27
|
+
lockfile: 'yarn.lock',
|
|
28
|
+
scaffoldViteCmd: (template = 'react-ts') => `yarn create vite . --template ${template}`,
|
|
29
|
+
scaffoldNextCmd: () => `yarn create next-app . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-yarn`
|
|
30
|
+
},
|
|
31
|
+
bun: {
|
|
32
|
+
name: 'bun',
|
|
33
|
+
installCmd: 'bun install',
|
|
34
|
+
runCmd: (script) => `bun run ${script}`,
|
|
35
|
+
execCmd: (pkg, args = []) => `bunx ${pkg}${args.length ? ' ' + args.join(' ') : ''}`,
|
|
36
|
+
lockfile: 'bun.lockb',
|
|
37
|
+
scaffoldViteCmd: (template = 'react-ts') => `bun create vite . --template ${template}`,
|
|
38
|
+
scaffoldNextCmd: () => `bun create next-app . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-bun`
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export function getPackageManagerAdapter(pm = 'pnpm') {
|
|
42
|
+
return PACKAGE_MANAGERS[pm] || PACKAGE_MANAGERS.pnpm;
|
|
43
|
+
}
|
|
44
|
+
export function detectPackageManager(dir) {
|
|
45
|
+
if (fs.existsSync(path.join(dir, 'pnpm-lock.yaml'))) {
|
|
46
|
+
return 'pnpm';
|
|
47
|
+
}
|
|
48
|
+
if (fs.existsSync(path.join(dir, 'bun.lockb')) || fs.existsSync(path.join(dir, 'bun.lock'))) {
|
|
49
|
+
return 'bun';
|
|
50
|
+
}
|
|
51
|
+
if (fs.existsSync(path.join(dir, 'yarn.lock'))) {
|
|
52
|
+
return 'yarn';
|
|
53
|
+
}
|
|
54
|
+
if (fs.existsSync(path.join(dir, 'package-lock.json'))) {
|
|
55
|
+
return 'npm';
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/** Yarn Classic lacks dlx; npx fetches tools while --use-yarn selects the app manager.
|
|
60
|
+
* Commands used for execution; string helpers above are for displaying commands only. */
|
|
61
|
+
export function scaffoldCommand(pm, framework) {
|
|
62
|
+
const runners = {
|
|
63
|
+
pnpm: ['pnpm', 'dlx'],
|
|
64
|
+
npm: ['npx', '-y'],
|
|
65
|
+
yarn: ['npx', '-y'],
|
|
66
|
+
bun: ['bunx']
|
|
67
|
+
};
|
|
68
|
+
const [executable, ...prefix] = runners[pm];
|
|
69
|
+
const args = framework === 'vite'
|
|
70
|
+
? ['create-vite@latest', '.', '--template', 'react-ts', '--no-interactive', '--no-immediate']
|
|
71
|
+
: [
|
|
72
|
+
'create-next-app@latest',
|
|
73
|
+
'.',
|
|
74
|
+
'--typescript',
|
|
75
|
+
'--tailwind',
|
|
76
|
+
'--eslint',
|
|
77
|
+
'--app',
|
|
78
|
+
'--src-dir',
|
|
79
|
+
'--import-alias',
|
|
80
|
+
'@/*',
|
|
81
|
+
`--use-${pm}`,
|
|
82
|
+
'--yes',
|
|
83
|
+
'--skip-install',
|
|
84
|
+
'--disable-git',
|
|
85
|
+
'--no-agents-md'
|
|
86
|
+
];
|
|
87
|
+
return { executable, args: [...prefix, ...args] };
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/adapters/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,MAAM,CAAC,MAAM,gBAAgB,GAAkD;IAC7E,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,cAAc;QAC1B,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE;QAC5C,OAAO,EAAE,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAE,EAAE,CAC5C,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7D,QAAQ,EAAE,gBAAgB;QAC1B,eAAe,EAAE,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,CAAC,iCAAiC,QAAQ,EAAE;QACvF,eAAe,EAAE,GAAG,EAAE,CACpB,yGAAyG;KAC5G;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,WAAW,MAAM,EAAE;QAC/C,OAAO,EAAE,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAE,EAAE,CAC5C,UAAU,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3D,QAAQ,EAAE,mBAAmB;QAC7B,eAAe,EAAE,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,CACzC,0CAA0C,QAAQ,EAAE;QACtD,eAAe,EAAE,GAAG,EAAE,CACpB,iHAAiH;KACpH;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,cAAc;QAC1B,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE;QAC5C,OAAO,EAAE,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAE,EAAE,CAC5C,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7D,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,CAAC,iCAAiC,QAAQ,EAAE;QACvF,eAAe,EAAE,GAAG,EAAE,CACpB,yGAAyG;KAC5G;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,WAAW,MAAM,EAAE;QAC/C,OAAO,EAAE,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAE,EAAE,CAC5C,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QACzD,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,CAAC,gCAAgC,QAAQ,EAAE;QACtF,eAAe,EAAE,GAAG,EAAE,CACpB,uGAAuG;KAC1G;CACF,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,KAAqB,MAAM;IAClE,OAAO,gBAAgB,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;yFACyF;AACzF,MAAM,UAAU,eAAe,CAC7B,EAAkB,EAClB,SAA0B;IAE1B,MAAM,OAAO,GAAkD;QAC7D,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;QACrB,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;QAClB,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;QACnB,GAAG,EAAE,CAAC,MAAM,CAAC;KACd,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GACR,SAAS,KAAK,MAAM;QAClB,CAAC,CAAC,CAAC,oBAAoB,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;QAC7F,CAAC,CAAC;YACE,wBAAwB;YACxB,GAAG;YACH,cAAc;YACd,YAAY;YACZ,UAAU;YACV,OAAO;YACP,WAAW;YACX,gBAAgB;YAChB,KAAK;YACL,SAAS,EAAE,EAAE;YACb,OAAO;YACP,gBAAgB;YAChB,eAAe;YACf,gBAAgB;SACjB,CAAC;IACR,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SkillSourceConfig } from '../config/schema.js';
|
|
2
|
+
export interface SkillsLockFile {
|
|
3
|
+
version: number;
|
|
4
|
+
skills: Record<string, {
|
|
5
|
+
source: string;
|
|
6
|
+
sourceType: string;
|
|
7
|
+
skillPath: string;
|
|
8
|
+
computedHash: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface SkillInstallOptions {
|
|
12
|
+
agents?: string[];
|
|
13
|
+
dryRun?: boolean;
|
|
14
|
+
silent?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function installSkillSource(targetDir: string, source: SkillSourceConfig, options?: SkillInstallOptions): Promise<{
|
|
17
|
+
ok: boolean;
|
|
18
|
+
message?: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function installAllSkills(targetDir: string, sources: SkillSourceConfig[], options?: SkillInstallOptions): Promise<{
|
|
21
|
+
installed: string[];
|
|
22
|
+
failed: string[];
|
|
23
|
+
}>;
|
|
24
|
+
export declare function getInstalledSkills(targetDir: string): string[];
|
|
25
|
+
export declare function updateSkills(targetDir: string, options?: {
|
|
26
|
+
dryRun?: boolean;
|
|
27
|
+
silent?: boolean;
|
|
28
|
+
}): Promise<boolean>;
|
|
29
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/adapters/skills.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CACZ,MAAM,EACN;QACE,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACtB,CACF,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B5C;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAcpD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB9D;AAED,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC,OAAO,CAAC,CASlB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileExists, readJsonFile } from '../utils/fs.js';
|
|
4
|
+
import { runExecutable } from '../utils/shell.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
import { validateUpstreamArgument } from '../config/validation.js';
|
|
7
|
+
export async function installSkillSource(targetDir, source, options = {}) {
|
|
8
|
+
const { agents = ['antigravity', 'codex'], dryRun = false, silent = false } = options;
|
|
9
|
+
validateUpstreamArgument(source.package, 'skill package');
|
|
10
|
+
for (const skill of source.skills)
|
|
11
|
+
validateUpstreamArgument(skill, 'skill name');
|
|
12
|
+
for (const agent of agents)
|
|
13
|
+
validateUpstreamArgument(agent, 'agent');
|
|
14
|
+
const args = [
|
|
15
|
+
'-y',
|
|
16
|
+
'skills',
|
|
17
|
+
'add',
|
|
18
|
+
source.package,
|
|
19
|
+
'--skill',
|
|
20
|
+
...(source.skills.length ? source.skills : ['*']),
|
|
21
|
+
'--agent',
|
|
22
|
+
...agents,
|
|
23
|
+
'-y'
|
|
24
|
+
];
|
|
25
|
+
if (!silent) {
|
|
26
|
+
logger.dim(`Installing skills from ${source.package}: ${source.skills.join(', ')}...`);
|
|
27
|
+
}
|
|
28
|
+
const res = await runExecutable('npx', args, { cwd: targetDir, dryRun, silent: true });
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
logger.warn(`Failed installing skills from ${source.package}: ${res.stderr || res.stdout}`);
|
|
31
|
+
return { ok: false, message: res.stderr || res.stdout };
|
|
32
|
+
}
|
|
33
|
+
return { ok: true };
|
|
34
|
+
}
|
|
35
|
+
export async function installAllSkills(targetDir, sources, options = {}) {
|
|
36
|
+
const installed = [];
|
|
37
|
+
const failed = [];
|
|
38
|
+
for (const source of sources) {
|
|
39
|
+
const res = await installSkillSource(targetDir, source, options);
|
|
40
|
+
if (res.ok) {
|
|
41
|
+
installed.push(...(source.skills.length ? source.skills : [`${source.package}:*`]));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
failed.push(...(source.skills.length ? source.skills : [`${source.package}:*`]));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { installed, failed };
|
|
48
|
+
}
|
|
49
|
+
export function getInstalledSkills(targetDir) {
|
|
50
|
+
const lockPath = path.join(targetDir, 'skills-lock.json');
|
|
51
|
+
if (fileExists(lockPath)) {
|
|
52
|
+
const lock = readJsonFile(lockPath);
|
|
53
|
+
if (lock && lock.skills) {
|
|
54
|
+
return Object.keys(lock.skills);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check .agents/skills directory directly
|
|
58
|
+
const skillsDir = path.join(targetDir, '.agents', 'skills');
|
|
59
|
+
if (fileExists(skillsDir)) {
|
|
60
|
+
try {
|
|
61
|
+
return fs.readdirSync(skillsDir).filter((f) => !f.startsWith('.'));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
export async function updateSkills(targetDir, options = {}) {
|
|
70
|
+
const { dryRun = false, silent = false } = options;
|
|
71
|
+
if (!silent)
|
|
72
|
+
logger.dim('Updating installed skills...');
|
|
73
|
+
const res = await runExecutable('npx', ['-y', 'skills', 'update', '-p', '-y'], {
|
|
74
|
+
cwd: targetDir,
|
|
75
|
+
dryRun,
|
|
76
|
+
silent: true
|
|
77
|
+
});
|
|
78
|
+
return res.ok;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/adapters/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAwBA,wBAAsB,SAAS,CAAC,SAAS,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2NhF"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { runExecutable, commandExists } from '../utils/shell.js';
|
|
4
|
+
import { fileExists, readTextFile } from '../utils/fs.js';
|
|
5
|
+
import { AGINIT_CONFIG_FILENAME, LEGACY_CONFIG_FILENAME } from '../config/schema.js';
|
|
6
|
+
import { detectPackageManager } from '../adapters/package-manager.js';
|
|
7
|
+
import { getInstalledSkills } from '../adapters/skills.js';
|
|
8
|
+
import { readProjectConfig } from '../config/validation.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
export async function runDoctor(targetDir = process.cwd()) {
|
|
11
|
+
logger.banner('Aginit — System & Project Doctor', `Target: ${targetDir}`);
|
|
12
|
+
// Resolve project config early to detect configured package manager
|
|
13
|
+
let configPath = path.join(targetDir, AGINIT_CONFIG_FILENAME);
|
|
14
|
+
if (!fileExists(configPath)) {
|
|
15
|
+
const legacyPath = path.join(targetDir, LEGACY_CONFIG_FILENAME);
|
|
16
|
+
if (fileExists(legacyPath)) {
|
|
17
|
+
configPath = legacyPath;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const configExists = fileExists(configPath);
|
|
21
|
+
let projectConfig = null;
|
|
22
|
+
let configError = '';
|
|
23
|
+
try {
|
|
24
|
+
projectConfig = readProjectConfig(targetDir);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
configError = error instanceof Error ? error.message : String(error);
|
|
28
|
+
}
|
|
29
|
+
const activePm = projectConfig?.packageManager || detectPackageManager(targetDir) || 'pnpm';
|
|
30
|
+
const checks = [];
|
|
31
|
+
// 1. Node.js check
|
|
32
|
+
const nodeRes = await runExecutable('node', ['-v'], { silent: true });
|
|
33
|
+
let nodeOk = nodeRes.ok;
|
|
34
|
+
let nodeDetail = 'Node.js is not found in PATH';
|
|
35
|
+
let nodeSuggestion = 'Install Node.js (>= 22.12.0 LTS recommended) via nvm, fnm, or brew';
|
|
36
|
+
if (nodeRes.ok) {
|
|
37
|
+
const rawVer = nodeRes.stdout.replace(/^v/, '');
|
|
38
|
+
const [major = 0, minor = 0] = rawVer.split('.').map(Number);
|
|
39
|
+
const meetsEngine = major > 22 || (major === 22 && minor >= 12);
|
|
40
|
+
if (meetsEngine) {
|
|
41
|
+
nodeDetail = `Installed (${nodeRes.stdout})`;
|
|
42
|
+
nodeSuggestion = undefined;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
nodeOk = false;
|
|
46
|
+
nodeDetail = `Installed (${nodeRes.stdout}) — requires Node.js >= 22.12.0`;
|
|
47
|
+
nodeSuggestion = 'Upgrade Node.js to >= 22.12.0 (LTS) via nvm, fnm, or brew';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
checks.push({
|
|
51
|
+
name: 'Node.js runtime',
|
|
52
|
+
category: 'Environment',
|
|
53
|
+
ok: nodeOk,
|
|
54
|
+
version: nodeRes.stdout,
|
|
55
|
+
detail: nodeDetail,
|
|
56
|
+
suggestion: nodeSuggestion
|
|
57
|
+
});
|
|
58
|
+
// 2. Active Package Manager check (pnpm, npm, yarn, or bun)
|
|
59
|
+
const pmRes = await runExecutable(activePm, ['-v'], { silent: true });
|
|
60
|
+
checks.push({
|
|
61
|
+
name: `${activePm} package manager`,
|
|
62
|
+
category: 'Environment',
|
|
63
|
+
ok: pmRes.ok,
|
|
64
|
+
version: pmRes.stdout,
|
|
65
|
+
detail: pmRes.ok ? `Installed (${pmRes.stdout})` : `${activePm} is not found in PATH`,
|
|
66
|
+
suggestion: pmRes.ok
|
|
67
|
+
? undefined
|
|
68
|
+
: `Install ${activePm} (${activePm === 'pnpm' ? 'npm install -g pnpm' : activePm === 'bun' ? 'curl -fsSL https://bun.sh/install | bash' : 'install ' + activePm})`
|
|
69
|
+
});
|
|
70
|
+
// 3. Git check
|
|
71
|
+
const gitExists = await commandExists('git');
|
|
72
|
+
let isGitRepo = fileExists(path.join(targetDir, '.git'));
|
|
73
|
+
let inWorkTree = false;
|
|
74
|
+
if (gitExists && !isGitRepo) {
|
|
75
|
+
const revParse = await runExecutable('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
76
|
+
cwd: targetDir,
|
|
77
|
+
silent: true
|
|
78
|
+
});
|
|
79
|
+
if (revParse.ok && revParse.stdout === 'true') {
|
|
80
|
+
isGitRepo = true;
|
|
81
|
+
inWorkTree = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
checks.push({
|
|
85
|
+
name: 'Git VCS',
|
|
86
|
+
category: 'Environment',
|
|
87
|
+
ok: gitExists && isGitRepo,
|
|
88
|
+
detail: gitExists
|
|
89
|
+
? isGitRepo
|
|
90
|
+
? inWorkTree
|
|
91
|
+
? 'Git installed and target directory is within an active git repository'
|
|
92
|
+
: 'Git installed and repository initialized'
|
|
93
|
+
: 'Git installed, but target directory is not a git repo'
|
|
94
|
+
: 'Git is not installed',
|
|
95
|
+
suggestion: !gitExists
|
|
96
|
+
? 'Install git via brew or Xcode Command Line Tools'
|
|
97
|
+
: !isGitRepo
|
|
98
|
+
? 'Run `git init` or `aginit init` to initialize repository'
|
|
99
|
+
: undefined
|
|
100
|
+
});
|
|
101
|
+
// 4. Graft CLI check
|
|
102
|
+
const graftExists = await commandExists('graft');
|
|
103
|
+
let graftVersion = '';
|
|
104
|
+
if (graftExists) {
|
|
105
|
+
const gv = await runExecutable('graft', ['--version'], { silent: true });
|
|
106
|
+
graftVersion = gv.stdout;
|
|
107
|
+
}
|
|
108
|
+
checks.push({
|
|
109
|
+
name: 'Graft codebase graph CLI',
|
|
110
|
+
category: 'AI Tooling',
|
|
111
|
+
ok: graftExists,
|
|
112
|
+
version: graftVersion,
|
|
113
|
+
detail: graftExists ? `Installed globally (${graftVersion})` : 'Graft CLI not found in PATH',
|
|
114
|
+
suggestion: graftExists ? undefined : 'Install Graft: `npm install -g @nanonets/graft`'
|
|
115
|
+
});
|
|
116
|
+
// 5. Codex CLI check
|
|
117
|
+
const codexExists = await commandExists('codex');
|
|
118
|
+
checks.push({
|
|
119
|
+
name: 'Codex CLI (secondary agent)',
|
|
120
|
+
category: 'AI Tooling',
|
|
121
|
+
ok: codexExists,
|
|
122
|
+
detail: codexExists ? 'Codex CLI available in PATH' : 'Codex CLI not found in PATH',
|
|
123
|
+
suggestion: codexExists ? undefined : 'Install Codex CLI if you want dual-agent orchestration'
|
|
124
|
+
});
|
|
125
|
+
// 6. Skills CLI check (skills.sh engine)
|
|
126
|
+
const skillsRes = await runExecutable('npx', ['-y', 'skills', '--version'], { silent: true });
|
|
127
|
+
checks.push({
|
|
128
|
+
name: 'Skills CLI (skills.sh engine)',
|
|
129
|
+
category: 'AI Tooling',
|
|
130
|
+
ok: skillsRes.ok,
|
|
131
|
+
version: skillsRes.stdout,
|
|
132
|
+
detail: skillsRes.ok ? `Functional (${skillsRes.stdout})` : 'Failed running npx skills',
|
|
133
|
+
suggestion: skillsRes.ok ? undefined : 'Check network connectivity or npm/npx configuration'
|
|
134
|
+
});
|
|
135
|
+
// 7. Project-level checks
|
|
136
|
+
checks.push({
|
|
137
|
+
name: `Project configuration (${path.basename(configPath)})`,
|
|
138
|
+
category: 'Project Config',
|
|
139
|
+
ok: !!projectConfig,
|
|
140
|
+
detail: projectConfig
|
|
141
|
+
? `Preset: "${projectConfig.preset}" (v${projectConfig.schemaVersion || '1.0.0'}), pm: ${activePm}, agents: ${projectConfig.agents.primary}/${projectConfig.agents.secondary}`
|
|
142
|
+
: configError
|
|
143
|
+
? `Invalid configuration: ${configError}`
|
|
144
|
+
: 'No aginit.config.json found in current directory',
|
|
145
|
+
suggestion: projectConfig
|
|
146
|
+
? undefined
|
|
147
|
+
: configError
|
|
148
|
+
? 'Correct the configuration fields before running initialization'
|
|
149
|
+
: 'Run `aginit init` to generate declarative configuration'
|
|
150
|
+
});
|
|
151
|
+
// 8. AGENTS.md check
|
|
152
|
+
const agentsPath = path.join(targetDir, 'AGENTS.md');
|
|
153
|
+
const agentsExists = fileExists(agentsPath);
|
|
154
|
+
const agentsContent = agentsExists ? readTextFile(agentsPath) || '' : '';
|
|
155
|
+
const hasIntakeSection = agentsContent.includes('Bootstrap & First Session');
|
|
156
|
+
checks.push({
|
|
157
|
+
name: 'AGENTS.md Context',
|
|
158
|
+
category: 'Project Config',
|
|
159
|
+
ok: agentsExists && hasIntakeSection,
|
|
160
|
+
detail: agentsExists
|
|
161
|
+
? hasIntakeSection
|
|
162
|
+
? 'AGENTS.md present with intake/bootstrap guidance'
|
|
163
|
+
: 'AGENTS.md present but missing intake guidance'
|
|
164
|
+
: 'AGENTS.md not found in directory',
|
|
165
|
+
suggestion: !agentsExists
|
|
166
|
+
? 'Run `aginit init` to generate standard AGENTS.md'
|
|
167
|
+
: !hasIntakeSection
|
|
168
|
+
? 'Run `aginit init` to add intake section to AGENTS.md'
|
|
169
|
+
: undefined
|
|
170
|
+
});
|
|
171
|
+
// 9. Installed skills check
|
|
172
|
+
const installedSkills = getInstalledSkills(targetDir);
|
|
173
|
+
checks.push({
|
|
174
|
+
name: 'Local Agent Skills (.agents/skills/)',
|
|
175
|
+
category: 'Project Config',
|
|
176
|
+
ok: installedSkills.length > 0,
|
|
177
|
+
detail: installedSkills.length > 0
|
|
178
|
+
? `${installedSkills.length} skills installed: ${installedSkills.join(', ')}`
|
|
179
|
+
: 'No skills found in .agents/skills/',
|
|
180
|
+
suggestion: installedSkills.length === 0
|
|
181
|
+
? 'Run `aginit init` or `npx skills add ...` to install skills'
|
|
182
|
+
: undefined
|
|
183
|
+
});
|
|
184
|
+
// Print grouped results
|
|
185
|
+
const categories = [
|
|
186
|
+
'Environment',
|
|
187
|
+
'AI Tooling',
|
|
188
|
+
'Project Config'
|
|
189
|
+
];
|
|
190
|
+
for (const cat of categories) {
|
|
191
|
+
console.log(pc.bold(pc.underline(cat)));
|
|
192
|
+
const catChecks = checks.filter((c) => c.category === cat);
|
|
193
|
+
for (const c of catChecks) {
|
|
194
|
+
const icon = c.ok ? pc.green('✓') : pc.yellow('⚠');
|
|
195
|
+
const name = pc.bold(c.name);
|
|
196
|
+
console.log(` ${icon} ${name}: ${c.detail}`);
|
|
197
|
+
if (c.suggestion) {
|
|
198
|
+
console.log(` ${pc.cyan('→ Suggestion:')} ${pc.dim(c.suggestion)}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
console.log();
|
|
202
|
+
}
|
|
203
|
+
const passed = checks.filter((c) => c.ok).length;
|
|
204
|
+
const total = checks.length;
|
|
205
|
+
if (passed === total) {
|
|
206
|
+
logger.success(pc.bold(`All ${total} health checks passed! System and repo are fully ready.`));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
logger.info(`Doctor finished: ${passed}/${total} checks healthy.`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAa5D,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB5F"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { readPackageManifest, readProjectConfig } from '../config/validation.js';
|
|
3
|
+
import { createProject } from './new.js';
|
|
4
|
+
import { detectPackageManager } from '../adapters/package-manager.js';
|
|
5
|
+
function sanitizeProjectName(rawName) {
|
|
6
|
+
const sanitized = rawName
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.trim()
|
|
9
|
+
.replace(/\s+/g, '-')
|
|
10
|
+
.replace(/[^a-z0-9._-]/g, '')
|
|
11
|
+
.replace(/^[^a-z0-9]+/, '');
|
|
12
|
+
return sanitized || 'ai-project';
|
|
13
|
+
}
|
|
14
|
+
export async function initCurrentDirectory(options = {}) {
|
|
15
|
+
const currentDir = process.cwd();
|
|
16
|
+
let projectName = path.basename(currentDir);
|
|
17
|
+
const saved = readProjectConfig(currentDir);
|
|
18
|
+
const pkg = readPackageManifest(currentDir);
|
|
19
|
+
if (pkg?.name)
|
|
20
|
+
projectName = pkg.name;
|
|
21
|
+
else if (saved?.name)
|
|
22
|
+
projectName = saved.name;
|
|
23
|
+
else
|
|
24
|
+
projectName = sanitizeProjectName(projectName);
|
|
25
|
+
const packageManager = options.packageManager ?? saved?.packageManager ?? detectPackageManager(currentDir) ?? 'pnpm';
|
|
26
|
+
return createProject(projectName, {
|
|
27
|
+
...options,
|
|
28
|
+
packageManager,
|
|
29
|
+
targetDir: currentDir
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,SAAS,GAAG,OAAO;SACtB,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,SAAS,IAAI,YAAY,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAA6B,EAAE;IACxE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,GAAG,EAAE,IAAI;QAAE,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;SACjC,IAAI,KAAK,EAAE,IAAI;QAAE,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;;QAC1C,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,cAAc,GAClB,OAAO,CAAC,cAAc,IAAI,KAAK,EAAE,cAAc,IAAI,oBAAoB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;IAEhG,OAAO,aAAa,CAAC,WAAW,EAAE;QAChC,GAAG,OAAO;QACV,cAAc;QACd,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,gBAAgB,IAAI,OAAO,CA8K1C"}
|