@compr/contextengine-mcp 1.9.44

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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/agents.d.ts +127 -0
  4. package/dist/agents.d.ts.map +1 -0
  5. package/dist/agents.js +1162 -0
  6. package/dist/agents.js.map +1 -0
  7. package/dist/cache.d.ts +15 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +117 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/cli.d.ts +10 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +227 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/code-chunker.d.ts +12 -0
  16. package/dist/code-chunker.d.ts.map +1 -0
  17. package/dist/code-chunker.js +263 -0
  18. package/dist/code-chunker.js.map +1 -0
  19. package/dist/collectors.d.ts +63 -0
  20. package/dist/collectors.d.ts.map +1 -0
  21. package/dist/collectors.js +617 -0
  22. package/dist/collectors.js.map +1 -0
  23. package/dist/config.d.ts +59 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +213 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/embeddings.d.ts +31 -0
  28. package/dist/embeddings.d.ts.map +1 -0
  29. package/dist/embeddings.js +91 -0
  30. package/dist/embeddings.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +557 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/ingest.d.ts +23 -0
  36. package/dist/ingest.d.ts.map +1 -0
  37. package/dist/ingest.js +79 -0
  38. package/dist/ingest.js.map +1 -0
  39. package/dist/search.d.ts +11 -0
  40. package/dist/search.d.ts.map +1 -0
  41. package/dist/search.js +58 -0
  42. package/dist/search.js.map +1 -0
  43. package/dist/sessions.d.ts +46 -0
  44. package/dist/sessions.d.ts.map +1 -0
  45. package/dist/sessions.js +143 -0
  46. package/dist/sessions.js.map +1 -0
  47. package/dist/test-sessions.d.ts +2 -0
  48. package/dist/test-sessions.d.ts.map +1 -0
  49. package/dist/test-sessions.js.map +1 -0
  50. package/dist/test.d.ts +2 -0
  51. package/dist/test.d.ts.map +1 -0
  52. package/dist/test.js +52 -0
  53. package/dist/test.js.map +1 -0
  54. package/package.json +58 -0
