@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,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure `.claude/worktrees/` is in `.gitignore`.
|
|
3
|
+
* Independent of the scaffold `updateGitignore()` guard clause.
|
|
4
|
+
* Called by `worktreeCreate` after successful worktree creation.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ensureWorktreeGitignore(): Promise<void>;
|
|
7
|
+
interface WorktreeCreateOptions {
|
|
8
|
+
task: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* CLI action handler for `archai worktree create`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function worktreeCreate(options: WorktreeCreateOptions): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* CLI action handler for `archai worktree list`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function worktreeList(): Promise<void>;
|
|
19
|
+
interface WorktreeCleanupOptions {
|
|
20
|
+
task?: string;
|
|
21
|
+
all?: boolean;
|
|
22
|
+
dryRun?: boolean;
|
|
23
|
+
yes?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* CLI action handler for `archai worktree cleanup`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function worktreeCleanup(options: WorktreeCleanupOptions): Promise<void>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/commands/worktree.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B7D;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ClF;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDlD;AAED,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HpF"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { createWorktree, listWorktrees, removeWorktree, pruneWorktrees, isInsideWorktree, } from '../utils/worktree.js';
|
|
8
|
+
/**
|
|
9
|
+
* Ensure `.claude/worktrees/` is in `.gitignore`.
|
|
10
|
+
* Independent of the scaffold `updateGitignore()` guard clause.
|
|
11
|
+
* Called by `worktreeCreate` after successful worktree creation.
|
|
12
|
+
*/
|
|
13
|
+
export async function ensureWorktreeGitignore() {
|
|
14
|
+
const gitignorePath = '.gitignore';
|
|
15
|
+
const entry = '.claude/worktrees/';
|
|
16
|
+
let content = '';
|
|
17
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
18
|
+
content = await fs.readFile(gitignorePath, 'utf-8');
|
|
19
|
+
if (content.includes(entry)) {
|
|
20
|
+
return; // Already present
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
let addition;
|
|
24
|
+
if (content.includes('# archai')) {
|
|
25
|
+
// Existing archai section; append entry at end
|
|
26
|
+
addition = '\n' + entry + '\n';
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// No archai section; add with header comment
|
|
30
|
+
addition = '\n# archai - Worktree directories\n' + entry + '\n';
|
|
31
|
+
}
|
|
32
|
+
// Ensure content ends with newline before appending
|
|
33
|
+
if (content && !content.endsWith('\n')) {
|
|
34
|
+
content += '\n';
|
|
35
|
+
}
|
|
36
|
+
await fs.writeFile(gitignorePath, content + addition);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* CLI action handler for `archai worktree create`.
|
|
40
|
+
*/
|
|
41
|
+
export async function worktreeCreate(options) {
|
|
42
|
+
logger.banner();
|
|
43
|
+
// Check if already inside a worktree
|
|
44
|
+
const inWorktree = await isInsideWorktree();
|
|
45
|
+
if (inWorktree) {
|
|
46
|
+
logger.error('Cannot create a worktree from inside a linked worktree.');
|
|
47
|
+
logger.info('Switch to the main repository first.');
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
logger.info(`Creating worktree for task: ${chalk.cyan(options.task)}`);
|
|
52
|
+
const spinner = ora('Creating worktree...').start();
|
|
53
|
+
try {
|
|
54
|
+
const info = await createWorktree(options.task, options.description || '');
|
|
55
|
+
spinner.succeed('Worktree created');
|
|
56
|
+
// Ensure gitignore entry
|
|
57
|
+
await ensureWorktreeGitignore();
|
|
58
|
+
// Print result details
|
|
59
|
+
console.log('');
|
|
60
|
+
console.log(` ${chalk.gray('Path:')} ${info.path}`);
|
|
61
|
+
console.log(` ${chalk.gray('Branch:')} ${info.branch}`);
|
|
62
|
+
console.log(` ${chalk.gray('Task ID:')} ${info.taskId}`);
|
|
63
|
+
console.log(` ${chalk.gray('HEAD:')} ${info.head.substring(0, 8)}`);
|
|
64
|
+
console.log('');
|
|
65
|
+
logger.info(`To work in this worktree: ${chalk.cyan(`cd ${info.path}`)}`);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
spinner.fail('Failed to create worktree');
|
|
69
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
70
|
+
logger.error(message);
|
|
71
|
+
// Contextual hints for common errors
|
|
72
|
+
if (message.includes('Not inside a git repository')) {
|
|
73
|
+
logger.info('Run this command from inside a git repository.');
|
|
74
|
+
}
|
|
75
|
+
else if (message.includes('Worktree already exists')) {
|
|
76
|
+
logger.info(`Use ${chalk.cyan('archai worktree cleanup --task ' + options.task)} to remove it first.`);
|
|
77
|
+
}
|
|
78
|
+
else if (message.includes('Branch already exists')) {
|
|
79
|
+
logger.info('Delete the branch or use a different task ID.');
|
|
80
|
+
}
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* CLI action handler for `archai worktree list`.
|
|
86
|
+
*/
|
|
87
|
+
export async function worktreeList() {
|
|
88
|
+
logger.banner();
|
|
89
|
+
const spinner = ora('Listing worktrees...').start();
|
|
90
|
+
try {
|
|
91
|
+
const worktrees = await listWorktrees();
|
|
92
|
+
spinner.stop(); // Don't "succeed" -- just stop to show table cleanly
|
|
93
|
+
if (worktrees.length === 0) {
|
|
94
|
+
logger.info('No worktrees found. Are you inside a git repository?');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const main = worktrees.find(w => w.isMain);
|
|
98
|
+
const linked = worktrees.filter(w => !w.isMain);
|
|
99
|
+
// Print main worktree section
|
|
100
|
+
console.log('');
|
|
101
|
+
logger.section('Main Worktree');
|
|
102
|
+
console.log('');
|
|
103
|
+
if (main) {
|
|
104
|
+
console.log(` ${chalk.gray('Path:')} ${path.resolve(main.path)}`);
|
|
105
|
+
console.log(` ${chalk.gray('Branch:')} ${main.branch || chalk.gray('(detached)')}`);
|
|
106
|
+
console.log(` ${chalk.gray('HEAD:')} ${main.head.substring(0, 8)}`);
|
|
107
|
+
}
|
|
108
|
+
console.log('');
|
|
109
|
+
if (linked.length === 0) {
|
|
110
|
+
logger.info('No linked worktrees.');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
logger.section(`Linked Worktrees (${linked.length})`);
|
|
114
|
+
console.log('');
|
|
115
|
+
for (const wt of linked) {
|
|
116
|
+
// Determine status
|
|
117
|
+
let status;
|
|
118
|
+
if (wt.stale) {
|
|
119
|
+
status = chalk.red('stale');
|
|
120
|
+
}
|
|
121
|
+
else if (wt.locked) {
|
|
122
|
+
status = chalk.yellow('locked');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
status = chalk.green('active');
|
|
126
|
+
}
|
|
127
|
+
const displayPath = path.resolve(wt.path);
|
|
128
|
+
console.log(` ${chalk.cyan(wt.taskId || '???')} ${wt.branch || chalk.gray('(detached)')} ${status} ${chalk.gray(displayPath)}`);
|
|
129
|
+
}
|
|
130
|
+
console.log('');
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
spinner.fail('Failed to list worktrees');
|
|
134
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
135
|
+
process.exitCode = 1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* CLI action handler for `archai worktree cleanup`.
|
|
140
|
+
*/
|
|
141
|
+
export async function worktreeCleanup(options) {
|
|
142
|
+
logger.banner();
|
|
143
|
+
if (options.task) {
|
|
144
|
+
// Specific task removal
|
|
145
|
+
logger.info(`Looking up worktree for task: ${chalk.cyan(options.task)}`);
|
|
146
|
+
const worktrees = await listWorktrees();
|
|
147
|
+
const target = worktrees.find(w => w.taskId === options.task && !w.isMain);
|
|
148
|
+
if (!target) {
|
|
149
|
+
logger.error(`No worktree found for task "${options.task}".`);
|
|
150
|
+
logger.info(`Run ${chalk.cyan('archai worktree list')} to see available worktrees.`);
|
|
151
|
+
process.exitCode = 1;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
console.log('');
|
|
155
|
+
console.log(` ${chalk.gray('Path:')} ${target.path}`);
|
|
156
|
+
console.log(` ${chalk.gray('Branch:')} ${target.branch || '(detached)'}`);
|
|
157
|
+
console.log('');
|
|
158
|
+
if (options.dryRun) {
|
|
159
|
+
logger.info(chalk.yellow(`Would remove worktree: ${target.path}`));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (!options.yes) {
|
|
163
|
+
const { confirm } = await inquirer.prompt([{
|
|
164
|
+
type: 'confirm',
|
|
165
|
+
name: 'confirm',
|
|
166
|
+
message: `Remove worktree for task "${options.task}"?`,
|
|
167
|
+
default: false,
|
|
168
|
+
}]);
|
|
169
|
+
if (!confirm) {
|
|
170
|
+
logger.info('Cleanup cancelled.');
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const spinner = ora('Removing worktree...').start();
|
|
175
|
+
try {
|
|
176
|
+
await removeWorktree(target.path);
|
|
177
|
+
spinner.succeed(`Removed worktree: ${target.path}`);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
spinner.fail('Failed to remove worktree');
|
|
181
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
182
|
+
process.exitCode = 1;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else if (options.all) {
|
|
186
|
+
// Remove all linked worktrees
|
|
187
|
+
const worktrees = await listWorktrees();
|
|
188
|
+
const linked = worktrees.filter(w => !w.isMain);
|
|
189
|
+
if (linked.length === 0) {
|
|
190
|
+
logger.info('No linked worktrees to remove.');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
console.log('');
|
|
194
|
+
logger.section(`Worktrees to Remove (${linked.length})`);
|
|
195
|
+
console.log('');
|
|
196
|
+
for (const wt of linked) {
|
|
197
|
+
console.log(` ${chalk.yellow(wt.taskId || '???')} ${wt.branch || '(detached)'} ${chalk.gray(wt.path)}`);
|
|
198
|
+
}
|
|
199
|
+
console.log('');
|
|
200
|
+
if (options.dryRun) {
|
|
201
|
+
logger.info(chalk.yellow(`Would remove ${linked.length} worktree(s).`));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (!options.yes) {
|
|
205
|
+
const { confirm } = await inquirer.prompt([{
|
|
206
|
+
type: 'confirm',
|
|
207
|
+
name: 'confirm',
|
|
208
|
+
message: `Remove all ${linked.length} linked worktree(s)? This cannot be undone.`,
|
|
209
|
+
default: false,
|
|
210
|
+
}]);
|
|
211
|
+
if (!confirm) {
|
|
212
|
+
logger.info('Cleanup cancelled.');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
let removed = 0;
|
|
217
|
+
let failed = 0;
|
|
218
|
+
for (const wt of linked) {
|
|
219
|
+
const spinner = ora(`Removing ${wt.taskId || wt.path}...`).start();
|
|
220
|
+
try {
|
|
221
|
+
await removeWorktree(wt.path);
|
|
222
|
+
spinner.succeed(`Removed: ${wt.taskId || wt.path}`);
|
|
223
|
+
removed++;
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
spinner.fail(`Failed: ${wt.taskId || wt.path}`);
|
|
227
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
228
|
+
failed++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
console.log('');
|
|
232
|
+
if (failed > 0) {
|
|
233
|
+
logger.warn(`Removed ${removed}, failed ${failed} worktree(s).`);
|
|
234
|
+
process.exitCode = 1;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
logger.success(`Removed ${removed} worktree(s).`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// No args -- prune stale worktrees only
|
|
242
|
+
const spinner = ora('Pruning stale worktrees...').start();
|
|
243
|
+
try {
|
|
244
|
+
const pruned = await pruneWorktrees();
|
|
245
|
+
if (pruned.length > 0) {
|
|
246
|
+
spinner.succeed(`Pruned ${pruned.length} stale worktree(s)`);
|
|
247
|
+
for (const entry of pruned) {
|
|
248
|
+
console.log(` ${chalk.gray(entry)}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
spinner.succeed('No stale worktrees to prune');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
spinner.fail('Failed to prune worktrees');
|
|
257
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
258
|
+
process.exitCode = 1;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/commands/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ClaudeCliInfo } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run Claude Code CLI with a prompt and return the output.
|
|
4
|
+
* Uses the -p flag for non-interactive mode.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runClaudeCli(prompt: string): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Run Claude CLI with a prompt file (alternative approach).
|
|
9
|
+
* Useful when the prompt is very long.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runClaudeCliWithFile(promptFile: string): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Check if Claude Code CLI is installed and authenticated.
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkClaudeCliAvailable(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Get Claude Code CLI version.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getClaudeVersion(): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Get comprehensive Claude CLI information including version compatibility.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getClaudeCliInfo(): ClaudeCliInfo;
|
|
24
|
+
//# sourceMappingURL=claude-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../src/generator/claude-cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDlE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B9E;AAqED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAkBjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAkBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAwBhD"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
// Minimum supported Claude CLI version
|
|
7
|
+
const MIN_VERSION = '1.0.0';
|
|
8
|
+
/**
|
|
9
|
+
* Run Claude Code CLI with a prompt and return the output.
|
|
10
|
+
* Uses the -p flag for non-interactive mode.
|
|
11
|
+
*/
|
|
12
|
+
export async function runClaudeCli(prompt) {
|
|
13
|
+
// Check if Claude CLI is available
|
|
14
|
+
if (!checkClaudeCliAvailable()) {
|
|
15
|
+
throw new Error('Claude Code CLI not found. Please install it from https://claude.ai/code and authenticate.');
|
|
16
|
+
}
|
|
17
|
+
// Write prompt to a temporary file to avoid shell escaping issues
|
|
18
|
+
const tempDir = os.tmpdir();
|
|
19
|
+
const promptFile = path.join(tempDir, `archai-prompt-${Date.now()}.txt`);
|
|
20
|
+
try {
|
|
21
|
+
await fs.writeFile(promptFile, prompt);
|
|
22
|
+
// Run Claude with -p flag for non-interactive prompt mode
|
|
23
|
+
// Read prompt from file to avoid escaping issues
|
|
24
|
+
const promptContent = await fs.readFile(promptFile, 'utf-8');
|
|
25
|
+
const result = spawnSync('claude', [
|
|
26
|
+
'-p', promptContent,
|
|
27
|
+
'--output-format', 'text'
|
|
28
|
+
], {
|
|
29
|
+
encoding: 'utf-8',
|
|
30
|
+
maxBuffer: 1024 * 1024 * 50, // 50MB buffer for large outputs
|
|
31
|
+
timeout: 300000, // 5 minute timeout for complex generation
|
|
32
|
+
windowsHide: true,
|
|
33
|
+
});
|
|
34
|
+
if (result.error) {
|
|
35
|
+
throw new Error(`Claude CLI error: ${result.error.message}`);
|
|
36
|
+
}
|
|
37
|
+
if (result.status !== 0) {
|
|
38
|
+
const errorMsg = result.stderr || 'Unknown error';
|
|
39
|
+
throw new Error(`Claude CLI exited with code ${result.status}: ${errorMsg}`);
|
|
40
|
+
}
|
|
41
|
+
const output = result.stdout || '';
|
|
42
|
+
if (!output.trim()) {
|
|
43
|
+
throw new Error('Claude CLI returned empty output');
|
|
44
|
+
}
|
|
45
|
+
return extractAgentDefinition(output);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
// Clean up temp file
|
|
49
|
+
await fs.remove(promptFile).catch((error) => {
|
|
50
|
+
logger.debug('Failed to clean up temp prompt file', {
|
|
51
|
+
file: promptFile,
|
|
52
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run Claude CLI with a prompt file (alternative approach).
|
|
59
|
+
* Useful when the prompt is very long.
|
|
60
|
+
*/
|
|
61
|
+
export async function runClaudeCliWithFile(promptFile) {
|
|
62
|
+
if (!checkClaudeCliAvailable()) {
|
|
63
|
+
throw new Error('Claude Code CLI not found. Please install it from https://claude.ai/code and authenticate.');
|
|
64
|
+
}
|
|
65
|
+
const prompt = await fs.readFile(promptFile, 'utf-8');
|
|
66
|
+
const result = spawnSync('claude', [
|
|
67
|
+
'-p', prompt,
|
|
68
|
+
'--output-format', 'text'
|
|
69
|
+
], {
|
|
70
|
+
encoding: 'utf-8',
|
|
71
|
+
maxBuffer: 1024 * 1024 * 50,
|
|
72
|
+
timeout: 300000,
|
|
73
|
+
windowsHide: true,
|
|
74
|
+
});
|
|
75
|
+
if (result.error) {
|
|
76
|
+
throw new Error(`Claude CLI error: ${result.error.message}`);
|
|
77
|
+
}
|
|
78
|
+
if (result.status !== 0) {
|
|
79
|
+
throw new Error(`Claude CLI exited with code ${result.status}: ${result.stderr}`);
|
|
80
|
+
}
|
|
81
|
+
return extractAgentDefinition(result.stdout || '');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract the agent definition markdown from Claude's response.
|
|
85
|
+
* Claude might include explanation text before/after the actual definition.
|
|
86
|
+
*
|
|
87
|
+
* Agent definitions have this format:
|
|
88
|
+
* ---
|
|
89
|
+
* name: xxx
|
|
90
|
+
* description: xxx
|
|
91
|
+
* tools: xxx
|
|
92
|
+
* model: xxx
|
|
93
|
+
* ---
|
|
94
|
+
*
|
|
95
|
+
* Content here...
|
|
96
|
+
*/
|
|
97
|
+
function extractAgentDefinition(response) {
|
|
98
|
+
// Look for the markdown code block containing the agent definition
|
|
99
|
+
const codeBlockMatch = response.match(/```markdown\n([\s\S]*?)```/);
|
|
100
|
+
if (codeBlockMatch) {
|
|
101
|
+
return codeBlockMatch[1].trim();
|
|
102
|
+
}
|
|
103
|
+
// Try with just ``` (no language specified)
|
|
104
|
+
const genericBlockMatch = response.match(/```\n(---\nname:[\s\S]*?)```/);
|
|
105
|
+
if (genericBlockMatch) {
|
|
106
|
+
return genericBlockMatch[1].trim();
|
|
107
|
+
}
|
|
108
|
+
// Look for frontmatter pattern: starts with ---, has name:, and includes closing ---
|
|
109
|
+
// Then capture everything after the closing --- too (the actual content)
|
|
110
|
+
const fullDefinitionMatch = response.match(/---\nname:[^\n]*\n[\s\S]*?---\n([\s\S]*)/);
|
|
111
|
+
if (fullDefinitionMatch) {
|
|
112
|
+
// Reconstruct the full definition by finding where it starts
|
|
113
|
+
const startIdx = response.indexOf('---\nname:');
|
|
114
|
+
if (startIdx !== -1) {
|
|
115
|
+
// Take from the start of frontmatter to the end
|
|
116
|
+
let definition = response.slice(startIdx);
|
|
117
|
+
// If there's trailing explanation text, try to remove it
|
|
118
|
+
// Look for common ending patterns like "This specialist..." or "I've created..."
|
|
119
|
+
const trailingMatch = definition.match(/\n\n(?:This specialist|I've created|I hope|Let me know|Feel free|---\n\n)/);
|
|
120
|
+
if (trailingMatch && trailingMatch.index) {
|
|
121
|
+
definition = definition.slice(0, trailingMatch.index);
|
|
122
|
+
}
|
|
123
|
+
return definition.trim();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Simpler approach: find ---\nname: and take everything after it
|
|
127
|
+
const simpleMatch = response.match(/---\nname:[\s\S]*/);
|
|
128
|
+
if (simpleMatch) {
|
|
129
|
+
let definition = simpleMatch[0];
|
|
130
|
+
// Remove trailing explanation text
|
|
131
|
+
const trailingMatch = definition.match(/\n\n(?:This specialist|I've created|I hope|Let me know|Feel free)/);
|
|
132
|
+
if (trailingMatch && trailingMatch.index) {
|
|
133
|
+
definition = definition.slice(0, trailingMatch.index);
|
|
134
|
+
}
|
|
135
|
+
return definition.trim();
|
|
136
|
+
}
|
|
137
|
+
// If nothing found, return the whole response
|
|
138
|
+
// (Claude might have just output the definition directly)
|
|
139
|
+
return response.trim();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if Claude Code CLI is installed and authenticated.
|
|
143
|
+
*/
|
|
144
|
+
export function checkClaudeCliAvailable() {
|
|
145
|
+
try {
|
|
146
|
+
const result = spawnSync('claude', ['--version'], {
|
|
147
|
+
encoding: 'utf-8',
|
|
148
|
+
timeout: 5000,
|
|
149
|
+
windowsHide: true,
|
|
150
|
+
});
|
|
151
|
+
logger.debug('Claude CLI check', {
|
|
152
|
+
status: result.status,
|
|
153
|
+
stdout: result.stdout?.trim()
|
|
154
|
+
});
|
|
155
|
+
return result.status === 0;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
logger.debug('Claude CLI not available', {
|
|
159
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
160
|
+
});
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get Claude Code CLI version.
|
|
166
|
+
*/
|
|
167
|
+
export function getClaudeVersion() {
|
|
168
|
+
try {
|
|
169
|
+
const result = spawnSync('claude', ['--version'], {
|
|
170
|
+
encoding: 'utf-8',
|
|
171
|
+
timeout: 5000,
|
|
172
|
+
windowsHide: true,
|
|
173
|
+
});
|
|
174
|
+
if (result.status === 0) {
|
|
175
|
+
return result.stdout.trim();
|
|
176
|
+
}
|
|
177
|
+
logger.debug('Claude CLI version check failed', { status: result.status });
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
logger.debug('Failed to get Claude CLI version', {
|
|
182
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
183
|
+
});
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get comprehensive Claude CLI information including version compatibility.
|
|
189
|
+
*/
|
|
190
|
+
export function getClaudeCliInfo() {
|
|
191
|
+
try {
|
|
192
|
+
const result = spawnSync('claude', ['--version'], {
|
|
193
|
+
encoding: 'utf-8',
|
|
194
|
+
timeout: 5000,
|
|
195
|
+
windowsHide: true,
|
|
196
|
+
});
|
|
197
|
+
if (result.status !== 0) {
|
|
198
|
+
return { available: false, version: null, compatible: false };
|
|
199
|
+
}
|
|
200
|
+
const version = result.stdout.trim();
|
|
201
|
+
const compatible = compareVersions(version, MIN_VERSION) >= 0;
|
|
202
|
+
logger.debug('Claude CLI info', { version, compatible, minVersion: MIN_VERSION });
|
|
203
|
+
return { available: true, version, compatible };
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
logger.debug('Failed to get Claude CLI info', {
|
|
207
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
208
|
+
});
|
|
209
|
+
return { available: false, version: null, compatible: false };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Compare two semver version strings.
|
|
214
|
+
* Returns: positive if a > b, negative if a < b, 0 if equal.
|
|
215
|
+
*/
|
|
216
|
+
function compareVersions(a, b) {
|
|
217
|
+
// Extract version numbers (handle formats like "1.0.0" or "claude version 1.0.0")
|
|
218
|
+
const extractVersion = (v) => {
|
|
219
|
+
const match = v.match(/(\d+)\.(\d+)\.(\d+)/);
|
|
220
|
+
if (match) {
|
|
221
|
+
return [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10)];
|
|
222
|
+
}
|
|
223
|
+
// If no semver found, try to extract just numbers
|
|
224
|
+
const nums = v.match(/\d+/g);
|
|
225
|
+
if (nums) {
|
|
226
|
+
return nums.slice(0, 3).map(n => parseInt(n, 10));
|
|
227
|
+
}
|
|
228
|
+
return [0, 0, 0];
|
|
229
|
+
};
|
|
230
|
+
const partsA = extractVersion(a);
|
|
231
|
+
const partsB = extractVersion(b);
|
|
232
|
+
for (let i = 0; i < 3; i++) {
|
|
233
|
+
const diff = (partsA[i] || 0) - (partsB[i] || 0);
|
|
234
|
+
if (diff !== 0)
|
|
235
|
+
return diff;
|
|
236
|
+
}
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=claude-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/generator/claude-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Specialist, Config } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clear the cached project description (useful for testing).
|
|
4
|
+
*/
|
|
5
|
+
export declare function clearPromptCache(): void;
|
|
6
|
+
export declare function buildGenerationPrompt(config: Config, specialist?: Specialist, projectDescription?: string): Promise<string>;
|
|
7
|
+
//# sourceMappingURL=prompt-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/generator/prompt-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM5D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,EACvB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
|