@auto-engineer/cli 0.8.4 → 0.8.5

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 (36) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/src/server/file-syncer/discovery/bareImports.d.ts +3 -0
  3. package/dist/src/server/file-syncer/discovery/bareImports.d.ts.map +1 -0
  4. package/dist/src/server/file-syncer/discovery/bareImports.js +36 -0
  5. package/dist/src/server/file-syncer/discovery/bareImports.js.map +1 -0
  6. package/dist/src/server/file-syncer/discovery/dts.d.ts +11 -0
  7. package/dist/src/server/file-syncer/discovery/dts.d.ts.map +1 -0
  8. package/dist/src/server/file-syncer/discovery/dts.js +108 -0
  9. package/dist/src/server/file-syncer/discovery/dts.js.map +1 -0
  10. package/dist/src/server/file-syncer/index.d.ts +17 -0
  11. package/dist/src/server/file-syncer/index.d.ts.map +1 -0
  12. package/dist/src/server/file-syncer/index.js +206 -0
  13. package/dist/src/server/file-syncer/index.js.map +1 -0
  14. package/dist/src/server/file-syncer/sync/computeDesiredSet.d.ts +7 -0
  15. package/dist/src/server/file-syncer/sync/computeDesiredSet.d.ts.map +1 -0
  16. package/dist/src/server/file-syncer/sync/computeDesiredSet.js +76 -0
  17. package/dist/src/server/file-syncer/sync/computeDesiredSet.js.map +1 -0
  18. package/dist/src/server/file-syncer/types/wire.d.ts +14 -0
  19. package/dist/src/server/file-syncer/types/wire.d.ts.map +1 -0
  20. package/dist/src/server/file-syncer/types/wire.js +2 -0
  21. package/dist/src/server/file-syncer/types/wire.js.map +1 -0
  22. package/dist/src/server/file-syncer/utils/hash.d.ts +5 -0
  23. package/dist/src/server/file-syncer/utils/hash.d.ts.map +1 -0
  24. package/dist/src/server/file-syncer/utils/hash.js +20 -0
  25. package/dist/src/server/file-syncer/utils/hash.js.map +1 -0
  26. package/dist/src/server/file-syncer/utils/path.d.ts +15 -0
  27. package/dist/src/server/file-syncer/utils/path.d.ts.map +1 -0
  28. package/dist/src/server/file-syncer/utils/path.js +100 -0
  29. package/dist/src/server/file-syncer/utils/path.js.map +1 -0
  30. package/dist/src/server/server.js +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +3 -3
  33. package/dist/src/server/file-syncer.d.ts +0 -21
  34. package/dist/src/server/file-syncer.d.ts.map +0 -1
  35. package/dist/src/server/file-syncer.js +0 -101
  36. package/dist/src/server/file-syncer.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import path from 'path';
