@pasosdejesus/m 0.21.1 → 0.22.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.
Files changed (44) hide show
  1. package/dist/m.js +37 -5
  2. package/dist/m.js.map +1 -1
  3. package/dist/tasks/context-git.d.ts +27 -0
  4. package/dist/tasks/context-git.d.ts.map +1 -0
  5. package/dist/tasks/context-git.js +96 -0
  6. package/dist/tasks/context-git.js.map +1 -0
  7. package/dist/tasks/context-ignore.d.ts +18 -0
  8. package/dist/tasks/context-ignore.d.ts.map +1 -0
  9. package/dist/tasks/context-ignore.js +63 -0
  10. package/dist/tasks/context-ignore.js.map +1 -0
  11. package/dist/tasks/context-profiles.d.ts +42 -0
  12. package/dist/tasks/context-profiles.d.ts.map +1 -0
  13. package/dist/tasks/context-profiles.js +295 -0
  14. package/dist/tasks/context-profiles.js.map +1 -0
  15. package/dist/tasks/context-render.d.ts +37 -0
  16. package/dist/tasks/context-render.d.ts.map +1 -0
  17. package/dist/tasks/context-render.js +162 -0
  18. package/dist/tasks/context-render.js.map +1 -0
  19. package/dist/tasks/context-reqs.d.ts +20 -0
  20. package/dist/tasks/context-reqs.d.ts.map +1 -0
  21. package/dist/tasks/context-reqs.js +74 -0
  22. package/dist/tasks/context-reqs.js.map +1 -0
  23. package/dist/tasks/context-workspaces.d.ts +22 -0
  24. package/dist/tasks/context-workspaces.d.ts.map +1 -0
  25. package/dist/tasks/context-workspaces.js +116 -0
  26. package/dist/tasks/context-workspaces.js.map +1 -0
  27. package/dist/tasks/context.d.ts +39 -3
  28. package/dist/tasks/context.d.ts.map +1 -1
  29. package/dist/tasks/context.js +254 -262
  30. package/dist/tasks/context.js.map +1 -1
  31. package/dist/util/cli-parser.d.ts +3 -3
  32. package/dist/util/cli-parser.d.ts.map +1 -1
  33. package/dist/util/cli-parser.js +8 -1
  34. package/dist/util/cli-parser.js.map +1 -1
  35. package/dist/util/fs-walk.d.ts +11 -0
  36. package/dist/util/fs-walk.d.ts.map +1 -0
  37. package/dist/util/fs-walk.js +39 -0
  38. package/dist/util/fs-walk.js.map +1 -0
  39. package/dist/util/glob-match.d.ts +8 -0
  40. package/dist/util/glob-match.d.ts.map +1 -0
  41. package/dist/util/glob-match.js +79 -0
  42. package/dist/util/glob-match.js.map +1 -0
  43. package/package.json +2 -2
  44. package/src/tasks/README.md +7 -1
@@ -1,311 +1,303 @@
1
+ import { createWriteStream } from 'node:fs';
1
2
  import { readFile, stat } from 'node:fs/promises';
3
+ import { execSync } from 'node:child_process';
2
4
  import { join } from 'node:path';
3
- import { spawnSync } from 'node:child_process';
4
- import { createWriteStream, existsSync, readFileSync } from 'node:fs';
5
5
  import { info, success, warn, problem } from '../util/colors.js';
6
6
  import { createTranslator } from '../i18n/createTranslator.js';
7
7
  import { detectLocale } from '../util/locale.js';
8
8
  import commonCli from '../i18n/common-cli.js';
