archicore 0.1.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 +530 -0
- package/dist/analyzers/dead-code.d.ts +95 -0
- package/dist/analyzers/dead-code.js +327 -0
- package/dist/analyzers/duplication.d.ts +90 -0
- package/dist/analyzers/duplication.js +344 -0
- package/dist/analyzers/security.d.ts +79 -0
- package/dist/analyzers/security.js +484 -0
- package/dist/architecture/index.d.ts +35 -0
- package/dist/architecture/index.js +249 -0
- package/dist/cli/commands/analyzers.d.ts +6 -0
- package/dist/cli/commands/analyzers.js +431 -0
- package/dist/cli/commands/export.d.ts +6 -0
- package/dist/cli/commands/export.js +78 -0
- package/dist/cli/commands/index.d.ts +8 -0
- package/dist/cli/commands/index.js +8 -0
- package/dist/cli/commands/init.d.ts +26 -0
- package/dist/cli/commands/init.js +140 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.js +522 -0
- package/dist/cli/commands/projects.d.ts +6 -0
- package/dist/cli/commands/projects.js +249 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/ui/box.d.ts +17 -0
- package/dist/cli/ui/box.js +62 -0
- package/dist/cli/ui/colors.d.ts +49 -0
- package/dist/cli/ui/colors.js +86 -0
- package/dist/cli/ui/index.d.ts +9 -0
- package/dist/cli/ui/index.js +9 -0
- package/dist/cli/ui/prompt.d.ts +34 -0
- package/dist/cli/ui/prompt.js +122 -0
- package/dist/cli/ui/spinner.d.ts +29 -0
- package/dist/cli/ui/spinner.js +80 -0
- package/dist/cli/ui/table.d.ts +33 -0
- package/dist/cli/ui/table.js +84 -0
- package/dist/cli/utils/config.d.ts +23 -0
- package/dist/cli/utils/config.js +73 -0
- package/dist/cli/utils/index.d.ts +6 -0
- package/dist/cli/utils/index.js +6 -0
- package/dist/cli/utils/session.d.ts +27 -0
- package/dist/cli/utils/session.js +117 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +295 -0
- package/dist/code-index/ast-parser.d.ts +16 -0
- package/dist/code-index/ast-parser.js +330 -0
- package/dist/code-index/dependency-graph.d.ts +16 -0
- package/dist/code-index/dependency-graph.js +161 -0
- package/dist/code-index/index.d.ts +44 -0
- package/dist/code-index/index.js +124 -0
- package/dist/code-index/symbol-extractor.d.ts +13 -0
- package/dist/code-index/symbol-extractor.js +150 -0
- package/dist/export/index.d.ts +92 -0
- package/dist/export/index.js +676 -0
- package/dist/github/github-service.d.ts +146 -0
- package/dist/github/github-service.js +609 -0
- package/dist/impact-engine/index.d.ts +25 -0
- package/dist/impact-engine/index.js +284 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.js +149 -0
- package/dist/metrics/index.d.ts +136 -0
- package/dist/metrics/index.js +525 -0
- package/dist/orchestrator/deepseek-optimizer.d.ts +67 -0
- package/dist/orchestrator/deepseek-optimizer.js +320 -0
- package/dist/orchestrator/index.d.ts +34 -0
- package/dist/orchestrator/index.js +305 -0
- package/dist/pr-guardian/index.d.ts +143 -0
- package/dist/pr-guardian/index.js +553 -0
- package/dist/refactoring/index.d.ts +108 -0
- package/dist/refactoring/index.js +580 -0
- package/dist/rules-engine/index.d.ts +129 -0
- package/dist/rules-engine/index.js +482 -0
- package/dist/semantic-memory/embedding-service.d.ts +24 -0
- package/dist/semantic-memory/embedding-service.js +120 -0
- package/dist/semantic-memory/index.d.ts +45 -0
- package/dist/semantic-memory/index.js +206 -0
- package/dist/semantic-memory/vector-store.d.ts +27 -0
- package/dist/semantic-memory/vector-store.js +166 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.js +141 -0
- package/dist/server/middleware/api-auth.d.ts +43 -0
- package/dist/server/middleware/api-auth.js +256 -0
- package/dist/server/routes/admin.d.ts +5 -0
- package/dist/server/routes/admin.js +123 -0
- package/dist/server/routes/api.d.ts +7 -0
- package/dist/server/routes/api.js +362 -0
- package/dist/server/routes/auth.d.ts +16 -0
- package/dist/server/routes/auth.js +191 -0
- package/dist/server/routes/developer.d.ts +8 -0
- package/dist/server/routes/developer.js +439 -0
- package/dist/server/routes/github.d.ts +7 -0
- package/dist/server/routes/github.js +495 -0
- package/dist/server/routes/upload.d.ts +7 -0
- package/dist/server/routes/upload.js +196 -0
- package/dist/server/services/api-key-service.d.ts +81 -0
- package/dist/server/services/api-key-service.js +281 -0
- package/dist/server/services/auth-service.d.ts +40 -0
- package/dist/server/services/auth-service.js +315 -0
- package/dist/server/services/project-service.d.ts +123 -0
- package/dist/server/services/project-service.js +533 -0
- package/dist/server/services/token-service.d.ts +107 -0
- package/dist/server/services/token-service.js +416 -0
- package/dist/server/services/upload-service.d.ts +93 -0
- package/dist/server/services/upload-service.js +464 -0
- package/dist/types/api.d.ts +188 -0
- package/dist/types/api.js +86 -0
- package/dist/types/github.d.ts +335 -0
- package/dist/types/github.js +5 -0
- package/dist/types/index.d.ts +265 -0
- package/dist/types/index.js +32 -0
- package/dist/types/user.d.ts +69 -0
- package/dist/types/user.js +42 -0
- package/dist/utils/file-utils.d.ts +20 -0
- package/dist/utils/file-utils.js +163 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.js +41 -0
- package/dist/watcher/index.d.ts +125 -0
- package/dist/watcher/index.js +397 -0
- package/package.json +71 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArchiCore CLI - Export Command
|
|
3
|
+
*/
|
|
4
|
+
import { writeFile } from 'fs/promises';
|
|
5
|
+
import { loadConfig } from '../utils/config.js';
|
|
6
|
+
import { createSpinner, printError, printKeyValue, } from '../ui/index.js';
|
|
7
|
+
export function registerExportCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('export')
|
|
10
|
+
.description('Export project data')
|
|
11
|
+
.option('-p, --project <id>', 'Project ID')
|
|
12
|
+
.option('-f, --format <format>', 'Output format (json|html|markdown|csv|graphml)', 'json')
|
|
13
|
+
.option('-o, --output <file>', 'Output file path')
|
|
14
|
+
.option('--include <types>', 'Include specific data (architecture,graph,metrics,analysis)', 'all')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
const spinner = createSpinner(`Exporting as ${options.format}...`).start();
|
|
17
|
+
try {
|
|
18
|
+
const config = await loadConfig();
|
|
19
|
+
const projectId = options.project || config.activeProjectId;
|
|
20
|
+
if (!projectId) {
|
|
21
|
+
spinner.fail('No project selected');
|
|
22
|
+
printError('Use "archicore projects select <id>" first.');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
// Determine what to include
|
|
26
|
+
const include = options.include === 'all'
|
|
27
|
+
? ['architecture', 'graph', 'metrics', 'analysis']
|
|
28
|
+
: options.include.split(',').map((s) => s.trim());
|
|
29
|
+
const response = await fetch(`${config.serverUrl}/api/projects/${projectId}/export`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: { 'Content-Type': 'application/json' },
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
format: options.format,
|
|
34
|
+
include,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const error = await response.json();
|
|
39
|
+
throw new Error(error.error || 'Failed to export');
|
|
40
|
+
}
|
|
41
|
+
const data = await response.json();
|
|
42
|
+
// Determine output file
|
|
43
|
+
const extMap = {
|
|
44
|
+
json: 'json',
|
|
45
|
+
html: 'html',
|
|
46
|
+
markdown: 'md',
|
|
47
|
+
csv: 'csv',
|
|
48
|
+
graphml: 'graphml',
|
|
49
|
+
};
|
|
50
|
+
const ext = extMap[options.format] || 'txt';
|
|
51
|
+
const outputFile = options.output || `archicore-export.${ext}`;
|
|
52
|
+
// Get content based on format
|
|
53
|
+
let content;
|
|
54
|
+
if (options.format === 'json') {
|
|
55
|
+
content = JSON.stringify(data.data || data, null, 2);
|
|
56
|
+
}
|
|
57
|
+
else if (data.content) {
|
|
58
|
+
content = data.content;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
content = JSON.stringify(data, null, 2);
|
|
62
|
+
}
|
|
63
|
+
await writeFile(outputFile, content);
|
|
64
|
+
spinner.succeed('Export complete');
|
|
65
|
+
console.log();
|
|
66
|
+
printKeyValue('Format', options.format.toUpperCase());
|
|
67
|
+
printKeyValue('Output', outputFile);
|
|
68
|
+
printKeyValue('Size', `${(content.length / 1024).toFixed(1)} KB`);
|
|
69
|
+
console.log();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
spinner.fail('Export failed');
|
|
73
|
+
printError(String(error));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArchiCore CLI Commands
|
|
3
|
+
*/
|
|
4
|
+
export { registerAnalyzerCommands } from './analyzers.js';
|
|
5
|
+
export { registerExportCommand } from './export.js';
|
|
6
|
+
export { startInteractiveMode } from './interactive.js';
|
|
7
|
+
export { initProject, isInitialized, getLocalProject } from './init.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArchiCore CLI Commands
|
|
3
|
+
*/
|
|
4
|
+
export { registerAnalyzerCommands } from './analyzers.js';
|
|
5
|
+
export { registerExportCommand } from './export.js';
|
|
6
|
+
export { startInteractiveMode } from './interactive.js';
|
|
7
|
+
export { initProject, isInitialized, getLocalProject } from './init.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArchiCore CLI - Project Initialization
|
|
3
|
+
*
|
|
4
|
+
* Initializes ArchiCore in the current directory
|
|
5
|
+
*/
|
|
6
|
+
interface LocalProjectConfig {
|
|
7
|
+
id?: string;
|
|
8
|
+
name: string;
|
|
9
|
+
path: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
indexed: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if ArchiCore is initialized in a directory
|
|
15
|
+
*/
|
|
16
|
+
export declare function isInitialized(dir: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Get local project config
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLocalProject(dir: string): Promise<LocalProjectConfig | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize ArchiCore in a directory
|
|
23
|
+
*/
|
|
24
|
+
export declare function initProject(dir: string, name?: string): Promise<void>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArchiCore CLI - Project Initialization
|
|
3
|
+
*
|
|
4
|
+
* Initializes ArchiCore in the current directory
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import { createSpinner, printError, printInfo, printKeyValue } from '../ui/index.js';
|
|
9
|
+
import { loadConfig } from '../utils/config.js';
|
|
10
|
+
const ARCHICORE_DIR = '.archicore';
|
|
11
|
+
const CONFIG_FILE = 'project.json';
|
|
12
|
+
/**
|
|
13
|
+
* Check if ArchiCore is initialized in a directory
|
|
14
|
+
*/
|
|
15
|
+
export async function isInitialized(dir) {
|
|
16
|
+
try {
|
|
17
|
+
await fs.access(path.join(dir, ARCHICORE_DIR, CONFIG_FILE));
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get local project config
|
|
26
|
+
*/
|
|
27
|
+
export async function getLocalProject(dir) {
|
|
28
|
+
try {
|
|
29
|
+
const configPath = path.join(dir, ARCHICORE_DIR, CONFIG_FILE);
|
|
30
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
31
|
+
return JSON.parse(content);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Save local project config
|
|
39
|
+
*/
|
|
40
|
+
async function saveLocalProject(dir, config) {
|
|
41
|
+
const archicoreDir = path.join(dir, ARCHICORE_DIR);
|
|
42
|
+
const configPath = path.join(archicoreDir, CONFIG_FILE);
|
|
43
|
+
// Ensure directory exists
|
|
44
|
+
await fs.mkdir(archicoreDir, { recursive: true });
|
|
45
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Initialize ArchiCore in a directory
|
|
49
|
+
*/
|
|
50
|
+
export async function initProject(dir, name) {
|
|
51
|
+
console.log();
|
|
52
|
+
// Check if already initialized
|
|
53
|
+
const existing = await getLocalProject(dir);
|
|
54
|
+
if (existing) {
|
|
55
|
+
printInfo(`ArchiCore already initialized in this directory`);
|
|
56
|
+
printKeyValue('Project', existing.name);
|
|
57
|
+
printKeyValue('ID', existing.id || 'Not synced');
|
|
58
|
+
console.log();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Derive name from directory if not provided
|
|
62
|
+
const projectName = name || path.basename(dir);
|
|
63
|
+
const spinner = createSpinner('Initializing ArchiCore...').start();
|
|
64
|
+
try {
|
|
65
|
+
const config = await loadConfig();
|
|
66
|
+
// Create project on server
|
|
67
|
+
const response = await fetch(`${config.serverUrl}/api/projects`, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: { 'Content-Type': 'application/json' },
|
|
70
|
+
body: JSON.stringify({ name: projectName, path: dir }),
|
|
71
|
+
});
|
|
72
|
+
let projectId;
|
|
73
|
+
let serverName = projectName;
|
|
74
|
+
if (response.ok) {
|
|
75
|
+
const data = await response.json();
|
|
76
|
+
projectId = data.id || data.project?.id;
|
|
77
|
+
serverName = data.name || data.project?.name || projectName;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Server might not be running, that's OK - we can still create local config
|
|
81
|
+
spinner.warn('Server not available, creating local config only');
|
|
82
|
+
}
|
|
83
|
+
// Create local config
|
|
84
|
+
const localConfig = {
|
|
85
|
+
id: projectId,
|
|
86
|
+
name: serverName,
|
|
87
|
+
path: dir,
|
|
88
|
+
createdAt: new Date().toISOString(),
|
|
89
|
+
indexed: false,
|
|
90
|
+
};
|
|
91
|
+
await saveLocalProject(dir, localConfig);
|
|
92
|
+
// Add .archicore to .gitignore if git repo
|
|
93
|
+
await addToGitignore(dir);
|
|
94
|
+
if (projectId) {
|
|
95
|
+
spinner.succeed('ArchiCore initialized');
|
|
96
|
+
}
|
|
97
|
+
console.log();
|
|
98
|
+
printKeyValue('Directory', dir);
|
|
99
|
+
printKeyValue('Project', serverName);
|
|
100
|
+
if (projectId) {
|
|
101
|
+
printKeyValue('ID', projectId.slice(0, 8));
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
printInfo('Run `archicore` to start interactive mode');
|
|
105
|
+
printInfo('Use /index to index your codebase');
|
|
106
|
+
console.log();
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
spinner.fail('Initialization failed');
|
|
110
|
+
printError(String(error));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Add .archicore to .gitignore
|
|
115
|
+
*/
|
|
116
|
+
async function addToGitignore(dir) {
|
|
117
|
+
const gitignorePath = path.join(dir, '.gitignore');
|
|
118
|
+
try {
|
|
119
|
+
let content = '';
|
|
120
|
+
try {
|
|
121
|
+
content = await fs.readFile(gitignorePath, 'utf-8');
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// File doesn't exist
|
|
125
|
+
}
|
|
126
|
+
// Check if already ignored
|
|
127
|
+
if (content.includes('.archicore')) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Add to gitignore
|
|
131
|
+
const newContent = content.trim()
|
|
132
|
+
? `${content.trim()}\n\n# ArchiCore\n.archicore/\n`
|
|
133
|
+
: `# ArchiCore\n.archicore/\n`;
|
|
134
|
+
await fs.writeFile(gitignorePath, newContent);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Ignore errors
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=init.js.map
|