@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 @@
|
|
|
1
|
+
{"version":3,"file":"detect-mcp.js","sourceRoot":"","sources":["../../src/utils/detect-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-project.d.ts","sourceRoot":"","sources":["../../src/utils/detect-project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAmH9D"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
export async function detectProject() {
|
|
5
|
+
const detected = {
|
|
6
|
+
name: path.basename(process.cwd()),
|
|
7
|
+
languages: [],
|
|
8
|
+
packageManager: null,
|
|
9
|
+
isMonorepo: false,
|
|
10
|
+
frameworks: [],
|
|
11
|
+
testFramework: null,
|
|
12
|
+
platform: detectPlatform(),
|
|
13
|
+
shell: detectShell(),
|
|
14
|
+
};
|
|
15
|
+
// Detect package.json (Node.js projects)
|
|
16
|
+
if (await fs.pathExists('package.json')) {
|
|
17
|
+
try {
|
|
18
|
+
const pkg = await fs.readJson('package.json');
|
|
19
|
+
detected.name = pkg.name || detected.name;
|
|
20
|
+
// Detect languages
|
|
21
|
+
if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
|
|
22
|
+
detected.languages.push('TypeScript');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
detected.languages.push('JavaScript');
|
|
26
|
+
}
|
|
27
|
+
// Detect frameworks
|
|
28
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
29
|
+
if (deps.react)
|
|
30
|
+
detected.frameworks.push('React');
|
|
31
|
+
if (deps.vue)
|
|
32
|
+
detected.frameworks.push('Vue');
|
|
33
|
+
if (deps.angular)
|
|
34
|
+
detected.frameworks.push('Angular');
|
|
35
|
+
if (deps.svelte)
|
|
36
|
+
detected.frameworks.push('Svelte');
|
|
37
|
+
if (deps.next)
|
|
38
|
+
detected.frameworks.push('Next.js');
|
|
39
|
+
if (deps.express)
|
|
40
|
+
detected.frameworks.push('Express');
|
|
41
|
+
if (deps.fastify)
|
|
42
|
+
detected.frameworks.push('Fastify');
|
|
43
|
+
if (deps.nestjs || deps['@nestjs/core'])
|
|
44
|
+
detected.frameworks.push('NestJS');
|
|
45
|
+
// Detect test frameworks
|
|
46
|
+
if (deps.vitest)
|
|
47
|
+
detected.testFramework = 'vitest';
|
|
48
|
+
else if (deps.jest)
|
|
49
|
+
detected.testFramework = 'jest';
|
|
50
|
+
else if (deps.mocha)
|
|
51
|
+
detected.testFramework = 'mocha';
|
|
52
|
+
else if (deps.ava)
|
|
53
|
+
detected.testFramework = 'ava';
|
|
54
|
+
else if (deps.playwright || deps['@playwright/test'])
|
|
55
|
+
detected.testFramework = 'playwright';
|
|
56
|
+
else if (deps.cypress)
|
|
57
|
+
detected.testFramework = 'cypress';
|
|
58
|
+
// Detect package manager
|
|
59
|
+
if (await fs.pathExists('pnpm-lock.yaml')) {
|
|
60
|
+
detected.packageManager = 'pnpm';
|
|
61
|
+
}
|
|
62
|
+
else if (await fs.pathExists('yarn.lock')) {
|
|
63
|
+
detected.packageManager = 'yarn';
|
|
64
|
+
}
|
|
65
|
+
else if (await fs.pathExists('bun.lockb')) {
|
|
66
|
+
detected.packageManager = 'bun';
|
|
67
|
+
}
|
|
68
|
+
else if (await fs.pathExists('package-lock.json')) {
|
|
69
|
+
detected.packageManager = 'npm';
|
|
70
|
+
}
|
|
71
|
+
// Detect monorepo
|
|
72
|
+
if (pkg.workspaces || await fs.pathExists('pnpm-workspace.yaml') || await fs.pathExists('turbo.json') || await fs.pathExists('nx.json')) {
|
|
73
|
+
detected.isMonorepo = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger.debug('Failed to parse package.json', {
|
|
78
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Detect Python projects
|
|
83
|
+
if (await fs.pathExists('requirements.txt') || await fs.pathExists('pyproject.toml') || await fs.pathExists('setup.py')) {
|
|
84
|
+
detected.languages.push('Python');
|
|
85
|
+
detected.packageManager = 'pip';
|
|
86
|
+
if (await fs.pathExists('pyproject.toml')) {
|
|
87
|
+
try {
|
|
88
|
+
const content = await fs.readFile('pyproject.toml', 'utf-8');
|
|
89
|
+
if (content.includes('fastapi'))
|
|
90
|
+
detected.frameworks.push('FastAPI');
|
|
91
|
+
if (content.includes('django'))
|
|
92
|
+
detected.frameworks.push('Django');
|
|
93
|
+
if (content.includes('flask'))
|
|
94
|
+
detected.frameworks.push('Flask');
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.debug('Failed to read pyproject.toml', {
|
|
98
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Detect Go projects
|
|
104
|
+
if (await fs.pathExists('go.mod')) {
|
|
105
|
+
detected.languages.push('Go');
|
|
106
|
+
detected.packageManager = 'go';
|
|
107
|
+
}
|
|
108
|
+
// Detect Rust projects
|
|
109
|
+
if (await fs.pathExists('Cargo.toml')) {
|
|
110
|
+
detected.languages.push('Rust');
|
|
111
|
+
detected.packageManager = 'cargo';
|
|
112
|
+
}
|
|
113
|
+
// Detect Java/Kotlin projects
|
|
114
|
+
if (await fs.pathExists('pom.xml') || await fs.pathExists('build.gradle') || await fs.pathExists('build.gradle.kts')) {
|
|
115
|
+
if (await fs.pathExists('build.gradle.kts')) {
|
|
116
|
+
detected.languages.push('Kotlin');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
detected.languages.push('Java');
|
|
120
|
+
}
|
|
121
|
+
detected.packageManager = await fs.pathExists('pom.xml') ? 'maven' : 'gradle';
|
|
122
|
+
}
|
|
123
|
+
// Detect .NET projects
|
|
124
|
+
const csprojFiles = await fs.readdir('.').catch(() => []);
|
|
125
|
+
if (csprojFiles.some((f) => f.endsWith('.csproj') || f.endsWith('.fsproj'))) {
|
|
126
|
+
detected.languages.push('C#');
|
|
127
|
+
detected.packageManager = 'dotnet';
|
|
128
|
+
}
|
|
129
|
+
return detected;
|
|
130
|
+
}
|
|
131
|
+
function detectPlatform() {
|
|
132
|
+
switch (process.platform) {
|
|
133
|
+
case 'win32': return 'windows';
|
|
134
|
+
case 'darwin': return 'macos';
|
|
135
|
+
default: return 'linux';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function detectShell() {
|
|
139
|
+
const shell = process.env.SHELL || process.env.COMSPEC || '';
|
|
140
|
+
if (shell.includes('bash') || process.env.BASH)
|
|
141
|
+
return 'bash';
|
|
142
|
+
if (shell.includes('zsh'))
|
|
143
|
+
return 'zsh';
|
|
144
|
+
if (shell.includes('fish'))
|
|
145
|
+
return 'fish';
|
|
146
|
+
if (shell.includes('powershell') || shell.includes('pwsh'))
|
|
147
|
+
return 'powershell';
|
|
148
|
+
if (shell.includes('cmd'))
|
|
149
|
+
return 'cmd';
|
|
150
|
+
// On Windows with Git Bash, SHELL may not be set but MSYSTEM is
|
|
151
|
+
if (process.env.MSYSTEM)
|
|
152
|
+
return 'bash';
|
|
153
|
+
return process.platform === 'win32' ? 'cmd' : 'bash';
|
|
154
|
+
}
|
|
155
|
+
//# 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,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status of a file during comparison.
|
|
3
|
+
*/
|
|
4
|
+
export type FileStatus = 'new' | 'unchanged' | 'modified_by_user' | 'modified_by_archai' | 'conflict' | 'deleted_in_template' | 'generated';
|
|
5
|
+
/**
|
|
6
|
+
* Analysis result for a single file.
|
|
7
|
+
*/
|
|
8
|
+
export interface FileAnalysis {
|
|
9
|
+
path: string;
|
|
10
|
+
status: FileStatus;
|
|
11
|
+
canAutoMerge: boolean;
|
|
12
|
+
baseHash: string | null;
|
|
13
|
+
currentHash: string | null;
|
|
14
|
+
templateHash: string | null;
|
|
15
|
+
isGenerated: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Three-way diff result for conflict resolution.
|
|
19
|
+
*/
|
|
20
|
+
export interface ThreeWayDiff {
|
|
21
|
+
path: string;
|
|
22
|
+
base: string | null;
|
|
23
|
+
current: string | null;
|
|
24
|
+
incoming: string | null;
|
|
25
|
+
userChanges: string[];
|
|
26
|
+
archaiChanges: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compute SHA256 hash of a file, returning first 12 characters.
|
|
30
|
+
*/
|
|
31
|
+
export declare function hashFile(filePath: string): Promise<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Compute SHA256 hash of a string content.
|
|
34
|
+
*/
|
|
35
|
+
export declare function hashContent(content: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Determine the status of a file by comparing hashes.
|
|
38
|
+
*
|
|
39
|
+
* @param baseHash - Hash when archai originally installed the file (from version.json)
|
|
40
|
+
* @param currentHash - Hash of file currently on disk
|
|
41
|
+
* @param templateHash - Hash of file in current archai templates
|
|
42
|
+
* @param isGenerated - Whether this is a user-generated file (specialist)
|
|
43
|
+
*/
|
|
44
|
+
export declare function determineFileStatus(baseHash: string | null, currentHash: string | null, templateHash: string | null, isGenerated?: boolean): FileStatus;
|
|
45
|
+
/**
|
|
46
|
+
* Analyze a single file against its template.
|
|
47
|
+
*/
|
|
48
|
+
export declare function analyzeFile(filePath: string, templatePath: string | null, baseHash: string | null, isGenerated?: boolean): Promise<FileAnalysis>;
|
|
49
|
+
/**
|
|
50
|
+
* Determine if a file can be auto-merged based on its type and status.
|
|
51
|
+
*/
|
|
52
|
+
export declare function determineCanAutoMerge(filePath: string, status: FileStatus): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a file is a generated specialist agent.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isGeneratedSpecialist(filePath: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Generate a simple line-based diff between two strings.
|
|
59
|
+
* Returns arrays of changed line numbers.
|
|
60
|
+
*/
|
|
61
|
+
export declare function generateSimpleDiff(base: string, compare: string): {
|
|
62
|
+
added: number[];
|
|
63
|
+
removed: number[];
|
|
64
|
+
changed: number[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Generate a three-way diff for conflict resolution.
|
|
68
|
+
*/
|
|
69
|
+
export declare function generateThreeWayDiff(filePath: string, baseContent: string | null, templatePath: string | null): Promise<ThreeWayDiff>;
|
|
70
|
+
/**
|
|
71
|
+
* Compare all files in a directory against templates.
|
|
72
|
+
*/
|
|
73
|
+
export declare function compareDirectory(localDir: string, templateDir: string, versionData?: Record<string, {
|
|
74
|
+
baseHash: string | null;
|
|
75
|
+
isGenerated: boolean;
|
|
76
|
+
}>): Promise<FileAnalysis[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Summarize file analysis results by status.
|
|
79
|
+
*/
|
|
80
|
+
export declare function summarizeAnalysis(analyses: FileAnalysis[]): Record<FileStatus, number>;
|
|
81
|
+
/**
|
|
82
|
+
* Filter analyses that need user attention.
|
|
83
|
+
*/
|
|
84
|
+
export declare function getFilesNeedingAttention(analyses: FileAnalysis[]): FileAnalysis[];
|
|
85
|
+
/**
|
|
86
|
+
* Filter analyses that can be auto-processed.
|
|
87
|
+
*/
|
|
88
|
+
export declare function getAutoProcessableFiles(analyses: FileAnalysis[]): FileAnalysis[];
|
|
89
|
+
//# sourceMappingURL=file-comparison.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-comparison.d.ts","sourceRoot":"","sources":["../../src/utils/file-comparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Compute SHA256 hash of a file, returning first 12 characters.
|
|
7
|
+
*/
|
|
8
|
+
export async function hashFile(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
if (!await fs.pathExists(filePath)) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const content = await fs.readFile(filePath);
|
|
14
|
+
const hash = crypto.createHash('sha256').update(content).digest('hex');
|
|
15
|
+
return hash.substring(0, 12);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
logger.debug(`Failed to hash file: ${filePath}`, error);
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compute SHA256 hash of a string content.
|
|
24
|
+
*/
|
|
25
|
+
export function hashContent(content) {
|
|
26
|
+
const hash = crypto.createHash('sha256').update(content, 'utf8').digest('hex');
|
|
27
|
+
return hash.substring(0, 12);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Determine the status of a file by comparing hashes.
|
|
31
|
+
*
|
|
32
|
+
* @param baseHash - Hash when archai originally installed the file (from version.json)
|
|
33
|
+
* @param currentHash - Hash of file currently on disk
|
|
34
|
+
* @param templateHash - Hash of file in current archai templates
|
|
35
|
+
* @param isGenerated - Whether this is a user-generated file (specialist)
|
|
36
|
+
*/
|
|
37
|
+
export function determineFileStatus(baseHash, currentHash, templateHash, isGenerated = false) {
|
|
38
|
+
// User-generated files are never touched
|
|
39
|
+
if (isGenerated) {
|
|
40
|
+
return 'generated';
|
|
41
|
+
}
|
|
42
|
+
// File doesn't exist locally
|
|
43
|
+
if (currentHash === null && templateHash !== null) {
|
|
44
|
+
return 'new';
|
|
45
|
+
}
|
|
46
|
+
// File exists locally but not in templates (deprecated)
|
|
47
|
+
if (currentHash !== null && templateHash === null) {
|
|
48
|
+
return 'deleted_in_template';
|
|
49
|
+
}
|
|
50
|
+
// Both null - shouldn't happen, but treat as unchanged
|
|
51
|
+
if (currentHash === null && templateHash === null) {
|
|
52
|
+
return 'unchanged';
|
|
53
|
+
}
|
|
54
|
+
// File unchanged from template
|
|
55
|
+
if (currentHash === templateHash) {
|
|
56
|
+
return 'unchanged';
|
|
57
|
+
}
|
|
58
|
+
// No base hash (legacy install or new file) - compare current to template
|
|
59
|
+
if (baseHash === null) {
|
|
60
|
+
// If current differs from template, assume user modified
|
|
61
|
+
return currentHash !== templateHash ? 'modified_by_user' : 'unchanged';
|
|
62
|
+
}
|
|
63
|
+
// Three-way comparison
|
|
64
|
+
const userModified = currentHash !== baseHash;
|
|
65
|
+
const archaiModified = templateHash !== baseHash;
|
|
66
|
+
if (userModified && archaiModified) {
|
|
67
|
+
return 'conflict';
|
|
68
|
+
}
|
|
69
|
+
if (userModified) {
|
|
70
|
+
return 'modified_by_user';
|
|
71
|
+
}
|
|
72
|
+
if (archaiModified) {
|
|
73
|
+
return 'modified_by_archai';
|
|
74
|
+
}
|
|
75
|
+
return 'unchanged';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Analyze a single file against its template.
|
|
79
|
+
*/
|
|
80
|
+
export async function analyzeFile(filePath, templatePath, baseHash, isGenerated = false) {
|
|
81
|
+
const currentHash = await hashFile(filePath);
|
|
82
|
+
const templateHash = templatePath ? await hashFile(templatePath) : null;
|
|
83
|
+
const status = determineFileStatus(baseHash, currentHash, templateHash, isGenerated);
|
|
84
|
+
const canAutoMerge = determineCanAutoMerge(filePath, status);
|
|
85
|
+
return {
|
|
86
|
+
path: filePath,
|
|
87
|
+
status,
|
|
88
|
+
canAutoMerge,
|
|
89
|
+
baseHash,
|
|
90
|
+
currentHash,
|
|
91
|
+
templateHash,
|
|
92
|
+
isGenerated,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Determine if a file can be auto-merged based on its type and status.
|
|
97
|
+
*/
|
|
98
|
+
export function determineCanAutoMerge(filePath, status) {
|
|
99
|
+
// These statuses never need merging
|
|
100
|
+
if (['new', 'unchanged', 'generated', 'deleted_in_template'].includes(status)) {
|
|
101
|
+
return true; // Not really "merging", but can be handled automatically
|
|
102
|
+
}
|
|
103
|
+
// User modifications require manual choice for most files
|
|
104
|
+
if (status === 'modified_by_user') {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
// Archai-only changes can be auto-applied
|
|
108
|
+
if (status === 'modified_by_archai') {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
// Conflicts - check if file type supports smart merge
|
|
112
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
113
|
+
const basename = path.basename(filePath).toLowerCase();
|
|
114
|
+
// JSON files can often be merged
|
|
115
|
+
if (ext === '.json') {
|
|
116
|
+
// settings.local.json specifically supports merge
|
|
117
|
+
if (basename === 'settings.local.json') {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// .gitignore can be merged (append)
|
|
122
|
+
if (basename === '.gitignore') {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
// Markdown files generally cannot be auto-merged
|
|
126
|
+
if (ext === '.md') {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if a file is a generated specialist agent.
|
|
133
|
+
*/
|
|
134
|
+
export function isGeneratedSpecialist(filePath) {
|
|
135
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
136
|
+
return normalized.includes('.claude/agents/') &&
|
|
137
|
+
normalized.endsWith('-specialist.md');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate a simple line-based diff between two strings.
|
|
141
|
+
* Returns arrays of changed line numbers.
|
|
142
|
+
*/
|
|
143
|
+
export function generateSimpleDiff(base, compare) {
|
|
144
|
+
const baseLines = base.split('\n');
|
|
145
|
+
const compareLines = compare.split('\n');
|
|
146
|
+
const added = [];
|
|
147
|
+
const removed = [];
|
|
148
|
+
const changed = [];
|
|
149
|
+
const maxLines = Math.max(baseLines.length, compareLines.length);
|
|
150
|
+
for (let i = 0; i < maxLines; i++) {
|
|
151
|
+
const baseLine = baseLines[i];
|
|
152
|
+
const compareLine = compareLines[i];
|
|
153
|
+
if (baseLine === undefined && compareLine !== undefined) {
|
|
154
|
+
added.push(i + 1);
|
|
155
|
+
}
|
|
156
|
+
else if (baseLine !== undefined && compareLine === undefined) {
|
|
157
|
+
removed.push(i + 1);
|
|
158
|
+
}
|
|
159
|
+
else if (baseLine !== compareLine) {
|
|
160
|
+
changed.push(i + 1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return { added, removed, changed };
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Generate a three-way diff for conflict resolution.
|
|
167
|
+
*/
|
|
168
|
+
export async function generateThreeWayDiff(filePath, baseContent, templatePath) {
|
|
169
|
+
const currentContent = await fs.pathExists(filePath)
|
|
170
|
+
? await fs.readFile(filePath, 'utf-8')
|
|
171
|
+
: null;
|
|
172
|
+
const incomingContent = templatePath && await fs.pathExists(templatePath)
|
|
173
|
+
? await fs.readFile(templatePath, 'utf-8')
|
|
174
|
+
: null;
|
|
175
|
+
let userChanges = [];
|
|
176
|
+
let archaiChanges = [];
|
|
177
|
+
if (baseContent && currentContent) {
|
|
178
|
+
const diff = generateSimpleDiff(baseContent, currentContent);
|
|
179
|
+
userChanges = [
|
|
180
|
+
...diff.added.map(n => `+L${n}`),
|
|
181
|
+
...diff.removed.map(n => `-L${n}`),
|
|
182
|
+
...diff.changed.map(n => `~L${n}`),
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
if (baseContent && incomingContent) {
|
|
186
|
+
const diff = generateSimpleDiff(baseContent, incomingContent);
|
|
187
|
+
archaiChanges = [
|
|
188
|
+
...diff.added.map(n => `+L${n}`),
|
|
189
|
+
...diff.removed.map(n => `-L${n}`),
|
|
190
|
+
...diff.changed.map(n => `~L${n}`),
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
path: filePath,
|
|
195
|
+
base: baseContent,
|
|
196
|
+
current: currentContent,
|
|
197
|
+
incoming: incomingContent,
|
|
198
|
+
userChanges,
|
|
199
|
+
archaiChanges,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Compare all files in a directory against templates.
|
|
204
|
+
*/
|
|
205
|
+
export async function compareDirectory(localDir, templateDir, versionData = {}) {
|
|
206
|
+
const results = [];
|
|
207
|
+
// Get all files in both directories
|
|
208
|
+
const localFiles = await getFilesRecursive(localDir);
|
|
209
|
+
const templateFiles = await getFilesRecursive(templateDir);
|
|
210
|
+
// Create sets for easy lookup
|
|
211
|
+
const localSet = new Set(localFiles.map(f => path.relative(localDir, f)));
|
|
212
|
+
const templateSet = new Set(templateFiles.map(f => path.relative(templateDir, f)));
|
|
213
|
+
// Check all local files
|
|
214
|
+
for (const relativePath of localSet) {
|
|
215
|
+
const localPath = path.join(localDir, relativePath);
|
|
216
|
+
const templatePath = templateSet.has(relativePath)
|
|
217
|
+
? path.join(templateDir, relativePath)
|
|
218
|
+
: null;
|
|
219
|
+
const versionInfo = versionData[relativePath] || { baseHash: null, isGenerated: false };
|
|
220
|
+
const isGenerated = versionInfo.isGenerated || isGeneratedSpecialist(localPath);
|
|
221
|
+
const analysis = await analyzeFile(localPath, templatePath, versionInfo.baseHash, isGenerated);
|
|
222
|
+
results.push(analysis);
|
|
223
|
+
}
|
|
224
|
+
// Check for new files in templates (not in local)
|
|
225
|
+
for (const relativePath of templateSet) {
|
|
226
|
+
if (!localSet.has(relativePath)) {
|
|
227
|
+
const templatePath = path.join(templateDir, relativePath);
|
|
228
|
+
const localPath = path.join(localDir, relativePath);
|
|
229
|
+
results.push({
|
|
230
|
+
path: localPath,
|
|
231
|
+
status: 'new',
|
|
232
|
+
canAutoMerge: true,
|
|
233
|
+
baseHash: null,
|
|
234
|
+
currentHash: null,
|
|
235
|
+
templateHash: await hashFile(templatePath),
|
|
236
|
+
isGenerated: false,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return results;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get all files in a directory recursively.
|
|
244
|
+
*/
|
|
245
|
+
async function getFilesRecursive(dir) {
|
|
246
|
+
const files = [];
|
|
247
|
+
if (!await fs.pathExists(dir)) {
|
|
248
|
+
return files;
|
|
249
|
+
}
|
|
250
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
251
|
+
for (const entry of entries) {
|
|
252
|
+
const fullPath = path.join(dir, entry.name);
|
|
253
|
+
if (entry.isDirectory()) {
|
|
254
|
+
// Skip backup directories
|
|
255
|
+
if (entry.name === 'backups' || entry.name === 'archived') {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const subFiles = await getFilesRecursive(fullPath);
|
|
259
|
+
files.push(...subFiles);
|
|
260
|
+
}
|
|
261
|
+
else if (entry.isFile()) {
|
|
262
|
+
files.push(fullPath);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return files;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Summarize file analysis results by status.
|
|
269
|
+
*/
|
|
270
|
+
export function summarizeAnalysis(analyses) {
|
|
271
|
+
const summary = {
|
|
272
|
+
'new': 0,
|
|
273
|
+
'unchanged': 0,
|
|
274
|
+
'modified_by_user': 0,
|
|
275
|
+
'modified_by_archai': 0,
|
|
276
|
+
'conflict': 0,
|
|
277
|
+
'deleted_in_template': 0,
|
|
278
|
+
'generated': 0,
|
|
279
|
+
};
|
|
280
|
+
for (const analysis of analyses) {
|
|
281
|
+
summary[analysis.status]++;
|
|
282
|
+
}
|
|
283
|
+
return summary;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Filter analyses that need user attention.
|
|
287
|
+
*/
|
|
288
|
+
export function getFilesNeedingAttention(analyses) {
|
|
289
|
+
return analyses.filter(a => a.status === 'conflict' ||
|
|
290
|
+
a.status === 'modified_by_user' ||
|
|
291
|
+
a.status === 'deleted_in_template');
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Filter analyses that can be auto-processed.
|
|
295
|
+
*/
|
|
296
|
+
export function getAutoProcessableFiles(analyses) {
|
|
297
|
+
return analyses.filter(a => a.status === 'new' ||
|
|
298
|
+
a.status === 'modified_by_archai' ||
|
|
299
|
+
(a.canAutoMerge && a.status === 'conflict'));
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=file-comparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-comparison.js","sourceRoot":"","sources":["../../src/utils/file-comparison.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAuCrC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,WAA0B,EAC1B,YAA2B,EAC3B,cAAuB,KAAK;IAE5B,yCAAyC;IACzC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,6BAA6B;IAC7B,IAAI,WAAW,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wDAAwD;IACxD,IAAI,WAAW,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,uDAAuD;IACvD,IAAI,WAAW,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,+BAA+B;IAC/B,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,0EAA0E;IAC1E,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,yDAAyD;QACzD,OAAO,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC;IACzE,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,WAAW,KAAK,QAAQ,CAAC;IAC9C,MAAM,cAAc,GAAG,YAAY,KAAK,QAAQ,CAAC;IAEjD,IAAI,YAAY,IAAI,cAAc,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,YAA2B,EAC3B,QAAuB,EACvB,cAAuB,KAAK;IAE5B,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE7D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,MAAkB;IACxE,oCAAoC;IACpC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,CAAC,yDAAyD;IACxE,CAAC;IAED,0DAA0D;IAC1D,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEvD,iCAAiC;IACjC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,kDAAkD;QAClD,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACtC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAe;IAEf,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,WAA0B,EAC1B,YAA2B;IAE3B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAClD,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,eAAe,GAAG,YAAY,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QACvE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC7D,WAAW,GAAG;YACZ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC9D,aAAa,GAAG;YACd,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,eAAe;QACzB,WAAW;QACX,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,WAAmB,EACnB,cAAiF,EAAE;IAEnF,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,oCAAoC;IACpC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE3D,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,wBAAwB;IACxB,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACxF,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAEhF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,SAAS,EACT,YAAY,EACZ,WAAW,CAAC,QAAQ,EACpB,WAAW,CACZ,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,kDAAkD;IAClD,KAAK,MAAM,YAAY,IAAI,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEpD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,KAAK;gBACb,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,MAAM,QAAQ,CAAC,YAAY,CAAC;gBAC1C,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,0BAA0B;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,MAAM,OAAO,GAA+B;QAC1C,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC;QACd,kBAAkB,EAAE,CAAC;QACrB,oBAAoB,EAAE,CAAC;QACvB,UAAU,EAAE,CAAC;QACb,qBAAqB,EAAE,CAAC;QACxB,WAAW,EAAE,CAAC;KACf,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzB,CAAC,CAAC,MAAM,KAAK,UAAU;QACvB,CAAC,CAAC,MAAM,KAAK,kBAAkB;QAC/B,CAAC,CAAC,MAAM,KAAK,qBAAqB,CACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAwB;IAC9D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzB,CAAC,CAAC,MAAM,KAAK,KAAK;QAClB,CAAC,CAAC,MAAM,KAAK,oBAAoB;QACjC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAC5C,CAAC;AACJ,CAAC"}
|