2
+ import createDebug from 'debug';
3
+ const debug = createDebug('cli:file-syncer:path');
4
+ export const posix = (p) => p.split(path.sep).join('/');
5
+ export function toWirePath(abs, projectRoot) {
6
+ const rel = path.relative(projectRoot, abs);
7
+ // If path is outside project root (starts with ..), remap to virtual path
8
+ if (rel.startsWith('..')) {
9
+ debug('toWirePath: abs is outside projectRoot. abs=%s', abs);
10
+ // Check if it's in node_modules
11
+ const nodeModulesMatch = abs.match(/.*\/node_modules\/(.*)/);
12
+ if (nodeModulesMatch) {
13
+ // Remap to virtual /.external/node_modules/ path to avoid traversal error
14
+ let modulePath = nodeModulesMatch[1];
15
+ // Normalize path by removing redundant ./ segments
16
+ modulePath = modulePath.replace(/\/\.\//g, '/').replace(/^\.\//, '');
17
+ const wire = `/.external/node_modules/${modulePath}`.split(path.sep).join('/');
18
+ cacheWireMapping(wire, abs); // Cache for reverse mapping
19
+ return wire;
20
+ }
21
+ // For other external paths, use a hash to create a unique virtual path
22
+ const hash = Buffer.from(abs)
23
+ .toString('base64')
24
+ .replace(/[^a-zA-Z0-9]/g, '')
25
+ .substring(0, 16);
26
+ const fileName = path.basename(abs);
27
+ const wire = `/.external/other/${hash}_${fileName}`;
28
+ debug('Remapped external path to: %s', wire);
29
+ cacheWireMapping(wire, abs); // Cache for reverse mapping
30
+ return wire;
31
+ }
32
+ // Normal case: path is within project root
33
+ const wire = ('/' + rel).split(path.sep).join('/');
34
+ return wire;
35
+ }
36
+ export function sample(arr, n = 5) {
37
+ return arr.slice(0, n);
38
+ }
39
+ export function logArray(label, arr, _n = 5) {
40
+ // Utility function for debugging - kept for potential future use
41
+ }
42
+ export function uniq(arr) {
43
+ return [...new Set(arr)];
44
+ }
45
+ // Map to store reverse mappings for two-way sync
46
+ // This needs to be persistent across connections for reliable sync
47
+ const wirePathToAbsCache = new Map();
48
+ // Clear and rebuild the cache (used when new connections are established)
49
+ export function rebuildWirePathCache(files) {
50
+ wirePathToAbsCache.clear();
51
+ for (const { abs, projectRoot } of files) {
52
+ toWirePath(abs, projectRoot);
53
+ // Cache will be populated automatically by toWirePath for external paths
54
+ }
55
+ }
56
+ export function fromWirePath(wirePath, projectRoot) {
57
+ // Check if it's a virtual external path
58
+ if (wirePath.startsWith('/.external/')) {
59
+ // Look up in cache
60
+ const cached = wirePathToAbsCache.get(wirePath);
61
+ if (cached !== undefined) {
62
+ return cached;
63
+ }
64
+ // Can't reverse map without cache - this shouldn't happen in practice
65
+ debug('⚠ Cannot reverse map virtual path: %s', wirePath);
66
+ return path.join(projectRoot, wirePath.substring(1)); // Fallback
67
+ }
68
+ // Normal path: remove leading slash and resolve relative to project root
69
+ const relativePath = wirePath.startsWith('/') ? wirePath.substring(1) : wirePath;
70
+ return path.join(projectRoot, relativePath);
71
+ }
72
+ // Store reverse mapping when creating wire paths
73
+ export function cacheWireMapping(wirePath, absPath) {
74
+ if (wirePath.startsWith('/.external/')) {
75
+ wirePathToAbsCache.set(wirePath, absPath);
76
+ }
77
+ }
78
+ export function dirOf(p) {
79
+ const norm = p.replace(/\\/g, '/');
80
+ return norm.slice(0, norm.lastIndexOf('/')) || '/';
81
+ }
82
+ // Extract npm package from a node_modules path
83
+ export function pkgNameFromPath(p) {
84
+ const m = p.replace(/\\/g, '/').match(/\/node_modules\/((@[^/]+\/)?[^/]+)/);
85
+ return m ? m[1] : null;
86
+ }
87
+ // Prefer server/node_modules, then plain node_modules, avoid .pnpm, and shorter paths
88
+ export function scorePathForDedupe(p) {
89
+ let s = 0;
90
+ const pathPosix = p.replace(/\\/g, '/');
91
+ if (pathPosix.includes('/server/node_modules/'))
92
+ s -= 10;
93
+ if (!pathPosix.includes('/.pnpm/'))
94
+ s -= 3;
95
+ if (pathPosix.includes('/node_modules/'))
96
+ s -= 1;
97
+ s += pathPosix.length / 1000;
98
+ return s;
99
+ }
100
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../../../../src/server/file-syncer/utils/path.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Server as SocketIOServer } from 'socket.io';
5
5
  import { createMessageBus } from '@auto-engineer/message-bus';
6
6
  import createDebug from 'debug';
7
7
  import { StateManager } from './state-manager.js';
8
- import { FileSyncer } from './file-syncer.js';
8
+ import { FileSyncer } from './file-syncer/index.js';
9
9
  import { setupHttpRoutes } from './http-routes.js';
10
10
  import { setupWebSocketHandlers } from './websocket-handler.js';
11
11
  import { EventProcessor } from './event-processor.js';