9
+ import { DENY_PATTERNS, loadIgnoreFile } from './context-ignore.js';
10
+ import { collectFiles, gitBranch, gitDiffStat, gitLog, gitRemoteUrl, gitRootOf, gitStatusShort, } from './context-git.js';
11
+ import { detectWorkspaces, formatTypes, formatWorkspaces, selectWorkspaces, } from './context-workspaces.js';
12
+ import { configPaths, listTasks, loadProfiles, matchesProfilePath, printConfig, resolveTask, } from './context-profiles.js';
13
+ import { collectOpenRequirements, renderRequirements } from './context-reqs.js';
14
+ import { DOCUMENT_SCHEMA, renderDocument, renderStructure, } from './context-render.js';
9
15
  const t = createTranslator(detectLocale(), {
10
16
  en: {
11
- 'context.generating': '📁 Generating project context...',
12
- 'context.not_git': '❌ Error: Not in a git repository',
17
+ 'context.generating': '[TODO] Generating project context...',
18
+ 'context.not_git': '[FAIL] Not in a git repository',
13
19
  'context.git_hint': ' Run: git init (or clone a repository)',
14
20
  'context.branch': ' Branch: {{0}}',
15
21
  'context.output': ' Output: {{0}}',
22
+ 'context.done': '[OK] Context written: {{0}}',
23
+ 'context.clipboard': '[OK] Context copied to the clipboard ({{0}}KB)',
24
+ 'context.clipboard_fail': '[WARN] Could not copy to the clipboard: {{0}}',
25
+ 'context.included': ' Files included: {{0}}',
26
+ 'context.size': ' Content size: {{0}}KB / document: {{1}}KB',
27
+ 'context.skipped_budget': ' Skipped by --limit {{0}}KB: {{1}}',
28
+ 'context.skipped_size': ' Skipped by size (>{{0}}KB): {{1}}',
29
+ 'context.not_found': ' Profile paths not found: {{0}}',
30
+ 'context.types': ' Types: {{0}}',
31
+ 'context.workspaces': ' Workspaces: {{0}}',
32
+ 'context.task': ' Task: {{0}} (root {{1}})',
33
+ 'context.reqs': ' Open requirements: {{0}}',
16
34
  },
17
35
  es: {
18
- 'context.generating': '📁 Generando contexto del proyecto...',
19
- 'context.not_git': '❌ Error: No estás en un repositorio git',
36
+ 'context.generating': '[TODO] Generando contexto del proyecto...',
37
+ 'context.not_git': '[FAIL] No estás en un repositorio git',
20
38
  'context.git_hint': ' Ejecuta: git init (o clona un repositorio)',
21
39
  'context.branch': ' Branch: {{0}}',
22
40
  'context.output': ' Output: {{0}}',
41
+ 'context.done': '[OK] Contexto escrito: {{0}}',
42
+ 'context.clipboard': '[OK] Contexto copiado al portapapeles ({{0}}KB)',
43
+ 'context.clipboard_fail': '[WARN] No se pudo copiar al portapapeles: {{0}}',
44
+ 'context.included': ' Archivos incluidos: {{0}}',
45
+ 'context.size': ' Tamaño del contenido: {{0}}KB / documento: {{1}}KB',
46
+ 'context.skipped_budget': ' Omitidos por --limit {{0}}KB: {{1}}',
47
+ 'context.skipped_size': ' Omitidos por tamaño (>{{0}}KB): {{1}}',
48
+ 'context.not_found': ' Rutas del perfil no encontradas: {{0}}',
49
+ 'context.types': ' Tipos: {{0}}',
50
+ 'context.workspaces': ' Workspaces: {{0}}',
51
+ 'context.task': ' Tarea: {{0}} (raíz {{1}})',
52
+ 'context.reqs': ' Requerimientos abiertos: {{0}}',
23
53
  },
24
54
  }, commonCli);
