@hxccoder/context-packer 1.0.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/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/atomicFileManager.js +95 -0
- package/dist/core/atomicFileManager.js.map +1 -0
- package/dist/core/compiler.js +81 -0
- package/dist/core/compiler.js.map +1 -0
- package/dist/core/ignoreFactory.js +63 -0
- package/dist/core/ignoreFactory.js.map +1 -0
- package/dist/core/scanner.js +36 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/strategies/ContextWriter.interface.js +3 -0
- package/dist/strategies/ContextWriter.interface.js.map +1 -0
- package/dist/strategies/GeminiTokenizerStrategy.js +34 -0
- package/dist/strategies/GeminiTokenizerStrategy.js.map +1 -0
- package/dist/strategies/GptTokenizerStrategy.js +49 -0
- package/dist/strategies/GptTokenizerStrategy.js.map +1 -0
- package/dist/strategies/HeuristicTokenizerStrategy.js +32 -0
- package/dist/strategies/HeuristicTokenizerStrategy.js.map +1 -0
- package/dist/strategies/Tokenizer.interface.js +3 -0
- package/dist/strategies/Tokenizer.interface.js.map +1 -0
- package/dist/strategies/XmlWriter.js +34 -0
- package/dist/strategies/XmlWriter.js.map +1 -0
- package/dist/ui/theme.js +53 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/cancelToken.js +58 -0
- package/dist/utils/cancelToken.js.map +1 -0
- package/package.json +43 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
8
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
9
|
+
const theme_1 = require("./ui/theme");
|
|
10
|
+
const cancelToken_1 = require("./utils/cancelToken");
|
|
11
|
+
const ignoreFactory_1 = require("./core/ignoreFactory");
|
|
12
|
+
const scanner_1 = require("./core/scanner");
|
|
13
|
+
const atomicFileManager_1 = require("./core/atomicFileManager");
|
|
14
|
+
const compiler_1 = require("./core/compiler");
|
|
15
|
+
const GeminiTokenizerStrategy_1 = require("./strategies/GeminiTokenizerStrategy");
|
|
16
|
+
const HeuristicTokenizerStrategy_1 = require("./strategies/HeuristicTokenizerStrategy");
|
|
17
|
+
const GptTokenizerStrategy_1 = require("./strategies/GptTokenizerStrategy");
|
|
18
|
+
const XmlWriter_1 = require("./strategies/XmlWriter");
|
|
19
|
+
async function main() {
|
|
20
|
+
theme_1.theme.printBanner();
|
|
21
|
+
const token = new cancelToken_1.ProcessCancellationToken();
|
|
22
|
+
try {
|
|
23
|
+
const modelChoice = await (0, prompts_1.select)({
|
|
24
|
+
message: `${theme_1.theme.icon.arrow} Selecciona el modelo de IA donde pegarás el contexto:`,
|
|
25
|
+
choices: [
|
|
26
|
+
{
|
|
27
|
+
name: 'Gemini 1.5 Pro / Flash (Google AI Studio - Optimización Local)',
|
|
28
|
+
value: 'gemini',
|
|
29
|
+
description: 'Límite: 2M tokens. Heurística de bytes ultra-rápida y precisa.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'DeepSeek Coder V2 (Heurística Matemática Conservadora)',
|
|
33
|
+
value: 'deepseek',
|
|
34
|
+
description: 'Límite: 128K tokens. Factor seguro de 3.5 bytes/token.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'OpenAI GPT-4o / o1 (Conteo Exacto con Tiktoken WASM)',
|
|
38
|
+
value: 'gpt',
|
|
39
|
+
description: 'Límite: 128K tokens. Carga perezosa del codificador o200k_base.',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
let tokenizer;
|
|
44
|
+
switch (modelChoice) {
|
|
45
|
+
case 'gemini':
|
|
46
|
+
tokenizer = new GeminiTokenizerStrategy_1.GeminiTokenizerStrategy();
|
|
47
|
+
break;
|
|
48
|
+
case 'deepseek':
|
|
49
|
+
tokenizer = new HeuristicTokenizerStrategy_1.HeuristicTokenizerStrategy('deepseek-coder', 128000, 3.5);
|
|
50
|
+
break;
|
|
51
|
+
case 'gpt':
|
|
52
|
+
tokenizer = new GptTokenizerStrategy_1.GptTokenizerStrategy();
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
throw new Error('Estrategia de modelo no soportada.');
|
|
56
|
+
}
|
|
57
|
+
const rootDir = node_process_1.default.cwd();
|
|
58
|
+
node_process_1.default.stdout.write(`\n${theme_1.theme.icon.info} Analizando espacio de trabajo y reglas de exclusión...\n`);
|
|
59
|
+
const ignoreFilter = await ignoreFactory_1.IgnoreFactory.create(rootDir);
|
|
60
|
+
const scanner = new scanner_1.RepoScanner(rootDir, ignoreFilter);
|
|
61
|
+
const fileManager = new atomicFileManager_1.AtomicFileManager('contexto-ia.txt', '.contexto-ia.tmp');
|
|
62
|
+
const writer = new XmlWriter_1.XmlWriter();
|
|
63
|
+
const compiler = new compiler_1.ContextCompiler(rootDir, scanner, fileManager, tokenizer, writer);
|
|
64
|
+
node_process_1.default.stdout.write(`${theme_1.theme.icon.info} Procesando archivos en modo reactivo. Compilando...\n`);
|
|
65
|
+
const metrics = await compiler.compile(token);
|
|
66
|
+
node_process_1.default.stdout.write(theme_1.theme.formatMetrics(metrics));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof cancelToken_1.CancellationError) {
|
|
70
|
+
node_process_1.default.stdout.write(`\n${theme_1.theme.icon.warn} ${theme_1.theme.color.warn('Operación abortada de forma segura por el usuario.')}\n`);
|
|
71
|
+
node_process_1.default.stdout.write(` ${theme_1.theme.color.muted('El archivo temporal fue eliminado. Tu espacio de trabajo está limpio.')}\n\n`);
|
|
72
|
+
node_process_1.default.exit(0);
|
|
73
|
+
}
|
|
74
|
+
node_process_1.default.stderr.write(`\n${theme_1.theme.icon.error} ${theme_1.theme.color.error('ERROR CRÍTICO EN EL PIPELINE:')}\n`);
|
|
75
|
+
node_process_1.default.stderr.write(` ${error.message || error}\n\n`);
|
|
76
|
+
node_process_1.default.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
main();
|
|
80
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AtomicFileManager = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const fsPromises = __importStar(require("node:fs/promises"));
|
|
39
|
+
class AtomicFileManager {
|
|
40
|
+
targetPath;
|
|
41
|
+
tempPath;
|
|
42
|
+
writeStream = null;
|
|
43
|
+
isCommitted = false;
|
|
44
|
+
constructor(targetPath = 'contexto-ia.txt', tempPath = '.contexto-ia.tmp') {
|
|
45
|
+
this.targetPath = targetPath;
|
|
46
|
+
this.tempPath = tempPath;
|
|
47
|
+
}
|
|
48
|
+
createTempStream(signal) {
|
|
49
|
+
if (this.writeStream) {
|
|
50
|
+
throw new Error('[AtomicFileManager] Ya existe un stream activo de escritura.');
|
|
51
|
+
}
|
|
52
|
+
this.writeStream = fs.createWriteStream(this.tempPath, {
|
|
53
|
+
flags: 'w',
|
|
54
|
+
encoding: 'utf8',
|
|
55
|
+
signal
|
|
56
|
+
});
|
|
57
|
+
return this.writeStream;
|
|
58
|
+
}
|
|
59
|
+
async commit() {
|
|
60
|
+
await this.ensureClosedStream();
|
|
61
|
+
try {
|
|
62
|
+
await fsPromises.rename(this.tempPath, this.targetPath);
|
|
63
|
+
this.isCommitted = true;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`[AtomicFileManager] Error fatal al consolidar el archivo final: ${error.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async rollback() {
|
|
70
|
+
await this.ensureClosedStream();
|
|
71
|
+
if (this.isCommitted)
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
await fsPromises.access(this.tempPath);
|
|
75
|
+
await fsPromises.unlink(this.tempPath);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async ensureClosedStream() {
|
|
81
|
+
if (this.writeStream) {
|
|
82
|
+
await new Promise((resolve) => {
|
|
83
|
+
if (this.writeStream.writableEnded) {
|
|
84
|
+
resolve();
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.writeStream.end(resolve);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.writeStream = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.AtomicFileManager = AtomicFileManager;
|
|
95
|
+
//# sourceMappingURL=atomicFileManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomicFileManager.js","sourceRoot":"","sources":["../../src/core/atomicFileManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,6DAA+C;AAG/C,MAAa,iBAAiB;IACT,UAAU,CAAS;IACnB,QAAQ,CAAS;IAC1B,WAAW,GAAoB,IAAI,CAAC;IACpC,WAAW,GAAY,KAAK,CAAC;IAEzC,YAAY,aAAqB,iBAAiB,EAAE,WAAmB,kBAAkB;QACrF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAKM,gBAAgB,CAAC,MAAoB;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACpF,CAAC;QAGD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvD,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,MAAM;YAChB,MAAM;SACL,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAKM,KAAK,CAAC,MAAM;QACf,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,IAAI,CAAC;YAED,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mEAAmE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;IAKM,KAAK,CAAC,QAAQ;QACjB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,IAAI,CAAC;YAED,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACL,CAAC;IAMO,KAAK,CAAC,kBAAkB;QAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAEpC,IAAI,IAAI,CAAC,WAAY,CAAC,aAAa,EAAE,CAAC;oBAClC,OAAO,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBAEJ,IAAI,CAAC,WAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC;YACT,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACpB,CAAC;IACD,CAAC;CACJ;AA/ED,8CA+EC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContextCompiler = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_stream_1 = require("node:stream");
|
|
8
|
+
class ContextCompiler {
|
|
9
|
+
scanner;
|
|
10
|
+
fileManager;
|
|
11
|
+
tokenizer;
|
|
12
|
+
writer;
|
|
13
|
+
rootDir;
|
|
14
|
+
constructor(rootDir, scanner, fileManager, tokenizer, writer) {
|
|
15
|
+
this.rootDir = rootDir;
|
|
16
|
+
this.scanner = scanner;
|
|
17
|
+
this.fileManager = fileManager;
|
|
18
|
+
this.tokenizer = tokenizer;
|
|
19
|
+
this.writer = writer;
|
|
20
|
+
}
|
|
21
|
+
async compile(token) {
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
let totalFilesProcessed = 0;
|
|
24
|
+
let totalBytesProcessed = 0;
|
|
25
|
+
let totalTokensCounted = 0;
|
|
26
|
+
await this.tokenizer.initialize();
|
|
27
|
+
const outputStream = this.fileManager.createTempStream(token.getSignal());
|
|
28
|
+
this.writer.initialize(outputStream);
|
|
29
|
+
try {
|
|
30
|
+
await this.writer.writeHeader('/* Estructura del repositorio mapeada secuencialmente */\n');
|
|
31
|
+
for await (const absolutePath of this.scanner.scan(token)) {
|
|
32
|
+
token.throwIfCancelled();
|
|
33
|
+
const relativePath = (0, node_path_1.relative)(this.rootDir, absolutePath);
|
|
34
|
+
const fileStats = await (0, promises_1.stat)(absolutePath);
|
|
35
|
+
totalFilesProcessed++;
|
|
36
|
+
totalBytesProcessed += fileStats.size;
|
|
37
|
+
const fileReadStream = (0, node_fs_1.createReadStream)(absolutePath, {
|
|
38
|
+
encoding: 'utf8',
|
|
39
|
+
highWaterMark: 64 * 1024,
|
|
40
|
+
signal: token.getSignal()
|
|
41
|
+
});
|
|
42
|
+
const currentTokenizer = this.tokenizer;
|
|
43
|
+
const transformer = new node_stream_1.Transform({
|
|
44
|
+
decodeStrings: false,
|
|
45
|
+
transform(chunk, encoding, callback) {
|
|
46
|
+
try {
|
|
47
|
+
totalTokensCounted += currentTokenizer.countTokensExact(chunk);
|
|
48
|
+
const sanitizedChunk = chunk
|
|
49
|
+
.replace(/&/g, '&')
|
|
50
|
+
.replace(/</g, '<')
|
|
51
|
+
.replace(/>/g, '>');
|
|
52
|
+
callback(null, sanitizedChunk);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
callback(err);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const transformedStream = fileReadStream.pipe(transformer);
|
|
60
|
+
await this.writer.writeFileBlock(relativePath, transformedStream);
|
|
61
|
+
}
|
|
62
|
+
await this.writer.finalize();
|
|
63
|
+
await this.fileManager.commit();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
await this.fileManager.rollback();
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
this.tokenizer.destroy();
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
totalFilesProcessed,
|
|
74
|
+
totalBytesProcessed,
|
|
75
|
+
totalTokensCounted,
|
|
76
|
+
executionTimeMs: Date.now() - startTime
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ContextCompiler = ContextCompiler;
|
|
81
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IgnoreFactory = void 0;
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
10
|
+
const ignore_1 = __importDefault(require("ignore"));
|
|
11
|
+
class IgnoreFactory {
|
|
12
|
+
static MANDATORY_IGNORES = [
|
|
13
|
+
'.git',
|
|
14
|
+
'.git/',
|
|
15
|
+
'node_modules',
|
|
16
|
+
'node_modules/',
|
|
17
|
+
'.contexto-ia.tmp',
|
|
18
|
+
'contexto-ia.txt',
|
|
19
|
+
'dist/',
|
|
20
|
+
'build/',
|
|
21
|
+
'coverage/',
|
|
22
|
+
'.env*',
|
|
23
|
+
'*.log',
|
|
24
|
+
'*.lock',
|
|
25
|
+
'*.jpg',
|
|
26
|
+
'*.jpeg',
|
|
27
|
+
'*.png',
|
|
28
|
+
'*.gif',
|
|
29
|
+
'*.webp',
|
|
30
|
+
'*.ico',
|
|
31
|
+
'*.svg',
|
|
32
|
+
'*.mp4',
|
|
33
|
+
'*.mp3',
|
|
34
|
+
'*.pdf',
|
|
35
|
+
'*.zip',
|
|
36
|
+
'*.tar.gz',
|
|
37
|
+
'*.rar',
|
|
38
|
+
'*.7z',
|
|
39
|
+
'*.woff',
|
|
40
|
+
'*.woff2',
|
|
41
|
+
'*.ttf',
|
|
42
|
+
'*.eot',
|
|
43
|
+
'Thumbs.db',
|
|
44
|
+
'.DS_Store',
|
|
45
|
+
];
|
|
46
|
+
static async create(rootDir) {
|
|
47
|
+
const ig = (0, ignore_1.default)();
|
|
48
|
+
ig.add(this.MANDATORY_IGNORES);
|
|
49
|
+
const gitignorePath = (0, node_path_1.join)(rootDir, '.gitignore');
|
|
50
|
+
try {
|
|
51
|
+
const gitignoreContent = await (0, promises_1.readFile)(gitignorePath, 'utf8');
|
|
52
|
+
ig.add(gitignoreContent);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error.code !== 'ENOENT') {
|
|
56
|
+
node_process_1.default.stderr.write(`\n[!] Advertencia: No se pudo procesar el .gitignore (${error.message})\n`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return ig;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.IgnoreFactory = IgnoreFactory;
|
|
63
|
+
//# sourceMappingURL=ignoreFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignoreFactory.js","sourceRoot":"","sources":["../../src/core/ignoreFactory.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA4C;AAC5C,yCAAiC;AACjC,gEAAmC;AACnC,oDAA4B;AAG5B,MAAa,aAAa;IAKlB,MAAM,CAAU,iBAAiB,GAAG;QACxC,MAAM;QACN,OAAO;QACP,cAAc;QACd,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,OAAO;QACP,QAAQ;QACR,WAAW;QACX,OAAO;QACP,OAAO;QACP,QAAQ;QAMR,OAAO;QACP,QAAQ;QACR,OAAO;QACP,OAAO;QACP,QAAQ;QACR,OAAO;QACP,OAAO;QACP,OAAO;QACP,OAAO;QAGP,OAAO;QACP,OAAO;QACP,UAAU;QACV,OAAO;QACP,MAAM;QAGN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,OAAO;QACP,WAAW;QACX,WAAW;KACd,CAAC;IAMK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAe;QACtC,MAAM,EAAE,GAAG,IAAA,gBAAM,GAAE,CAAC;QAGpB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAG/B,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAElD,IAAI,CAAC;YACD,MAAM,gBAAgB,GAAG,MAAM,IAAA,mBAAQ,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC/D,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAItB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yDAAyD,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;YACtG,CAAC;QACD,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;;AA3ED,sCA4EC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RepoScanner = void 0;
|
|
4
|
+
const promises_1 = require("node:fs/promises");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
class RepoScanner {
|
|
7
|
+
rootDir;
|
|
8
|
+
ignoreFilter;
|
|
9
|
+
constructor(rootDir, ignoreFilter) {
|
|
10
|
+
this.rootDir = rootDir;
|
|
11
|
+
this.ignoreFilter = ignoreFilter;
|
|
12
|
+
}
|
|
13
|
+
async *scan(token) {
|
|
14
|
+
yield* this.traverse(this.rootDir, token);
|
|
15
|
+
}
|
|
16
|
+
async *traverse(currentDir, token) {
|
|
17
|
+
token.throwIfCancelled();
|
|
18
|
+
const dir = await (0, promises_1.opendir)(currentDir);
|
|
19
|
+
for await (const entry of dir) {
|
|
20
|
+
token.throwIfCancelled();
|
|
21
|
+
const fullPath = (0, node_path_1.join)(currentDir, entry.name);
|
|
22
|
+
const relativePath = (0, node_path_1.relative)(this.rootDir, fullPath);
|
|
23
|
+
if (this.ignoreFilter.ignores(relativePath)) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
yield* this.traverse(fullPath, token);
|
|
28
|
+
}
|
|
29
|
+
else if (entry.isFile()) {
|
|
30
|
+
yield fullPath;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.RepoScanner = RepoScanner;
|
|
36
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAC3C,yCAA2C;AAI3C,MAAa,WAAW;IACH,OAAO,CAAS;IAChB,YAAY,CAAS;IAE1C,YAAY,OAAe,EAAE,YAAoB;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAMQ,KAAK,CAAC,CAAC,IAAI,CAAC,KAAwB;QACzC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAKS,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAkB,EAAE,KAAwB;QAElE,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAGzB,MAAM,GAAG,GAAG,MAAM,IAAA,kBAAO,EAAC,UAAU,CAAC,CAAC;QAItC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YAE5B,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAEzB,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAG9C,MAAM,YAAY,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAGtD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACjB,CAAC;YAEO,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAE9B,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5B,MAAM,QAAQ,CAAC;YACnB,CAAC;QACD,CAAC;IACL,CAAC;CACA;AAnDD,kCAmDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextWriter.interface.js","sourceRoot":"","sources":["../../src/strategies/ContextWriter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GeminiTokenizerStrategy = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
class GeminiTokenizerStrategy {
|
|
6
|
+
modelName;
|
|
7
|
+
contextLimit;
|
|
8
|
+
bytesPerToken;
|
|
9
|
+
constructor(modelName = 'gemini-1.5-pro', contextLimit = 2_097_152, bytesPerToken = 4) {
|
|
10
|
+
this.modelName = modelName;
|
|
11
|
+
this.contextLimit = contextLimit;
|
|
12
|
+
this.bytesPerToken = bytesPerToken;
|
|
13
|
+
}
|
|
14
|
+
getModelName() {
|
|
15
|
+
return this.modelName;
|
|
16
|
+
}
|
|
17
|
+
getContextLimit() {
|
|
18
|
+
return this.contextLimit;
|
|
19
|
+
}
|
|
20
|
+
async initialize() {
|
|
21
|
+
return Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
estimateTokensFromBytes(bytes) {
|
|
24
|
+
return Math.ceil(bytes / this.bytesPerToken);
|
|
25
|
+
}
|
|
26
|
+
countTokensExact(text) {
|
|
27
|
+
const actualBytes = node_buffer_1.Buffer.byteLength(text, 'utf8');
|
|
28
|
+
return Math.ceil(actualBytes / this.bytesPerToken);
|
|
29
|
+
}
|
|
30
|
+
destroy() {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.GeminiTokenizerStrategy = GeminiTokenizerStrategy;
|
|
34
|
+
//# sourceMappingURL=GeminiTokenizerStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiTokenizerStrategy.js","sourceRoot":"","sources":["../../src/strategies/GeminiTokenizerStrategy.ts"],"names":[],"mappings":";;;AAAA,6CAAqC;AAGrC,MAAa,uBAAuB;IAEf,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,aAAa,CAAS;IAM3C,YACI,YAAoB,gBAAgB,EACpC,eAAuB,SAAS,EAChC,gBAAwB,CAAC;QAEzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QAEZ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,uBAAuB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,IAAY;QAIzB,MAAM,WAAW,GAAG,oBAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC;IAED,OAAO;IAEP,CAAC;CACA;AAhDD,0DAgDC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GptTokenizerStrategy = void 0;
|
|
4
|
+
class GptTokenizerStrategy {
|
|
5
|
+
encoder = null;
|
|
6
|
+
modelName;
|
|
7
|
+
contextLimit;
|
|
8
|
+
encodingName;
|
|
9
|
+
constructor(modelName = 'gpt-4o', contextLimit = 128000, encodingName = 'o200k_base') {
|
|
10
|
+
this.modelName = modelName;
|
|
11
|
+
this.contextLimit = contextLimit;
|
|
12
|
+
this.encodingName = encodingName;
|
|
13
|
+
}
|
|
14
|
+
getModelName() {
|
|
15
|
+
return this.modelName;
|
|
16
|
+
}
|
|
17
|
+
getContextLimit() {
|
|
18
|
+
return this.contextLimit;
|
|
19
|
+
}
|
|
20
|
+
async initialize() {
|
|
21
|
+
if (!this.encoder) {
|
|
22
|
+
const { get_encoding } = await import('tiktoken');
|
|
23
|
+
this.encoder = get_encoding(this.encodingName);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
estimateTokensFromBytes(bytes) {
|
|
27
|
+
return Math.ceil(bytes / 4);
|
|
28
|
+
}
|
|
29
|
+
countTokensExact(text) {
|
|
30
|
+
if (!this.encoder) {
|
|
31
|
+
throw new Error(`[${this.modelName}] La estrategia no ha sido inicializada. Llama a initialize() primero.`);
|
|
32
|
+
}
|
|
33
|
+
return this.encoder.encode(text).length;
|
|
34
|
+
}
|
|
35
|
+
destroy() {
|
|
36
|
+
if (this.encoder) {
|
|
37
|
+
try {
|
|
38
|
+
this.encoder.free();
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
this.encoder = null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.GptTokenizerStrategy = GptTokenizerStrategy;
|
|
49
|
+
//# sourceMappingURL=GptTokenizerStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GptTokenizerStrategy.js","sourceRoot":"","sources":["../../src/strategies/GptTokenizerStrategy.ts"],"names":[],"mappings":";;;AAGA,MAAa,oBAAoB;IACzB,OAAO,GAAoB,IAAI,CAAC;IACvB,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,YAAY,CAAmB;IAKhD,YACI,YAAoB,QAAQ,EAC5B,eAAuB,MAAM,EAC7B,eAAiC,YAAY;QAE7C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QAEZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,uBAAuB,CAAC,KAAa;QAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB,CAAC,IAAY;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,wEAAwE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;YAEjB,CAAC;oBAAS,CAAC;gBACP,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,CAAC;QACD,CAAC;IACL,CAAC;CACA;AA1DD,oDA0DC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HeuristicTokenizerStrategy = void 0;
|
|
4
|
+
class HeuristicTokenizerStrategy {
|
|
5
|
+
modelName;
|
|
6
|
+
contextLimit;
|
|
7
|
+
bytesPerToken;
|
|
8
|
+
constructor(modelName = 'deepseek-coder', contextLimit = 128000, bytesPerToken = 3.5) {
|
|
9
|
+
this.modelName = modelName;
|
|
10
|
+
this.contextLimit = contextLimit;
|
|
11
|
+
this.bytesPerToken = bytesPerToken;
|
|
12
|
+
}
|
|
13
|
+
getModelName() {
|
|
14
|
+
return this.modelName;
|
|
15
|
+
}
|
|
16
|
+
getContextLimit() {
|
|
17
|
+
return this.contextLimit;
|
|
18
|
+
}
|
|
19
|
+
async initialize() {
|
|
20
|
+
return Promise.resolve();
|
|
21
|
+
}
|
|
22
|
+
estimateTokensFromBytes(bytes) {
|
|
23
|
+
return Math.ceil(bytes / this.bytesPerToken);
|
|
24
|
+
}
|
|
25
|
+
countTokensExact(text) {
|
|
26
|
+
return Math.ceil(text.length / this.bytesPerToken);
|
|
27
|
+
}
|
|
28
|
+
destroy() {
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.HeuristicTokenizerStrategy = HeuristicTokenizerStrategy;
|
|
32
|
+
//# sourceMappingURL=HeuristicTokenizerStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeuristicTokenizerStrategy.js","sourceRoot":"","sources":["../../src/strategies/HeuristicTokenizerStrategy.ts"],"names":[],"mappings":";;;AAEA,MAAa,0BAA0B;IAClB,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,aAAa,CAAS;IAK3C,YACI,YAAoB,gBAAgB,EACpC,eAAuB,MAAM,EAC7B,gBAAwB,GAAG;QAE3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QAEZ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,uBAAuB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,IAAY;QAGzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC;IAED,OAAO;IAEH,CAAC;CACJ;AA5CD,gEA4CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tokenizer.interface.js","sourceRoot":"","sources":["../../src/strategies/Tokenizer.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XmlWriter = void 0;
|
|
4
|
+
const promises_1 = require("node:stream/promises");
|
|
5
|
+
class XmlWriter {
|
|
6
|
+
outputStream;
|
|
7
|
+
initialize(outputStream) {
|
|
8
|
+
this.outputStream = outputStream;
|
|
9
|
+
}
|
|
10
|
+
async writeHeader(treeMap) {
|
|
11
|
+
this.ensureInitialized();
|
|
12
|
+
this.outputStream.write('<repository>\n\n');
|
|
13
|
+
this.outputStream.write('<directory_tree>\n');
|
|
14
|
+
this.outputStream.write(treeMap);
|
|
15
|
+
this.outputStream.write('\n</directory_tree>\n\n');
|
|
16
|
+
}
|
|
17
|
+
async writeFileBlock(filePath, transformedStream) {
|
|
18
|
+
this.ensureInitialized();
|
|
19
|
+
this.outputStream.write(`<file path="${filePath}">\n`);
|
|
20
|
+
await (0, promises_1.pipeline)(transformedStream, this.outputStream, { end: false });
|
|
21
|
+
this.outputStream.write('\n</file>\n\n');
|
|
22
|
+
}
|
|
23
|
+
async finalize() {
|
|
24
|
+
this.ensureInitialized();
|
|
25
|
+
this.outputStream.write('</repository>\n');
|
|
26
|
+
}
|
|
27
|
+
ensureInitialized() {
|
|
28
|
+
if (!this.outputStream) {
|
|
29
|
+
throw new Error("[XmlWriter] No ha sido inicializado. Llama a initialize() con un Writable Stream válido.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.XmlWriter = XmlWriter;
|
|
34
|
+
//# sourceMappingURL=XmlWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XmlWriter.js","sourceRoot":"","sources":["../../src/strategies/XmlWriter.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAGhD,MAAa,SAAS;IACd,YAAY,CAAY;IAEhC,UAAU,CAAC,YAAsB;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAGzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAG5C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,iBAA2B;QAC9D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAGzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,QAAQ,MAAM,CAAC,CAAC;QAQvD,MAAM,IAAA,mBAAQ,EAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAGrE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAGzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC;IAKO,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAChH,CAAC;IACL,CAAC;CACA;AApDD,8BAoDC"}
|
package/dist/ui/theme.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.theme = void 0;
|
|
7
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
8
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
9
|
+
exports.theme = {
|
|
10
|
+
color: {
|
|
11
|
+
primary: (text) => picocolors_1.default.cyan(text),
|
|
12
|
+
success: (text) => picocolors_1.default.green(text),
|
|
13
|
+
error: (text) => picocolors_1.default.red(text),
|
|
14
|
+
warn: (text) => picocolors_1.default.yellow(text),
|
|
15
|
+
info: (text) => picocolors_1.default.blue(text),
|
|
16
|
+
muted: (text) => picocolors_1.default.dim(text),
|
|
17
|
+
highlight: (text) => picocolors_1.default.bold(picocolors_1.default.magenta(text)),
|
|
18
|
+
bold: (text) => picocolors_1.default.bold(text),
|
|
19
|
+
},
|
|
20
|
+
icon: {
|
|
21
|
+
info: picocolors_1.default.blue('ℹ'),
|
|
22
|
+
success: picocolors_1.default.green('✔'),
|
|
23
|
+
warn: picocolors_1.default.yellow('⚠'),
|
|
24
|
+
error: picocolors_1.default.red('✖'),
|
|
25
|
+
arrow: picocolors_1.default.cyan('❯'),
|
|
26
|
+
bullet: picocolors_1.default.dim('•'),
|
|
27
|
+
},
|
|
28
|
+
printBanner() {
|
|
29
|
+
node_process_1.default.stdout.write('\n');
|
|
30
|
+
node_process_1.default.stdout.write(picocolors_1.default.cyan(picocolors_1.default.bold(' ╔══════════════════════════════════════════════════╗\n')));
|
|
31
|
+
node_process_1.default.stdout.write(picocolors_1.default.cyan(picocolors_1.default.bold(' ║ CONTEXT PACKER IA ║\n')));
|
|
32
|
+
node_process_1.default.stdout.write(picocolors_1.default.cyan(picocolors_1.default.bold(' ║ - Grado de Ingeniería Enterprise - ║\n')));
|
|
33
|
+
node_process_1.default.stdout.write(picocolors_1.default.cyan(picocolors_1.default.bold(' ╚══════════════════════════════════════════════════╝\n')));
|
|
34
|
+
node_process_1.default.stdout.write(` ${picocolors_1.default.dim('Preparando el entorno local con huella de memoria O(1)...')}\n\n`);
|
|
35
|
+
},
|
|
36
|
+
formatMetrics(metrics) {
|
|
37
|
+
const sizeInMb = (metrics.totalBytesProcessed / (1024 * 1024)).toFixed(2);
|
|
38
|
+
const timeInSec = (metrics.executionTimeMs / 1000).toFixed(2);
|
|
39
|
+
const formattedTokens = metrics.totalTokensCounted.toLocaleString('es-CL');
|
|
40
|
+
return `
|
|
41
|
+
${picocolors_1.default.bold(picocolors_1.default.green('╔══════════════════════════════════════════════════════════╗'))}
|
|
42
|
+
${picocolors_1.default.bold(picocolors_1.default.green('║ PROCESO COMPLETADO CON ÉXITO ║'))}
|
|
43
|
+
${picocolors_1.default.bold(picocolors_1.default.green('╚══════════════════════════════════════════════════════════╝'))}
|
|
44
|
+
${picocolors_1.default.cyan('❯')} ${picocolors_1.default.bold('Archivos empaquetados :')} ${picocolors_1.default.white(metrics.totalFilesProcessed.toString())}
|
|
45
|
+
${picocolors_1.default.cyan('❯')} ${picocolors_1.default.bold('Tamaño total del lote :')} ${picocolors_1.default.white(sizeInMb)} MB
|
|
46
|
+
${picocolors_1.default.cyan('❯')} ${picocolors_1.default.bold('Consumo de Tokens IA :')} ${picocolors_1.default.bold(picocolors_1.default.magenta(formattedTokens))}
|
|
47
|
+
${picocolors_1.default.cyan('❯')} ${picocolors_1.default.bold('Tiempo de compilación :')} ${picocolors_1.default.yellow(timeInSec)} segundos
|
|
48
|
+
${picocolors_1.default.dim('──────────────────────────────────────────────────────────')}
|
|
49
|
+
${picocolors_1.default.green('✔')} Archivo de salida consolidado en: ${picocolors_1.default.bold(picocolors_1.default.underline('contexto-ia.txt'))}
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAmC;AACnC,4DAA4B;AAGf,QAAA,KAAK,GAAG;IAErB,KAAK,EAAE;QACH,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QACzC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QACvC,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAE,CAAC,IAAI,CAAC,IAAI,CAAC;KACxC;IAGD,IAAI,EAAE;QACF,IAAI,EAAE,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAClB,OAAO,EAAE,oBAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,IAAI,EAAE,oBAAE,CAAC,MAAM,CAAC,GAAG,CAAC;QACpB,KAAK,EAAE,oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QAClB,KAAK,EAAE,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACnB,MAAM,EAAE,oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC;KACtB;IAKD,WAAW;QACP,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC;QAClG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC;QAClG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC;QAClG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC;QAClG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,oBAAE,CAAC,GAAG,CAAC,2DAA2D,CAAC,MAAM,CAAC,CAAC;IACxG,CAAC;IAKD,aAAa,CAAC,OAAwB;QAClC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE3E,OAAO;EACT,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;EACjF,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;EACjF,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;EACjF,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,oBAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,oBAAE,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;EACtG,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,oBAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,oBAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;EACxE,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,oBAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;EAC1F,oBAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,oBAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,oBAAE,CAAC,MAAM,CAAC,SAAS,CAAC;EAC1E,oBAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC;EACpE,oBAAE,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;CAC5F,CAAC;IACF,CAAC;CACA,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProcessCancellationToken = exports.CancellationError = void 0;
|
|
7
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
8
|
+
class CancellationError extends Error {
|
|
9
|
+
constructor(message = "Proceso cancelado por el usuario.") {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "CancellationError";
|
|
12
|
+
if (Error.captureStackTrace) {
|
|
13
|
+
Error.captureStackTrace(this, CancellationError);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.CancellationError = CancellationError;
|
|
18
|
+
class ProcessCancellationToken {
|
|
19
|
+
cancelled = false;
|
|
20
|
+
cancelCount = 0;
|
|
21
|
+
abortController;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.abortController = new AbortController();
|
|
24
|
+
this.registerSignalHandlers();
|
|
25
|
+
}
|
|
26
|
+
registerSignalHandlers() {
|
|
27
|
+
const handleSignal = () => {
|
|
28
|
+
this.cancelCount++;
|
|
29
|
+
if (this.cancelCount >= 2) {
|
|
30
|
+
node_process_1.default.stderr.write('\n[!] Salida forzada por el usuario. Abortando de inmediato.\n');
|
|
31
|
+
node_process_1.default.exit(1);
|
|
32
|
+
}
|
|
33
|
+
node_process_1.default.stdout.write('\n[!] Cancelando de forma segura... (Presiona CTRL+C otra vez para forzar salida)\n');
|
|
34
|
+
this.cancel();
|
|
35
|
+
};
|
|
36
|
+
node_process_1.default.on('SIGINT', handleSignal);
|
|
37
|
+
node_process_1.default.on('SIGTERM', handleSignal);
|
|
38
|
+
}
|
|
39
|
+
cancel() {
|
|
40
|
+
if (this.cancelled)
|
|
41
|
+
return;
|
|
42
|
+
this.cancelled = true;
|
|
43
|
+
this.abortController.abort(new CancellationError());
|
|
44
|
+
}
|
|
45
|
+
isCancelled() {
|
|
46
|
+
return this.cancelled;
|
|
47
|
+
}
|
|
48
|
+
throwIfCancelled() {
|
|
49
|
+
if (this.cancelled) {
|
|
50
|
+
throw new CancellationError();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getSignal() {
|
|
54
|
+
return this.abortController.signal;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.ProcessCancellationToken = ProcessCancellationToken;
|
|
58
|
+
//# sourceMappingURL=cancelToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelToken.js","sourceRoot":"","sources":["../../src/utils/cancelToken.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAmC;AAInC,MAAa,iBAAkB,SAAQ,KAAK;IACxC,YAAY,OAAO,GAAG,mCAAmC;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;CACA;AARD,8CAQC;AAcD,MAAa,wBAAwB;IACzB,SAAS,GAAY,KAAK,CAAC;IAC3B,WAAW,GAAW,CAAC,CAAC;IACf,eAAe,CAAkB;IAEtD;QACI,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAEO,sBAAsB;QAC1B,MAAM,YAAY,GAAG,GAAS,EAAE;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;YAGvB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;gBACxB,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBACvF,sBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAEG,sBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;YAC5G,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,CAAC;QAGF,sBAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnC,sBAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAEO,MAAM;QACV,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACxD,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEM,gBAAgB;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAKM,SAAS;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACvC,CAAC;CACA;AArDD,4DAqDC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hxccoder/context-packer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI avanzado para empaquetar repositorios de código para LLMs",
|
|
5
|
+
"main": "dist/core/compiler.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"context-packer": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=18.0.0"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"dev": "tsc --watch",
|
|
15
|
+
"start": "npm run build && node ./dist/cli.js",
|
|
16
|
+
"clean": "rm -rf dist"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"cli",
|
|
23
|
+
"llm",
|
|
24
|
+
"context",
|
|
25
|
+
"ai",
|
|
26
|
+
"gemini",
|
|
27
|
+
"gpt",
|
|
28
|
+
"claude"
|
|
29
|
+
],
|
|
30
|
+
"author": "Benjamin Millalonco",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@inquirer/prompts": "^8.5.2",
|
|
34
|
+
"commander": "^12.0.0",
|
|
35
|
+
"ignore": "^5.3.1",
|
|
36
|
+
"picocolors": "^1.0.0",
|
|
37
|
+
"tiktoken": "^1.0.14"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.19.43",
|
|
41
|
+
"typescript": "^5.4.0"
|
|
42
|
+
}
|
|
43
|
+
}
|