@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,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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,UAAkD,EAAE;IAEpD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CACT,uGAAuG,CACxG,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAE/D,iGAAiG;IACjG,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,OAAO,EACP,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,EAClE;QACE,GAAG,EAAE,SAAS;QACd,MAAM;QACN,MAAM,EAAE,IAAI;KACb,CACF,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,UAAkD,EAAE;IAEpD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,UAAkD,EAAE;IAEpD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACvD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO;aACpB,OAAO,CAAC,oDAAoD,EAAE,EAAE,CAAC;aACjE,IAAI,EAAE,CAAC;QACV,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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":"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"}
@@ -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,2 @@
1
+ export declare function runDoctor(targetDir?: string): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -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,3 @@
1
+ import { NewProjectOptions } from './new.js';
2
+ export declare function initCurrentDirectory(options?: NewProjectOptions): Promise<boolean>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -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"}
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createCliProgram(): Command;
3
+ //# sourceMappingURL=main.d.ts.map
@@ -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"}