@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,173 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
const ARCHAI_PATHS = {
|
|
7
|
+
directories: [
|
|
8
|
+
'.claude/agents',
|
|
9
|
+
'.claude/state',
|
|
10
|
+
'.claude/plans',
|
|
11
|
+
'.claude/templates',
|
|
12
|
+
'.supervisor',
|
|
13
|
+
'.agents',
|
|
14
|
+
'.tasks',
|
|
15
|
+
],
|
|
16
|
+
files: [
|
|
17
|
+
'archai.config.md',
|
|
18
|
+
'CLAUDE.md',
|
|
19
|
+
'PROMPTS.md',
|
|
20
|
+
'ARCHAI_README.md',
|
|
21
|
+
],
|
|
22
|
+
optional: [
|
|
23
|
+
'.knowledge', // Only removed if --keep-knowledge is false
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
export async function uninstall(options) {
|
|
27
|
+
logger.banner();
|
|
28
|
+
// Collect items to remove
|
|
29
|
+
const toRemove = [];
|
|
30
|
+
for (const dir of ARCHAI_PATHS.directories) {
|
|
31
|
+
if (await fs.pathExists(dir)) {
|
|
32
|
+
toRemove.push(dir);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const file of ARCHAI_PATHS.files) {
|
|
36
|
+
if (await fs.pathExists(file)) {
|
|
37
|
+
toRemove.push(file);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!options.keepKnowledge) {
|
|
41
|
+
for (const dir of ARCHAI_PATHS.optional) {
|
|
42
|
+
if (await fs.pathExists(dir)) {
|
|
43
|
+
toRemove.push(dir);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Check for .claude directory (parent)
|
|
48
|
+
if (await fs.pathExists('.claude')) {
|
|
49
|
+
// Check if it only contains archai-related subdirs
|
|
50
|
+
const claudeContents = await fs.readdir('.claude');
|
|
51
|
+
const archaiDirs = ['agents', 'state', 'plans', 'templates', 'settings.local.json'];
|
|
52
|
+
const isOnlyArchai = claudeContents.every(item => archaiDirs.includes(item) || item.startsWith('.'));
|
|
53
|
+
if (isOnlyArchai) {
|
|
54
|
+
// Remove the entire .claude directory
|
|
55
|
+
toRemove.push('.claude');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Just remove archai subdirs, keep user's other content
|
|
59
|
+
if (await fs.pathExists('.claude/settings.local.json')) {
|
|
60
|
+
toRemove.push('.claude/settings.local.json');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (toRemove.length === 0) {
|
|
65
|
+
logger.info('No archai artifacts found to remove.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Dry run: just show what would be removed
|
|
69
|
+
if (options.dryRun) {
|
|
70
|
+
logger.section('Would Remove');
|
|
71
|
+
console.log('');
|
|
72
|
+
toRemove.forEach(p => console.log(chalk.yellow(` ${p}`)));
|
|
73
|
+
console.log('');
|
|
74
|
+
logger.info('Dry run complete. No files were removed.');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Confirm unless --force
|
|
78
|
+
if (!options.force) {
|
|
79
|
+
console.log('');
|
|
80
|
+
logger.section('Items to Remove');
|
|
81
|
+
console.log('');
|
|
82
|
+
toRemove.forEach(p => console.log(chalk.red(` ${p}`)));
|
|
83
|
+
console.log('');
|
|
84
|
+
if (options.keepKnowledge) {
|
|
85
|
+
logger.info(chalk.gray('.knowledge/ will be preserved'));
|
|
86
|
+
console.log('');
|
|
87
|
+
}
|
|
88
|
+
const { confirm } = await inquirer.prompt([{
|
|
89
|
+
type: 'confirm',
|
|
90
|
+
name: 'confirm',
|
|
91
|
+
message: 'Remove all archai artifacts? This cannot be undone.',
|
|
92
|
+
default: false
|
|
93
|
+
}]);
|
|
94
|
+
if (!confirm) {
|
|
95
|
+
logger.info('Uninstall cancelled.');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Remove items
|
|
100
|
+
const spinner = ora('Removing archai artifacts...').start();
|
|
101
|
+
let removed = 0;
|
|
102
|
+
for (const item of toRemove) {
|
|
103
|
+
try {
|
|
104
|
+
await fs.remove(item);
|
|
105
|
+
removed++;
|
|
106
|
+
logger.debug(`Removed: ${item}`);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger.debug(`Failed to remove ${item}`, error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
spinner.succeed(`Removed ${removed} items`);
|
|
113
|
+
// Clean up .gitignore entries
|
|
114
|
+
await cleanGitignore();
|
|
115
|
+
console.log('');
|
|
116
|
+
logger.success('archai has been uninstalled from this project.');
|
|
117
|
+
console.log('');
|
|
118
|
+
logger.info('To reinstall, run: archai init');
|
|
119
|
+
console.log('');
|
|
120
|
+
}
|
|
121
|
+
async function cleanGitignore() {
|
|
122
|
+
const gitignorePath = '.gitignore';
|
|
123
|
+
if (!await fs.pathExists(gitignorePath)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
let content = await fs.readFile(gitignorePath, 'utf-8');
|
|
128
|
+
// Check if archai section exists
|
|
129
|
+
if (!content.includes('# archai')) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const lines = content.split('\n');
|
|
133
|
+
const startLine = lines.findIndex(l => l.includes('# archai'));
|
|
134
|
+
if (startLine === -1)
|
|
135
|
+
return;
|
|
136
|
+
// Find end of archai section (next non-archai line or end of file)
|
|
137
|
+
let endLine = startLine + 1;
|
|
138
|
+
while (endLine < lines.length) {
|
|
139
|
+
const line = lines[endLine].trim();
|
|
140
|
+
// Continue if empty, or if it's an archai-related path
|
|
141
|
+
if (line === '' ||
|
|
142
|
+
line.startsWith('.claude/') ||
|
|
143
|
+
line.startsWith('.agents/') ||
|
|
144
|
+
line.startsWith('.tasks/') ||
|
|
145
|
+
line.startsWith('.knowledge/') ||
|
|
146
|
+
line.startsWith('.supervisor') ||
|
|
147
|
+
line.startsWith('!')) {
|
|
148
|
+
endLine++;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Remove the archai section
|
|
155
|
+
lines.splice(startLine, endLine - startLine);
|
|
156
|
+
// Clean up multiple consecutive blank lines
|
|
157
|
+
const cleanedLines = [];
|
|
158
|
+
let prevBlank = false;
|
|
159
|
+
for (const line of lines) {
|
|
160
|
+
const isBlank = line.trim() === '';
|
|
161
|
+
if (isBlank && prevBlank)
|
|
162
|
+
continue;
|
|
163
|
+
cleanedLines.push(line);
|
|
164
|
+
prevBlank = isBlank;
|
|
165
|
+
}
|
|
166
|
+
await fs.writeFile(gitignorePath, cleanedLines.join('\n'));
|
|
167
|
+
logger.debug('Cleaned .gitignore');
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
logger.debug('Failed to clean .gitignore', error);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UpdateOptions } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extended update options including --yes flag.
|
|
4
|
+
*/
|
|
5
|
+
interface ExtendedUpdateOptions extends UpdateOptions {
|
|
6
|
+
yes?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function update(options: ExtendedUpdateOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQvD;;GAEG;AACH,UAAU,qBAAsB,SAAQ,aAAa;IACnD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuL1E"}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { createBackup, pruneOldBackups } from '../utils/backup.js';
|
|
8
|
+
import { loadVersionFile, saveVersionFile, createVersionFile, bulkUpdateFileHashes, getOrphanedFiles, } from '../utils/version-tracker.js';
|
|
9
|
+
import { detectLegacyInstall, hasExistingInstall, migrateFromLegacy, getArchaiVersion, getTemplateFiles, } from '../utils/migration.js';
|
|
10
|
+
import { hashFile, } from '../utils/file-comparison.js';
|
|
11
|
+
import { mergeFile, applyMerge, } from '../utils/file-merger.js';
|
|
12
|
+
import { analyzeAllFiles } from '../utils/analyze-files.js';
|
|
13
|
+
import { repairMcpConfig } from '../utils/repair-mcp-config.js';
|
|
14
|
+
import { detectGitRepo, detectGitPatterns } from '../utils/detect-git.js';
|
|
15
|
+
import { updateConfigWithGitConventions } from '../utils/update-config-git.js';
|
|
16
|
+
import { detectCIProvider } from '../utils/ci-provider.js';
|
|
17
|
+
import { updateConfigWithCI } from '../utils/update-config-ci.js';
|
|
18
|
+
const CLAUDE_DIR = '.claude';
|
|
19
|
+
export async function update(options) {
|
|
20
|
+
logger.banner();
|
|
21
|
+
const archaiVersion = await getArchaiVersion();
|
|
22
|
+
// Check if archai is initialized
|
|
23
|
+
if (!await hasExistingInstall(CLAUDE_DIR)) {
|
|
24
|
+
logger.error('archai not initialized. Run "archai init" first.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Handle legacy installation
|
|
28
|
+
const isLegacy = await detectLegacyInstall(CLAUDE_DIR);
|
|
29
|
+
if (isLegacy) {
|
|
30
|
+
logger.info('Found legacy installation. Running migration...');
|
|
31
|
+
console.log('');
|
|
32
|
+
const migration = await migrateFromLegacy(CLAUDE_DIR, archaiVersion);
|
|
33
|
+
if (!migration.success) {
|
|
34
|
+
logger.error(`Migration failed: ${migration.error}`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (migration.warnings.length > 0) {
|
|
38
|
+
for (const warning of migration.warnings) {
|
|
39
|
+
logger.warn(warning);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
logger.success('Migration complete!');
|
|
43
|
+
console.log('');
|
|
44
|
+
}
|
|
45
|
+
// Repair MCP configuration (fixes broken configs from v0.3.0)
|
|
46
|
+
const repairSpinner = ora('Checking MCP configuration...').start();
|
|
47
|
+
const repairResult = await repairMcpConfig(process.cwd());
|
|
48
|
+
if (repairResult.fixed.length > 0) {
|
|
49
|
+
repairSpinner.succeed(`Fixed ${repairResult.fixed.length} MCP config issue(s)`);
|
|
50
|
+
for (const fix of repairResult.fixed) {
|
|
51
|
+
console.log(chalk.gray(` ${fix}`));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
repairSpinner.succeed('MCP configuration OK');
|
|
56
|
+
}
|
|
57
|
+
for (const warning of repairResult.warnings) {
|
|
58
|
+
logger.warn(warning);
|
|
59
|
+
}
|
|
60
|
+
// Backfill Git Conventions if not present
|
|
61
|
+
const isGitRepo = await detectGitRepo();
|
|
62
|
+
if (isGitRepo) {
|
|
63
|
+
const gitConventionSpinner = ora('Checking git conventions...').start();
|
|
64
|
+
try {
|
|
65
|
+
const patterns = await detectGitPatterns();
|
|
66
|
+
const written = await updateConfigWithGitConventions(patterns); // force=false
|
|
67
|
+
if (written) {
|
|
68
|
+
gitConventionSpinner.succeed('Detected and saved git conventions');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
gitConventionSpinner.succeed('Git conventions already configured');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
gitConventionSpinner.succeed('Git conventions check complete');
|
|
76
|
+
}
|
|
77
|
+
// Backfill CI/CD section if not present or still placeholder
|
|
78
|
+
const ciSpinner = ora('Checking CI/CD configuration...').start();
|
|
79
|
+
try {
|
|
80
|
+
const configContent = await fs.readFile('archai.config.md', 'utf-8');
|
|
81
|
+
const ciSectionMatch = configContent.match(/## CI\/CD[\s\S]*?(?=\n---\n|\n## |$)/);
|
|
82
|
+
const hasRealContent = ciSectionMatch && !/\[Run.*archai setup.*to auto-configure\]/.test(ciSectionMatch[0]);
|
|
83
|
+
if (!hasRealContent) {
|
|
84
|
+
const ciResult = await detectCIProvider(process.cwd());
|
|
85
|
+
await updateConfigWithCI(ciResult);
|
|
86
|
+
if (ciResult.provider !== 'none') {
|
|
87
|
+
ciSpinner.succeed(`Detected and saved CI provider: ${ciResult.provider}`);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
ciSpinner.succeed('No CI provider detected');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
ciSpinner.succeed('CI/CD configuration already set');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
ciSpinner.succeed('CI/CD check complete');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Load version info
|
|
102
|
+
let versionFile = await loadVersionFile(CLAUDE_DIR);
|
|
103
|
+
const installedVersion = versionFile?.archai ?? 'unknown';
|
|
104
|
+
console.log('');
|
|
105
|
+
logger.info(`Installed version: ${installedVersion}`);
|
|
106
|
+
logger.info(`Current version: ${archaiVersion}`);
|
|
107
|
+
console.log('');
|
|
108
|
+
// Analyze all files
|
|
109
|
+
const analysisSpinner = ora('Analyzing files...').start();
|
|
110
|
+
const analyses = await analyzeAllFiles(CLAUDE_DIR);
|
|
111
|
+
analysisSpinner.succeed(`Analyzed ${analyses.length} files`);
|
|
112
|
+
// Categorize files
|
|
113
|
+
const newFiles = analyses.filter(a => a.status === 'new');
|
|
114
|
+
const unchanged = analyses.filter(a => a.status === 'unchanged');
|
|
115
|
+
const modifiedByArchai = analyses.filter(a => a.status === 'modified_by_archai');
|
|
116
|
+
const modifiedByUser = analyses.filter(a => a.status === 'modified_by_user');
|
|
117
|
+
const conflicts = analyses.filter(a => a.status === 'conflict');
|
|
118
|
+
const generated = analyses.filter(a => a.status === 'generated');
|
|
119
|
+
// Check for deprecated files
|
|
120
|
+
const deprecated = versionFile ? getOrphanedFiles(versionFile) : [];
|
|
121
|
+
// Show summary
|
|
122
|
+
console.log('');
|
|
123
|
+
logger.section('Update Summary');
|
|
124
|
+
console.log('');
|
|
125
|
+
if (newFiles.length > 0)
|
|
126
|
+
console.log(chalk.green(` New files: ${newFiles.length}`));
|
|
127
|
+
if (unchanged.length > 0)
|
|
128
|
+
console.log(chalk.gray(` Unchanged: ${unchanged.length}`));
|
|
129
|
+
if (modifiedByArchai.length > 0)
|
|
130
|
+
console.log(chalk.cyan(` Updates available: ${modifiedByArchai.length}`));
|
|
131
|
+
if (modifiedByUser.length > 0)
|
|
132
|
+
console.log(chalk.yellow(` Modified by you: ${modifiedByUser.length}`));
|
|
133
|
+
if (conflicts.length > 0)
|
|
134
|
+
console.log(chalk.red(` Conflicts: ${conflicts.length}`));
|
|
135
|
+
if (generated.length > 0)
|
|
136
|
+
console.log(chalk.blue(` Generated (protected): ${generated.length}`));
|
|
137
|
+
if (deprecated.length > 0)
|
|
138
|
+
console.log(chalk.magenta(` Deprecated: ${deprecated.length}`));
|
|
139
|
+
console.log('');
|
|
140
|
+
// Check if there's anything to update
|
|
141
|
+
const hasUpdates = newFiles.length > 0 || modifiedByArchai.length > 0 ||
|
|
142
|
+
conflicts.length > 0 || deprecated.length > 0;
|
|
143
|
+
if (!hasUpdates && !options.all) {
|
|
144
|
+
logger.success('Already up to date!');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// Dry run mode
|
|
148
|
+
if (options.dryRun) {
|
|
149
|
+
await showDryRunDetails(analyses, deprecated);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Create backup before any changes
|
|
153
|
+
const backupSpinner = ora('Creating backup...').start();
|
|
154
|
+
const backup = await createBackup(CLAUDE_DIR, 'pre-update', archaiVersion);
|
|
155
|
+
if (!backup.success) {
|
|
156
|
+
backupSpinner.fail('Backup failed');
|
|
157
|
+
logger.error(`Backup error: ${backup.error}`);
|
|
158
|
+
logger.info('Aborting update to prevent data loss.');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
backupSpinner.succeed(`Backup created: ${backup.timestamp}`);
|
|
162
|
+
// Prune old backups
|
|
163
|
+
await pruneOldBackups(CLAUDE_DIR, 5);
|
|
164
|
+
// Handle files that need user attention
|
|
165
|
+
const needsAttention = [...modifiedByUser, ...conflicts.filter(c => !c.canAutoMerge)];
|
|
166
|
+
if (needsAttention.length > 0 && !options.yes) {
|
|
167
|
+
await handleConflictsInteractively(needsAttention);
|
|
168
|
+
}
|
|
169
|
+
else if (needsAttention.length > 0 && options.yes) {
|
|
170
|
+
logger.warn(`Skipping ${needsAttention.length} user-modified files (use interactive mode to resolve).`);
|
|
171
|
+
}
|
|
172
|
+
// Handle deprecated files
|
|
173
|
+
if (deprecated.length > 0 && !options.yes) {
|
|
174
|
+
await handleDeprecatedFiles(deprecated);
|
|
175
|
+
}
|
|
176
|
+
else if (deprecated.length > 0 && options.yes) {
|
|
177
|
+
logger.warn(`Skipping ${deprecated.length} deprecated files (use interactive mode to remove).`);
|
|
178
|
+
}
|
|
179
|
+
// Apply changes
|
|
180
|
+
await applyUpdates(analyses, options, archaiVersion);
|
|
181
|
+
console.log('');
|
|
182
|
+
logger.success(`Updated to version ${archaiVersion}`);
|
|
183
|
+
console.log('');
|
|
184
|
+
if (backup.timestamp) {
|
|
185
|
+
logger.info(`Backup available: archai rollback ${backup.timestamp}`);
|
|
186
|
+
}
|
|
187
|
+
logger.info('Run "archai doctor" to verify your setup.');
|
|
188
|
+
console.log('');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Show dry run details.
|
|
192
|
+
*/
|
|
193
|
+
async function showDryRunDetails(analyses, deprecated) {
|
|
194
|
+
console.log('');
|
|
195
|
+
logger.section('Would Process');
|
|
196
|
+
console.log('');
|
|
197
|
+
const newFiles = analyses.filter(a => a.status === 'new');
|
|
198
|
+
const updates = analyses.filter(a => a.status === 'modified_by_archai');
|
|
199
|
+
const autoMerge = analyses.filter(a => a.status === 'conflict' && a.canAutoMerge);
|
|
200
|
+
const userModified = analyses.filter(a => a.status === 'modified_by_user');
|
|
201
|
+
const manualConflicts = analyses.filter(a => a.status === 'conflict' && !a.canAutoMerge);
|
|
202
|
+
if (newFiles.length > 0) {
|
|
203
|
+
console.log(chalk.green(' New files (would add):'));
|
|
204
|
+
newFiles.forEach(f => console.log(chalk.gray(` + ${f.path}`)));
|
|
205
|
+
console.log('');
|
|
206
|
+
}
|
|
207
|
+
if (updates.length > 0) {
|
|
208
|
+
console.log(chalk.cyan(' Updates (would apply):'));
|
|
209
|
+
updates.forEach(f => console.log(chalk.gray(` ~ ${f.path}`)));
|
|
210
|
+
console.log('');
|
|
211
|
+
}
|
|
212
|
+
if (autoMerge.length > 0) {
|
|
213
|
+
console.log(chalk.blue(' Auto-merge (would merge):'));
|
|
214
|
+
autoMerge.forEach(f => console.log(chalk.gray(` ⊕ ${f.path}`)));
|
|
215
|
+
console.log('');
|
|
216
|
+
}
|
|
217
|
+
if (userModified.length > 0) {
|
|
218
|
+
console.log(chalk.yellow(' User-modified (would skip):'));
|
|
219
|
+
userModified.forEach(f => console.log(chalk.gray(` ! ${f.path}`)));
|
|
220
|
+
console.log('');
|
|
221
|
+
}
|
|
222
|
+
if (manualConflicts.length > 0) {
|
|
223
|
+
console.log(chalk.red(' Conflicts (need manual resolution):'));
|
|
224
|
+
manualConflicts.forEach(f => console.log(chalk.gray(` ⚠ ${f.path}`)));
|
|
225
|
+
console.log('');
|
|
226
|
+
}
|
|
227
|
+
if (deprecated.length > 0) {
|
|
228
|
+
console.log(chalk.magenta(' Deprecated (would flag):'));
|
|
229
|
+
deprecated.forEach(f => console.log(chalk.gray(` ✗ ${f}`)));
|
|
230
|
+
console.log('');
|
|
231
|
+
}
|
|
232
|
+
logger.info('Dry run complete. No files were modified.');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Handle conflicts interactively.
|
|
236
|
+
*/
|
|
237
|
+
async function handleConflictsInteractively(files) {
|
|
238
|
+
console.log('');
|
|
239
|
+
logger.section('Files Requiring Attention');
|
|
240
|
+
console.log('');
|
|
241
|
+
for (const file of files) {
|
|
242
|
+
console.log(chalk.yellow(` ${file.path}`));
|
|
243
|
+
console.log(chalk.gray(` Status: ${file.status}`));
|
|
244
|
+
const { action } = await inquirer.prompt([{
|
|
245
|
+
type: 'list',
|
|
246
|
+
name: 'action',
|
|
247
|
+
message: `What would you like to do with ${file.path}?`,
|
|
248
|
+
choices: [
|
|
249
|
+
{ name: 'Keep my version (skip update)', value: 'keep' },
|
|
250
|
+
{ name: 'Use new archai version (overwrite)', value: 'overwrite' },
|
|
251
|
+
{ name: 'Try to merge changes', value: 'merge' },
|
|
252
|
+
],
|
|
253
|
+
}]);
|
|
254
|
+
file.userAction = action;
|
|
255
|
+
console.log('');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Handle deprecated files.
|
|
260
|
+
*/
|
|
261
|
+
async function handleDeprecatedFiles(deprecated) {
|
|
262
|
+
console.log('');
|
|
263
|
+
logger.section('Deprecated Files');
|
|
264
|
+
console.log('');
|
|
265
|
+
console.log(chalk.gray(' These files were tracked by archai but are no longer part of the template:'));
|
|
266
|
+
console.log('');
|
|
267
|
+
deprecated.forEach(f => console.log(chalk.magenta(` ${f}`)));
|
|
268
|
+
console.log('');
|
|
269
|
+
const { action } = await inquirer.prompt([{
|
|
270
|
+
type: 'list',
|
|
271
|
+
name: 'action',
|
|
272
|
+
message: 'What would you like to do with deprecated files?',
|
|
273
|
+
choices: [
|
|
274
|
+
{ name: 'Keep them (just remove from tracking)', value: 'keep' },
|
|
275
|
+
{ name: 'Delete them', value: 'delete' },
|
|
276
|
+
{ name: 'Skip for now', value: 'skip' },
|
|
277
|
+
],
|
|
278
|
+
}]);
|
|
279
|
+
if (action === 'delete') {
|
|
280
|
+
for (const filePath of deprecated) {
|
|
281
|
+
try {
|
|
282
|
+
if (await fs.pathExists(filePath)) {
|
|
283
|
+
await fs.remove(filePath);
|
|
284
|
+
logger.debug(`Deleted deprecated file: ${filePath}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
logger.debug(`Failed to delete ${filePath}`, error);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
logger.info(`Deleted ${deprecated.length} deprecated file(s).`);
|
|
292
|
+
}
|
|
293
|
+
else if (action === 'keep') {
|
|
294
|
+
logger.info('Deprecated files will be untracked but kept on disk.');
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Apply updates based on analysis.
|
|
299
|
+
*/
|
|
300
|
+
async function applyUpdates(analyses, options, archaiVersion) {
|
|
301
|
+
const spinner = ora('Applying updates...').start();
|
|
302
|
+
let applied = 0;
|
|
303
|
+
let skipped = 0;
|
|
304
|
+
let merged = 0;
|
|
305
|
+
const templates = await getTemplateFiles();
|
|
306
|
+
const templateMap = new Map(templates.map(t => [t.relativePath, t]));
|
|
307
|
+
for (const analysis of analyses) {
|
|
308
|
+
const template = templateMap.get(analysis.path);
|
|
309
|
+
if (!template)
|
|
310
|
+
continue;
|
|
311
|
+
const localPath = analysis.path;
|
|
312
|
+
try {
|
|
313
|
+
switch (analysis.status) {
|
|
314
|
+
case 'new':
|
|
315
|
+
await fs.ensureDir(path.dirname(localPath));
|
|
316
|
+
await fs.copy(template.templatePath, localPath);
|
|
317
|
+
applied++;
|
|
318
|
+
break;
|
|
319
|
+
case 'modified_by_archai':
|
|
320
|
+
await fs.copy(template.templatePath, localPath, { overwrite: true });
|
|
321
|
+
applied++;
|
|
322
|
+
break;
|
|
323
|
+
case 'conflict':
|
|
324
|
+
if (analysis.canAutoMerge) {
|
|
325
|
+
const result = await mergeFile(localPath, template.templatePath);
|
|
326
|
+
if (result.success) {
|
|
327
|
+
await applyMerge(localPath, result);
|
|
328
|
+
merged++;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
skipped++;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const action = analysis.userAction;
|
|
336
|
+
if (action === 'overwrite') {
|
|
337
|
+
await fs.copy(template.templatePath, localPath, { overwrite: true });
|
|
338
|
+
applied++;
|
|
339
|
+
}
|
|
340
|
+
else if (action === 'merge') {
|
|
341
|
+
const result = await mergeFile(localPath, template.templatePath);
|
|
342
|
+
if (result.success) {
|
|
343
|
+
await applyMerge(localPath, result);
|
|
344
|
+
merged++;
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
skipped++;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
skipped++;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
break;
|
|
355
|
+
case 'modified_by_user':
|
|
356
|
+
const action = analysis.userAction;
|
|
357
|
+
if (action === 'overwrite') {
|
|
358
|
+
await fs.copy(template.templatePath, localPath, { overwrite: true });
|
|
359
|
+
applied++;
|
|
360
|
+
}
|
|
361
|
+
else if (action === 'merge') {
|
|
362
|
+
const result = await mergeFile(localPath, template.templatePath);
|
|
363
|
+
if (result.success) {
|
|
364
|
+
await applyMerge(localPath, result);
|
|
365
|
+
merged++;
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
skipped++;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
skipped++;
|
|
373
|
+
}
|
|
374
|
+
break;
|
|
375
|
+
case 'unchanged':
|
|
376
|
+
case 'generated':
|
|
377
|
+
// No action needed
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
logger.debug(`Failed to process ${analysis.path}`, error);
|
|
383
|
+
skipped++;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
const summary = [];
|
|
387
|
+
if (applied > 0)
|
|
388
|
+
summary.push(`${applied} updated`);
|
|
389
|
+
if (merged > 0)
|
|
390
|
+
summary.push(`${merged} merged`);
|
|
391
|
+
if (skipped > 0)
|
|
392
|
+
summary.push(`${skipped} skipped`);
|
|
393
|
+
spinner.succeed(summary.join(', ') || 'No changes applied');
|
|
394
|
+
// Update version.json
|
|
395
|
+
await updateVersionTracking(archaiVersion, analyses);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Update version tracking after update.
|
|
399
|
+
*/
|
|
400
|
+
async function updateVersionTracking(archaiVersion, analyses) {
|
|
401
|
+
let versionFile = await loadVersionFile(CLAUDE_DIR);
|
|
402
|
+
if (!versionFile) {
|
|
403
|
+
versionFile = createVersionFile(archaiVersion);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
versionFile.archai = archaiVersion;
|
|
407
|
+
versionFile.lastUpdated = new Date().toISOString();
|
|
408
|
+
}
|
|
409
|
+
// Update hashes for all processed files
|
|
410
|
+
const updates = [];
|
|
411
|
+
for (const analysis of analyses) {
|
|
412
|
+
const userAction = analysis.userAction;
|
|
413
|
+
const wasApplied = analysis.status === 'new' ||
|
|
414
|
+
analysis.status === 'modified_by_archai' ||
|
|
415
|
+
(analysis.status === 'conflict' && analysis.canAutoMerge) ||
|
|
416
|
+
(analysis.status === 'conflict' && (userAction === 'overwrite' || userAction === 'merge')) ||
|
|
417
|
+
(analysis.status === 'modified_by_user' && (userAction === 'overwrite' || userAction === 'merge'));
|
|
418
|
+
if (wasApplied) {
|
|
419
|
+
const hash = await hashFile(analysis.path);
|
|
420
|
+
updates.push({
|
|
421
|
+
path: analysis.path,
|
|
422
|
+
hash,
|
|
423
|
+
isGenerated: analysis.isGenerated,
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (updates.length > 0) {
|
|
428
|
+
versionFile = bulkUpdateFileHashes(versionFile, updates);
|
|
429
|
+
}
|
|
430
|
+
// Update expected files
|
|
431
|
+
const templates = await getTemplateFiles();
|
|
432
|
+
versionFile.expectedFiles = templates.map(t => t.relativePath);
|
|
433
|
+
await saveVersionFile(CLAUDE_DIR, versionFile);
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,QAAQ,GAET,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,SAAS,EACT,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,UAAU,GAAG,SAAS,CAAC;AAS7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA8B;IACzD,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE/C,iCAAiC;IACjC,IAAI,CAAC,MAAM,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,qBAAqB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,MAAM,aAAa,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACnE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,aAAa,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,MAAM,sBAAsB,CAAC,CAAC;QAChF,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,oBAAoB,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;YAC9E,IAAI,OAAO,EAAE,CAAC;gBACZ,oBAAoB,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,oBAAoB,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACjE,CAAC;QAED,6DAA6D;QAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACrE,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACnF,MAAM,cAAc,GAAG,cAAc,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7G,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvD,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACjC,SAAS,CAAC,OAAO,CAAC,mCAAmC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,oBAAoB;IACpB,MAAM,eAAe,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACnD,eAAe,CAAC,OAAO,CAAC,YAAY,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;IAE7D,mBAAmB;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,oBAAoB,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAEjE,6BAA6B;IAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,sCAAsC;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAClD,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjE,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,eAAe;IACf,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,aAAa,CAAC,OAAO,CAAC,mBAAmB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAE7D,oBAAoB;IACpB,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAErC,wCAAwC;IACxC,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,4BAA4B,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,MAAM,yDAAyD,CAAC,CAAC;IAC1G,CAAC;IAED,0BAA0B;IAC1B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,MAAM,qDAAqD,CAAC,CAAC;IAClG,CAAC;IAED,gBAAgB;IAChB,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAwB,EACxB,UAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,oBAAoB,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEzF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC3D,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,4BAA4B,CAAC,KAAqB;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kCAAkC,IAAI,CAAC,IAAI,GAAG;gBACvD,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,MAAM,EAAE;oBACxD,EAAE,IAAI,EAAE,oCAAoC,EAAE,KAAK,EAAE,WAAW,EAAE;oBAClE,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE;iBACjD;aACF,CAAC,CAAC,CAAC;QAEH,IAA+C,CAAC,UAAU,GAAG,MAAM,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,UAAoB;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACxC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;aACxC;SACF,CAAC,CAAC,CAAC;IAEJ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,QAAwB,EACxB,OAA8B,EAC9B,aAAqB;IAErB,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IACnD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEhC,IAAI,CAAC;YACH,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACxB,KAAK,KAAK;oBACR,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC5C,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBAChD,OAAO,EAAE,CAAC;oBACV,MAAM;gBAER,KAAK,oBAAoB;oBACvB,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,OAAO,EAAE,CAAC;oBACV,MAAM;gBAER,KAAK,UAAU;oBACb,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;wBAC1B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;wBACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;4BACnB,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;4BACpC,MAAM,EAAE,CAAC;wBACX,CAAC;6BAAM,CAAC;4BACN,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAI,QAAmD,CAAC,UAAU,CAAC;wBAC/E,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BACrE,OAAO,EAAE,CAAC;wBACZ,CAAC;6BAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;4BAC9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;4BACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gCACnB,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gCACpC,MAAM,EAAE,CAAC;4BACX,CAAC;iCAAM,CAAC;gCACN,OAAO,EAAE,CAAC;4BACZ,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,KAAK,kBAAkB;oBACrB,MAAM,MAAM,GAAI,QAAmD,CAAC,UAAU,CAAC;oBAC/E,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;wBAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBACrE,OAAO,EAAE,CAAC;oBACZ,CAAC;yBAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;wBAC9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;wBACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;4BACnB,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;4BACpC,MAAM,EAAE,CAAC;wBACX,CAAC;6BAAM,CAAC;4BACN,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,MAAM;gBAER,KAAK,WAAW,CAAC;gBACjB,KAAK,WAAW;oBACd,mBAAmB;oBACnB,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IACpD,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAEpD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAE5D,sBAAsB;IACtB,MAAM,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,aAAqB,EACrB,QAAwB;IAExB,IAAI,WAAW,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC;QACnC,WAAW,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAwE,EAAE,CAAC;IAExF,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,UAAU,GAAI,QAAmD,CAAC,UAAU,CAAC;QACnF,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,KAAK,KAAK;YACzB,QAAQ,CAAC,MAAM,KAAK,oBAAoB;YACxC,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC;YACzD,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,OAAO,CAAC,CAAC;YAC1F,CAAC,QAAQ,CAAC,MAAM,KAAK,kBAAkB,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC;QAErG,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,WAAW;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,WAAW,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAE/D,MAAM,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC"}
|