25
- const DEFAULT_EXCLUDES = [
26
- 'dist', 'build', 'node_modules', 'coverage', '.next',
27
- '__pycache__', '*.lock', '*.map', '*.min.js', '*.log',
28
- '*.tmp', '.DS_Store', 'templates', 'tests'
29
- ];
30
- const MAX_FILE_SIZE = 30 * 1024; // 30KB por defecto
31
- const DEFAULT_LIMIT_KB = 100; // 100KB por defecto para el contexto total
32
- async function findGitRoot() {
33
- const result = spawnSync('git', ['rev-parse', '--show-toplevel'], {
34
- encoding: 'utf-8',
35
- stdio: ['pipe', 'pipe', 'pipe']
36
- });
37
- if (result.status === 0) {
38
- return result.stdout.trim();
39
- }
40
- return null;
55
+ export const MAX_FILE_SIZE = 30 * 1024;
56
+ export const DEFAULT_LIMIT_KB = 100;
57
+ function looksBinary(buffer) {
58
+ return buffer.subarray(0, 8192).includes(0);
41
59
  }
42
- async function getCurrentBranch() {
43
- const result = spawnSync('git', ['branch', '--show-current'], {
44
- encoding: 'utf-8',
45
- stdio: ['pipe', 'pipe', 'pipe']
46
- });
47
- if (result.status === 0 && result.stdout.trim()) {
48
- return result.stdout.trim();
49
- }
50
- return null;
60
+ async function writeDocument(outputFile, doc) {
61
+ const stream = createWriteStream(outputFile);
62
+ stream.write(doc);
63
+ stream.end();
64
+ await new Promise((resolve) => stream.on('close', () => resolve()));
51
65
  }
52
- async function getRemoteUrl() {
53
- const result = spawnSync('git', ['config', '--get', 'remote.origin.url'], {
54
- encoding: 'utf-8',
55
- stdio: ['pipe', 'pipe', 'pipe']
56
- });
57
- if (result.status === 0 && result.stdout.trim()) {
58
- // Sanitizar: eliminar credenciales
59
- return result.stdout.trim().replace(/\/\/[^@]*@/, '//');
66
+ function copyToClipboard(doc) {
67
+ try {
68
+ execSync('xclip -selection clipboard', {
69
+ input: doc,
70
+ encoding: 'utf-8',
71
+ stdio: ['pipe', 'ignore', 'ignore'],
72
+ });
73
+ return true;
60
74
  }
61
- return 'local';
62
- }
63
- function isExcluded(filePath, excludes) {
64
- for (const pattern of excludes) {
65
- // Soporte para patrones glob simples
66
- if (pattern.includes('*')) {
67
- const regex = new RegExp(pattern.replace(/\*/g, '.*'));
68
- if (regex.test(filePath))
69
- return true;
70
- }
71
- else {
72
- // Coincidencia exacta o de directorio
73
- if (filePath === pattern ||
74
- filePath.startsWith(`${pattern}/`) ||
75
- filePath.includes(`/${pattern}/`)) {
76
- return true;
77
- }
78
- }
75
+ catch {
76
+ return false;
79
77
  }
80
- return false;
81
78
  }
82
- function detectLanguage(filePath) {
83
- const ext = filePath.split('.').pop()?.toLowerCase() || '';
84
- const langMap = {
85
- 'sh': 'bash', 'bash': 'bash', 'zsh': 'bash',
86
- 'py': 'python',
87
- 'js': 'javascript', 'ts': 'typescript',
88
- 'jsx': 'jsx', 'tsx': 'tsx',
89
- 'json': 'json',
90
- 'md': 'markdown',
91
- 'yml': 'yaml', 'yaml': 'yaml',
92
- 'c': 'c', 'h': 'c',
93
- 'cpp': 'cpp', 'hpp': 'cpp',
94
- 'go': 'go',
95
- 'rs': 'rust',
96
- 'sql': 'sql',
97
- 'html': 'html', 'css': 'css',
98
- 'toml': 'toml',
99
- 'tf': 'hcl', 'tfvars': 'hcl'
100
- };
101
- return langMap[ext] || '';
102
- }
103
- async function getFileList(branch) {
104
- const branchArg = branch || await getCurrentBranch() || 'HEAD';
105
- const result = spawnSync('git', ['ls-tree', '-r', '--name-only', branchArg], {
106
- encoding: 'utf-8',
107
- stdio: ['pipe', 'pipe', 'pipe']
108
- });
109
- if (result.status !== 0) {
110
- return [];
79
+ export async function buildContext(options = {}) {
80
+ const outputFile = options.output || 'contexto.md';
81
+ const maxSize = options.full ? Number.MAX_SAFE_INTEGER : (options.maxSize || MAX_FILE_SIZE);
82
+ const limitBytes = (options.limit || DEFAULT_LIMIT_KB) * 1024;
83
+ const warnings = [];
84
+ const repoRoot = gitRootOf(process.cwd());
85
+ if (!repoRoot)
86
+ throw new Error(t('context.not_git'));
87
+ const workspaces = await detectWorkspaces(repoRoot, { maxDepth: options.depth ?? 3 });
88
+ const loaded = loadProfiles({ repoRoot });
89
+ warnings.push(...loaded.warnings);
90
+ const selection = selectWorkspaces(workspaces, { type: options.type, root: options.root });
91
+ if (selection.error)
92
+ throw new Error(selection.error);
93
+ const selected = selection.selected;
94
+ if (options.printConfig) {
95
+ const doc = printConfig(loaded, {
96
+ workspaces,
97
+ selectedWorkspaces: selected,
98
+ denyList: DENY_PATTERNS,
99
+ ignoreFiles: configPaths(repoRoot),
100
+ });
101
+ return {
102
+ doc: doc + '\n', warnings, outputFile, included: 0, contentBytes: 0,
103
+ documentBytes: Buffer.byteLength(doc), skippedBudget: 0, skippedSize: 0,
104
+ skippedBinary: 0, notFound: [], files: [],
105
+ types: formatTypes(selected), workspaces: formatWorkspaces(selected), requirements: 0,
106
+ };
111
107
  }
112
- return result.stdout.trim().split('\n').filter((f) => f);
113
- }
114
- async function getDirectoryTree(excludes = DEFAULT_EXCLUDES) {
115
- // Construir patrones de exclusión para tree
116
- const excludePatterns = excludes.filter(e => !e.includes('*')).join('|');
117
- let treeCmd = ['tree', '-a', '--dirsfirst', '-L', '2'];
118
- if (excludePatterns) {
119
- treeCmd = treeCmd.concat(['-I', excludePatterns]);
108
+ if (options.listTasks) {
109
+ const tasks = listTasks(selected, loaded.profiles);
110
+ const doc = tasks.map((entry) => `${entry.id}\t(root ${entry.root})\t${entry.description ?? ''}`).join('\n');
111
+ return {
112
+ doc: doc + '\n', warnings, outputFile, included: 0, contentBytes: 0,
113
+ documentBytes: Buffer.byteLength(doc), skippedBudget: 0, skippedSize: 0,
114
+ skippedBinary: 0, notFound: [], files: [],
115
+ types: formatTypes(selected), workspaces: formatWorkspaces(selected), requirements: 0,
116
+ };
120
117
  }
121
- const result = spawnSync('tree', treeCmd, {
122
- encoding: 'utf-8',
123
- stdio: ['pipe', 'pipe', 'pipe']
124
- });
125
- if (result.status !== 0) {
126
- // Fallback a find si tree no está disponible
127
- let findCmd = ['find', '.', '-type', 'd', '-maxdepth', '2'];
128
- for (const pattern of excludes) {
129
- if (!pattern.includes('*')) {
130
- findCmd = findCmd.concat(['-not', '-path', `./${pattern}/*`, '-not', '-path', `./${pattern}`]);
131
- }
132
- }
133
- const findResult = spawnSync('find', findCmd, {
134
- encoding: 'utf-8',
135
- stdio: ['pipe', 'pipe', 'pipe']
136
- });
137
- return findResult.stdout || 'tree command not available';
118
+ let taskId = '';
119
+ let taskRoot = '.';
120
+ let profile;
121
+ if (options.task) {
122
+ const resolved = resolveTask(options.task, selected, loaded.profiles);
123
+ if ('error' in resolved)
124
+ throw new Error(resolved.error);
125
+ taskId = resolved.id;
126
+ taskRoot = resolved.root;
127
+ profile = resolved.profile;
138
128
  }
139
- return result.stdout;
140
- }
141
- async function getGitLog(limit = 5) {
142
- const result = spawnSync('git', ['log', `-${limit}`, '--stat', '--oneline'], {
143
- encoding: 'utf-8',
144
- stdio: ['pipe', 'pipe', 'pipe']
129
+ const filters = {
130
+ include: options.include ?? [],
131
+ exclude: options.exclude ?? [],
132
+ ignoreFile: loadIgnoreFile(join(repoRoot, '.contextignore')),
133
+ };
134
+ const profileMatch = profile
135
+ ? (filePath) => (profile.include).some((glob) => matchesProfilePath(filePath, taskRoot, glob))
136
+ && !(profile.exclude ?? []).some((glob) => matchesProfilePath(filePath, taskRoot, glob))
137
+ : undefined;
138
+ const files = collectFiles({
139
+ repoRoot,
140
+ branch: options.branch,
141
+ untracked: options.untracked,
142
+ outputFile,
143
+ filters,
144
+ profileMatch,
145
145
  });
146
- if (result.status !== 0) {
147
- return 'git log not available';
146
+ const notFound = [];
147
+ if (profile) {
148
+ const optional = new Set(profile.optional ?? []);
149
+ for (const glob of profile.include) {
150
+ if (optional.has(glob))
151
+ continue;
152
+ const matched = files.some((filePath) => matchesProfilePath(filePath, taskRoot, glob));
153
+ if (!matched)
154
+ notFound.push(`${glob} (root ${taskRoot})`);
155
+ }
148
156
  }
149
- return result.stdout;
150
- }
151
- async function writeContextFile(outputPath, files, excludes, maxSize, maxTotalBytes) {
152
- const gitRoot = await findGitRoot();
153
- const projectName = gitRoot ? gitRoot.split('/').pop() || 'proyecto' : 'proyecto';
154
- const branch = await getCurrentBranch() || 'unknown';
155
- const remoteUrl = await getRemoteUrl();
156
- // Usar un array para acumular el contenido y escribirlo de una vez
157
- const chunks = [];
158
- // Cabecera del documento
159
- chunks.push(`# Contexto del Proyecto: ${projectName}\n\n`);
160
- chunks.push(`- **Branch:** ${branch}\n`);
161
- chunks.push(`- **Repositorio:** ${remoteUrl}\n`);
162
- chunks.push(`- **Fecha:** ${new Date().toISOString()}\n`);
163
- chunks.push(`- **Ruta:** ${gitRoot || process.cwd()}\n\n`);
164
- // Estructura de directorios
165
- chunks.push(`## Estructura de Directorios\n\n`);
166
- chunks.push(`\`\`\`\n`);
167
- const tree = await getDirectoryTree(excludes);
168
- chunks.push(tree);
169
- chunks.push(`\`\`\`\n\n`);
170
- // Historial de Git
171
- chunks.push(`## Historial de Git (últimos 5 commits)\n\n`);
172
- chunks.push(`\`\`\`\n`);
173
- const gitLog = await getGitLog(5);
174
- chunks.push(gitLog);
175
- chunks.push(`\`\`\`\n\n`);
176
- chunks.push(`---\n\n`);
177
- let count = 0;
178
- let totalSize = 0;
157
+ const renderFiles = [];
158
+ const skipped = [];
159
+ let contentBytes = 0;
179
160
  let skippedSize = 0;
180
- let skippedExclude = 0;
181
- let skippedLimit = 0;
182
- for (const file of files) {
183
- // Verificar exclusión
184
- if (isExcluded(file, excludes)) {
185
- skippedExclude++;
186
- continue;
187
- }
188
- const fullPath = join(gitRoot || process.cwd(), file);
189
- try {
190
- const fileStat = await stat(fullPath);
191
- // Verificar límite total antes de agregar
192
- if (maxTotalBytes && totalSize + fileStat.size > maxTotalBytes) {
193
- skippedLimit++;
161
+ let skippedBinary = 0;
162
+ if (!options.structure && !options.files) {
163
+ for (const filePath of files) {
164
+ const fullPath = join(repoRoot, filePath);
165
+ const fileStat = await stat(fullPath).catch(() => null);
166
+ if (!fileStat || !fileStat.isFile())
194
167
  continue;
195
- }
196
- if (fileStat.size > maxSize) {
197
- warn(` ⚠️ Omitido (>${maxSize / 1024}KB): ${file} (${Math.round(fileStat.size / 1024)}KB)`);
168
+ const size = fileStat.size;
169
+ if (size > maxSize) {
170
+ skipped.push({ path: filePath, size, reason: 'too-big' });
198
171
  skippedSize++;
199
172
  continue;
200
173
  }
201
- const content = await readFile(fullPath, 'utf-8');
202
- const lang = detectLanguage(file);
203
- const timestamp = new Date().toISOString().replace(/[-:]/g, '').slice(0, 15);
204
- chunks.push(`___INICIO_ARCHIVO_${timestamp}___ ${file}\n\n`);
205
- chunks.push(`\`\`\`${lang}\n`);
206
- chunks.push(content);
207
- if (!content.endsWith('\n'))
208
- chunks.push('\n');
209
- chunks.push(`\`\`\`\n\n`);
210
- count++;
211
- totalSize += fileStat.size;
174
+ const buffer = await readFile(fullPath).catch(() => null);
175
+ if (!buffer)
176
+ continue;
177
+ if (looksBinary(buffer)) {
178
+ skipped.push({ path: filePath, size, reason: 'binary' });
179
+ skippedBinary++;
180
+ continue;
181
+ }
182
+ const content = buffer.toString('utf-8');
183
+ renderFiles.push({ path: filePath, content });
184
+ contentBytes += size;
212
185
  }
213
- catch (err) {
214
- warn(` ⚠️ No se pudo leer: ${file}`);
186
+ }
187
+ const structureDepth = options.depth ?? 2;
188
+ const structure = renderStructure(files, structureDepth);
189
+ const gitParts = [`log:\n${gitLog(repoRoot, 5, { authors: options.gitAuthors })}`];
190
+ if (options.git) {
191
+ const status = gitStatusShort(repoRoot);
192
+ const diff = gitDiffStat(repoRoot);
193
+ if (status)
194
+ gitParts.push(`status:\n${status}`);
195
+ if (diff)
196
+ gitParts.push(`diff --stat:\n${diff}`);
197
+ }
198
+ let requirements;
199
+ let requirementCount = 0;
200
+ if (options.reqs) {
201
+ const collected = await collectOpenRequirements(join(repoRoot, 'REQ'), { max: options.reqMax ?? 15 });
202
+ requirementCount = collected.open.length;
203
+ if (collected.open.length > 0 || collected.closed > 0) {
204
+ requirements = renderRequirements(collected.open);
215
205
  }
216
206
  }
217
- // Escribir todo de una vez
218
- const writeStream = createWriteStream(outputPath);
219
- writeStream.write(chunks.join(''));
220
- writeStream.end();
221
- // Esperar a que termine de escribir
222
- await new Promise((resolve) => {
223
- writeStream.on('close', () => resolve());
207
+ const rendered = renderDocument({
208
+ project: repoRoot.split('/').pop() || 'project',
209
+ repo: gitRemoteUrl(repoRoot),
210
+ branch: gitBranch(repoRoot),
211
+ types: formatTypes(selected),
212
+ workspaces: formatWorkspaces(selected),
213
+ task: taskId ? `${taskId} (root ${taskRoot})` : undefined,
214
+ generated: options.deterministic ? undefined : new Date().toISOString(),
215
+ gitState: gitParts.join('\n\n'),
216
+ requirements,
217
+ structure: options.files ? undefined : structure,
218
+ filePaths: options.files ? files : undefined,
219
+ files: options.structure || options.files ? undefined : renderFiles,
220
+ skipped,
221
+ notFound,
222
+ limitBytes,
223
+ truncate: options.truncate,
224
+ deterministic: options.deterministic,
224
225
  });
225
- return { count, totalSize, skippedSize, skippedExclude, skippedLimit };
226
- }
227
- function loadExcludeFile(excludeFile) {
228
- if (!excludeFile || !existsSync(excludeFile)) {
229
- return DEFAULT_EXCLUDES;
230
- }
231
- const content = readFileSync(excludeFile, 'utf-8');
232
- return content
233
- .split('\n')
234
- .map((line) => line.trim())
235
- .filter((line) => line && !line.startsWith('#'));
226
+ const summary = {
227
+ outputFile,
228
+ included: rendered.included,
229
+ contentBytes,
230
+ documentBytes: Buffer.byteLength(rendered.doc),
231
+ skippedBudget: rendered.skipped.filter((entry) => entry.reason === 'budget').length,
232
+ skippedSize,
233
+ skippedBinary,
234
+ notFound,
235
+ files,
236
+ types: formatTypes(selected),
237
+ workspaces: formatWorkspaces(selected),
238
+ task: taskId ? `${taskId} (root ${taskRoot})` : undefined,
239
+ requirements: requirementCount,
240
+ };
241
+ return { ...summary, doc: rendered.doc, warnings };
236
242
  }
237
243
  export async function runAiContext(options = {}) {
238
244
  const outputFile = options.output || 'contexto.md';
239
- const branch = options.branch;
240
- const maxSize = options.full ? Number.MAX_SAFE_INTEGER : (options.maxSize || MAX_FILE_SIZE);
241
- const excludePatterns = options.exclude || loadExcludeFile('.contextignore');
242
- info(t("context.generating"));
243
- if (branch)
244
- info(` Branch: ${branch}`);
245
- info(` Output: ${outputFile}`);
246
- info(` Excluyendo: ${excludePatterns.slice(0, 5).join(', ')}${excludePatterns.length > 5 ? '...' : ''}`);
247
- console.log('');
248
- // Verificar que estamos en un repositorio git
249
- const gitRoot = await findGitRoot();
250
- if (!gitRoot) {
251
- problem(t("context.not_git"));
252
- problem(t("context.git_hint"));
245
+ const limitKB = options.limit || DEFAULT_LIMIT_KB;
246
+ const maxSizeKB = options.full ? Infinity : Math.round((options.maxSize || MAX_FILE_SIZE) / 1024);
247
+ const quiet = !!options.stdout || !!options.printConfig || !!options.listTasks;
248
+ const status = (message) => {
249
+ if (quiet)
250
+ process.stderr.write(message + '\n');
251
+ else
252
+ process.stdout.write(message + '\n');
253
+ };
254
+ if (!quiet)
255
+ info(t('context.generating'));
256
+ let result;
257
+ try {
258
+ result = await buildContext(options);
253
259
  }
254
- // Obtener lista de archivos
255
- const files = await getFileList(branch);
256
- if (files.length === 0) {
257
- problem('❌ Error: No se encontraron archivos en el repositorio');
260
+ catch (error) {
261
+ problem(error instanceof Error ? error.message : String(error));
262
+ if (String(error).includes(t('context.not_git')))
263
+ problem(t('context.git_hint'));
264
+ process.exitCode = 1;
258
265
  return;
259
266
  }
260
- // Aplicar límite de tamaño si se especificó
261
- const limitKB = options.limit || DEFAULT_LIMIT_KB;
262
- const maxTotalBytes = limitKB * 1024;
263
- let currentTotalBytes = 0;
264
- // Escribir archivo de contexto con límite
265
- const result = await writeContextFile(outputFile, files, excludePatterns, maxSize, maxTotalBytes);
266
- const outputStat = await stat(outputFile);
267
- const outputSizeKB = Math.round(outputStat.size / 1024);
268
- const totalSizeKB = Math.round(result.totalSize / 1024);
269
- console.log('');
270
- success(`✅ Contexto generado: ${outputFile}`);
271
- info(` Archivos incluidos: ${result.count}`);
272
- info(` Tamaño total contenido: ${totalSizeKB}KB`);
273
- info(` Tamaño del archivo: ${outputSizeKB}KB`);
274
- if (limitKB && result.skippedLimit > 0) {
275
- info(` Limitado por --limit ${limitKB}KB: ${result.skippedLimit} archivos omitidos`);
276
- }
277
- if (result.skippedExclude > 0)
278
- info(` Omitidos por patrón: ${result.skippedExclude}`);
279
- if (result.skippedSize > 0)
280
- info(` Omitidos por tamaño (>${maxSize / 1024}KB): ${result.skippedSize}`);
281
- console.log('');
282
- info(`📋 Para enviar a DeepSeek:`);
283
- info(` 1. En chat.deepseek.com haz clic en "Adjuntar archivo"`);
284
- info(` 2. Selecciona ${outputFile}`);
285
- info(` 3. El archivo se cargará automáticamente`);
286
- if (result.count === 0) {
287
- warn(`\n⚠️ Advertencia: No se incluyó ningún archivo.`);
288
- warn(` Revisa tus patrones de exclusión en .contextignore`);
267
+ if (quiet) {
268
+ for (const warning of result.warnings)
269
+ status(`[WARN] ${warning}`);
270
+ process.stdout.write(result.doc);
271
+ return;
289
272
  }
290
- const shouldCopy = !options.noClipboard; // Por defecto true
291
- // Copiar al portapapeles si no es --no-clip
292
- if (shouldCopy) {
293
- try {
294
- const content = await readFile(outputFile, 'utf-8');
295
- const { execSync } = await import('node:child_process');
296
- // Usar execSync con input - esto funciona bien en OpenBSD
297
- execSync('xclip -selection clipboard', {
298
- input: content,
299
- encoding: 'utf-8',
300
- stdio: ['pipe', 'ignore', 'ignore']
301
- });
302
- success(`📋 Contexto copiado al portapapeles (${outputSizeKB}KB)`);
273
+ for (const warning of result.warnings)
274
+ warn(`[WARN] ${warning}`);
275
+ await writeDocument(outputFile, result.doc);
276
+ success(t('context.done', outputFile));
277
+ if (!options.noClipboard) {
278
+ if (copyToClipboard(result.doc)) {
279
+ success(t('context.clipboard', String(Math.round(result.documentBytes / 1024))));
303
280
  }
304
- catch (err) {
305
- warn(`⚠️ No se pudo copiar al portapapeles: ${err.message}`);
306
- warn(' El archivo se guardó como: ' + outputFile);
281
+ else {
282
+ warn(t('context.clipboard_fail', outputFile));
307
283
  }
308
- await new Promise(resolve => setTimeout(resolve, 100));
309
284
  }
285
+ info(t('context.types', result.types));
286
+ info(` Workspaces: ${result.workspaces}`);
287
+ if (result.task)
288
+ info(t('context.task', result.task, result.workspaces));
289
+ info(t('context.included', String(result.included)));
290
+ info(t('context.size', String(Math.round(result.contentBytes / 1024)), String(Math.round(result.documentBytes / 1024))));
291
+ if (result.skippedBudget > 0)
292
+ info(t('context.skipped_budget', String(limitKB), String(result.skippedBudget)));
293
+ if (result.skippedSize > 0)
294
+ info(t('context.skipped_size', String(maxSizeKB), String(result.skippedSize)));
295
+ if (result.skippedBinary > 0)
296
+ warn(`[WARN] Binary files skipped: ${result.skippedBinary}`);
297
+ if (options.reqs)
298
+ info(t('context.reqs', String(result.requirements)));
299
+ if (result.notFound.length > 0)
300
+ warn(t('context.not_found', result.notFound.join(', ')));
301
+ info(` Schema: ${DOCUMENT_SCHEMA}`);
310
302
  }
311
303
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tasks/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tasks/context.ts"],"names":[],"mappings":"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"}