@@ -0,0 +1,617 @@
1
+ import { execSync } from "child_process";
2
+ import { readFileSync, existsSync, readdirSync, statSync } from "fs";
3
+ import { resolve, join } from "path";
4
+ import { homedir } from "os";
5
+ /**
6
+ * Operational data collectors — the unique moat of ContextEngine.
7
+ *
8
+ * Each collector gathers data from a specific operational source
9
+ * (git, package managers, environment, shell history, running services,
10
+ * server configs, scheduled tasks) and returns Chunk[] in the same
11
+ * format as the Markdown parser so they integrate seamlessly into
12
+ * keyword + semantic search.
13
+ *
14
+ * Design principles:
15
+ * - All collectors are **read-only** and **safe** — no writes, no side effects
16
+ * - Failed commands produce empty arrays (never crash the server)
17
+ * - Sensitive values (.env passwords, tokens) are **redacted**
18
+ * - Each collector operates on a project directory path
19
+ */
20
+ // ---------------------------------------------------------------------------
21
+ // Helpers
22
+ // ---------------------------------------------------------------------------
23
+ /** Run a shell command, return stdout or empty string on failure */
24
+ function exec(cmd, cwd) {
25
+ try {
26
+ return execSync(cmd, {
27
+ cwd,
28
+ encoding: "utf-8",
29
+ timeout: 10_000,
30
+ stdio: ["pipe", "pipe", "pipe"],
31
+ }).trim();
32
+ }
33
+ catch {
34
+ return "";
35
+ }
36
+ }
37
+ /** Check if a command exists */
38
+ function commandExists(cmd) {
39
+ return exec(`command -v ${cmd}`) !== "";
40
+ }
41
+ /** Redact sensitive values in .env content */
42
+ function redactSensitive(content) {
43
+ const sensitivePatterns = /^(.*(?:PASSWORD|SECRET|KEY|TOKEN|CREDENTIAL|AUTH|PRIVATE|API_KEY|DB_PASSWORD|MAIL_PASSWORD|JWT_SECRET|APP_KEY|ENCRYPT)[^=]*=\s*).+$/gim;
44
+ return content.replace(sensitivePatterns, "$1[REDACTED]");
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // 1. Git Log Collector
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Collect recent git history for a project directory.
51
+ * Produces chunks with commit messages, authors, dates — gives AI
52
+ * context about recent changes and development velocity.
53
+ */
54
+ export function collectGitLog(projectDir, sourceName) {
55
+ if (!existsSync(join(projectDir, ".git")))
56
+ return [];
57
+ // Recent 50 commits, one-line format with hash, date, author, message
58
+ const log = exec(`git --no-pager log --oneline --format="%h|%ai|%an|%s" -50`, projectDir);
59
+ if (!log)
60
+ return [];
61
+ const lines = log.split("\n").filter(Boolean);
62
+ if (lines.length === 0)
63
+ return [];
64
+ // Current branch + remote info
65
+ const branch = exec("git branch --show-current", projectDir) || "unknown";
66
+ const remotes = exec("git remote -v", projectDir);
67
+ const status = exec("git --no-pager diff --stat HEAD~1..HEAD", projectDir);
68
+ const chunks = [];
69
+ // Summary chunk
70
+ chunks.push({
71
+ source: `${sourceName} — git`,
72
+ section: "## Git Overview",
73
+ content: [
74
+ `Branch: ${branch}`,
75
+ `Commits shown: ${lines.length}`,
76
+ remotes ? `\nRemotes:\n${remotes}` : "",
77
+ status ? `\nLast commit changes:\n${status}` : "",
78
+ ]
79
+ .filter(Boolean)
80
+ .join("\n"),
81
+ lineStart: 1,
82
+ lineEnd: 1,
83
+ });
84
+ // Batch commits into groups of 10 for searchable chunks
85
+ for (let i = 0; i < lines.length; i += 10) {
86
+ const batch = lines.slice(i, i + 10);
87
+ const formatted = batch
88
+ .map((line) => {
89
+ const [hash, date, author, ...msgParts] = line.split("|");
90
+ return `${hash} ${date?.split(" ")[0]} ${author}: ${msgParts.join("|")}`;
91
+ })
92
+ .join("\n");
93
+ chunks.push({
94
+ source: `${sourceName} — git`,
95
+ section: `## Git Log (${i + 1}-${Math.min(i + 10, lines.length)})`,
96
+ content: formatted,
97
+ lineStart: i + 1,
98
+ lineEnd: Math.min(i + 10, lines.length),
99
+ });
100
+ }
101
+ return chunks;
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // 2. Package.json Collector (Node.js projects)
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Collect dependency and script info from package.json.
108
+ * Critical for version agent + understanding project capabilities.
109
+ */
110
+ export function collectPackageJson(projectDir, sourceName) {
111
+ const pkgPath = join(projectDir, "package.json");
112
+ if (!existsSync(pkgPath))
113
+ return [];
114
+ try {
115
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
116
+ const chunks = [];
117
+ // Project identity
118
+ chunks.push({
119
+ source: `${sourceName} — package.json`,
120
+ section: "## Package Identity",
121
+ content: [
122
+ `Name: ${pkg.name || "unnamed"}`,
123
+ `Version: ${pkg.version || "0.0.0"}`,
124
+ pkg.description ? `Description: ${pkg.description}` : "",
125
+ pkg.license ? `License: ${pkg.license}` : "",
126
+ pkg.engines
127
+ ? `Engines: ${JSON.stringify(pkg.engines)}`
128
+ : "",
129
+ pkg.type ? `Module type: ${pkg.type}` : "",
130
+ ]
131
+ .filter(Boolean)
132
+ .join("\n"),
133
+ lineStart: 1,
134
+ lineEnd: 1,
135
+ });
136
+ // Scripts
137
+ if (pkg.scripts && Object.keys(pkg.scripts).length > 0) {
138
+ chunks.push({
139
+ source: `${sourceName} — package.json`,
140
+ section: "## npm Scripts",
141
+ content: Object.entries(pkg.scripts)
142
+ .map(([k, v]) => `${k}: ${v}`)
143
+ .join("\n"),
144
+ lineStart: 1,
145
+ lineEnd: 1,
146
+ });
147
+ }
148
+ // Dependencies (names + versions, no code)
149
+ const deps = pkg.dependencies || {};
150
+ const devDeps = pkg.devDependencies || {};
151
+ if (Object.keys(deps).length > 0) {
152
+ chunks.push({
153
+ source: `${sourceName} — package.json`,
154
+ section: "## Dependencies",
155
+ content: Object.entries(deps)
156
+ .map(([k, v]) => `${k}: ${v}`)
157
+ .join("\n"),
158
+ lineStart: 1,
159
+ lineEnd: 1,
160
+ });
161
+ }
162
+ if (Object.keys(devDeps).length > 0) {
163
+ chunks.push({
164
+ source: `${sourceName} — package.json`,
165
+ section: "## Dev Dependencies",
166
+ content: Object.entries(devDeps)
167
+ .map(([k, v]) => `${k}: ${v}`)
168
+ .join("\n"),
169
+ lineStart: 1,
170
+ lineEnd: 1,
171
+ });
172
+ }
173
+ return chunks;
174
+ }
175
+ catch {
176
+ return [];
177
+ }
178
+ }
179
+ // ---------------------------------------------------------------------------
180
+ // 3. Composer.json Collector (PHP projects)
181
+ // ---------------------------------------------------------------------------
182
+ /**
183
+ * Collect dependency info from composer.json (Laravel, Symfony, etc.).
184
+ */
185
+ export function collectComposerJson(projectDir, sourceName) {
186
+ const composerPath = join(projectDir, "composer.json");
187
+ if (!existsSync(composerPath))
188
+ return [];
189
+ try {
190
+ const composer = JSON.parse(readFileSync(composerPath, "utf-8"));
191
+ const chunks = [];
192
+ chunks.push({
193
+ source: `${sourceName} — composer.json`,
194
+ section: "## Composer Package",
195
+ content: [
196
+ `Name: ${composer.name || "unnamed"}`,
197
+ composer.description ? `Description: ${composer.description}` : "",
198
+ composer.type ? `Type: ${composer.type}` : "",
199
+ composer.license ? `License: ${composer.license}` : "",
200
+ composer.require?.php ? `PHP: ${composer.require.php}` : "",
201
+ ]
202
+ .filter(Boolean)
203
+ .join("\n"),
204
+ lineStart: 1,
205
+ lineEnd: 1,
206
+ });
207
+ const deps = composer.require || {};
208
+ if (Object.keys(deps).length > 0) {
209
+ chunks.push({
210
+ source: `${sourceName} — composer.json`,
211
+ section: "## PHP Dependencies",
212
+ content: Object.entries(deps)
213
+ .map(([k, v]) => `${k}: ${v}`)
214
+ .join("\n"),
215
+ lineStart: 1,
216
+ lineEnd: 1,
217
+ });
218
+ }
219
+ const devDeps = composer["require-dev"] || {};
220
+ if (Object.keys(devDeps).length > 0) {
221
+ chunks.push({
222
+ source: `${sourceName} — composer.json`,
223
+ section: "## PHP Dev Dependencies",
224
+ content: Object.entries(devDeps)
225
+ .map(([k, v]) => `${k}: ${v}`)
226
+ .join("\n"),
227
+ lineStart: 1,
228
+ lineEnd: 1,
229
+ });
230
+ }
231
+ // Scripts
232
+ if (composer.scripts && Object.keys(composer.scripts).length > 0) {
233
+ chunks.push({
234
+ source: `${sourceName} — composer.json`,
235
+ section: "## Composer Scripts",
236
+ content: Object.entries(composer.scripts)
237
+ .map(([k, v]) => {
238
+ const val = Array.isArray(v) ? v.join(", ") : String(v);
239
+ return `${k}: ${val}`;
240
+ })
241
+ .join("\n"),
242
+ lineStart: 1,
243
+ lineEnd: 1,
244
+ });
245
+ }
246
+ return chunks;
247
+ }
248
+ catch {
249
+ return [];
250
+ }
251
+ }
252
+ // ---------------------------------------------------------------------------
253
+ // 4. .env Collector (sanitized — passwords redacted)
254
+ // ---------------------------------------------------------------------------
255
+ /**
256
+ * Collect environment configuration. Passwords/secrets are REDACTED.
257
+ * Gives AI context about database hosts, mail config, app URLs, etc.
258
+ */
259
+ export function collectEnvFile(projectDir, sourceName) {
260
+ const envPath = join(projectDir, ".env");
261
+ if (!existsSync(envPath))
262
+ return [];
263
+ try {
264
+ const raw = readFileSync(envPath, "utf-8");
265
+ const redacted = redactSensitive(raw);
266
+ // Remove empty lines and comments for cleaner chunks
267
+ const meaningful = redacted
268
+ .split("\n")
269
+ .filter((line) => line.trim() && !line.trim().startsWith("#"))
270
+ .join("\n");
271
+ if (!meaningful)
272
+ return [];
273
+ return [
274
+ {
275
+ source: `${sourceName} — .env`,
276
+ section: "## Environment Configuration",
277
+ content: meaningful,
278
+ lineStart: 1,
279
+ lineEnd: meaningful.split("\n").length,
280
+ },
281
+ ];
282
+ }
283
+ catch {
284
+ return [];
285
+ }
286
+ }
287
+ // ---------------------------------------------------------------------------
288
+ // 5. Shell History Collector (recent commands)
289
+ // ---------------------------------------------------------------------------
290
+ /**
291
+ * Collect recent shell history entries.
292
+ * Useful for understanding what the developer has been doing recently.
293
+ * Passwords in history are redacted.
294
+ */
295
+ export function collectShellHistory(sourceName) {
296
+ const histFile = resolve(homedir(), ".zsh_history");
297
+ if (!existsSync(histFile))
298
+ return [];
299
+ try {
300
+ // Read last 200 lines (most recent commands)
301
+ const raw = exec(`tail -200 ${histFile}`);
302
+ if (!raw)
303
+ return [];
304
+ // Parse zsh extended history format: : timestamp:0;command
305
+ const commands = raw
306
+ .split("\n")
307
+ .map((line) => {
308
+ const match = line.match(/^:\s*(\d+):\d+;(.+)/);
309
+ if (match)
310
+ return match[2].trim();
311
+ // Plain format
312
+ return line.trim();
313
+ })
314
+ .filter(Boolean)
315
+ // Remove duplicates while preserving order
316
+ .filter((cmd, i, arr) => arr.indexOf(cmd) === i);
317
+ if (commands.length === 0)
318
+ return [];
319
+ const redacted = redactSensitive(commands.join("\n"));
320
+ return [
321
+ {
322
+ source: `${sourceName} — shell history`,
323
+ section: "## Recent Shell Commands",
324
+ content: redacted,
325
+ lineStart: 1,
326
+ lineEnd: commands.length,
327
+ },
328
+ ];
329
+ }
330
+ catch {
331
+ return [];
332
+ }
333
+ }
334
+ // ---------------------------------------------------------------------------
335
+ // 6. Docker Collector (running containers + compose config)
336
+ // ---------------------------------------------------------------------------
337
+ /**
338
+ * Collect Docker container info — what's running, ports, images.
339
+ */
340
+ export function collectDocker(sourceName) {
341
+ if (!commandExists("docker"))
342
+ return [];
343
+ const chunks = [];
344
+ // Running containers
345
+ const ps = exec('docker ps --format "{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}" 2>/dev/null');
346
+ if (ps) {
347
+ const formatted = ps
348
+ .split("\n")
349
+ .filter(Boolean)
350
+ .map((line) => {
351
+ const [name, image, status, ports] = line.split("|");
352
+ return `${name}: ${image} (${status}) ${ports || ""}`.trim();
353
+ })
354
+ .join("\n");
355
+ chunks.push({
356
+ source: `${sourceName} — docker`,
357
+ section: "## Running Containers",
358
+ content: formatted,
359
+ lineStart: 1,
360
+ lineEnd: 1,
361
+ });
362
+ }
363
+ // Docker images
364
+ const images = exec('docker images --format "{{.Repository}}:{{.Tag}} ({{.Size}})" 2>/dev/null | head -20');
365
+ if (images) {
366
+ chunks.push({
367
+ source: `${sourceName} — docker`,
368
+ section: "## Docker Images",
369
+ content: images,
370
+ lineStart: 1,
371
+ lineEnd: 1,
372
+ });
373
+ }
374
+ return chunks;
375
+ }
376
+ // ---------------------------------------------------------------------------
377
+ // 7. PM2 Collector (running processes)
378
+ // ---------------------------------------------------------------------------
379
+ /**
380
+ * Collect PM2 process list — what apps are running, ports, status.
381
+ */
382
+ export function collectPM2(sourceName) {
383
+ if (!commandExists("pm2"))
384
+ return [];
385
+ // Use jlist for structured data
386
+ const raw = exec("pm2 jlist 2>/dev/null");
387
+ if (!raw)
388
+ return [];
389
+ try {
390
+ const processes = JSON.parse(raw);
391
+ if (!Array.isArray(processes) || processes.length === 0)
392
+ return [];
393
+ const formatted = processes
394
+ .map((p) => {
395
+ const env = p.pm2_env || {};
396
+ return [
397
+ `${p.name}: ${env.status || "unknown"}`,
398
+ ` pid: ${p.pid || "N/A"}`,
399
+ ` port: ${env.PORT || env.port || "N/A"}`,
400
+ ` cwd: ${env.pm_cwd || "N/A"}`,
401
+ ` uptime: ${env.pm_uptime ? new Date(env.pm_uptime).toISOString() : "N/A"}`,
402
+ ` restarts: ${env.restart_time || 0}`,
403
+ ].join("\n");
404
+ })
405
+ .join("\n\n");
406
+ return [
407
+ {
408
+ source: `${sourceName} — pm2`,
409
+ section: "## PM2 Processes",
410
+ content: formatted,
411
+ lineStart: 1,
412
+ lineEnd: processes.length,
413
+ },
414
+ ];
415
+ }
416
+ catch {
417
+ return [];
418
+ }
419
+ }
420
+ // ---------------------------------------------------------------------------
421
+ // 8. Nginx Collector (site configurations)
422
+ // ---------------------------------------------------------------------------
423
+ /**
424
+ * Collect Nginx site configurations — domains, roots, proxy settings.
425
+ * Reads from common config locations.
426
+ */
427
+ export function collectNginx(sourceName) {
428
+ const configDirs = [
429
+ "/etc/nginx/sites-enabled",
430
+ "/etc/nginx/conf.d",
431
+ "/usr/local/etc/nginx/servers", // macOS Homebrew
432
+ ];
433
+ const chunks = [];
434
+ for (const dir of configDirs) {
435
+ if (!existsSync(dir))
436
+ continue;
437
+ try {
438
+ const files = readdirSync(dir);
439
+ for (const file of files) {
440
+ if (file.startsWith("."))
441
+ continue;
442
+ const filePath = join(dir, file);
443
+ try {
444
+ if (!statSync(filePath).isFile())
445
+ continue;
446
+ }
447
+ catch {
448
+ continue;
449
+ }
450
+ try {
451
+ const content = readFileSync(filePath, "utf-8");
452
+ // Extract key directives for a summary
453
+ const serverNames = [
454
+ ...content.matchAll(/server_name\s+([^;]+);/g),
455
+ ].map((m) => m[1].trim());
456
+ const roots = [...content.matchAll(/root\s+([^;]+);/g)].map((m) => m[1].trim());
457
+ const listens = [...content.matchAll(/listen\s+([^;]+);/g)].map((m) => m[1].trim());
458
+ const proxyPasses = [
459
+ ...content.matchAll(/proxy_pass\s+([^;]+);/g),
460
+ ].map((m) => m[1].trim());
461
+ const summary = [
462
+ serverNames.length
463
+ ? `Domains: ${serverNames.join(", ")}`
464
+ : "",
465
+ listens.length ? `Listen: ${listens.join(", ")}` : "",
466
+ roots.length ? `Root: ${roots.join(", ")}` : "",
467
+ proxyPasses.length
468
+ ? `Proxy: ${proxyPasses.join(", ")}`
469
+ : "",
470
+ ]
471
+ .filter(Boolean)
472
+ .join("\n");
473
+ if (summary) {
474
+ chunks.push({
475
+ source: `${sourceName} — nginx`,
476
+ section: `## Nginx: ${file}`,
477
+ content: summary,
478
+ lineStart: 1,
479
+ lineEnd: 1,
480
+ });
481
+ }
482
+ }
483
+ catch {
484
+ // Permission denied — skip
485
+ }
486
+ }
487
+ }
488
+ catch {
489
+ // Permission denied — skip
490
+ }
491
+ }
492
+ return chunks;
493
+ }
494
+ // ---------------------------------------------------------------------------
495
+ // 9. Crontab Collector
496
+ // ---------------------------------------------------------------------------
497
+ /**
498
+ * Collect crontab entries — scheduled tasks and maintenance jobs.
499
+ */
500
+ export function collectCrontab(sourceName) {
501
+ const cron = exec("crontab -l 2>/dev/null");
502
+ if (!cron)
503
+ return [];
504
+ // Filter out comments and empty lines for summary
505
+ const entries = cron
506
+ .split("\n")
507
+ .filter((line) => line.trim() && !line.trim().startsWith("#"));
508
+ if (entries.length === 0)
509
+ return [];
510
+ return [
511
+ {
512
+ source: `${sourceName} — crontab`,
513
+ section: "## Scheduled Tasks (crontab)",
514
+ content: entries.join("\n"),
515
+ lineStart: 1,
516
+ lineEnd: entries.length,
517
+ },
518
+ ];
519
+ }
520
+ // ---------------------------------------------------------------------------
521
+ // 10. Ecosystem.config.js Collector (PM2 config files)
522
+ // ---------------------------------------------------------------------------
523
+ /**
524
+ * Collect PM2 ecosystem config from project directory.
525
+ */
526
+ export function collectEcosystemConfig(projectDir, sourceName) {
527
+ const configNames = ["ecosystem.config.js", "ecosystem.config.cjs"];
528
+ for (const name of configNames) {
529
+ const configPath = join(projectDir, name);
530
+ if (!existsSync(configPath))
531
+ continue;
532
+ try {
533
+ const content = readFileSync(configPath, "utf-8");
534
+ return [
535
+ {
536
+ source: `${sourceName} — ecosystem.config`,
537
+ section: "## PM2 Ecosystem Config",
538
+ content,
539
+ lineStart: 1,
540
+ lineEnd: content.split("\n").length,
541
+ },
542
+ ];
543
+ }
544
+ catch {
545
+ continue;
546
+ }
547
+ }
548
+ return [];
549
+ }
550
+ // ---------------------------------------------------------------------------
551
+ // 11. Docker Compose Collector (project-level)
552
+ // ---------------------------------------------------------------------------
553
+ /**
554
+ * Collect docker-compose.yml for a project — services, ports, volumes.
555
+ */
556
+ export function collectDockerCompose(projectDir, sourceName) {
557
+ const composeNames = [
558
+ "docker-compose.yml",
559
+ "docker-compose.yaml",
560
+ "docker-compose.prod.yml",
561
+ "compose.yml",
562
+ "compose.yaml",
563
+ ];
564
+ const chunks = [];
565
+ for (const name of composeNames) {
566
+ const composePath = join(projectDir, name);
567
+ if (!existsSync(composePath))
568
+ continue;
569
+ try {
570
+ const content = readFileSync(composePath, "utf-8");
571
+ const redacted = redactSensitive(content);
572
+ chunks.push({
573
+ source: `${sourceName} — ${name}`,
574
+ section: `## Docker Compose: ${name}`,
575
+ content: redacted,
576
+ lineStart: 1,
577
+ lineEnd: redacted.split("\n").length,
578
+ });
579
+ }
580
+ catch {
581
+ // Permission denied — skip
582
+ }
583
+ }
584
+ return chunks;
585
+ }
586
+ // ---------------------------------------------------------------------------
587
+ // Master collector: gather all operational data for a project
588
+ // ---------------------------------------------------------------------------
589
+ /**
590
+ * Collect all operational data for a single project directory.
591
+ * Returns chunks from all available collectors.
592
+ */
593
+ export function collectProjectOps(projectDir, sourceName) {
594
+ const allChunks = [];
595
+ allChunks.push(...collectGitLog(projectDir, sourceName));
596
+ allChunks.push(...collectPackageJson(projectDir, sourceName));
597
+ allChunks.push(...collectComposerJson(projectDir, sourceName));
598
+ allChunks.push(...collectEnvFile(projectDir, sourceName));
599
+ allChunks.push(...collectEcosystemConfig(projectDir, sourceName));
600
+ allChunks.push(...collectDockerCompose(projectDir, sourceName));
601
+ return allChunks;
602
+ }
603
+ /**
604
+ * Collect system-wide operational data (not project-specific).
605
+ * These run once, not per-project.
606
+ */
607
+ export function collectSystemOps() {
608
+ const allChunks = [];
609
+ const sourceName = "System";
610
+ allChunks.push(...collectShellHistory(sourceName));
611
+ allChunks.push(...collectDocker(sourceName));
612
+ allChunks.push(...collectPM2(sourceName));
613
+ allChunks.push(...collectNginx(sourceName));
614
+ allChunks.push(...collectCrontab(sourceName));
615
+ return allChunks;
616
+ }
617
+ //# sourceMappingURL=collectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors.js","sourceRoot":"","sources":["../src/collectors.ts"],"names":[],"mappings":"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"}