@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,293 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { detectGitRepo, discoverGitDefaults, validateGitignore, fixGitignore, detectGitPatterns } from '../utils/detect-git.js';
|
|
6
|
+
import { updateConfigWithGit, updateConfigWithGitConventions } from '../utils/update-config-git.js';
|
|
7
|
+
import { updateAgentTemplates } from '../utils/update-agent-templates.js';
|
|
8
|
+
import { checkClaudeCli, discoverMcpServers, identifyTaskManagers, getProviderName, introspectTaskManager, } from '../utils/detect-mcp.js';
|
|
9
|
+
import { updateConfigWithMcp } from '../utils/update-config-mcp.js';
|
|
10
|
+
import { updateAgentTemplatesWithMcp } from '../utils/update-agent-mcp.js';
|
|
11
|
+
import { detectCIProvider } from '../utils/ci-provider.js';
|
|
12
|
+
import { updateConfigWithCI } from '../utils/update-config-ci.js';
|
|
13
|
+
export async function setup(options) {
|
|
14
|
+
logger.banner();
|
|
15
|
+
const runGit = options.git || (!options.git && !options.mcp);
|
|
16
|
+
const runMcp = options.mcp || (!options.git && !options.mcp);
|
|
17
|
+
if (runGit) {
|
|
18
|
+
await runGitLoop(options);
|
|
19
|
+
}
|
|
20
|
+
if (runMcp) {
|
|
21
|
+
await runMcpLoop(options);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Git environment detection and validation loop.
|
|
26
|
+
*/
|
|
27
|
+
async function runGitLoop(options) {
|
|
28
|
+
console.log('');
|
|
29
|
+
logger.section('Git Configuration');
|
|
30
|
+
console.log('');
|
|
31
|
+
// Step 1: Check for .git directory
|
|
32
|
+
const isGitRepo = await detectGitRepo();
|
|
33
|
+
if (!isGitRepo) {
|
|
34
|
+
logger.info('No .git directory found. Skipping Git configuration.');
|
|
35
|
+
logger.info('Initialize a Git repository first, then run: archai setup --git');
|
|
36
|
+
console.log('');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Step 2: Discover Git defaults
|
|
40
|
+
const spinner = ora('Detecting Git configuration...').start();
|
|
41
|
+
const gitConfig = await discoverGitDefaults();
|
|
42
|
+
spinner.succeed('Git configuration detected');
|
|
43
|
+
// Step 2b: Detect git branching conventions
|
|
44
|
+
const conventionSpinner = ora('Analyzing branch conventions...').start();
|
|
45
|
+
const gitPatterns = await detectGitPatterns();
|
|
46
|
+
conventionSpinner.succeed('Branch conventions detected');
|
|
47
|
+
// Override branchConvention with detected pattern
|
|
48
|
+
gitConfig.branchConvention = gitPatterns.agentBranchConvention;
|
|
49
|
+
// Display discovered config
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(chalk.white(' Discovered settings:'));
|
|
52
|
+
console.log(chalk.gray(` Default branch: ${chalk.cyan(gitConfig.defaultBranch)}`));
|
|
53
|
+
console.log(chalk.gray(` Current branch: ${chalk.cyan(gitConfig.currentBranch)}`));
|
|
54
|
+
if (gitConfig.remote && gitConfig.remoteUrl) {
|
|
55
|
+
console.log(chalk.gray(` Remote: ${chalk.cyan(gitConfig.remote)} (${gitConfig.remoteUrl})`));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(chalk.gray(` Remote: ${chalk.yellow('none configured')}`));
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.gray(` Branch convention: ${chalk.cyan(gitConfig.branchConvention)}`));
|
|
61
|
+
console.log('');
|
|
62
|
+
// Display detected conventions
|
|
63
|
+
console.log(chalk.white(' Detected conventions:'));
|
|
64
|
+
if (gitPatterns.branchPrefix) {
|
|
65
|
+
console.log(chalk.gray(` Branch prefix: ${chalk.cyan(gitPatterns.branchPrefix)}`));
|
|
66
|
+
}
|
|
67
|
+
console.log(chalk.gray(` Merge strategy: ${chalk.cyan(gitPatterns.mergeStrategy)}`));
|
|
68
|
+
if (gitPatterns.usesPullRequests && gitPatterns.prPlatform) {
|
|
69
|
+
console.log(chalk.gray(` PR platform: ${chalk.cyan(gitPatterns.prPlatform)}`));
|
|
70
|
+
}
|
|
71
|
+
console.log(chalk.gray(` Agent convention: ${chalk.cyan(gitPatterns.agentBranchConvention)}`));
|
|
72
|
+
console.log('');
|
|
73
|
+
// Step 3: Validate .gitignore
|
|
74
|
+
const gitignoreResult = await validateGitignore();
|
|
75
|
+
if (!gitignoreResult.valid) {
|
|
76
|
+
console.log(chalk.yellow(` .gitignore is missing ${gitignoreResult.missing.length} archai entries:`));
|
|
77
|
+
for (const entry of gitignoreResult.missing) {
|
|
78
|
+
console.log(chalk.gray(` - ${entry}`));
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
let shouldFix = options.yes || false;
|
|
82
|
+
if (!options.yes) {
|
|
83
|
+
const { fix } = await inquirer.prompt([{
|
|
84
|
+
type: 'confirm',
|
|
85
|
+
name: 'fix',
|
|
86
|
+
message: 'Add missing entries to .gitignore?',
|
|
87
|
+
default: true,
|
|
88
|
+
}]);
|
|
89
|
+
shouldFix = fix;
|
|
90
|
+
}
|
|
91
|
+
if (shouldFix) {
|
|
92
|
+
await fixGitignore(gitignoreResult.missing);
|
|
93
|
+
logger.success('Updated .gitignore with missing entries');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
logger.warn('Skipped .gitignore update. Agent scratch files may be committed.');
|
|
97
|
+
}
|
|
98
|
+
console.log('');
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
logger.success('.gitignore contains all required archai entries');
|
|
102
|
+
console.log('');
|
|
103
|
+
}
|
|
104
|
+
// Step 4: Validate remote
|
|
105
|
+
if (!gitConfig.remote) {
|
|
106
|
+
logger.warn('No remote configured. Agents will not be able to push branches.');
|
|
107
|
+
logger.info('Add a remote with: git remote add origin <url>');
|
|
108
|
+
console.log('');
|
|
109
|
+
}
|
|
110
|
+
// Step 5: Write Git config to archai.config.md
|
|
111
|
+
const configSpinner = ora('Updating archai.config.md...').start();
|
|
112
|
+
await updateConfigWithGit(gitConfig);
|
|
113
|
+
configSpinner.succeed('Updated archai.config.md with Git configuration');
|
|
114
|
+
await updateConfigWithGitConventions(gitPatterns, { force: true });
|
|
115
|
+
// Step 5b: Detect CI provider
|
|
116
|
+
const ciSpinner = ora('Detecting CI provider...').start();
|
|
117
|
+
try {
|
|
118
|
+
const ciResult = await detectCIProvider(process.cwd(), { skipConfigOverride: true });
|
|
119
|
+
if (ciResult.provider !== 'none') {
|
|
120
|
+
ciSpinner.succeed(`Detected CI provider: ${ciResult.provider} (via ${ciResult.detectedVia})`);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
ciSpinner.succeed('No CI provider detected');
|
|
124
|
+
}
|
|
125
|
+
await updateConfigWithCI(ciResult);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
ciSpinner.succeed('CI detection complete');
|
|
129
|
+
}
|
|
130
|
+
// Step 6: Update agent templates
|
|
131
|
+
const templateSpinner = ora('Updating agent templates...').start();
|
|
132
|
+
const updatedTemplates = await updateAgentTemplates(gitConfig.defaultBranch);
|
|
133
|
+
if (updatedTemplates > 0) {
|
|
134
|
+
templateSpinner.succeed(`Updated ${updatedTemplates} agent template(s) with default branch`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
templateSpinner.succeed('Agent templates already up to date');
|
|
138
|
+
}
|
|
139
|
+
// Success summary
|
|
140
|
+
console.log('');
|
|
141
|
+
logger.divider();
|
|
142
|
+
console.log('');
|
|
143
|
+
logger.success('Git configuration complete!');
|
|
144
|
+
console.log('');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* MCP server detection and task manager configuration loop.
|
|
148
|
+
*/
|
|
149
|
+
async function runMcpLoop(options) {
|
|
150
|
+
console.log('');
|
|
151
|
+
logger.section('MCP Configuration');
|
|
152
|
+
console.log('');
|
|
153
|
+
// Step 1: Check Claude CLI availability
|
|
154
|
+
const spinner = ora('Checking Claude CLI availability...').start();
|
|
155
|
+
const cliAvailable = checkClaudeCli();
|
|
156
|
+
if (!cliAvailable) {
|
|
157
|
+
spinner.fail('Claude CLI not available');
|
|
158
|
+
console.log('');
|
|
159
|
+
logger.info('Claude CLI not found or not authorized.');
|
|
160
|
+
logger.info('Install Claude Code and run: archai setup --mcp');
|
|
161
|
+
console.log('');
|
|
162
|
+
if (!options.yes) {
|
|
163
|
+
const { continueWithout } = await inquirer.prompt([{
|
|
164
|
+
type: 'confirm',
|
|
165
|
+
name: 'continueWithout',
|
|
166
|
+
message: 'Continue without MCP setup?',
|
|
167
|
+
default: true,
|
|
168
|
+
}]);
|
|
169
|
+
if (!continueWithout)
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
spinner.succeed('Claude CLI available');
|
|
175
|
+
// Step 2: Discover installed MCPs
|
|
176
|
+
const discoverSpinner = ora('Discovering MCP servers...').start();
|
|
177
|
+
const servers = discoverMcpServers();
|
|
178
|
+
if (servers.length === 0) {
|
|
179
|
+
discoverSpinner.succeed('No MCP servers found');
|
|
180
|
+
console.log('');
|
|
181
|
+
logger.info('No MCP servers are configured. You can add them later.');
|
|
182
|
+
console.log('');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
discoverSpinner.succeed(`Found ${servers.length} MCP server(s)`);
|
|
186
|
+
// Display discovered servers
|
|
187
|
+
console.log('');
|
|
188
|
+
for (const server of servers) {
|
|
189
|
+
const statusIcon = server.status === 'connected' ? chalk.green('\u25cf') : chalk.red('\u25cf');
|
|
190
|
+
console.log(` ${statusIcon} ${chalk.white(server.name)} ${chalk.gray(`(${server.status})`)}`);
|
|
191
|
+
}
|
|
192
|
+
console.log('');
|
|
193
|
+
// Step 3: Identify task management MCPs
|
|
194
|
+
const taskManagers = identifyTaskManagers(servers);
|
|
195
|
+
if (taskManagers.length === 0) {
|
|
196
|
+
logger.info('No task management MCPs detected.');
|
|
197
|
+
logger.info('Supported: Monday.com, Linear, Jira, Asana, ClickUp, Notion');
|
|
198
|
+
console.log('');
|
|
199
|
+
// Still update config with the list of other servers
|
|
200
|
+
await updateConfigWithMcp({ taskManager: null, otherServers: servers });
|
|
201
|
+
logger.success('Updated archai.config.md with MCP server list');
|
|
202
|
+
console.log('');
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// Select primary task manager
|
|
206
|
+
let selectedTm = taskManagers[0];
|
|
207
|
+
if (taskManagers.length > 1 && !options.yes) {
|
|
208
|
+
const { chosen } = await inquirer.prompt([{
|
|
209
|
+
type: 'list',
|
|
210
|
+
name: 'chosen',
|
|
211
|
+
message: 'Multiple task managers found. Select primary:',
|
|
212
|
+
choices: taskManagers.map(tm => ({ name: tm.name, value: tm.name })),
|
|
213
|
+
}]);
|
|
214
|
+
selectedTm = taskManagers.find(tm => tm.name === chosen);
|
|
215
|
+
}
|
|
216
|
+
const providerName = getProviderName(selectedTm.name);
|
|
217
|
+
logger.info(`Configuring task manager: ${chalk.cyan(selectedTm.name)}`);
|
|
218
|
+
console.log('');
|
|
219
|
+
// Step 4: Introspect task manager via claude -p
|
|
220
|
+
const introSpinner = ora('Introspecting task manager (this may take a moment)...').start();
|
|
221
|
+
const introspection = introspectTaskManager(selectedTm.name);
|
|
222
|
+
if (!introspection) {
|
|
223
|
+
introSpinner.fail('Could not introspect task manager');
|
|
224
|
+
console.log('');
|
|
225
|
+
logger.warn('Introspection failed. MCP server may not support the required operations.');
|
|
226
|
+
logger.info('You can configure MCP manually in archai.config.md');
|
|
227
|
+
console.log('');
|
|
228
|
+
// Update config without task manager details
|
|
229
|
+
await updateConfigWithMcp({ taskManager: null, otherServers: servers });
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
introSpinner.succeed(`Introspected ${introspection.provider}`);
|
|
233
|
+
// Display mapping
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log(chalk.white(' Concept mapping:'));
|
|
236
|
+
console.log(chalk.gray(` Epic \u2192 ${chalk.cyan(introspection.mapping.epic)}`));
|
|
237
|
+
console.log(chalk.gray(` Task \u2192 ${chalk.cyan(introspection.mapping.task)}`));
|
|
238
|
+
console.log(chalk.gray(` Subtask \u2192 ${chalk.cyan(introspection.mapping.subtask)}`));
|
|
239
|
+
console.log(chalk.gray(` Statuses \u2192 ${chalk.cyan(introspection.mapping.statuses.join(', '))}`));
|
|
240
|
+
console.log('');
|
|
241
|
+
// Step 5: Select board/project
|
|
242
|
+
let selectedBoard;
|
|
243
|
+
if (introspection.boards.length === 0) {
|
|
244
|
+
logger.warn('No boards/projects found. Using default.');
|
|
245
|
+
selectedBoard = { id: 'unknown', name: 'Default' };
|
|
246
|
+
}
|
|
247
|
+
else if (introspection.boards.length === 1 || options.yes) {
|
|
248
|
+
selectedBoard = introspection.boards[0];
|
|
249
|
+
logger.info(`Using board: ${chalk.cyan(selectedBoard.name)} (${selectedBoard.id})`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const { chosenBoard } = await inquirer.prompt([{
|
|
253
|
+
type: 'list',
|
|
254
|
+
name: 'chosenBoard',
|
|
255
|
+
message: 'Select board/project:',
|
|
256
|
+
choices: introspection.boards.map(b => ({
|
|
257
|
+
name: `${b.name} (ID: ${b.id})`,
|
|
258
|
+
value: b.id,
|
|
259
|
+
})),
|
|
260
|
+
}]);
|
|
261
|
+
selectedBoard = introspection.boards.find(b => b.id === chosenBoard);
|
|
262
|
+
}
|
|
263
|
+
console.log('');
|
|
264
|
+
// Step 6: Update agent templates with task manager instructions
|
|
265
|
+
const templateSpinner = ora('Updating agent templates...').start();
|
|
266
|
+
const updatedCount = await updateAgentTemplatesWithMcp();
|
|
267
|
+
if (updatedCount > 0) {
|
|
268
|
+
templateSpinner.succeed(`Updated ${updatedCount} agent template(s) with task manager integration`);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
templateSpinner.succeed('Agent templates already up to date');
|
|
272
|
+
}
|
|
273
|
+
// Step 7: Update archai.config.md with MCP configuration
|
|
274
|
+
const configSpinner = ora('Updating archai.config.md...').start();
|
|
275
|
+
const otherServers = servers.filter(s => s.name !== selectedTm.name);
|
|
276
|
+
await updateConfigWithMcp({
|
|
277
|
+
taskManager: {
|
|
278
|
+
provider: introspection.provider,
|
|
279
|
+
serverName: selectedTm.name,
|
|
280
|
+
board: selectedBoard,
|
|
281
|
+
mapping: introspection.mapping,
|
|
282
|
+
},
|
|
283
|
+
otherServers,
|
|
284
|
+
});
|
|
285
|
+
configSpinner.succeed('Updated archai.config.md with MCP configuration');
|
|
286
|
+
// Success summary
|
|
287
|
+
console.log('');
|
|
288
|
+
logger.divider();
|
|
289
|
+
console.log('');
|
|
290
|
+
logger.success('MCP configuration complete!');
|
|
291
|
+
console.log('');
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ProcessHealthStatus } from '../types/index.js';
|
|
2
|
+
export interface StatusOptions {
|
|
3
|
+
json?: boolean;
|
|
4
|
+
tree?: boolean;
|
|
5
|
+
prune?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface StatusEntry {
|
|
8
|
+
id: string;
|
|
9
|
+
pid: number;
|
|
10
|
+
state: string;
|
|
11
|
+
health: ProcessHealthStatus;
|
|
12
|
+
runtime: number;
|
|
13
|
+
lastEventAge: number;
|
|
14
|
+
processAlive: boolean;
|
|
15
|
+
details: string;
|
|
16
|
+
recommendation: string;
|
|
17
|
+
tree?: Array<{
|
|
18
|
+
pid: number;
|
|
19
|
+
ppid: number;
|
|
20
|
+
name: string;
|
|
21
|
+
cmd: string;
|
|
22
|
+
depth: number;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert milliseconds to human-readable runtime string.
|
|
27
|
+
* Clamps negative values to 0.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatRuntime(ms: number): string;
|
|
30
|
+
/**
|
|
31
|
+
* Format status entries as an aligned table.
|
|
32
|
+
* Returns empty string for empty input.
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatTable(entries: StatusEntry[]): string;
|
|
35
|
+
/**
|
|
36
|
+
* Format a process tree for display.
|
|
37
|
+
* 2 spaces per depth level.
|
|
38
|
+
* Format: "PID {pid} {name} -- {cmd} [depth {depth}]"
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatTree(tree: Array<{
|
|
41
|
+
pid: number;
|
|
42
|
+
ppid: number;
|
|
43
|
+
name: string;
|
|
44
|
+
cmd: string;
|
|
45
|
+
depth: number;
|
|
46
|
+
}>): string;
|
|
47
|
+
/**
|
|
48
|
+
* Show all tracked processes and their health.
|
|
49
|
+
*/
|
|
50
|
+
export declare function status(options: StatusOptions): Promise<void>;
|
|
51
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAuB,mBAAmB,EAAoB,MAAM,mBAAmB,CAAC;AAMpG,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvF;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAyD1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACnF,MAAM,CASR;AAMD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFlE"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ProcessRegistry } from '../utils/process-registry.js';
|
|
4
|
+
import { assessAll } from '../utils/process-health.js';
|
|
5
|
+
import { enumerateTree } from '../utils/process-tree.js';
|
|
6
|
+
// ============================================================
|
|
7
|
+
// Pure Helpers (exported for testing)
|
|
8
|
+
// ============================================================
|
|
9
|
+
/**
|
|
10
|
+
* Convert milliseconds to human-readable runtime string.
|
|
11
|
+
* Clamps negative values to 0.
|
|
12
|
+
*/
|
|
13
|
+
export function formatRuntime(ms) {
|
|
14
|
+
const clamped = Math.max(0, ms);
|
|
15
|
+
const totalSeconds = Math.floor(clamped / 1000);
|
|
16
|
+
if (totalSeconds < 60) {
|
|
17
|
+
return `${totalSeconds}s`;
|
|
18
|
+
}
|
|
19
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
20
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
21
|
+
const seconds = totalSeconds % 60;
|
|
22
|
+
if (hours > 0) {
|
|
23
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
24
|
+
}
|
|
25
|
+
return `${minutes}m ${seconds}s`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Format status entries as an aligned table.
|
|
29
|
+
* Returns empty string for empty input.
|
|
30
|
+
*/
|
|
31
|
+
export function formatTable(entries) {
|
|
32
|
+
if (entries.length === 0)
|
|
33
|
+
return '';
|
|
34
|
+
const DETAILS_MAX = 50;
|
|
35
|
+
const columns = ['Task', 'State', 'PID', 'Runtime', 'Health', 'Details'];
|
|
36
|
+
// Build row data
|
|
37
|
+
const rows = entries.map(e => {
|
|
38
|
+
let details = e.details;
|
|
39
|
+
if (details.length > DETAILS_MAX) {
|
|
40
|
+
details = details.slice(0, DETAILS_MAX - 3) + '...';
|
|
41
|
+
}
|
|
42
|
+
return [
|
|
43
|
+
e.id,
|
|
44
|
+
e.state,
|
|
45
|
+
String(e.pid),
|
|
46
|
+
formatRuntime(e.runtime),
|
|
47
|
+
e.health,
|
|
48
|
+
details,
|
|
49
|
+
];
|
|
50
|
+
});
|
|
51
|
+
// Compute column widths
|
|
52
|
+
const widths = columns.map((col, i) => {
|
|
53
|
+
const maxData = rows.reduce((max, row) => Math.max(max, row[i].length), 0);
|
|
54
|
+
return Math.max(col.length, maxData);
|
|
55
|
+
});
|
|
56
|
+
// Color health status
|
|
57
|
+
const colorHealth = (status) => {
|
|
58
|
+
switch (status) {
|
|
59
|
+
case 'healthy': return chalk.green(status);
|
|
60
|
+
case 'idle': return chalk.yellow(status);
|
|
61
|
+
case 'stuck':
|
|
62
|
+
case 'zombie':
|
|
63
|
+
case 'dead': return chalk.red(status);
|
|
64
|
+
default: return status;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
// Render header
|
|
68
|
+
const header = columns.map((col, i) => col.padEnd(widths[i])).join(' ');
|
|
69
|
+
const separator = widths.map(w => '-'.repeat(w)).join(' ');
|
|
70
|
+
// Render rows
|
|
71
|
+
const dataLines = rows.map(row => row.map((cell, i) => {
|
|
72
|
+
if (i === 4) {
|
|
73
|
+
// Health column: apply color, pad based on raw length
|
|
74
|
+
const padding = widths[i] - cell.length;
|
|
75
|
+
return colorHealth(cell) + ' '.repeat(Math.max(0, padding));
|
|
76
|
+
}
|
|
77
|
+
return cell.padEnd(widths[i]);
|
|
78
|
+
}).join(' '));
|
|
79
|
+
return [header, separator, ...dataLines].join('\n');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format a process tree for display.
|
|
83
|
+
* 2 spaces per depth level.
|
|
84
|
+
* Format: "PID {pid} {name} -- {cmd} [depth {depth}]"
|
|
85
|
+
*/
|
|
86
|
+
export function formatTree(tree) {
|
|
87
|
+
if (tree.length === 0)
|
|
88
|
+
return '';
|
|
89
|
+
return tree
|
|
90
|
+
.map(node => {
|
|
91
|
+
const indent = ' '.repeat(node.depth);
|
|
92
|
+
return `${indent}PID ${node.pid} ${node.name} -- ${node.cmd} [depth ${node.depth}]`;
|
|
93
|
+
})
|
|
94
|
+
.join('\n');
|
|
95
|
+
}
|
|
96
|
+
// ============================================================
|
|
97
|
+
// Main Command
|
|
98
|
+
// ============================================================
|
|
99
|
+
/**
|
|
100
|
+
* Show all tracked processes and their health.
|
|
101
|
+
*/
|
|
102
|
+
export async function status(options) {
|
|
103
|
+
const stateDir = path.join(process.cwd(), '.claude', 'state', 'proc');
|
|
104
|
+
// Step 1: Reconcile before display
|
|
105
|
+
ProcessRegistry.instance.reconcile(stateDir);
|
|
106
|
+
// Step 2: Prune if requested
|
|
107
|
+
if (options.prune) {
|
|
108
|
+
ProcessRegistry.pruneStale(stateDir);
|
|
109
|
+
}
|
|
110
|
+
// Step 3: Assess health for all tracked processes
|
|
111
|
+
const reports = assessAll({ stateDir });
|
|
112
|
+
// Step 4: Read state files for runtime data
|
|
113
|
+
const stateData = ProcessRegistry.readAll(stateDir);
|
|
114
|
+
const stateMap = new Map();
|
|
115
|
+
for (const sd of stateData) {
|
|
116
|
+
stateMap.set(sd.id, sd);
|
|
117
|
+
}
|
|
118
|
+
// Step 5: Merge health reports with state data
|
|
119
|
+
const entries = reports.map(report => {
|
|
120
|
+
const sd = stateMap.get(report.id);
|
|
121
|
+
const runtime = sd
|
|
122
|
+
? Math.max(0, Date.now() - sd.startTime)
|
|
123
|
+
: Math.max(0, report.lastEventAge); // fallback for in-process only
|
|
124
|
+
return {
|
|
125
|
+
id: report.id,
|
|
126
|
+
pid: report.pid,
|
|
127
|
+
state: report.state,
|
|
128
|
+
health: report.status,
|
|
129
|
+
runtime,
|
|
130
|
+
lastEventAge: report.lastEventAge,
|
|
131
|
+
processAlive: report.processAlive,
|
|
132
|
+
details: report.details,
|
|
133
|
+
recommendation: report.recommendation,
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
// Step 6: Handle empty state
|
|
137
|
+
if (entries.length === 0) {
|
|
138
|
+
if (options.json) {
|
|
139
|
+
console.log('[]');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log('No tracked processes');
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Step 7: Attach tree data if requested
|
|
147
|
+
if (options.tree) {
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
if (entry.processAlive) {
|
|
150
|
+
try {
|
|
151
|
+
entry.tree = enumerateTree(entry.pid);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
entry.tree = [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Use treeSnapshot from state data for dead processes
|
|
159
|
+
const sd = stateMap.get(entry.id);
|
|
160
|
+
entry.tree = sd?.treeSnapshot ?? [];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Step 8: Output
|
|
165
|
+
if (options.json) {
|
|
166
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// Table output
|
|
170
|
+
console.log(formatTable(entries));
|
|
171
|
+
// Tree output (after table)
|
|
172
|
+
if (options.tree) {
|
|
173
|
+
for (const entry of entries) {
|
|
174
|
+
if (entry.tree && entry.tree.length > 0) {
|
|
175
|
+
console.log('');
|
|
176
|
+
console.log(chalk.bold(`Process tree for ${entry.id} (PID ${entry.pid}):`));
|
|
177
|
+
console.log(formatTree(entry.tree));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAuB1D,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GxE"}
|