@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,446 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
import { isWorktree } from './detect-git.js';
|
|
6
|
+
import { findByCwd, killSingle } from './process-tree.js';
|
|
7
|
+
/** Directories to junction/symlink from main .claude/ into worktree .claude/ */
|
|
8
|
+
const SHARED_DIRS = ['agents', 'scripts'];
|
|
9
|
+
/** Files to hard-link from main .claude/ into worktree .claude/ */
|
|
10
|
+
const SHARED_FILES = ['settings.local.json', 'version.json'];
|
|
11
|
+
/** Directories to create fresh (empty) in worktree .claude/ */
|
|
12
|
+
const FRESH_DIRS = ['state', 'plans'];
|
|
13
|
+
/**
|
|
14
|
+
* Run a git command and return trimmed stdout, or null on failure.
|
|
15
|
+
* Supports custom cwd and 15s timeout for worktree operations.
|
|
16
|
+
* Clears GIT_DIR/GIT_WORK_TREE/GIT_INDEX_FILE to avoid leaking
|
|
17
|
+
* parent git context (e.g., when running inside a git hook).
|
|
18
|
+
*/
|
|
19
|
+
function gitCommand(cmd, cwd) {
|
|
20
|
+
try {
|
|
21
|
+
// Strip git environment variables that may leak from parent git processes
|
|
22
|
+
// (e.g., pre-commit hooks set GIT_DIR/GIT_INDEX_FILE which break child git ops)
|
|
23
|
+
const env = { ...process.env };
|
|
24
|
+
delete env.GIT_DIR;
|
|
25
|
+
delete env.GIT_WORK_TREE;
|
|
26
|
+
delete env.GIT_INDEX_FILE;
|
|
27
|
+
delete env.GIT_QUARANTINE_PATH;
|
|
28
|
+
const result = execSync(cmd, {
|
|
29
|
+
encoding: 'utf-8',
|
|
30
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
31
|
+
timeout: 15_000,
|
|
32
|
+
cwd: cwd || process.cwd(),
|
|
33
|
+
env,
|
|
34
|
+
});
|
|
35
|
+
return result.trim() || null;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sanitize a string for use in branch names and directory names.
|
|
43
|
+
* @internal Exported for direct testability.
|
|
44
|
+
*/
|
|
45
|
+
export function sanitize(input) {
|
|
46
|
+
let result = input
|
|
47
|
+
.toLowerCase()
|
|
48
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
49
|
+
.replace(/-+/g, '-')
|
|
50
|
+
.replace(/^-+|-+$/g, '');
|
|
51
|
+
result = result.slice(0, 50);
|
|
52
|
+
result = result.replace(/-+$/g, '');
|
|
53
|
+
return result || 'unnamed';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Derive a short ID from a task ID string.
|
|
57
|
+
*/
|
|
58
|
+
function deriveShortId(taskId) {
|
|
59
|
+
return sanitize(taskId);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a directory junction (Windows) or symlink (Unix).
|
|
63
|
+
*/
|
|
64
|
+
async function createJunction(target, linkPath) {
|
|
65
|
+
const type = process.platform === 'win32' ? 'junction' : 'dir';
|
|
66
|
+
await fs.symlink(target, linkPath, type);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a hard link for a file.
|
|
70
|
+
*/
|
|
71
|
+
async function createFileLink(target, linkPath) {
|
|
72
|
+
await fs.link(target, linkPath);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Bootstrap a worktree's .claude/ directory with junctions, links, and fresh dirs.
|
|
76
|
+
*
|
|
77
|
+
* @param worktreePath - Absolute path to the new worktree root
|
|
78
|
+
* @param mainClaudeDir - Absolute path to the main worktree's .claude/ dir
|
|
79
|
+
* @param options - Task metadata for context file generation
|
|
80
|
+
*/
|
|
81
|
+
export async function bootstrapWorktree(worktreePath, mainClaudeDir, options) {
|
|
82
|
+
// 1. Create .claude/ directory inside worktree
|
|
83
|
+
await fs.ensureDir(path.join(worktreePath, '.claude'));
|
|
84
|
+
// 2. Directory junctions - remove git-checkout copies before creating junctions
|
|
85
|
+
for (const dirName of SHARED_DIRS) {
|
|
86
|
+
const target = path.join(mainClaudeDir, dirName);
|
|
87
|
+
const linkPath = path.join(worktreePath, '.claude', dirName);
|
|
88
|
+
if (!(await fs.pathExists(target))) {
|
|
89
|
+
logger.warn(`Skipping junction for ${dirName}: directory not found in main .claude/`);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// Remove any existing directory from git checkout before creating junction
|
|
93
|
+
if (await fs.pathExists(linkPath)) {
|
|
94
|
+
await fs.remove(linkPath);
|
|
95
|
+
}
|
|
96
|
+
await createJunction(target, linkPath);
|
|
97
|
+
}
|
|
98
|
+
// 3. File hard links - remove git-checkout copies before creating hard links
|
|
99
|
+
for (const fileName of SHARED_FILES) {
|
|
100
|
+
const target = path.join(mainClaudeDir, fileName);
|
|
101
|
+
const linkPath = path.join(worktreePath, '.claude', fileName);
|
|
102
|
+
if (!(await fs.pathExists(target))) {
|
|
103
|
+
logger.warn(`Skipping hard link for ${fileName}: file not found in main .claude/`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Remove any existing file from git checkout before creating hard link
|
|
107
|
+
if (await fs.pathExists(linkPath)) {
|
|
108
|
+
await fs.remove(linkPath);
|
|
109
|
+
}
|
|
110
|
+
await createFileLink(target, linkPath);
|
|
111
|
+
}
|
|
112
|
+
// 4. Fresh empty directories - clear any git-checkout content
|
|
113
|
+
for (const dirName of FRESH_DIRS) {
|
|
114
|
+
const dirPath = path.join(worktreePath, '.claude', dirName);
|
|
115
|
+
if (await fs.pathExists(dirPath)) {
|
|
116
|
+
await fs.remove(dirPath);
|
|
117
|
+
}
|
|
118
|
+
await fs.ensureDir(dirPath);
|
|
119
|
+
}
|
|
120
|
+
// 5. Generate worktree_context.md
|
|
121
|
+
const contextContent = `# Worktree Context
|
|
122
|
+
|
|
123
|
+
**Task ID:** ${options.taskId}
|
|
124
|
+
**Description:** ${options.description}
|
|
125
|
+
**Branch:** ${options.branchName}
|
|
126
|
+
**Created:** ${new Date().toISOString()}
|
|
127
|
+
**Main worktree:** ${path.dirname(mainClaudeDir)}
|
|
128
|
+
|
|
129
|
+
## Notes
|
|
130
|
+
This is a linked worktree. Shared directories (agents/, scripts/) are junctions/symlinks
|
|
131
|
+
to the main worktree. Do not delete them directly.
|
|
132
|
+
State (state/, plans/) is local to this worktree.
|
|
133
|
+
`;
|
|
134
|
+
await fs.writeFile(path.join(worktreePath, '.claude', 'worktree_context.md'), contextContent);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create a new git worktree for a task, with bootstrapped .claude/ directory.
|
|
138
|
+
*
|
|
139
|
+
* @param taskId - The task identifier (e.g., 'WORKTREE-001')
|
|
140
|
+
* @param description - Human-readable description (e.g., 'core worktree utilities')
|
|
141
|
+
* @returns WorktreeInfo for the created worktree
|
|
142
|
+
*/
|
|
143
|
+
export async function createWorktree(taskId, description) {
|
|
144
|
+
// 1. Resolve repo root
|
|
145
|
+
const rawRoot = gitCommand('git rev-parse --show-toplevel', process.cwd());
|
|
146
|
+
if (!rawRoot) {
|
|
147
|
+
throw new Error('Not inside a git repository');
|
|
148
|
+
}
|
|
149
|
+
const repoRoot = path.resolve(rawRoot);
|
|
150
|
+
// 2. Compute shortId
|
|
151
|
+
const shortId = deriveShortId(taskId);
|
|
152
|
+
// 3. Compute worktree path
|
|
153
|
+
const worktreePath = path.join(repoRoot, '.claude', 'worktrees', shortId);
|
|
154
|
+
// 4. Compute branch name
|
|
155
|
+
const sanitizedDesc = sanitize(description);
|
|
156
|
+
const branchName = sanitizedDesc ? `agent/${shortId}-${sanitizedDesc}` : `agent/${shortId}`;
|
|
157
|
+
// 5. Handle existing directory
|
|
158
|
+
if (await fs.pathExists(worktreePath)) {
|
|
159
|
+
// If it's a real worktree (has .git file), refuse
|
|
160
|
+
if (await fs.pathExists(path.join(worktreePath, '.git'))) {
|
|
161
|
+
throw new Error(`Worktree already exists for task: ${taskId} at ${worktreePath}`);
|
|
162
|
+
}
|
|
163
|
+
// Otherwise it's a stale empty directory (common on Windows when OS holds a handle).
|
|
164
|
+
// Try to remove it; if that fails, let git worktree add populate it — git handles
|
|
165
|
+
// existing empty directories gracefully.
|
|
166
|
+
try {
|
|
167
|
+
await fs.remove(worktreePath);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
logger.warn(`Stale directory ${worktreePath} could not be removed (likely locked by OS). Attempting git worktree add into it.`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// 6. Error: branch exists
|
|
174
|
+
const branchCheck = gitCommand(`git rev-parse --verify refs/heads/${branchName}`, repoRoot);
|
|
175
|
+
if (branchCheck !== null) {
|
|
176
|
+
throw new Error(`Branch already exists: ${branchName}`);
|
|
177
|
+
}
|
|
178
|
+
// 7. Ensure parent directory
|
|
179
|
+
await fs.ensureDir(path.join(repoRoot, '.claude', 'worktrees'));
|
|
180
|
+
// 8. Run git worktree add
|
|
181
|
+
const addResult = gitCommand(`git worktree add "${worktreePath}" -b ${branchName}`, repoRoot);
|
|
182
|
+
if (addResult === null) {
|
|
183
|
+
// git worktree add outputs to stderr on success, so check if worktree was actually created
|
|
184
|
+
if (!(await fs.pathExists(worktreePath))) {
|
|
185
|
+
throw new Error('Failed to create worktree: git worktree add returned error');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// 9-10. Bootstrap
|
|
189
|
+
const mainClaudeDir = path.join(repoRoot, '.claude');
|
|
190
|
+
await bootstrapWorktree(worktreePath, mainClaudeDir, { taskId, description, branchName });
|
|
191
|
+
// 11. Return WorktreeInfo
|
|
192
|
+
return {
|
|
193
|
+
path: worktreePath,
|
|
194
|
+
head: gitCommand('git rev-parse HEAD', worktreePath) || 'unknown',
|
|
195
|
+
branch: branchName,
|
|
196
|
+
isMain: false,
|
|
197
|
+
taskId: shortId,
|
|
198
|
+
locked: false,
|
|
199
|
+
stale: false,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Remove a worktree, cleaning up junctions/links BEFORE calling git worktree remove.
|
|
204
|
+
*
|
|
205
|
+
* @param worktreePath - Absolute path to the worktree to remove
|
|
206
|
+
* @param force - Whether to pass --force to git worktree remove
|
|
207
|
+
*/
|
|
208
|
+
export async function removeWorktree(worktreePath, force = false) {
|
|
209
|
+
// 1. Validate
|
|
210
|
+
if (!(await fs.pathExists(worktreePath))) {
|
|
211
|
+
throw new Error(`Worktree path does not exist: ${worktreePath}`);
|
|
212
|
+
}
|
|
213
|
+
// 2. Remove directory junctions/symlinks
|
|
214
|
+
for (const dirName of SHARED_DIRS) {
|
|
215
|
+
const linkPath = path.join(worktreePath, '.claude', dirName);
|
|
216
|
+
try {
|
|
217
|
+
if (await fs.pathExists(linkPath)) {
|
|
218
|
+
await fs.remove(linkPath);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
223
|
+
logger.warn(`Failed to remove junction ${linkPath}: ${msg}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// 3. Remove file hard links
|
|
227
|
+
for (const fileName of SHARED_FILES) {
|
|
228
|
+
const linkPath = path.join(worktreePath, '.claude', fileName);
|
|
229
|
+
try {
|
|
230
|
+
if (await fs.pathExists(linkPath)) {
|
|
231
|
+
await fs.remove(linkPath);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
236
|
+
logger.warn(`Failed to remove hard link ${linkPath}: ${msg}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// 4. Remove generated context file
|
|
240
|
+
try {
|
|
241
|
+
await fs.remove(path.join(worktreePath, '.claude', 'worktree_context.md'));
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// ignore
|
|
245
|
+
}
|
|
246
|
+
// 5. Remove fresh directories
|
|
247
|
+
for (const dirName of FRESH_DIRS) {
|
|
248
|
+
try {
|
|
249
|
+
await fs.remove(path.join(worktreePath, '.claude', dirName));
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// ignore
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// 6. Remove .claude directory itself
|
|
256
|
+
try {
|
|
257
|
+
await fs.remove(path.join(worktreePath, '.claude'));
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// ignore
|
|
261
|
+
}
|
|
262
|
+
// 7. Run git worktree remove
|
|
263
|
+
// Our cleanup modifies tracked content, so try force if non-force fails
|
|
264
|
+
try {
|
|
265
|
+
const forceFlag = force ? ' --force' : '';
|
|
266
|
+
const cmd = `git worktree remove${forceFlag} "${worktreePath}"`;
|
|
267
|
+
gitCommand(cmd, process.cwd());
|
|
268
|
+
// If non-force failed (worktree still exists), retry with --force
|
|
269
|
+
// since our cleanup steps always make the worktree dirty
|
|
270
|
+
if (!force && await fs.pathExists(worktreePath)) {
|
|
271
|
+
const forceCmd = `git worktree remove --force "${worktreePath}"`;
|
|
272
|
+
gitCommand(forceCmd, process.cwd());
|
|
273
|
+
}
|
|
274
|
+
// If still exists, zombie processes may hold file handles (common on Windows
|
|
275
|
+
// after crashed maestro sessions). Kill them and retry.
|
|
276
|
+
if (await fs.pathExists(worktreePath)) {
|
|
277
|
+
try {
|
|
278
|
+
const procs = findByCwd(worktreePath);
|
|
279
|
+
for (const proc of procs) {
|
|
280
|
+
killSingle(proc.pid);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Non-fatal -- same as current behavior
|
|
285
|
+
}
|
|
286
|
+
// Brief pause to let OS release handles after process death
|
|
287
|
+
await new Promise(r => setTimeout(r, 500));
|
|
288
|
+
gitCommand(`git worktree remove --force "${worktreePath}"`, process.cwd());
|
|
289
|
+
// If git worktree remove still fails, try direct fs removal
|
|
290
|
+
if (await fs.pathExists(worktreePath)) {
|
|
291
|
+
try {
|
|
292
|
+
await fs.remove(worktreePath);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// will be caught by final check below
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Final check
|
|
300
|
+
if (await fs.pathExists(worktreePath)) {
|
|
301
|
+
throw new Error(`Failed to remove worktree (processes may still hold handles): ${worktreePath}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
// Guard against git worktree remove --force corrupting core.bare
|
|
306
|
+
// Must target the main repo, not the worktree being removed
|
|
307
|
+
const mainRepoRoot = gitCommand('git rev-parse --show-toplevel', path.resolve(worktreePath, '..'));
|
|
308
|
+
if (mainRepoRoot) {
|
|
309
|
+
gitCommand('git config core.bare false', mainRepoRoot);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* List all git worktrees in the current repository.
|
|
315
|
+
*
|
|
316
|
+
* @returns Array of WorktreeInfo objects
|
|
317
|
+
*/
|
|
318
|
+
export async function listWorktrees() {
|
|
319
|
+
const output = gitCommand('git worktree list --porcelain', process.cwd());
|
|
320
|
+
if (!output) {
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
const worktrees = [];
|
|
324
|
+
const blocks = output.split('\n\n').filter(Boolean);
|
|
325
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
326
|
+
const block = blocks[i];
|
|
327
|
+
const lines = block.split('\n');
|
|
328
|
+
let wtPath = '';
|
|
329
|
+
let head = '';
|
|
330
|
+
let branch = null;
|
|
331
|
+
let locked = false;
|
|
332
|
+
let prunable = false;
|
|
333
|
+
for (const line of lines) {
|
|
334
|
+
if (line.startsWith('worktree ')) {
|
|
335
|
+
wtPath = line.substring('worktree '.length);
|
|
336
|
+
}
|
|
337
|
+
else if (line.startsWith('HEAD ')) {
|
|
338
|
+
head = line.substring('HEAD '.length);
|
|
339
|
+
}
|
|
340
|
+
else if (line.startsWith('branch ')) {
|
|
341
|
+
const ref = line.substring('branch '.length);
|
|
342
|
+
// Strip refs/heads/ prefix
|
|
343
|
+
branch = ref.startsWith('refs/heads/') ? ref.substring('refs/heads/'.length) : ref;
|
|
344
|
+
}
|
|
345
|
+
else if (line === 'detached') {
|
|
346
|
+
branch = null;
|
|
347
|
+
}
|
|
348
|
+
else if (line === 'locked' || line.startsWith('locked ')) {
|
|
349
|
+
locked = true;
|
|
350
|
+
}
|
|
351
|
+
else if (line === 'prunable' || line.startsWith('prunable ')) {
|
|
352
|
+
prunable = true;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (!wtPath)
|
|
356
|
+
continue;
|
|
357
|
+
const isMain = i === 0;
|
|
358
|
+
// Extract taskId from directory basename for worktrees under .claude/worktrees/
|
|
359
|
+
let taskId = null;
|
|
360
|
+
if (!isMain) {
|
|
361
|
+
const normalizedPath = wtPath.replace(/\\/g, '/');
|
|
362
|
+
if (normalizedPath.includes('.claude/worktrees/')) {
|
|
363
|
+
taskId = path.basename(wtPath);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
// Determine stale status
|
|
367
|
+
let stale = prunable;
|
|
368
|
+
if (!isMain && !stale) {
|
|
369
|
+
stale = !(await fs.pathExists(wtPath));
|
|
370
|
+
}
|
|
371
|
+
worktrees.push({
|
|
372
|
+
path: wtPath,
|
|
373
|
+
head,
|
|
374
|
+
branch,
|
|
375
|
+
isMain,
|
|
376
|
+
taskId,
|
|
377
|
+
locked,
|
|
378
|
+
stale,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
return worktrees;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Check if the current directory is inside a linked git worktree.
|
|
385
|
+
* Re-export of isWorktree from detect-git.ts for convenience.
|
|
386
|
+
*/
|
|
387
|
+
export const isInsideWorktree = isWorktree;
|
|
388
|
+
/**
|
|
389
|
+
* Get the main worktree (repo root) path from inside a linked worktree.
|
|
390
|
+
* Returns null if .git is a directory (main worktree), missing, or has unexpected format.
|
|
391
|
+
*/
|
|
392
|
+
export async function getMainWorktreePath() {
|
|
393
|
+
try {
|
|
394
|
+
const stat = await fs.stat('.git');
|
|
395
|
+
if (!stat.isFile()) {
|
|
396
|
+
return null; // .git is a directory -- this IS the main worktree
|
|
397
|
+
}
|
|
398
|
+
const content = await fs.readFile('.git', 'utf-8');
|
|
399
|
+
const match = content.trim().match(/^gitdir:\s+(.+)$/);
|
|
400
|
+
if (!match) {
|
|
401
|
+
return null; // Unexpected format
|
|
402
|
+
}
|
|
403
|
+
const gitdir = path.resolve(match[1]);
|
|
404
|
+
// gitdir = /path/to/main/.git/worktrees/<name>
|
|
405
|
+
const dotGitDir = path.dirname(path.dirname(gitdir)); // .git dir
|
|
406
|
+
const repoRoot = path.dirname(dotGitDir); // repo root
|
|
407
|
+
if (path.basename(dotGitDir) !== '.git') {
|
|
408
|
+
logger.warn('Unexpected gitdir format: ' + gitdir);
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
return repoRoot;
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Prune stale worktree entries from git's tracking.
|
|
419
|
+
*
|
|
420
|
+
* @returns Array of pruned entry descriptions from git output
|
|
421
|
+
*/
|
|
422
|
+
export async function pruneWorktrees() {
|
|
423
|
+
const output = gitCommand('git worktree prune --verbose', process.cwd());
|
|
424
|
+
if (!output) {
|
|
425
|
+
return [];
|
|
426
|
+
}
|
|
427
|
+
// Parse verbose output lines like "Removing worktrees/abc123: gitdir file points to non-existing location"
|
|
428
|
+
const pruned = [];
|
|
429
|
+
const lines = output.split('\n');
|
|
430
|
+
for (const line of lines) {
|
|
431
|
+
if (line.startsWith('Removing ')) {
|
|
432
|
+
pruned.push(line);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return pruned;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Detect worktrees whose paths no longer exist on disk.
|
|
439
|
+
*
|
|
440
|
+
* @returns Array of stale WorktreeInfo objects
|
|
441
|
+
*/
|
|
442
|
+
export async function detectStaleWorktrees() {
|
|
443
|
+
const worktrees = await listWorktrees();
|
|
444
|
+
return worktrees.filter(wt => wt.stale);
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/utils/worktree.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bhimudev/gnanai",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Multi-agent AI development workflow setup for any project",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude",
|
|
7
|
+
"ai",
|
|
8
|
+
"agents",
|
|
9
|
+
"development",
|
|
10
|
+
"workflow",
|
|
11
|
+
"automation",
|
|
12
|
+
"claude-code"
|
|
13
|
+
],
|
|
14
|
+
"author": "",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": ""
|
|
19
|
+
},
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"type": "module",
|
|
24
|
+
"bin": {
|
|
25
|
+
"gnanai": "dist/bin/cli.js",
|
|
26
|
+
"archai": "dist/bin/cli.js"
|
|
27
|
+
},
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"templates"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"dev": "tsc --watch",
|
|
37
|
+
"start": "node dist/bin/cli.js",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"test:run": "vitest run",
|
|
40
|
+
"test:unit": "vitest run tests/unit tests/integration",
|
|
41
|
+
"test:scenarios": "vitest run tests/scenarios",
|
|
42
|
+
"test:watch": "vitest --watch",
|
|
43
|
+
"test:coverage": "vitest run --coverage",
|
|
44
|
+
"test:ui": "vitest --ui",
|
|
45
|
+
"lint": "eslint src --ext .ts",
|
|
46
|
+
"prepare": "git config core.hooksPath .githooks",
|
|
47
|
+
"prepublishOnly": "npm run build"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@huggingface/transformers": "^3.8.1",
|
|
51
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
52
|
+
"better-sqlite3": "^12.6.2",
|
|
53
|
+
"chalk": "^5.3.0",
|
|
54
|
+
"commander": "^12.1.0",
|
|
55
|
+
"fs-extra": "^11.2.0",
|
|
56
|
+
"inquirer": "^9.2.15",
|
|
57
|
+
"minisearch": "^7.2.0",
|
|
58
|
+
"ora": "^8.0.1",
|
|
59
|
+
"yaml": "^2.4.1"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
63
|
+
"@types/fs-extra": "^11.0.4",
|
|
64
|
+
"@types/inquirer": "^9.0.9",
|
|
65
|
+
"@types/node": "^20.11.0",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
67
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
68
|
+
"@vitest/coverage-v8": "^1.2.0",
|
|
69
|
+
"@vitest/ui": "^1.2.0",
|
|
70
|
+
"eslint": "^8.56.0",
|
|
71
|
+
"typescript": "^5.3.3",
|
|
72
|
+
"vitest": "^1.2.0"
|
|
73
|
+
},
|
|
74
|
+
"engines": {
|
|
75
|
+
"node": ">=18.0.0"
|
|
76
|
+
}
|
|
77
|
+
}
|