@zik000/archai 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/README.md +378 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +28 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +128 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.d.ts +7 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +165 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +160 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/generator/claude-cli.d.ts +19 -0
- package/dist/generator/claude-cli.d.ts.map +1 -0
- package/dist/generator/claude-cli.js +168 -0
- package/dist/generator/claude-cli.js.map +1 -0
- package/dist/generator/prompt-builder.d.ts +18 -0
- package/dist/generator/prompt-builder.d.ts.map +1 -0
- package/dist/generator/prompt-builder.js +122 -0
- package/dist/generator/prompt-builder.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold/copy-core-agents.d.ts +2 -0
- package/dist/scaffold/copy-core-agents.d.ts.map +1 -0
- package/dist/scaffold/copy-core-agents.js +74 -0
- package/dist/scaffold/copy-core-agents.js.map +1 -0
- package/dist/scaffold/create-config.d.ts +12 -0
- package/dist/scaffold/create-config.d.ts.map +1 -0
- package/dist/scaffold/create-config.js +154 -0
- package/dist/scaffold/create-config.js.map +1 -0
- package/dist/scaffold/create-project-description.d.ts +12 -0
- package/dist/scaffold/create-project-description.d.ts.map +1 -0
- package/dist/scaffold/create-project-description.js +104 -0
- package/dist/scaffold/create-project-description.js.map +1 -0
- package/dist/scaffold/create-structure.d.ts +2 -0
- package/dist/scaffold/create-structure.d.ts.map +1 -0
- package/dist/scaffold/create-structure.js +146 -0
- package/dist/scaffold/create-structure.js.map +1 -0
- package/dist/utils/detect-project.d.ts +11 -0
- package/dist/utils/detect-project.d.ts.map +1 -0
- package/dist/utils/detect-project.js +124 -0
- package/dist/utils/detect-project.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 +30 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validate-config.d.ts +23 -0
- package/dist/utils/validate-config.d.ts.map +1 -0
- package/dist/utils/validate-config.js +109 -0
- package/dist/utils/validate-config.js.map +1 -0
- package/package.json +59 -0
- package/templates/ARCHAI_README.md +326 -0
- package/templates/PROMPTS.md +480 -0
- package/templates/core-agents/cleanup-agent.md +132 -0
- package/templates/core-agents/code-reviewer.md +191 -0
- package/templates/core-agents/deep-analyst.md +170 -0
- package/templates/core-agents/finalization-agent.md +175 -0
- package/templates/core-agents/implementation-agent.md +173 -0
- package/templates/core-agents/iteration-controller.md +320 -0
- package/templates/core-agents/plan-validator.md +125 -0
- package/templates/core-agents/task-orchestrator.md +191 -0
- package/templates/core-agents/tdd-designer.md +205 -0
- package/templates/specialist-meta.md +275 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = path.dirname(__filename);
|
|
6
|
+
const FOLDERS = [
|
|
7
|
+
// Claude agent system
|
|
8
|
+
'.claude/agents',
|
|
9
|
+
'.claude/state',
|
|
10
|
+
'.claude/state/archived',
|
|
11
|
+
'.claude/plans',
|
|
12
|
+
'.claude/plans/archived',
|
|
13
|
+
'.claude/templates',
|
|
14
|
+
// Knowledge base
|
|
15
|
+
'.knowledge/context',
|
|
16
|
+
'.knowledge/decisions',
|
|
17
|
+
'.knowledge/learnings',
|
|
18
|
+
'.knowledge/planning',
|
|
19
|
+
'.knowledge/status',
|
|
20
|
+
// Task management
|
|
21
|
+
'.tasks/inbox',
|
|
22
|
+
'.tasks/done',
|
|
23
|
+
'.tasks/epics',
|
|
24
|
+
'.tasks/review',
|
|
25
|
+
'.tasks/blocked',
|
|
26
|
+
'.tasks/templates',
|
|
27
|
+
// Supervisor (coordination)
|
|
28
|
+
'.supervisor',
|
|
29
|
+
// Agent scratch space
|
|
30
|
+
'.agents/plans',
|
|
31
|
+
'.agents/scratch',
|
|
32
|
+
'.agents/thoughts',
|
|
33
|
+
];
|
|
34
|
+
export async function scaffoldProject() {
|
|
35
|
+
// Create all folders
|
|
36
|
+
for (const folder of FOLDERS) {
|
|
37
|
+
await fs.ensureDir(folder);
|
|
38
|
+
// Add .gitkeep to preserve empty folders
|
|
39
|
+
await fs.writeFile(`${folder}/.gitkeep`, '');
|
|
40
|
+
}
|
|
41
|
+
// Create supervisor files
|
|
42
|
+
await fs.writeFile('.supervisor/assignments.md', '# Assignments\n\nNo active assignments.\n');
|
|
43
|
+
await fs.writeFile('.supervisor/merge-queue.md', '# Merge Queue\n\nNo branches in queue.\n');
|
|
44
|
+
await fs.writeFile('.supervisor/conflicts.md', '# Conflicts\n\nNo conflicts to resolve.\n');
|
|
45
|
+
// Create task templates
|
|
46
|
+
await createTaskTemplates();
|
|
47
|
+
// Update .gitignore
|
|
48
|
+
await updateGitignore();
|
|
49
|
+
// Copy template files to project root
|
|
50
|
+
await copyTemplateFiles();
|
|
51
|
+
}
|
|
52
|
+
async function copyTemplateFiles() {
|
|
53
|
+
const templateFiles = [
|
|
54
|
+
{ src: 'PROMPTS.md', dest: 'PROMPTS.md' },
|
|
55
|
+
{ src: 'ARCHAI_README.md', dest: 'ARCHAI_README.md' },
|
|
56
|
+
];
|
|
57
|
+
for (const file of templateFiles) {
|
|
58
|
+
const templatePath = path.join(__dirname, '../../templates', file.src);
|
|
59
|
+
const destPath = file.dest;
|
|
60
|
+
// Only copy if file doesn't already exist
|
|
61
|
+
if (await fs.pathExists(destPath)) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (await fs.pathExists(templatePath)) {
|
|
65
|
+
await fs.copyFile(templatePath, destPath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function createTaskTemplates() {
|
|
70
|
+
const epicTemplate = `---
|
|
71
|
+
id: TASK-XXX
|
|
72
|
+
title: "[Epic Title]"
|
|
73
|
+
type: epic
|
|
74
|
+
priority: medium
|
|
75
|
+
status: inbox
|
|
76
|
+
created: YYYY-MM-DD
|
|
77
|
+
due: null
|
|
78
|
+
depends_on: []
|
|
79
|
+
blocks: []
|
|
80
|
+
assignee: null
|
|
81
|
+
branch: null
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Description
|
|
85
|
+
|
|
86
|
+
[Describe the feature, bug fix, or task in detail]
|
|
87
|
+
|
|
88
|
+
## Acceptance Criteria
|
|
89
|
+
|
|
90
|
+
- [ ] Criterion 1
|
|
91
|
+
- [ ] Criterion 2
|
|
92
|
+
- [ ] Criterion 3
|
|
93
|
+
|
|
94
|
+
## Context
|
|
95
|
+
|
|
96
|
+
[Links to relevant documentation, designs, related issues]
|
|
97
|
+
|
|
98
|
+
## Technical Notes
|
|
99
|
+
|
|
100
|
+
[Any technical considerations or constraints]
|
|
101
|
+
`;
|
|
102
|
+
const subtaskTemplate = `---
|
|
103
|
+
id: SUBTASK-XXX
|
|
104
|
+
parent: TASK-XXX
|
|
105
|
+
title: "[Subtask Title]"
|
|
106
|
+
status: pending
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Description
|
|
110
|
+
|
|
111
|
+
[Brief description]
|
|
112
|
+
|
|
113
|
+
## Acceptance Criteria
|
|
114
|
+
|
|
115
|
+
- [ ] Criterion 1
|
|
116
|
+
`;
|
|
117
|
+
await fs.writeFile('.tasks/templates/epic-template.md', epicTemplate);
|
|
118
|
+
await fs.writeFile('.tasks/templates/subtask-template.md', subtaskTemplate);
|
|
119
|
+
}
|
|
120
|
+
async function updateGitignore() {
|
|
121
|
+
const gitignoreAdditions = `
|
|
122
|
+
# archai - Agent scratch space (temporary files)
|
|
123
|
+
.agents/scratch/*
|
|
124
|
+
!.agents/scratch/.gitkeep
|
|
125
|
+
.agents/thoughts/*
|
|
126
|
+
!.agents/thoughts/.gitkeep
|
|
127
|
+
.agents/plans/*
|
|
128
|
+
!.agents/plans/.gitkeep
|
|
129
|
+
|
|
130
|
+
# archai - Working state (cleared after tasks complete)
|
|
131
|
+
.claude/state/*
|
|
132
|
+
!.claude/state/.gitkeep
|
|
133
|
+
!.claude/state/archived/
|
|
134
|
+
`;
|
|
135
|
+
const gitignorePath = '.gitignore';
|
|
136
|
+
let content = '';
|
|
137
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
138
|
+
content = await fs.readFile(gitignorePath, 'utf-8');
|
|
139
|
+
if (content.includes('# archai')) {
|
|
140
|
+
// Already has archai entries
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
await fs.writeFile(gitignorePath, content + gitignoreAdditions);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=create-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-structure.js","sourceRoot":"","sources":["../../src/scaffold/create-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface DetectedProject {
|
|
2
|
+
name: string;
|
|
3
|
+
languages: string[];
|
|
4
|
+
packageManager: string | null;
|
|
5
|
+
isMonorepo: boolean;
|
|
6
|
+
frameworks: string[];
|
|
7
|
+
testFramework: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function detectProject(): Promise<DetectedProject>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=detect-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-project.d.ts","sourceRoot":"","sources":["../../src/utils/detect-project.ts"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CA6G9D"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export async function detectProject() {
|
|
4
|
+
const detected = {
|
|
5
|
+
name: path.basename(process.cwd()),
|
|
6
|
+
languages: [],
|
|
7
|
+
packageManager: null,
|
|
8
|
+
isMonorepo: false,
|
|
9
|
+
frameworks: [],
|
|
10
|
+
testFramework: null,
|
|
11
|
+
};
|
|
12
|
+
// Detect package.json (Node.js projects)
|
|
13
|
+
if (await fs.pathExists('package.json')) {
|
|
14
|
+
try {
|
|
15
|
+
const pkg = await fs.readJson('package.json');
|
|
16
|
+
detected.name = pkg.name || detected.name;
|
|
17
|
+
// Detect languages
|
|
18
|
+
if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
|
|
19
|
+
detected.languages.push('TypeScript');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
detected.languages.push('JavaScript');
|
|
23
|
+
}
|
|
24
|
+
// Detect frameworks
|
|
25
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
26
|
+
if (deps.react)
|
|
27
|
+
detected.frameworks.push('React');
|
|
28
|
+
if (deps.vue)
|
|
29
|
+
detected.frameworks.push('Vue');
|
|
30
|
+
if (deps.angular)
|
|
31
|
+
detected.frameworks.push('Angular');
|
|
32
|
+
if (deps.svelte)
|
|
33
|
+
detected.frameworks.push('Svelte');
|
|
34
|
+
if (deps.next)
|
|
35
|
+
detected.frameworks.push('Next.js');
|
|
36
|
+
if (deps.express)
|
|
37
|
+
detected.frameworks.push('Express');
|
|
38
|
+
if (deps.fastify)
|
|
39
|
+
detected.frameworks.push('Fastify');
|
|
40
|
+
if (deps.nestjs || deps['@nestjs/core'])
|
|
41
|
+
detected.frameworks.push('NestJS');
|
|
42
|
+
// Detect test frameworks
|
|
43
|
+
if (deps.vitest)
|
|
44
|
+
detected.testFramework = 'vitest';
|
|
45
|
+
else if (deps.jest)
|
|
46
|
+
detected.testFramework = 'jest';
|
|
47
|
+
else if (deps.mocha)
|
|
48
|
+
detected.testFramework = 'mocha';
|
|
49
|
+
else if (deps.ava)
|
|
50
|
+
detected.testFramework = 'ava';
|
|
51
|
+
else if (deps.playwright || deps['@playwright/test'])
|
|
52
|
+
detected.testFramework = 'playwright';
|
|
53
|
+
else if (deps.cypress)
|
|
54
|
+
detected.testFramework = 'cypress';
|
|
55
|
+
// Detect package manager
|
|
56
|
+
if (await fs.pathExists('pnpm-lock.yaml')) {
|
|
57
|
+
detected.packageManager = 'pnpm';
|
|
58
|
+
}
|
|
59
|
+
else if (await fs.pathExists('yarn.lock')) {
|
|
60
|
+
detected.packageManager = 'yarn';
|
|
61
|
+
}
|
|
62
|
+
else if (await fs.pathExists('bun.lockb')) {
|
|
63
|
+
detected.packageManager = 'bun';
|
|
64
|
+
}
|
|
65
|
+
else if (await fs.pathExists('package-lock.json')) {
|
|
66
|
+
detected.packageManager = 'npm';
|
|
67
|
+
}
|
|
68
|
+
// Detect monorepo
|
|
69
|
+
if (pkg.workspaces || await fs.pathExists('pnpm-workspace.yaml') || await fs.pathExists('turbo.json') || await fs.pathExists('nx.json')) {
|
|
70
|
+
detected.isMonorepo = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Ignore JSON parse errors
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Detect Python projects
|
|
78
|
+
if (await fs.pathExists('requirements.txt') || await fs.pathExists('pyproject.toml') || await fs.pathExists('setup.py')) {
|
|
79
|
+
detected.languages.push('Python');
|
|
80
|
+
detected.packageManager = 'pip';
|
|
81
|
+
if (await fs.pathExists('pyproject.toml')) {
|
|
82
|
+
try {
|
|
83
|
+
const content = await fs.readFile('pyproject.toml', 'utf-8');
|
|
84
|
+
if (content.includes('fastapi'))
|
|
85
|
+
detected.frameworks.push('FastAPI');
|
|
86
|
+
if (content.includes('django'))
|
|
87
|
+
detected.frameworks.push('Django');
|
|
88
|
+
if (content.includes('flask'))
|
|
89
|
+
detected.frameworks.push('Flask');
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Ignore read errors
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Detect Go projects
|
|
97
|
+
if (await fs.pathExists('go.mod')) {
|
|
98
|
+
detected.languages.push('Go');
|
|
99
|
+
detected.packageManager = 'go';
|
|
100
|
+
}
|
|
101
|
+
// Detect Rust projects
|
|
102
|
+
if (await fs.pathExists('Cargo.toml')) {
|
|
103
|
+
detected.languages.push('Rust');
|
|
104
|
+
detected.packageManager = 'cargo';
|
|
105
|
+
}
|
|
106
|
+
// Detect Java/Kotlin projects
|
|
107
|
+
if (await fs.pathExists('pom.xml') || await fs.pathExists('build.gradle') || await fs.pathExists('build.gradle.kts')) {
|
|
108
|
+
if (await fs.pathExists('build.gradle.kts')) {
|
|
109
|
+
detected.languages.push('Kotlin');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
detected.languages.push('Java');
|
|
113
|
+
}
|
|
114
|
+
detected.packageManager = await fs.pathExists('pom.xml') ? 'maven' : 'gradle';
|
|
115
|
+
}
|
|
116
|
+
// Detect .NET projects
|
|
117
|
+
const csprojFiles = await fs.readdir('.').catch(() => []);
|
|
118
|
+
if (csprojFiles.some((f) => f.endsWith('.csproj') || f.endsWith('.fsproj'))) {
|
|
119
|
+
detected.languages.push('C#');
|
|
120
|
+
detected.packageManager = 'dotnet';
|
|
121
|
+
}
|
|
122
|
+
return detected;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=detect-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-project.js","sourceRoot":"","sources":["../../src/utils/detect-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const logger: {
|
|
2
|
+
banner(): void;
|
|
3
|
+
section(title: string): void;
|
|
4
|
+
divider(): void;
|
|
5
|
+
success(message: string): void;
|
|
6
|
+
error(message: string): void;
|
|
7
|
+
warn(message: string): void;
|
|
8
|
+
info(message: string): void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;mBAUF,MAAM;;qBAQJ,MAAM;mBAIR,MAAM;kBAIP,MAAM;kBAIN,MAAM;CAGrB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export const logger = {
|
|
3
|
+
banner() {
|
|
4
|
+
console.log('');
|
|
5
|
+
console.log(chalk.cyan.bold(' ╔═══════════════════════════════════════╗'));
|
|
6
|
+
console.log(chalk.cyan.bold(' ║') + chalk.white.bold(' archai v0.1.0 ') + chalk.cyan.bold('║'));
|
|
7
|
+
console.log(chalk.cyan.bold(' ║') + chalk.gray(' Multi-Agent Development Workflow ') + chalk.cyan.bold('║'));
|
|
8
|
+
console.log(chalk.cyan.bold(' ╚═══════════════════════════════════════╝'));
|
|
9
|
+
console.log('');
|
|
10
|
+
},
|
|
11
|
+
section(title) {
|
|
12
|
+
console.log(chalk.cyan.bold(`━━━ ${title} ━━━`));
|
|
13
|
+
},
|
|
14
|
+
divider() {
|
|
15
|
+
console.log(chalk.gray('━'.repeat(50)));
|
|
16
|
+
},
|
|
17
|
+
success(message) {
|
|
18
|
+
console.log(chalk.green.bold('✓ ' + message));
|
|
19
|
+
},
|
|
20
|
+
error(message) {
|
|
21
|
+
console.log(chalk.red.bold('✗ ' + message));
|
|
22
|
+
},
|
|
23
|
+
warn(message) {
|
|
24
|
+
console.log(chalk.yellow('⚠ ' + message));
|
|
25
|
+
},
|
|
26
|
+
info(message) {
|
|
27
|
+
console.log(chalk.blue('ℹ ' + message));
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM;QACJ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface Specialist {
|
|
2
|
+
name: string;
|
|
3
|
+
focus: string;
|
|
4
|
+
key_concerns: string[];
|
|
5
|
+
}
|
|
6
|
+
interface Config {
|
|
7
|
+
projectName: string;
|
|
8
|
+
projectType: string;
|
|
9
|
+
languages: string;
|
|
10
|
+
frameworks: string;
|
|
11
|
+
testing: string;
|
|
12
|
+
packageManager: string;
|
|
13
|
+
specialists: Specialist[];
|
|
14
|
+
rawContent: string;
|
|
15
|
+
}
|
|
16
|
+
interface ValidationResult {
|
|
17
|
+
valid: boolean;
|
|
18
|
+
errors: string[];
|
|
19
|
+
config: Config;
|
|
20
|
+
}
|
|
21
|
+
export declare function validateConfig(): Promise<ValidationResult>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=validate-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/utils/validate-config.ts"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,UAAU,MAAM;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAuChE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
export async function validateConfig() {
|
|
3
|
+
const errors = [];
|
|
4
|
+
// Read config file
|
|
5
|
+
let configContent;
|
|
6
|
+
try {
|
|
7
|
+
configContent = await fs.readFile('archai.config.md', 'utf-8');
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return {
|
|
11
|
+
valid: false,
|
|
12
|
+
errors: ['Could not read archai.config.md'],
|
|
13
|
+
config: {},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// Parse markdown config
|
|
17
|
+
const config = parseMarkdownConfig(configContent);
|
|
18
|
+
// Validate required fields
|
|
19
|
+
if (!config.projectName || config.projectName === '[TODO') {
|
|
20
|
+
errors.push('Project name is required');
|
|
21
|
+
}
|
|
22
|
+
if (!config.projectType || config.projectType.includes('[TODO')) {
|
|
23
|
+
errors.push('Project type is required (edit archai.config.md)');
|
|
24
|
+
}
|
|
25
|
+
if (!config.languages || config.languages.includes('[TODO')) {
|
|
26
|
+
errors.push('Languages are required (edit archai.config.md)');
|
|
27
|
+
}
|
|
28
|
+
// Parse specialists from markdown
|
|
29
|
+
config.specialists = parseSpecialists(configContent);
|
|
30
|
+
return {
|
|
31
|
+
valid: errors.length === 0,
|
|
32
|
+
errors,
|
|
33
|
+
config,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function parseMarkdownConfig(content) {
|
|
37
|
+
const config = {
|
|
38
|
+
projectName: '',
|
|
39
|
+
projectType: '',
|
|
40
|
+
languages: '',
|
|
41
|
+
frameworks: '',
|
|
42
|
+
testing: '',
|
|
43
|
+
packageManager: '',
|
|
44
|
+
specialists: [],
|
|
45
|
+
rawContent: content,
|
|
46
|
+
};
|
|
47
|
+
// Extract values using regex patterns
|
|
48
|
+
const nameMatch = content.match(/\*\*Name:\*\*\s*(.+)/);
|
|
49
|
+
if (nameMatch)
|
|
50
|
+
config.projectName = nameMatch[1].trim();
|
|
51
|
+
const typeMatch = content.match(/\*\*Type:\*\*\s*(.+)/);
|
|
52
|
+
if (typeMatch)
|
|
53
|
+
config.projectType = typeMatch[1].trim();
|
|
54
|
+
const langMatch = content.match(/\*\*Languages:\*\*\s*(.+)/);
|
|
55
|
+
if (langMatch)
|
|
56
|
+
config.languages = langMatch[1].trim();
|
|
57
|
+
const frameworkMatch = content.match(/\*\*Frameworks:\*\*\s*(.+)/);
|
|
58
|
+
if (frameworkMatch)
|
|
59
|
+
config.frameworks = frameworkMatch[1].trim();
|
|
60
|
+
const testMatch = content.match(/\*\*Testing:\*\*\s*(.+)/);
|
|
61
|
+
if (testMatch)
|
|
62
|
+
config.testing = testMatch[1].trim();
|
|
63
|
+
const pmMatch = content.match(/\*\*Package Manager:\*\*\s*(.+)/);
|
|
64
|
+
if (pmMatch)
|
|
65
|
+
config.packageManager = pmMatch[1].trim();
|
|
66
|
+
return config;
|
|
67
|
+
}
|
|
68
|
+
function parseSpecialists(content) {
|
|
69
|
+
const specialists = [];
|
|
70
|
+
// Find the Specialists section - look for the header and capture until next ## header or ---
|
|
71
|
+
const specialistsSection = content.match(/## Specialists to Generate[\s\S]*?(?=\n---|\n## [A-Z]|$)/);
|
|
72
|
+
if (!specialistsSection)
|
|
73
|
+
return specialists;
|
|
74
|
+
const sectionContent = specialistsSection[0];
|
|
75
|
+
// Match each specialist (### 1. Name, ### 2. Name, etc.)
|
|
76
|
+
// Use a more flexible pattern that captures until next ### or end of section
|
|
77
|
+
const specialistPattern = /###\s*\d+\.\s*([^\n]+)\n([\s\S]*?)(?=\n###\s*\d+\.|\n---|\n## |$)/g;
|
|
78
|
+
const specialistMatches = sectionContent.matchAll(specialistPattern);
|
|
79
|
+
for (const match of specialistMatches) {
|
|
80
|
+
const name = match[1].trim();
|
|
81
|
+
const details = match[2];
|
|
82
|
+
// Skip placeholder entries
|
|
83
|
+
if (name.includes('[TODO') || name.includes('[Add more'))
|
|
84
|
+
continue;
|
|
85
|
+
// Extract focus
|
|
86
|
+
const focusMatch = details.match(/\*\*Focus:\*\*\s*(.+)/);
|
|
87
|
+
const focus = focusMatch ? focusMatch[1].trim() : '';
|
|
88
|
+
// Skip if focus is empty or placeholder
|
|
89
|
+
if (!focus || focus.includes('['))
|
|
90
|
+
continue;
|
|
91
|
+
// Extract key concerns
|
|
92
|
+
const key_concerns = [];
|
|
93
|
+
const concernsMatch = details.match(/\*\*Key Concerns:\*\*([\s\S]*?)(?=\n\n|\n###|\n---|$)/);
|
|
94
|
+
if (concernsMatch) {
|
|
95
|
+
const concernLines = concernsMatch[1].match(/^-\s*(.+)/gm);
|
|
96
|
+
if (concernLines) {
|
|
97
|
+
concernLines.forEach(line => {
|
|
98
|
+
const concern = line.replace(/^-\s*/, '').trim();
|
|
99
|
+
if (concern && !concern.includes('[')) {
|
|
100
|
+
key_concerns.push(concern);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
specialists.push({ name, focus, key_concerns });
|
|
106
|
+
}
|
|
107
|
+
return specialists;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=validate-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../src/utils/validate-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zik000/archai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Multi-agent AI development workflow setup for any project",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude",
|
|
7
|
+
"ai",
|
|
8
|
+
"agents",
|
|
9
|
+
"development",
|
|
10
|
+
"workflow",
|
|
11
|
+
"automation",
|
|
12
|
+
"claude-code"
|
|
13
|
+
],
|
|
14
|
+
"author": "",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": ""
|
|
19
|
+
},
|
|
20
|
+
"type": "module",
|
|
21
|
+
"bin": {
|
|
22
|
+
"archai": "./dist/bin/cli.js"
|
|
23
|
+
},
|
|
24
|
+
"main": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"templates"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "tsc --watch",
|
|
33
|
+
"start": "node dist/bin/cli.js",
|
|
34
|
+
"test": "vitest",
|
|
35
|
+
"lint": "eslint src --ext .ts",
|
|
36
|
+
"prepublishOnly": "npm run build"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"chalk": "^5.3.0",
|
|
40
|
+
"commander": "^12.1.0",
|
|
41
|
+
"fs-extra": "^11.2.0",
|
|
42
|
+
"inquirer": "^9.2.15",
|
|
43
|
+
"ora": "^8.0.1",
|
|
44
|
+
"yaml": "^2.4.1"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/fs-extra": "^11.0.4",
|
|
48
|
+
"@types/inquirer": "^9.0.9",
|
|
49
|
+
"@types/node": "^20.11.0",
|
|
50
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
51
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
52
|
+
"eslint": "^8.56.0",
|
|
53
|
+
"typescript": "^5.3.3",
|
|
54
|
+
"vitest": "^1.2.0"
|
|
55
|
+
},
|
|
56
|
+
"engines": {
|
|
57
|
+
"node": ">=18.0.0"
|
|
58
|
+
}
|
|
59
|
+
}
|