@bhimudev/gnanai 0.4.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 +270 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +188 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/cleanup.d.ts +21 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +380 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/dispatch.d.ts +13 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +85 -0
- package/dist/commands/dispatch.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 +155 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +167 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +711 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/knowledge-sync.d.ts +69 -0
- package/dist/commands/knowledge-sync.d.ts.map +1 -0
- package/dist/commands/knowledge-sync.js +661 -0
- package/dist/commands/knowledge-sync.js.map +1 -0
- package/dist/commands/knowledge.d.ts +35 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +254 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/rollback.d.ts +13 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +186 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/setup-config.d.ts +6 -0
- package/dist/commands/setup-config.d.ts.map +1 -0
- package/dist/commands/setup-config.js +663 -0
- package/dist/commands/setup-config.js.map +1 -0
- package/dist/commands/setup-project.d.ts +6 -0
- package/dist/commands/setup-project.d.ts.map +1 -0
- package/dist/commands/setup-project.js +361 -0
- package/dist/commands/setup-project.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +293 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +51 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +182 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +173 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +435 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/worktree.d.ts +30 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +262 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/generator/claude-cli.d.ts +24 -0
- package/dist/generator/claude-cli.d.ts.map +1 -0
- package/dist/generator/claude-cli.js +239 -0
- package/dist/generator/claude-cli.js.map +1 -0
- package/dist/generator/prompt-builder.d.ts +7 -0
- package/dist/generator/prompt-builder.d.ts.map +1 -0
- package/dist/generator/prompt-builder.js +144 -0
- package/dist/generator/prompt-builder.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/embeddings.d.ts +53 -0
- package/dist/mcp/embeddings.d.ts.map +1 -0
- package/dist/mcp/embeddings.js +68 -0
- package/dist/mcp/embeddings.js.map +1 -0
- package/dist/mcp/hybrid-search.d.ts +25 -0
- package/dist/mcp/hybrid-search.d.ts.map +1 -0
- package/dist/mcp/hybrid-search.js +72 -0
- package/dist/mcp/hybrid-search.js.map +1 -0
- package/dist/mcp/knowledge-server.d.ts +4 -0
- package/dist/mcp/knowledge-server.d.ts.map +1 -0
- package/dist/mcp/knowledge-server.js +294 -0
- package/dist/mcp/knowledge-server.js.map +1 -0
- package/dist/mcp/knowledge-utils.d.ts +65 -0
- package/dist/mcp/knowledge-utils.d.ts.map +1 -0
- package/dist/mcp/knowledge-utils.js +207 -0
- package/dist/mcp/knowledge-utils.js.map +1 -0
- package/dist/mcp/search-factory.d.ts +9 -0
- package/dist/mcp/search-factory.d.ts.map +1 -0
- package/dist/mcp/search-factory.js +23 -0
- package/dist/mcp/search-factory.js.map +1 -0
- package/dist/mcp/search-index.d.ts +45 -0
- package/dist/mcp/search-index.d.ts.map +1 -0
- package/dist/mcp/search-index.js +2 -0
- package/dist/mcp/search-index.js.map +1 -0
- package/dist/mcp/search-minisearch.d.ts +46 -0
- package/dist/mcp/search-minisearch.d.ts.map +1 -0
- package/dist/mcp/search-minisearch.js +99 -0
- package/dist/mcp/search-minisearch.js.map +1 -0
- package/dist/mcp/search-sqlite.d.ts +30 -0
- package/dist/mcp/search-sqlite.d.ts.map +1 -0
- package/dist/mcp/search-sqlite.js +188 -0
- package/dist/mcp/search-sqlite.js.map +1 -0
- package/dist/mcp/vector-store.d.ts +52 -0
- package/dist/mcp/vector-store.d.ts.map +1 -0
- package/dist/mcp/vector-store.js +183 -0
- package/dist/mcp/vector-store.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 +90 -0
- package/dist/scaffold/copy-core-agents.js.map +1 -0
- package/dist/scaffold/create-claude-settings.d.ts +40 -0
- package/dist/scaffold/create-claude-settings.d.ts.map +1 -0
- package/dist/scaffold/create-claude-settings.js +422 -0
- package/dist/scaffold/create-claude-settings.js.map +1 -0
- package/dist/scaffold/create-config.d.ts +14 -0
- package/dist/scaffold/create-config.d.ts.map +1 -0
- package/dist/scaffold/create-config.js +199 -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/types/dependency-analysis.d.ts +11 -0
- package/dist/types/dependency-analysis.d.ts.map +1 -0
- package/dist/types/dependency-analysis.js +2 -0
- package/dist/types/dependency-analysis.js.map +1 -0
- package/dist/types/index.d.ts +526 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/task.d.ts +25 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +3 -0
- package/dist/types/task.js.map +1 -0
- package/dist/utils/analyze-files.d.ts +7 -0
- package/dist/utils/analyze-files.d.ts.map +1 -0
- package/dist/utils/analyze-files.js +27 -0
- package/dist/utils/analyze-files.js.map +1 -0
- package/dist/utils/backup.d.ts +102 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +352 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/ci-provider.d.ts +23 -0
- package/dist/utils/ci-provider.d.ts.map +1 -0
- package/dist/utils/ci-provider.js +525 -0
- package/dist/utils/ci-provider.js.map +1 -0
- package/dist/utils/ci-status.d.ts +57 -0
- package/dist/utils/ci-status.d.ts.map +1 -0
- package/dist/utils/ci-status.js +349 -0
- package/dist/utils/ci-status.js.map +1 -0
- package/dist/utils/dependency-analysis.d.ts +34 -0
- package/dist/utils/dependency-analysis.d.ts.map +1 -0
- package/dist/utils/dependency-analysis.js +298 -0
- package/dist/utils/dependency-analysis.js.map +1 -0
- package/dist/utils/detect-git.d.ts +57 -0
- package/dist/utils/detect-git.d.ts.map +1 -0
- package/dist/utils/detect-git.js +439 -0
- package/dist/utils/detect-git.js.map +1 -0
- package/dist/utils/detect-mcp.d.ts +32 -0
- package/dist/utils/detect-mcp.d.ts.map +1 -0
- package/dist/utils/detect-mcp.js +178 -0
- package/dist/utils/detect-mcp.js.map +1 -0
- package/dist/utils/detect-project.d.ts +3 -0
- package/dist/utils/detect-project.d.ts.map +1 -0
- package/dist/utils/detect-project.js +155 -0
- package/dist/utils/detect-project.js.map +1 -0
- package/dist/utils/file-comparison.d.ts +89 -0
- package/dist/utils/file-comparison.d.ts.map +1 -0
- package/dist/utils/file-comparison.js +301 -0
- package/dist/utils/file-comparison.js.map +1 -0
- package/dist/utils/file-merger.d.ts +74 -0
- package/dist/utils/file-merger.d.ts.map +1 -0
- package/dist/utils/file-merger.js +350 -0
- package/dist/utils/file-merger.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/managed-process.d.ts +109 -0
- package/dist/utils/managed-process.d.ts.map +1 -0
- package/dist/utils/managed-process.js +481 -0
- package/dist/utils/managed-process.js.map +1 -0
- package/dist/utils/merge-claude-settings.d.ts +65 -0
- package/dist/utils/merge-claude-settings.d.ts.map +1 -0
- package/dist/utils/merge-claude-settings.js +133 -0
- package/dist/utils/merge-claude-settings.js.map +1 -0
- package/dist/utils/migration.d.ts +74 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +345 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/process-health.d.ts +51 -0
- package/dist/utils/process-health.d.ts.map +1 -0
- package/dist/utils/process-health.js +123 -0
- package/dist/utils/process-health.js.map +1 -0
- package/dist/utils/process-registry.d.ts +20 -0
- package/dist/utils/process-registry.d.ts.map +1 -0
- package/dist/utils/process-registry.js +151 -0
- package/dist/utils/process-registry.js.map +1 -0
- package/dist/utils/process-tree.d.ts +51 -0
- package/dist/utils/process-tree.d.ts.map +1 -0
- package/dist/utils/process-tree.js +499 -0
- package/dist/utils/process-tree.js.map +1 -0
- package/dist/utils/repair-mcp-config.d.ts +15 -0
- package/dist/utils/repair-mcp-config.d.ts.map +1 -0
- package/dist/utils/repair-mcp-config.js +129 -0
- package/dist/utils/repair-mcp-config.js.map +1 -0
- package/dist/utils/task-lifecycle.d.ts +60 -0
- package/dist/utils/task-lifecycle.d.ts.map +1 -0
- package/dist/utils/task-lifecycle.js +310 -0
- package/dist/utils/task-lifecycle.js.map +1 -0
- package/dist/utils/update-agent-mcp.d.ts +7 -0
- package/dist/utils/update-agent-mcp.d.ts.map +1 -0
- package/dist/utils/update-agent-mcp.js +115 -0
- package/dist/utils/update-agent-mcp.js.map +1 -0
- package/dist/utils/update-agent-templates.d.ts +6 -0
- package/dist/utils/update-agent-templates.d.ts.map +1 -0
- package/dist/utils/update-agent-templates.js +56 -0
- package/dist/utils/update-agent-templates.js.map +1 -0
- package/dist/utils/update-config-ci.d.ts +7 -0
- package/dist/utils/update-config-ci.d.ts.map +1 -0
- package/dist/utils/update-config-ci.js +72 -0
- package/dist/utils/update-config-ci.js.map +1 -0
- package/dist/utils/update-config-git.d.ts +18 -0
- package/dist/utils/update-config-git.d.ts.map +1 -0
- package/dist/utils/update-config-git.js +146 -0
- package/dist/utils/update-config-git.js.map +1 -0
- package/dist/utils/update-config-mcp.d.ts +7 -0
- package/dist/utils/update-config-mcp.d.ts.map +1 -0
- package/dist/utils/update-config-mcp.js +98 -0
- package/dist/utils/update-config-mcp.js.map +1 -0
- package/dist/utils/validate-config.d.ts +3 -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/dist/utils/version-tracker.d.ts +130 -0
- package/dist/utils/version-tracker.d.ts.map +1 -0
- package/dist/utils/version-tracker.js +298 -0
- package/dist/utils/version-tracker.js.map +1 -0
- package/dist/utils/worktree.d.ts +68 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +446 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +77 -0
- package/templates/ARCHAI_README.md +329 -0
- package/templates/CLAUDE.md +67 -0
- package/templates/PROMPTS.md +506 -0
- package/templates/core-agents/boss-agent.md +671 -0
- package/templates/core-agents/cleanup-agent.md +145 -0
- package/templates/core-agents/code-reviewer.md +175 -0
- package/templates/core-agents/critical-reviewer.md +117 -0
- package/templates/core-agents/deep-analyst.md +216 -0
- package/templates/core-agents/finalization-agent.md +252 -0
- package/templates/core-agents/git-coordinator.md +240 -0
- package/templates/core-agents/implementation-agent.md +151 -0
- package/templates/core-agents/maestro-agent.md +413 -0
- package/templates/core-agents/maestro-headless-agent.md +422 -0
- package/templates/core-agents/plan-validator.md +198 -0
- package/templates/core-agents/quick-fix.md +56 -0
- package/templates/core-agents/routing-templates.md +338 -0
- package/templates/core-agents/task-orchestrator.md +143 -0
- package/templates/core-agents/task-prep.md +202 -0
- package/templates/core-agents/tdd-designer.md +143 -0
- package/templates/specialist-meta.md +275 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import { logger } from "./logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build the CI/CD section content for archai.config.md.
|
|
5
|
+
*/
|
|
6
|
+
function buildCISection(result) {
|
|
7
|
+
if (result.provider === "none") {
|
|
8
|
+
return `## CI/CD\n\nNo CI provider detected. Run \`archai setup --ci\` after configuring your CI pipeline.\n`;
|
|
9
|
+
}
|
|
10
|
+
const config = result.config;
|
|
11
|
+
return `## CI/CD\n\n**CI Provider:** ${config.provider}\n**Auth Method:** ${config.authMethod}\n**Timeout:** ${config.timeout}\n**Detected Via:** ${result.detectedVia}\n`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Update archai.config.md with a CI/CD section.
|
|
15
|
+
* If the section already exists, replaces it. Otherwise inserts before ## Notes.
|
|
16
|
+
*/
|
|
17
|
+
export async function updateConfigWithCI(result) {
|
|
18
|
+
const configPath = "archai.config.md";
|
|
19
|
+
if (!(await fs.pathExists(configPath))) {
|
|
20
|
+
logger.warn("archai.config.md not found. Run `archai init` first.");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
let content = await fs.readFile(configPath, "utf-8");
|
|
24
|
+
const ciSection = buildCISection(result);
|
|
25
|
+
// Strategy 1: Replace existing ## CI/CD section
|
|
26
|
+
const sectionRegex = /## CI\/CD[\s\S]*?(?=\n---\n|\n## |$)/;
|
|
27
|
+
if (sectionRegex.test(content)) {
|
|
28
|
+
content = content.replace(sectionRegex, ciSection.trimEnd());
|
|
29
|
+
logger.debug("Replaced existing CI/CD section");
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Strategy 2: Replace the setup --ci placeholder
|
|
33
|
+
const placeholderRegex = /\[Run.*archai setup --ci.*to auto-configure\]/;
|
|
34
|
+
if (placeholderRegex.test(content)) {
|
|
35
|
+
// Replace the entire CI/CD section header + placeholder
|
|
36
|
+
const fullPlaceholderRegex = /## CI\/CD[\s\S]*?\[Run.*archai setup --ci.*to auto-configure\]/;
|
|
37
|
+
if (fullPlaceholderRegex.test(content)) {
|
|
38
|
+
content = content.replace(fullPlaceholderRegex, ciSection.trimEnd());
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
content = content.replace(placeholderRegex, ciSection.trimEnd());
|
|
42
|
+
}
|
|
43
|
+
logger.debug("Replaced CI/CD placeholder");
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Strategy 3: Insert before ## Notes
|
|
47
|
+
const notesIndex = content.indexOf("## Notes");
|
|
48
|
+
if (notesIndex !== -1) {
|
|
49
|
+
const beforeNotes = content.lastIndexOf("---", notesIndex);
|
|
50
|
+
if (beforeNotes !== -1) {
|
|
51
|
+
content = content.slice(0, beforeNotes) +
|
|
52
|
+
"---\n\n" + ciSection + "\n" +
|
|
53
|
+
content.slice(beforeNotes);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
content = content.slice(0, notesIndex) +
|
|
57
|
+
ciSection + "\n---\n\n" +
|
|
58
|
+
content.slice(notesIndex);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Append at end
|
|
63
|
+
if (!content.endsWith("\n"))
|
|
64
|
+
content += "\n";
|
|
65
|
+
content += "\n---\n\n" + ciSection;
|
|
66
|
+
}
|
|
67
|
+
logger.debug("Inserted new CI/CD section");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
await fs.writeFile(configPath, content);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=update-config-ci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-config-ci.js","sourceRoot":"","sources":["../../src/utils/update-config-ci.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GitConfig, GitPatterns } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Update archai.config.md with a Git Configuration section.
|
|
4
|
+
* If the section already exists, replaces it. Otherwise inserts before ## Notes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function updateConfigWithGit(gitConfig: GitConfig): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Update archai.config.md with a Git Conventions section.
|
|
9
|
+
* Returns true if the section was written, false if skipped.
|
|
10
|
+
*
|
|
11
|
+
* Behavior:
|
|
12
|
+
* - force=true (setup): always replaces existing section
|
|
13
|
+
* - force=false (update): only writes if section is missing or contains placeholder text
|
|
14
|
+
*/
|
|
15
|
+
export declare function updateConfigWithGitConventions(patterns: GitPatterns, options?: {
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=update-config-git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-config-git.d.ts","sourceRoot":"","sources":["../../src/utils/update-config-git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD7E;AAwBD;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiElB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Update archai.config.md with a Git Configuration section.
|
|
5
|
+
* If the section already exists, replaces it. Otherwise inserts before ## Notes.
|
|
6
|
+
*/
|
|
7
|
+
export async function updateConfigWithGit(gitConfig) {
|
|
8
|
+
const configPath = 'archai.config.md';
|
|
9
|
+
if (!await fs.pathExists(configPath)) {
|
|
10
|
+
logger.warn('archai.config.md not found. Run `archai init` first.');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let content = await fs.readFile(configPath, 'utf-8');
|
|
14
|
+
const remoteDisplay = gitConfig.remote && gitConfig.remoteUrl
|
|
15
|
+
? `${gitConfig.remote} (${gitConfig.remoteUrl})`
|
|
16
|
+
: 'none configured';
|
|
17
|
+
const gitSection = `## Git Configuration
|
|
18
|
+
|
|
19
|
+
**Default Branch:** ${gitConfig.defaultBranch}
|
|
20
|
+
**Remote:** ${remoteDisplay}
|
|
21
|
+
**Branch Convention:** ${gitConfig.branchConvention}
|
|
22
|
+
`;
|
|
23
|
+
// Check if section already exists
|
|
24
|
+
const sectionRegex = /## Git Configuration\n[\s\S]*?(?=\n## |\n---\n## |$)/;
|
|
25
|
+
if (sectionRegex.test(content)) {
|
|
26
|
+
// Replace existing section
|
|
27
|
+
content = content.replace(sectionRegex, gitSection.trimEnd());
|
|
28
|
+
logger.debug('Replaced existing Git Configuration section');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Insert before ## Notes section, or before the final ---\n\n## Notes
|
|
32
|
+
const notesIndex = content.indexOf('## Notes');
|
|
33
|
+
if (notesIndex !== -1) {
|
|
34
|
+
// Find the --- before ## Notes
|
|
35
|
+
const beforeNotes = content.lastIndexOf('---', notesIndex);
|
|
36
|
+
if (beforeNotes !== -1) {
|
|
37
|
+
content = content.slice(0, beforeNotes) +
|
|
38
|
+
'---\n\n' + gitSection + '\n' +
|
|
39
|
+
content.slice(beforeNotes);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
content = content.slice(0, notesIndex) +
|
|
43
|
+
gitSection + '\n---\n\n' +
|
|
44
|
+
content.slice(notesIndex);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Append at end
|
|
49
|
+
if (!content.endsWith('\n'))
|
|
50
|
+
content += '\n';
|
|
51
|
+
content += '\n---\n\n' + gitSection;
|
|
52
|
+
}
|
|
53
|
+
logger.debug('Inserted new Git Configuration section');
|
|
54
|
+
}
|
|
55
|
+
await fs.writeFile(configPath, content);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build the markdown section content for Git Conventions.
|
|
59
|
+
*/
|
|
60
|
+
function buildGitConventionsSection(patterns) {
|
|
61
|
+
const prefixList = patterns.detectedPrefixes.length > 0
|
|
62
|
+
? patterns.detectedPrefixes.join(', ')
|
|
63
|
+
: 'none';
|
|
64
|
+
const prPlatform = patterns.prPlatform || 'none';
|
|
65
|
+
const usesPRs = patterns.usesPullRequests ? 'Yes' : 'No';
|
|
66
|
+
return `## Git Conventions
|
|
67
|
+
|
|
68
|
+
**Branch Convention:** ${patterns.agentBranchConvention}
|
|
69
|
+
**Target Branch:** ${patterns.targetBranch}
|
|
70
|
+
**Merge Strategy:** ${patterns.mergeStrategy}
|
|
71
|
+
**Uses PRs/MRs:** ${usesPRs}
|
|
72
|
+
**PR Platform:** ${prPlatform}
|
|
73
|
+
**Detected Prefixes:** ${prefixList}
|
|
74
|
+
**Branches Analyzed:** ${patterns.branchesAnalyzed}
|
|
75
|
+
**Merge Commits Analyzed:** ${patterns.mergeCommitsAnalyzed}`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Update archai.config.md with a Git Conventions section.
|
|
79
|
+
* Returns true if the section was written, false if skipped.
|
|
80
|
+
*
|
|
81
|
+
* Behavior:
|
|
82
|
+
* - force=true (setup): always replaces existing section
|
|
83
|
+
* - force=false (update): only writes if section is missing or contains placeholder text
|
|
84
|
+
*/
|
|
85
|
+
export async function updateConfigWithGitConventions(patterns, options) {
|
|
86
|
+
const configPath = 'archai.config.md';
|
|
87
|
+
const force = options?.force ?? false;
|
|
88
|
+
if (!await fs.pathExists(configPath)) {
|
|
89
|
+
logger.warn('archai.config.md not found. Run archai init first.');
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
let content = await fs.readFile(configPath, 'utf-8');
|
|
93
|
+
const sectionRegex = /## Git Conventions\n[\s\S]*?(?=\n---\n|\n## |$)/;
|
|
94
|
+
const existingSection = content.match(sectionRegex);
|
|
95
|
+
if (existingSection) {
|
|
96
|
+
// Section exists
|
|
97
|
+
const sectionContent = existingSection[0];
|
|
98
|
+
const isPlaceholder = /\[Run.*archai setup.*to auto-configure\]/.test(sectionContent);
|
|
99
|
+
if (!force && !isPlaceholder) {
|
|
100
|
+
// Non-force mode and section has real content -- preserve user edits
|
|
101
|
+
logger.debug('Git Conventions section already configured, skipping');
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
// Replace existing section
|
|
105
|
+
const newSection = buildGitConventionsSection(patterns);
|
|
106
|
+
content = content.replace(sectionRegex, newSection.trimEnd());
|
|
107
|
+
logger.debug('Replaced existing Git Conventions section');
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Section does not exist -- insert it
|
|
111
|
+
const newSection = buildGitConventionsSection(patterns);
|
|
112
|
+
// Find insertion point: before ## CI/CD, ## MCP Servers, or ## Notes
|
|
113
|
+
let insertBefore = -1;
|
|
114
|
+
for (const marker of ['## CI/CD', '## MCP Servers', '## Notes']) {
|
|
115
|
+
const idx = content.indexOf(marker);
|
|
116
|
+
if (idx !== -1) {
|
|
117
|
+
insertBefore = idx;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (insertBefore !== -1) {
|
|
122
|
+
// Find the --- before the insertion point
|
|
123
|
+
const beforeSep = content.lastIndexOf('---', insertBefore);
|
|
124
|
+
if (beforeSep !== -1) {
|
|
125
|
+
content = content.slice(0, beforeSep) +
|
|
126
|
+
'---\n' + newSection + '\n\n' +
|
|
127
|
+
content.slice(beforeSep);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
content = content.slice(0, insertBefore) +
|
|
131
|
+
newSection + '\n\n---\n\n' +
|
|
132
|
+
content.slice(insertBefore);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Append at end
|
|
137
|
+
if (!content.endsWith('\n'))
|
|
138
|
+
content += '\n';
|
|
139
|
+
content += '\n---\n' + newSection + '\n';
|
|
140
|
+
}
|
|
141
|
+
logger.debug('Inserted new Git Conventions section');
|
|
142
|
+
}
|
|
143
|
+
await fs.writeFile(configPath, content);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=update-config-git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-config-git.js","sourceRoot":"","sources":["../../src/utils/update-config-git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpConfig } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Update archai.config.md with MCP server configuration.
|
|
4
|
+
* Replaces the existing MCP section or [TODO] placeholder.
|
|
5
|
+
*/
|
|
6
|
+
export declare function updateConfigWithMcp(config: McpConfig): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=update-config-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-config-mcp.d.ts","sourceRoot":"","sources":["../../src/utils/update-config-mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D1E"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Update archai.config.md with MCP server configuration.
|
|
5
|
+
* Replaces the existing MCP section or [TODO] placeholder.
|
|
6
|
+
*/
|
|
7
|
+
export async function updateConfigWithMcp(config) {
|
|
8
|
+
const configPath = 'archai.config.md';
|
|
9
|
+
if (!await fs.pathExists(configPath)) {
|
|
10
|
+
logger.warn('archai.config.md not found. Run `archai init` first.');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let content = await fs.readFile(configPath, 'utf-8');
|
|
14
|
+
const mcpSection = buildMcpSection(config);
|
|
15
|
+
// Try to replace existing MCP section
|
|
16
|
+
// Match "## MCP Servers & Skills" up to the next "---" separator or end of file
|
|
17
|
+
const sectionRegex = /## MCP Servers & Skills[\s\S]*?(?=\n---\n|$)/;
|
|
18
|
+
if (sectionRegex.test(content)) {
|
|
19
|
+
content = content.replace(sectionRegex, mcpSection.trimEnd());
|
|
20
|
+
logger.debug('Replaced existing MCP Servers & Skills section');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Try to find and replace [TODO: Configure MCP servers if needed]
|
|
24
|
+
const todoIndex = content.indexOf('[TODO: Configure MCP servers if needed]');
|
|
25
|
+
if (todoIndex !== -1) {
|
|
26
|
+
content = content.replace('[TODO: Configure MCP servers if needed]', mcpSection.trimEnd());
|
|
27
|
+
logger.debug('Replaced MCP TODO placeholder');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Try to find the archai setup --mcp placeholder
|
|
31
|
+
const setupPlaceholder = content.indexOf('[Run `archai setup --mcp` to auto-configure]');
|
|
32
|
+
if (setupPlaceholder !== -1) {
|
|
33
|
+
// Find the section header before it
|
|
34
|
+
const headerBefore = content.lastIndexOf('## MCP Servers & Skills', setupPlaceholder);
|
|
35
|
+
if (headerBefore !== -1) {
|
|
36
|
+
// Replace from header to just after the placeholder line
|
|
37
|
+
const placeholderEnd = content.indexOf('\n', setupPlaceholder);
|
|
38
|
+
const endIndex = placeholderEnd !== -1 ? placeholderEnd : content.length;
|
|
39
|
+
// Also capture any comment block between header and placeholder
|
|
40
|
+
content = content.slice(0, headerBefore) + mcpSection.trimEnd() + content.slice(endIndex);
|
|
41
|
+
logger.debug('Replaced MCP setup placeholder section');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Insert before ## Notes or append
|
|
46
|
+
const notesIndex = content.indexOf('## Notes');
|
|
47
|
+
if (notesIndex !== -1) {
|
|
48
|
+
const beforeNotes = content.lastIndexOf('---', notesIndex);
|
|
49
|
+
if (beforeNotes !== -1) {
|
|
50
|
+
content = content.slice(0, beforeNotes) +
|
|
51
|
+
'---\n\n' + mcpSection + '\n' +
|
|
52
|
+
content.slice(beforeNotes);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
content = content.slice(0, notesIndex) +
|
|
56
|
+
mcpSection + '\n---\n\n' +
|
|
57
|
+
content.slice(notesIndex);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (!content.endsWith('\n'))
|
|
62
|
+
content += '\n';
|
|
63
|
+
content += '\n---\n\n' + mcpSection;
|
|
64
|
+
}
|
|
65
|
+
logger.debug('Inserted new MCP Servers & Skills section');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
await fs.writeFile(configPath, content);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build the MCP section markdown string.
|
|
73
|
+
*/
|
|
74
|
+
function buildMcpSection(config) {
|
|
75
|
+
const lines = ['## MCP Servers & Skills', ''];
|
|
76
|
+
if (config.taskManager) {
|
|
77
|
+
const tm = config.taskManager;
|
|
78
|
+
lines.push(`### Task Manager: ${tm.provider}`);
|
|
79
|
+
lines.push(`- **Provider:** ${tm.provider}`);
|
|
80
|
+
lines.push(`- **Board:** ${tm.board.name} (ID: ${tm.board.id})`);
|
|
81
|
+
lines.push(`- **Mapping:** Epic → ${tm.mapping.epic}, Task → ${tm.mapping.task}, Subtask → ${tm.mapping.subtask}`);
|
|
82
|
+
lines.push(`- **Status Flow:** ${tm.mapping.statuses.join(' → ')}`);
|
|
83
|
+
lines.push('');
|
|
84
|
+
}
|
|
85
|
+
if (config.otherServers.length > 0) {
|
|
86
|
+
lines.push('### Other MCP Servers');
|
|
87
|
+
for (const server of config.otherServers) {
|
|
88
|
+
lines.push(`- ${server.name} (${server.status})`);
|
|
89
|
+
}
|
|
90
|
+
lines.push('');
|
|
91
|
+
}
|
|
92
|
+
if (!config.taskManager && config.otherServers.length === 0) {
|
|
93
|
+
lines.push('[No MCP servers configured. Run `archai setup --mcp` to detect and configure.]');
|
|
94
|
+
lines.push('');
|
|
95
|
+
}
|
|
96
|
+
return lines.join('\n');
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=update-config-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-config-mcp.js","sourceRoot":"","sources":["../../src/utils/update-config-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/utils/validate-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,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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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema version for the version.json file format.
|
|
3
|
+
*/
|
|
4
|
+
export declare const CURRENT_SCHEMA_VERSION = 1;
|
|
5
|
+
/**
|
|
6
|
+
* Default filename for the version tracking file.
|
|
7
|
+
*/
|
|
8
|
+
export declare const VERSION_FILE = "version.json";
|
|
9
|
+
/**
|
|
10
|
+
* Record of a single tracked file.
|
|
11
|
+
*/
|
|
12
|
+
export interface FileRecord {
|
|
13
|
+
baseHash: string | null;
|
|
14
|
+
isGenerated: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Complete version tracking data.
|
|
18
|
+
*/
|
|
19
|
+
export interface VersionFile {
|
|
20
|
+
schemaVersion: number;
|
|
21
|
+
archai: string;
|
|
22
|
+
installedAt: string;
|
|
23
|
+
lastUpdated: string;
|
|
24
|
+
files: Record<string, FileRecord>;
|
|
25
|
+
expectedFiles: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the version file path for a given .claude directory.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getVersionFilePath(claudeDir: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Load version file from disk.
|
|
33
|
+
* Returns null if file doesn't exist or is invalid.
|
|
34
|
+
*/
|
|
35
|
+
export declare function loadVersionFile(claudeDir: string): Promise<VersionFile | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Save version file to disk.
|
|
38
|
+
*/
|
|
39
|
+
export declare function saveVersionFile(claudeDir: string, data: VersionFile): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Create a new version file with initial values.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createVersionFile(archaiVersion: string, files?: Record<string, FileRecord>, expectedFiles?: string[]): VersionFile;
|
|
44
|
+
/**
|
|
45
|
+
* Update the version file with a new archai version.
|
|
46
|
+
*/
|
|
47
|
+
export declare function updateVersionInfo(versionFile: VersionFile, archaiVersion: string): VersionFile;
|
|
48
|
+
/**
|
|
49
|
+
* Update or add a file hash in the version data.
|
|
50
|
+
* Normalizes path separators for cross-platform compatibility.
|
|
51
|
+
*/
|
|
52
|
+
export declare function updateFileHash(versionFile: VersionFile, filePath: string, hash: string | null, isGenerated?: boolean): VersionFile;
|
|
53
|
+
/**
|
|
54
|
+
* Mark a file as generated (will not be modified by updates).
|
|
55
|
+
*/
|
|
56
|
+
export declare function markAsGenerated(versionFile: VersionFile, filePath: string): VersionFile;
|
|
57
|
+
/**
|
|
58
|
+
* Remove a file from tracking.
|
|
59
|
+
*/
|
|
60
|
+
export declare function removeFile(versionFile: VersionFile, filePath: string): VersionFile;
|
|
61
|
+
/**
|
|
62
|
+
* Get the file record for a specific path.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getFileRecord(versionFile: VersionFile, filePath: string): FileRecord | null;
|
|
65
|
+
/**
|
|
66
|
+
* Get the base hash for a file.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getBaseHash(versionFile: VersionFile, filePath: string): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Check if a file is marked as generated.
|
|
71
|
+
*/
|
|
72
|
+
export declare function isFileGenerated(versionFile: VersionFile, filePath: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get list of all tracked files.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getTrackedFiles(versionFile: VersionFile): string[];
|
|
77
|
+
/**
|
|
78
|
+
* Get list of expected files (files archai should manage).
|
|
79
|
+
*/
|
|
80
|
+
export declare function getExpectedFiles(versionFile: VersionFile): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Update the expected files list.
|
|
83
|
+
*/
|
|
84
|
+
export declare function setExpectedFiles(versionFile: VersionFile, expectedFiles: string[]): VersionFile;
|
|
85
|
+
/**
|
|
86
|
+
* Add a file to the expected files list.
|
|
87
|
+
*/
|
|
88
|
+
export declare function addExpectedFile(versionFile: VersionFile, filePath: string): VersionFile;
|
|
89
|
+
/**
|
|
90
|
+
* Remove a file from the expected files list.
|
|
91
|
+
*/
|
|
92
|
+
export declare function removeExpectedFile(versionFile: VersionFile, filePath: string): VersionFile;
|
|
93
|
+
/**
|
|
94
|
+
* Get files that are expected but not tracked.
|
|
95
|
+
*/
|
|
96
|
+
export declare function getMissingFiles(versionFile: VersionFile): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Get files that are tracked but not expected (orphaned).
|
|
99
|
+
*/
|
|
100
|
+
export declare function getOrphanedFiles(versionFile: VersionFile): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Get all generated files.
|
|
103
|
+
*/
|
|
104
|
+
export declare function getGeneratedFiles(versionFile: VersionFile): string[];
|
|
105
|
+
/**
|
|
106
|
+
* Check if version file exists for a given .claude directory.
|
|
107
|
+
*/
|
|
108
|
+
export declare function versionFileExists(claudeDir: string): Promise<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* Normalize a file path for cross-platform consistency.
|
|
111
|
+
* Uses forward slashes and removes leading ./
|
|
112
|
+
*/
|
|
113
|
+
export declare function normalizePath(filePath: string): string;
|
|
114
|
+
/**
|
|
115
|
+
* Bulk update multiple file hashes.
|
|
116
|
+
*/
|
|
117
|
+
export declare function bulkUpdateFileHashes(versionFile: VersionFile, updates: Array<{
|
|
118
|
+
path: string;
|
|
119
|
+
hash: string | null;
|
|
120
|
+
isGenerated?: boolean;
|
|
121
|
+
}>): VersionFile;
|
|
122
|
+
/**
|
|
123
|
+
* Create version data from a fresh install.
|
|
124
|
+
*/
|
|
125
|
+
export declare function createFromInstall(archaiVersion: string, installedFiles: Array<{
|
|
126
|
+
path: string;
|
|
127
|
+
hash: string | null;
|
|
128
|
+
isGenerated?: boolean;
|
|
129
|
+
}>): VersionFile;
|
|
130
|
+
//# sourceMappingURL=version-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/version-tracker.ts"],"names":[],"mappings":"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"}
|