@kabirlikestocode/engram 1.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/dist/commands/index-cmd.d.ts +4 -0
- package/dist/commands/index-cmd.d.ts.map +1 -0
- package/dist/commands/index-cmd.js +123 -0
- package/dist/commands/index-cmd.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +154 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +88 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/serve.d.ts +4 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +45 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +85 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +10 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +106 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/team.d.ts +9 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +85 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon.d.ts +8 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +124 -0
- package/dist/daemon.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"AA0GA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEhB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
3
|
+
import { relative } from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { isProjectInitialized, getProjectDbPath, } from '../config.js';
|
|
7
|
+
import { CodeGraph, getParserForFile, isSupportedFile } from '@kabirlikestocode/engram-core';
|
|
8
|
+
/** Concurrency limit for file I/O + parsing */
|
|
9
|
+
const IO_CONCURRENCY = 64;
|
|
10
|
+
/** Number of parsed results to batch into a single DB transaction */
|
|
11
|
+
const DB_BATCH_SIZE = 200;
|
|
12
|
+
async function collectFiles(dir) {
|
|
13
|
+
const IGNORED = new Set([
|
|
14
|
+
'node_modules', '.git', 'dist', 'build', '.next', '__pycache__',
|
|
15
|
+
'.turbo', '.vercel', '.engram', 'coverage', '.nyc_output',
|
|
16
|
+
'vendor', '.venv', 'venv', 'env', '.tox', '.mypy_cache', '.pytest_cache',
|
|
17
|
+
]);
|
|
18
|
+
const files = [];
|
|
19
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const fullPath = join(dir, entry.name);
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
if (IGNORED.has(entry.name))
|
|
24
|
+
continue;
|
|
25
|
+
files.push(...await collectFiles(fullPath));
|
|
26
|
+
}
|
|
27
|
+
else if (isSupportedFile(entry.name)) {
|
|
28
|
+
files.push(fullPath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return files;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read + parse a single file, returning the ParseResult or null on failure.
|
|
35
|
+
*/
|
|
36
|
+
async function parseOne(filePath, projectRoot) {
|
|
37
|
+
try {
|
|
38
|
+
const parser = getParserForFile(filePath);
|
|
39
|
+
if (!parser)
|
|
40
|
+
return null;
|
|
41
|
+
const content = await readFile(filePath, 'utf-8');
|
|
42
|
+
const relPath = relative(projectRoot, filePath);
|
|
43
|
+
return await parser.parseFile(relPath, content);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Process files in concurrent batches: read + parse in parallel,
|
|
51
|
+
* then flush to DB as a single batch transaction.
|
|
52
|
+
*/
|
|
53
|
+
async function indexBatch(files, projectRoot, graph, onProgress) {
|
|
54
|
+
let indexed = 0;
|
|
55
|
+
let errors = 0;
|
|
56
|
+
// Process IO_CONCURRENCY files at a time, accumulating parse results
|
|
57
|
+
// and flushing to DB every DB_BATCH_SIZE results.
|
|
58
|
+
const pendingResults = [];
|
|
59
|
+
for (let i = 0; i < files.length; i += IO_CONCURRENCY) {
|
|
60
|
+
const chunk = files.slice(i, i + IO_CONCURRENCY);
|
|
61
|
+
// Concurrent file reads + AST parsing
|
|
62
|
+
const settled = await Promise.allSettled(chunk.map((f) => parseOne(f, projectRoot)));
|
|
63
|
+
for (const outcome of settled) {
|
|
64
|
+
if (outcome.status === 'fulfilled' && outcome.value) {
|
|
65
|
+
pendingResults.push(outcome.value);
|
|
66
|
+
indexed++;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
errors++;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Flush accumulated results to DB when batch is full
|
|
73
|
+
if (pendingResults.length >= DB_BATCH_SIZE) {
|
|
74
|
+
graph.upsertBatchResults(pendingResults.splice(0));
|
|
75
|
+
}
|
|
76
|
+
onProgress(indexed, errors);
|
|
77
|
+
}
|
|
78
|
+
// Flush remaining
|
|
79
|
+
if (pendingResults.length > 0) {
|
|
80
|
+
graph.upsertBatchResults(pendingResults);
|
|
81
|
+
}
|
|
82
|
+
return { indexed, errors };
|
|
83
|
+
}
|
|
84
|
+
export async function indexCommand(options) {
|
|
85
|
+
const projectRoot = resolve(options.project ?? process.cwd());
|
|
86
|
+
console.log(chalk.bold.green('\n ⬡ Engram') + chalk.dim(' — Force reindex\n'));
|
|
87
|
+
if (!isProjectInitialized(projectRoot)) {
|
|
88
|
+
console.log(chalk.yellow(' ⚠ Not initialized.') +
|
|
89
|
+
chalk.dim(' Run `engram init` first.\n'));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const dbPath = getProjectDbPath(projectRoot);
|
|
93
|
+
const spinner = ora({
|
|
94
|
+
text: chalk.dim(' Scanning files...'),
|
|
95
|
+
color: 'green',
|
|
96
|
+
}).start();
|
|
97
|
+
const graph = new CodeGraph(dbPath);
|
|
98
|
+
try {
|
|
99
|
+
const files = await collectFiles(projectRoot);
|
|
100
|
+
spinner.text = chalk.dim(` Reindexing ${files.length} files...`);
|
|
101
|
+
const { indexed, errors } = await indexBatch(files, projectRoot, graph, (done) => {
|
|
102
|
+
spinner.text = chalk.dim(` Reindexing... ${done}/${files.length}`);
|
|
103
|
+
});
|
|
104
|
+
const stats = graph.getStats();
|
|
105
|
+
spinner.succeed(chalk.green(' Reindex complete'));
|
|
106
|
+
console.log(chalk.green(' ✓ ') +
|
|
107
|
+
chalk.bold.white(String(stats.totalSymbols)) +
|
|
108
|
+
chalk.green(' symbols across ') +
|
|
109
|
+
chalk.bold.white(String(stats.totalFiles)) +
|
|
110
|
+
chalk.green(' files'));
|
|
111
|
+
if (errors > 0) {
|
|
112
|
+
console.log(chalk.yellow(` ⚠ ${errors} files skipped due to errors`));
|
|
113
|
+
}
|
|
114
|
+
const langs = Object.entries(stats.languages)
|
|
115
|
+
.map(([lang, count]) => `${lang} (${count})`)
|
|
116
|
+
.join(', ');
|
|
117
|
+
console.log(chalk.dim(` Languages: ${langs}\n`));
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
graph.close();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=index-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-cmd.js","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsCA,wBAAsB,WAAW,CAC/B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAkKf"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { mkdir, readdir, readFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { relative } from 'node:path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { isProjectInitialized, writeProjectConfig, getProjectConfigDir, getProjectDbPath, readCredentials, getEngramToken, } from '../config.js';
|
|
8
|
+
import { CodeGraph, getParserForFile, isSupportedFile } from '@kabirlikestocode/engram-core';
|
|
9
|
+
async function collectFiles(dir) {
|
|
10
|
+
const IGNORED = new Set([
|
|
11
|
+
'node_modules', '.git', 'dist', 'build', '.next', '__pycache__',
|
|
12
|
+
'.turbo', '.vercel', '.engram', 'coverage', '.nyc_output',
|
|
13
|
+
'vendor', '.venv', 'venv', 'env', '.tox', '.mypy_cache', '.pytest_cache',
|
|
14
|
+
]);
|
|
15
|
+
const files = [];
|
|
16
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const fullPath = join(dir, entry.name);
|
|
19
|
+
if (entry.isDirectory()) {
|
|
20
|
+
if (IGNORED.has(entry.name))
|
|
21
|
+
continue;
|
|
22
|
+
files.push(...await collectFiles(fullPath));
|
|
23
|
+
}
|
|
24
|
+
else if (isSupportedFile(entry.name)) {
|
|
25
|
+
files.push(fullPath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return files;
|
|
29
|
+
}
|
|
30
|
+
export async function initCommand(projectPath) {
|
|
31
|
+
const projectRoot = resolve(projectPath ?? process.cwd());
|
|
32
|
+
console.log(chalk.bold.green('\n ⬡ Engram') +
|
|
33
|
+
chalk.dim(' — Your codebase, remembered.\n'));
|
|
34
|
+
// Check if already initialized
|
|
35
|
+
if (isProjectInitialized(projectRoot)) {
|
|
36
|
+
console.log(chalk.yellow(' ⚠ Already initialized at') +
|
|
37
|
+
chalk.dim(` ${projectRoot}`));
|
|
38
|
+
console.log(chalk.dim(' Run `engram index` to force a reindex.\n'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Create .engram directory
|
|
42
|
+
const configDir = getProjectConfigDir(projectRoot);
|
|
43
|
+
if (!existsSync(configDir)) {
|
|
44
|
+
await mkdir(configDir, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
// Get token if available
|
|
47
|
+
const envToken = getEngramToken();
|
|
48
|
+
const creds = await readCredentials();
|
|
49
|
+
const token = envToken ?? creds?.token;
|
|
50
|
+
// Write project config
|
|
51
|
+
const config = {
|
|
52
|
+
projectRoot,
|
|
53
|
+
ignorePaths: [
|
|
54
|
+
'node_modules',
|
|
55
|
+
'.git',
|
|
56
|
+
'dist',
|
|
57
|
+
'build',
|
|
58
|
+
'.next',
|
|
59
|
+
'__pycache__',
|
|
60
|
+
'.engram',
|
|
61
|
+
],
|
|
62
|
+
languages: ['typescript', 'python'],
|
|
63
|
+
dbPath: getProjectDbPath(projectRoot),
|
|
64
|
+
};
|
|
65
|
+
if (creds?.userId) {
|
|
66
|
+
config.teamId = undefined; // solo by default
|
|
67
|
+
}
|
|
68
|
+
await writeProjectConfig(config);
|
|
69
|
+
// Perform initial index
|
|
70
|
+
const spinner = ora({
|
|
71
|
+
text: chalk.dim(' Indexing project...'),
|
|
72
|
+
color: 'green',
|
|
73
|
+
}).start();
|
|
74
|
+
const graph = new CodeGraph(config.dbPath);
|
|
75
|
+
try {
|
|
76
|
+
const files = await collectFiles(projectRoot);
|
|
77
|
+
const IO_CONCURRENCY = 64;
|
|
78
|
+
const DB_BATCH_SIZE = 200;
|
|
79
|
+
let indexed = 0;
|
|
80
|
+
let errors = 0;
|
|
81
|
+
const pendingResults = [];
|
|
82
|
+
for (let i = 0; i < files.length; i += IO_CONCURRENCY) {
|
|
83
|
+
const chunk = files.slice(i, i + IO_CONCURRENCY);
|
|
84
|
+
const settled = await Promise.allSettled(chunk.map(async (filePath) => {
|
|
85
|
+
const parser = getParserForFile(filePath);
|
|
86
|
+
if (!parser)
|
|
87
|
+
return null;
|
|
88
|
+
const content = await readFile(filePath, 'utf-8');
|
|
89
|
+
const relPath = relative(projectRoot, filePath);
|
|
90
|
+
return parser.parseFile(relPath, content);
|
|
91
|
+
}));
|
|
92
|
+
for (const outcome of settled) {
|
|
93
|
+
if (outcome.status === 'fulfilled' && outcome.value) {
|
|
94
|
+
pendingResults.push(outcome.value);
|
|
95
|
+
indexed++;
|
|
96
|
+
}
|
|
97
|
+
else if (outcome.status === 'rejected') {
|
|
98
|
+
errors++;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (pendingResults.length >= DB_BATCH_SIZE) {
|
|
102
|
+
graph.upsertBatchResults(pendingResults.splice(0));
|
|
103
|
+
}
|
|
104
|
+
if (indexed % 50 === 0) {
|
|
105
|
+
spinner.text = chalk.dim(` Indexing... ${indexed}/${files.length}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (pendingResults.length > 0) {
|
|
109
|
+
graph.upsertBatchResults(pendingResults);
|
|
110
|
+
}
|
|
111
|
+
const stats = graph.getStats();
|
|
112
|
+
spinner.succeed(chalk.green(' Engram initialized for ') + chalk.bold(projectRoot));
|
|
113
|
+
console.log(chalk.green(' ✓ Indexed ') +
|
|
114
|
+
chalk.bold.white(String(stats.totalSymbols)) +
|
|
115
|
+
chalk.green(' symbols across ') +
|
|
116
|
+
chalk.bold.white(String(stats.totalFiles)) +
|
|
117
|
+
chalk.green(' files'));
|
|
118
|
+
if (errors > 0) {
|
|
119
|
+
console.log(chalk.yellow(` ⚠ ${errors} files skipped due to parse errors`));
|
|
120
|
+
}
|
|
121
|
+
// Show language breakdown
|
|
122
|
+
const langs = Object.entries(stats.languages)
|
|
123
|
+
.map(([lang, count]) => `${lang} (${count})`)
|
|
124
|
+
.join(', ');
|
|
125
|
+
console.log(chalk.dim(` Languages: ${langs}`));
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
graph.close();
|
|
129
|
+
}
|
|
130
|
+
// Output MCP config snippet
|
|
131
|
+
const mcpConfig = {
|
|
132
|
+
mcpServers: {
|
|
133
|
+
engram: {
|
|
134
|
+
command: 'engram',
|
|
135
|
+
args: ['serve', '--project', projectRoot],
|
|
136
|
+
...(token ? { env: { ENGRAM_TOKEN: token } } : {}),
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
console.log(chalk.dim('\n Add this to your ') +
|
|
141
|
+
chalk.bold('claude_desktop_config.json') +
|
|
142
|
+
chalk.dim(':'));
|
|
143
|
+
console.log();
|
|
144
|
+
console.log(chalk
|
|
145
|
+
.green(JSON.stringify(mcpConfig, null, 2))
|
|
146
|
+
.split('\n')
|
|
147
|
+
.map((l) => ' ' + l)
|
|
148
|
+
.join('\n'));
|
|
149
|
+
console.log();
|
|
150
|
+
console.log(chalk.dim(' Run ') +
|
|
151
|
+
chalk.bold('engram serve') +
|
|
152
|
+
chalk.dim(' to start the MCP server manually.\n'));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAaA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA8HlD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import open from 'open';
|
|
4
|
+
import { writeCredentials, readCredentials, getApiUrl, } from '../config.js';
|
|
5
|
+
const POLL_INTERVAL_MS = 2000;
|
|
6
|
+
const TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
|
|
7
|
+
export async function loginCommand() {
|
|
8
|
+
console.log(chalk.bold.green('\n ⬡ Engram') + chalk.dim(' — Login\n'));
|
|
9
|
+
// Check if already logged in
|
|
10
|
+
const existing = await readCredentials();
|
|
11
|
+
if (existing && existing.expiresAt > Date.now()) {
|
|
12
|
+
console.log(chalk.green(' ✓ Already logged in as ') +
|
|
13
|
+
chalk.bold(existing.email));
|
|
14
|
+
console.log(chalk.dim(` Tier: ${existing.tier} | Token: ${existing.token.slice(0, 12)}...`));
|
|
15
|
+
console.log(chalk.dim(' Run `engram login --force` to re-authenticate.\n'));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const apiUrl = getApiUrl();
|
|
19
|
+
// Step 1: POST to initiate a CLI session (server generates the state token)
|
|
20
|
+
let stateToken;
|
|
21
|
+
let authUrl;
|
|
22
|
+
let pollUrl;
|
|
23
|
+
try {
|
|
24
|
+
const initRes = await fetch(`${apiUrl}/api/auth/cli`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: { 'Content-Type': 'application/json' },
|
|
27
|
+
});
|
|
28
|
+
if (!initRes.ok) {
|
|
29
|
+
const errBody = await initRes.text();
|
|
30
|
+
console.error(chalk.red(` ✗ Failed to initiate login: ${initRes.status} ${errBody}\n`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const initData = (await initRes.json());
|
|
34
|
+
stateToken = initData.state;
|
|
35
|
+
authUrl = initData.authUrl;
|
|
36
|
+
pollUrl = initData.pollUrl;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error(chalk.red(` ✗ Could not reach the Engram API at ${apiUrl}\n`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.dim(' Opening browser for authentication...\n'));
|
|
43
|
+
// Step 2: Open the browser approval page
|
|
44
|
+
try {
|
|
45
|
+
await open(authUrl);
|
|
46
|
+
console.log(chalk.dim(' If the browser didn\'t open, visit:\n'));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
console.log(chalk.dim(' Could not open browser. Visit this URL:\n'));
|
|
50
|
+
}
|
|
51
|
+
console.log(chalk.blue(` ${authUrl}\n`));
|
|
52
|
+
// Step 3: Poll for completion
|
|
53
|
+
const spinner = ora({
|
|
54
|
+
text: chalk.dim(' Waiting for authentication...'),
|
|
55
|
+
color: 'green',
|
|
56
|
+
}).start();
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
while (Date.now() - startTime < TIMEOUT_MS) {
|
|
59
|
+
try {
|
|
60
|
+
const response = await fetch(pollUrl);
|
|
61
|
+
if (response.status === 200) {
|
|
62
|
+
const data = (await response.json());
|
|
63
|
+
if (data.status === 'complete' && data.token) {
|
|
64
|
+
const creds = {
|
|
65
|
+
token: data.token,
|
|
66
|
+
userId: data.userId ?? 'unknown',
|
|
67
|
+
email: data.email ?? 'unknown',
|
|
68
|
+
tier: data.tier ?? 'free',
|
|
69
|
+
expiresAt: data.expiresAt ?? Date.now() + 365 * 24 * 60 * 60 * 1000,
|
|
70
|
+
};
|
|
71
|
+
await writeCredentials(creds);
|
|
72
|
+
spinner.succeed(chalk.green(' Logged in as ') + chalk.bold(creds.email));
|
|
73
|
+
console.log(chalk.dim(` Tier: ${creds.tier}\n`));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 202 or other — still pending
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Network error — keep trying
|
|
81
|
+
}
|
|
82
|
+
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
83
|
+
}
|
|
84
|
+
spinner.fail(chalk.red(' Authentication timed out.'));
|
|
85
|
+
console.log(chalk.dim(' Please try again with `engram login`.\n'));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAYA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDhB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { createConnection } from 'node:net';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { readProjectConfig, isProjectInitialized, getSocketPath, } from '../config.js';
|
|
5
|
+
import { startDaemon, isDaemonRunning } from '../daemon.js';
|
|
6
|
+
export async function serveCommand(options) {
|
|
7
|
+
const projectRoot = resolve(options.project ?? process.cwd());
|
|
8
|
+
if (!isProjectInitialized(projectRoot)) {
|
|
9
|
+
process.stderr.write(chalk.red(`\nError: Not initialized. Run \`engram init\` first in ${projectRoot}\n`));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const config = await readProjectConfig(projectRoot);
|
|
13
|
+
if (!config) {
|
|
14
|
+
process.stderr.write(chalk.red('\nError: Could not read config.\n'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const socketPath = getSocketPath(projectRoot);
|
|
18
|
+
// Ensure daemon is running (starts it if not)
|
|
19
|
+
if (!(await isDaemonRunning(projectRoot))) {
|
|
20
|
+
process.stderr.write(chalk.dim('Starting Engram daemon...\n'));
|
|
21
|
+
await startDaemon(projectRoot);
|
|
22
|
+
}
|
|
23
|
+
// Connect to daemon socket and proxy stdio ↔ socket
|
|
24
|
+
const sock = createConnection(socketPath);
|
|
25
|
+
sock.on('connect', () => {
|
|
26
|
+
process.stderr.write(chalk.green('Connected to Engram daemon\n'));
|
|
27
|
+
// Proxy stdin → socket, socket → stdout (MCP protocol)
|
|
28
|
+
process.stdin.pipe(sock);
|
|
29
|
+
sock.pipe(process.stdout);
|
|
30
|
+
});
|
|
31
|
+
sock.on('error', (err) => {
|
|
32
|
+
process.stderr.write(chalk.red(`\nDaemon connection error: ${err.message}\n`));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
});
|
|
35
|
+
sock.on('close', () => {
|
|
36
|
+
process.exit(0);
|
|
37
|
+
});
|
|
38
|
+
// Forward SIGINT/SIGTERM to clean disconnect
|
|
39
|
+
const cleanup = () => {
|
|
40
|
+
sock.end();
|
|
41
|
+
};
|
|
42
|
+
process.on('SIGINT', cleanup);
|
|
43
|
+
process.on('SIGTERM', cleanup);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAEpB,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAElC;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9D,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CACP,0DAA0D,WAAW,IAAI,CAC1E,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE9C,8CAA8C;IAC9C,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC/D,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,oDAAoD;IACpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAClE,uDAAuD;QACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CAAC,8BAA8B,GAAG,CAAC,OAAO,IAAI,CAAC,CACzD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAoBA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGhB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { isProjectInitialized, readCredentials, getEngramToken, getProjectDbPath, } from '../config.js';
|
|
4
|
+
import { getDaemonPid } from '../daemon.js';
|
|
5
|
+
import { CodeGraph } from '@kabirlikestocode/engram-core';
|
|
6
|
+
function timeAgo(ms) {
|
|
7
|
+
const seconds = Math.floor(ms / 1000);
|
|
8
|
+
if (seconds < 60)
|
|
9
|
+
return `${seconds} seconds ago`;
|
|
10
|
+
const minutes = Math.floor(seconds / 60);
|
|
11
|
+
if (minutes < 60)
|
|
12
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
|
|
13
|
+
const hours = Math.floor(minutes / 60);
|
|
14
|
+
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
|
|
15
|
+
}
|
|
16
|
+
export async function statusCommand(options) {
|
|
17
|
+
const projectRoot = resolve(options.project ?? process.cwd());
|
|
18
|
+
console.log(chalk.bold.green('\n ⬡ Engram') +
|
|
19
|
+
chalk.dim(' status for ') +
|
|
20
|
+
chalk.bold(projectRoot) +
|
|
21
|
+
'\n');
|
|
22
|
+
if (!isProjectInitialized(projectRoot)) {
|
|
23
|
+
console.log(chalk.yellow(' ⚠ Not initialized.') +
|
|
24
|
+
chalk.dim(' Run `engram init` first.\n'));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const dbPath = getProjectDbPath(projectRoot);
|
|
28
|
+
let graph = null;
|
|
29
|
+
try {
|
|
30
|
+
graph = new CodeGraph(dbPath);
|
|
31
|
+
const stats = graph.getStats();
|
|
32
|
+
// Symbol count
|
|
33
|
+
console.log(chalk.dim(' Symbols indexed: ') +
|
|
34
|
+
chalk.bold.white(String(stats.totalSymbols)));
|
|
35
|
+
// File count
|
|
36
|
+
console.log(chalk.dim(' Files tracked: ') +
|
|
37
|
+
chalk.bold.white(String(stats.totalFiles)));
|
|
38
|
+
// Languages
|
|
39
|
+
const langStr = Object.entries(stats.languages)
|
|
40
|
+
.map(([lang, count]) => `${lang} (${count})`)
|
|
41
|
+
.join(', ');
|
|
42
|
+
console.log(chalk.dim(' Languages: ') + chalk.white(langStr || 'none'));
|
|
43
|
+
// Last update
|
|
44
|
+
if (stats.lastIndexed) {
|
|
45
|
+
const ago = timeAgo(Date.now() - stats.lastIndexed);
|
|
46
|
+
const fresh = Date.now() - stats.lastIndexed < 60000;
|
|
47
|
+
console.log(chalk.dim(' Last update: ') +
|
|
48
|
+
(fresh ? chalk.green(ago) : chalk.yellow(ago)));
|
|
49
|
+
console.log(chalk.dim(' Index age: ') +
|
|
50
|
+
(fresh ? chalk.green('fresh') : chalk.yellow('stale')));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.log(chalk.red(` ✗ Could not read database: ${error instanceof Error ? error.message : String(error)}`));
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
graph?.close();
|
|
58
|
+
}
|
|
59
|
+
// Daemon status
|
|
60
|
+
const pid = await getDaemonPid(projectRoot);
|
|
61
|
+
if (pid !== null) {
|
|
62
|
+
console.log(chalk.dim(' MCP server: ') +
|
|
63
|
+
chalk.green(`running (PID ${pid})`));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(chalk.dim(' MCP server: ') + chalk.yellow('not running'));
|
|
67
|
+
}
|
|
68
|
+
// Token status
|
|
69
|
+
const envToken = getEngramToken();
|
|
70
|
+
const creds = await readCredentials();
|
|
71
|
+
const token = envToken ?? creds?.token;
|
|
72
|
+
if (token) {
|
|
73
|
+
const masked = token.slice(0, 12) + '...' + token.slice(-4);
|
|
74
|
+
const valid = !creds || creds.expiresAt > Date.now();
|
|
75
|
+
console.log(chalk.dim(' Token: ') +
|
|
76
|
+
chalk.white(masked) +
|
|
77
|
+
(valid ? chalk.green(' (valid)') : chalk.red(' (expired)')));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(chalk.dim(' Token: ') +
|
|
81
|
+
chalk.yellow('none (local mode)'));
|
|
82
|
+
}
|
|
83
|
+
console.log();
|
|
84
|
+
}
|
|
85
|
+
//# 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,10 @@
|
|
|
1
|
+
export declare function syncPushCommand(opts: {
|
|
2
|
+
project?: string;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function syncPullCommand(opts: {
|
|
5
|
+
project?: string;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function syncStatusCommand(opts: {
|
|
8
|
+
project?: string;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAsCA,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/E;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCjF"}
|