@auto-engineer/pipeline 0.0.1 → 0.14.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 (59) hide show
  1. package/.turbo/turbo-build.log +6 -5
  2. package/CHANGELOG.md +14 -0
  3. package/dist/src/__tests__/e2e/helpers.d.ts +48 -0
  4. package/dist/src/__tests__/e2e/helpers.d.ts.map +1 -0
  5. package/dist/src/__tests__/e2e/helpers.js +253 -0
  6. package/dist/src/__tests__/e2e/helpers.js.map +1 -0
  7. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.d.ts +2 -0
  8. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.d.ts.map +1 -0
  9. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.js +195 -0
  10. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.js.map +1 -0
  11. package/dist/src/__tests__/e2e/types.d.ts +107 -0
  12. package/dist/src/__tests__/e2e/types.d.ts.map +1 -0
  13. package/dist/src/__tests__/e2e/types.js +2 -0
  14. package/dist/src/__tests__/e2e/types.js.map +1 -0
  15. package/dist/src/file-syncer/crypto/jwe-encryptor.d.ts +15 -0
  16. package/dist/src/file-syncer/crypto/jwe-encryptor.d.ts.map +1 -0
  17. package/dist/src/file-syncer/crypto/jwe-encryptor.js +64 -0
  18. package/dist/src/file-syncer/crypto/jwe-encryptor.js.map +1 -0
  19. package/dist/src/file-syncer/crypto/provider-resolver.d.ts +24 -0
  20. package/dist/src/file-syncer/crypto/provider-resolver.d.ts.map +1 -0
  21. package/dist/src/file-syncer/crypto/provider-resolver.js +71 -0
  22. package/dist/src/file-syncer/crypto/provider-resolver.js.map +1 -0
  23. package/dist/src/file-syncer/discovery/bareImports.d.ts +3 -0
  24. package/dist/src/file-syncer/discovery/bareImports.d.ts.map +1 -0
  25. package/dist/src/file-syncer/discovery/bareImports.js +36 -0
  26. package/dist/src/file-syncer/discovery/bareImports.js.map +1 -0
  27. package/dist/src/file-syncer/discovery/dts.d.ts +8 -0
  28. package/dist/src/file-syncer/discovery/dts.d.ts.map +1 -0
  29. package/dist/src/file-syncer/discovery/dts.js +99 -0
  30. package/dist/src/file-syncer/discovery/dts.js.map +1 -0
  31. package/dist/src/file-syncer/index.d.ts +46 -0
  32. package/dist/src/file-syncer/index.d.ts.map +1 -0
  33. package/dist/src/file-syncer/index.js +392 -0
  34. package/dist/src/file-syncer/index.js.map +1 -0
  35. package/dist/src/file-syncer/sync/resolveSyncFileSet.d.ts +7 -0
  36. package/dist/src/file-syncer/sync/resolveSyncFileSet.d.ts.map +1 -0
  37. package/dist/src/file-syncer/sync/resolveSyncFileSet.js +86 -0
  38. package/dist/src/file-syncer/sync/resolveSyncFileSet.js.map +1 -0
  39. package/dist/src/file-syncer/types/wire.d.ts +14 -0
  40. package/dist/src/file-syncer/types/wire.d.ts.map +1 -0
  41. package/dist/src/file-syncer/types/wire.js +2 -0
  42. package/dist/src/file-syncer/types/wire.js.map +1 -0
  43. package/dist/src/file-syncer/utils/hash.d.ts +5 -0
  44. package/dist/src/file-syncer/utils/hash.d.ts.map +1 -0
  45. package/dist/src/file-syncer/utils/hash.js +19 -0
  46. package/dist/src/file-syncer/utils/hash.js.map +1 -0
  47. package/dist/src/file-syncer/utils/path.d.ts +13 -0
  48. package/dist/src/file-syncer/utils/path.d.ts.map +1 -0
  49. package/dist/src/file-syncer/utils/path.js +74 -0
  50. package/dist/src/file-syncer/utils/path.js.map +1 -0
  51. package/dist/src/index.d.ts.map +1 -1
  52. package/dist/src/index.js.map +1 -1
  53. package/dist/src/server/pipeline-server.d.ts.map +1 -1
  54. package/dist/src/server/pipeline-server.js +11 -12
  55. package/dist/src/server/pipeline-server.js.map +1 -1
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +6 -3
  58. package/src/index.ts +0 -2
  59. package/src/server/pipeline-server.ts +12 -14
@@ -0,0 +1,392 @@
1
+ import path from 'node:path';
2
+ import { NodeFileStore } from '@auto-engineer/file-store/node';
3
+ import chokidar from 'chokidar';
4
+ import { createJWE } from './crypto/jwe-encryptor.js';
5
+ import { getActiveProvider, getProviderEnvHash } from './crypto/provider-resolver.js';
6
+ import { resolveSyncFileSet } from './sync/resolveSyncFileSet.js';
7
+ import { md5, readBase64, statSize } from './utils/hash.js';
8
+ import { fromWirePath, rebuildWirePathCache, toWirePath } from './utils/path.js';
9
+ async function processFileForChange(abs, vfs, active, projectRoot) {
10
+ const hash = await md5(vfs, abs);
11
+ if (hash === null)
12
+ return null;
13
+ const size = await statSize(vfs, abs);
14
+ const prev = active.get(abs);
15
+ if (prev && prev.hash === hash && prev.size === size) {
16
+ return null;
17
+ }
18
+ const content = await readBase64(vfs, abs);
19
+ if (content === null)
20
+ return null;
21
+ active.set(abs, { hash, size });
22
+ const wire = toWirePath(abs, projectRoot);
23
+ return { event: prev ? 'change' : 'add', path: wire, content };
24
+ }
25
+ export class FileSyncer {
26
+ constructor(config) {
27
+ this.debounce = null;
28
+ this.autoConfigDebounce = null;
29
+ this.lastComputeTime = 0;
30
+ this.cachedDesiredSet = null;
31
+ this.autoConfigHash = null;
32
+ this.autoConfigContent = null;
33
+ this.providerEnvHash = null;
34
+ this.clients = new Map();
35
+ this.watchDir = path.resolve(config.watchDir);
36
+ this.projectRoot = config.projectRoot ?? path.dirname(this.watchDir);
37
+ this.vfs = new NodeFileStore();
38
+ this.active = new Map();
39
+ this.loadAutoConfig = config.loadAutoConfig;
40
+ }
41
+ broadcast(eventName, data) {
42
+ const message = `event: ${eventName}\ndata: ${JSON.stringify(data)}\n\n`;
43
+ const failedClientIds = [];
44
+ for (const client of this.clients.values()) {
45
+ try {
46
+ client.response.write(message);
47
+ }
48
+ catch {
49
+ failedClientIds.push(client.id);
50
+ }
51
+ }
52
+ for (const id of failedClientIds) {
53
+ this.removeClient(id);
54
+ }
55
+ }
56
+ addClient(id, response) {
57
+ response.writeHead(200, {
58
+ 'Content-Type': 'text/event-stream',
59
+ 'Cache-Control': 'no-cache',
60
+ Connection: 'keep-alive',
61
+ 'Access-Control-Allow-Origin': '*',
62
+ });
63
+ response.write(':\n\n');
64
+ this.clients.set(id, { id, response });
65
+ response.on('close', () => {
66
+ this.removeClient(id);
67
+ });
68
+ void this.sendInitialSync(response);
69
+ }
70
+ removeClient(id) {
71
+ const client = this.clients.get(id);
72
+ if (client !== undefined) {
73
+ client.response.end();
74
+ this.clients.delete(id);
75
+ }
76
+ }
77
+ async sendInitialSync(response) {
78
+ try {
79
+ const init = await this.computeInitialFiles();
80
+ const files = Array.from(this.active.keys()).map((abs) => ({ abs, projectRoot: this.projectRoot }));
81
+ rebuildWirePathCache(files);
82
+ const message = `event: initial-sync\ndata: ${JSON.stringify(init)}\n\n`;
83
+ response.write(message);
84
+ }
85
+ catch {
86
+ // error sending initial sync
87
+ }
88
+ }
89
+ async getInitialFiles() {
90
+ return this.computeInitialFiles();
91
+ }
92
+ start() {
93
+ const compute = async () => {
94
+ const now = Date.now();
95
+ if (this.cachedDesiredSet && now - this.lastComputeTime < 1000) {
96
+ return this.cachedDesiredSet;
97
+ }
98
+ const result = await resolveSyncFileSet({
99
+ vfs: this.vfs,
100
+ watchDir: this.watchDir,
101
+ projectRoot: this.projectRoot,
102
+ });
103
+ this.cachedDesiredSet = result;
104
+ this.lastComputeTime = now;
105
+ return result;
106
+ };
107
+ const computeChanges = async (desired) => {
108
+ const outgoing = [];
109
+ for (const abs of desired) {
110
+ const change = await processFileForChange(abs, this.vfs, this.active, this.projectRoot);
111
+ if (change !== null) {
112
+ outgoing.push(change);
113
+ }
114
+ }
115
+ return outgoing;
116
+ };
117
+ const computeDeletions = (desired) => {
118
+ const toDelete = [];
119
+ for (const abs of Array.from(this.active.keys())) {
120
+ if (!desired.has(abs)) {
121
+ this.active.delete(abs);
122
+ const wire = toWirePath(abs, this.projectRoot);
123
+ toDelete.push({ event: 'delete', path: wire });
124
+ }
125
+ }
126
+ return toDelete;
127
+ };
128
+ const handleEmptyTransition = (desired, toDelete) => {
129
+ if (this.active.size === 0 && desired.size === 0 && toDelete.length > 0) {
130
+ this.broadcast('initial-sync', { files: [], directory: path.resolve(this.watchDir) });
131
+ return true;
132
+ }
133
+ return false;
134
+ };
135
+ const handleRehydration = (activeSizeBefore, outgoing, desired) => {
136
+ const allAdds = outgoing.length > 0 && outgoing.every((x) => x.event === 'add');
137
+ const rehydrateFromEmpty = activeSizeBefore === 0 && allAdds && desired.size === outgoing.length;
138
+ if (rehydrateFromEmpty) {
139
+ const files = outgoing
140
+ .map((o) => ({ path: o.path, content: o.content }))
141
+ .sort((a, b) => a.path.localeCompare(b.path));
142
+ this.broadcast('initial-sync', { files, directory: path.resolve(this.watchDir) });
143
+ return true;
144
+ }
145
+ return false;
146
+ };
147
+ const rebuildAndBroadcast = async () => {
148
+ const desired = await compute();
149
+ const activeSizeBefore = this.active.size;
150
+ const outgoing = await computeChanges(desired);
151
+ const toDelete = computeDeletions(desired);
152
+ for (const ch of toDelete) {
153
+ this.broadcast('file-change', ch);
154
+ }
155
+ if (handleEmptyTransition(desired, toDelete))
156
+ return;
157
+ if (handleRehydration(activeSizeBefore, outgoing, desired))
158
+ return;
159
+ for (const ch of outgoing) {
160
+ this.broadcast('file-change', ch);
161
+ }
162
+ };
163
+ const scheduleRebuild = () => {
164
+ if (this.debounce)
165
+ clearTimeout(this.debounce);
166
+ this.debounce = setTimeout(() => {
167
+ this.debounce = null;
168
+ rebuildAndBroadcast().catch(() => { });
169
+ }, 100);
170
+ };
171
+ const checkAndSyncAutoConfig = async () => {
172
+ try {
173
+ const autoConfigPath = await this.findAutoConfigFile();
174
+ if (autoConfigPath === null) {
175
+ this.handleAutoConfigRemoval();
176
+ return;
177
+ }
178
+ const shouldUpdate = await this.shouldUpdateAutoConfig(autoConfigPath);
179
+ if (!shouldUpdate)
180
+ return;
181
+ await this.updateAndBroadcastAutoConfig(autoConfigPath);
182
+ }
183
+ catch {
184
+ // auto-config error
185
+ }
186
+ };
187
+ const scheduleAutoConfigSync = () => {
188
+ if (this.autoConfigDebounce)
189
+ clearTimeout(this.autoConfigDebounce);
190
+ this.autoConfigDebounce = setTimeout(() => {
191
+ this.autoConfigDebounce = null;
192
+ checkAndSyncAutoConfig().catch(() => { });
193
+ }, 100);
194
+ };
195
+ const isAutoConfigFile = (filePath) => {
196
+ const fileName = path.basename(filePath);
197
+ return fileName === 'auto.config.ts' || fileName === 'auto.config.js';
198
+ };
199
+ this.watcher = chokidar.watch([this.watchDir], {
200
+ ignoreInitial: true,
201
+ persistent: true,
202
+ ignored: ['**/node_modules/**', '**/.git/**', '**/.DS_Store'],
203
+ awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },
204
+ });
205
+ this.watcher
206
+ .on('add', (filePath) => {
207
+ scheduleRebuild();
208
+ if (isAutoConfigFile(filePath)) {
209
+ scheduleAutoConfigSync();
210
+ }
211
+ })
212
+ .on('change', (filePath) => {
213
+ scheduleRebuild();
214
+ if (isAutoConfigFile(filePath)) {
215
+ scheduleAutoConfigSync();
216
+ }
217
+ })
218
+ .on('unlink', (filePath) => {
219
+ scheduleRebuild();
220
+ if (isAutoConfigFile(filePath)) {
221
+ scheduleAutoConfigSync();
222
+ }
223
+ })
224
+ .on('addDir', () => {
225
+ scheduleRebuild();
226
+ })
227
+ .on('unlinkDir', () => {
228
+ scheduleRebuild();
229
+ });
230
+ scheduleAutoConfigSync();
231
+ }
232
+ handleAutoConfigRemoval() {
233
+ if (this.autoConfigContent !== null) {
234
+ const virtualPath = path.join(this.watchDir, 'auto.config.json');
235
+ const virtualWirePath = toWirePath(virtualPath, this.projectRoot);
236
+ this.broadcast('file-change', { event: 'delete', path: virtualWirePath });
237
+ this.autoConfigContent = null;
238
+ this.autoConfigHash = null;
239
+ this.providerEnvHash = null;
240
+ }
241
+ }
242
+ async shouldUpdateAutoConfig(autoConfigPath) {
243
+ const currentHash = await md5(this.vfs, autoConfigPath);
244
+ const currentProviderEnvHash = getProviderEnvHash();
245
+ const configChanged = currentHash !== null && currentHash !== this.autoConfigHash;
246
+ const envChanged = currentProviderEnvHash !== this.providerEnvHash;
247
+ return configChanged || envChanged;
248
+ }
249
+ async updateAndBroadcastAutoConfig(autoConfigPath) {
250
+ if (!this.loadAutoConfig)
251
+ return;
252
+ const config = await this.loadAutoConfig(autoConfigPath);
253
+ const wasPresent = this.autoConfigContent !== null;
254
+ this.autoConfigContent = config;
255
+ this.autoConfigHash = await md5(this.vfs, autoConfigPath);
256
+ this.providerEnvHash = getProviderEnvHash();
257
+ const serializedConfig = await this.serializeConfig(config);
258
+ const virtualContent = Buffer.from(serializedConfig, 'utf8').toString('base64');
259
+ const virtualPath = path.join(this.watchDir, 'auto.config.json');
260
+ const virtualWirePath = toWirePath(virtualPath, this.projectRoot);
261
+ const eventType = wasPresent ? 'change' : 'add';
262
+ this.broadcast('file-change', {
263
+ event: eventType,
264
+ path: virtualWirePath,
265
+ content: virtualContent,
266
+ });
267
+ }
268
+ async handleClientFileChange(msg) {
269
+ const abs = fromWirePath(msg.path, this.projectRoot);
270
+ const virtualAbs = path.join(this.watchDir, 'auto.config.json');
271
+ if (path.resolve(abs) === path.resolve(virtualAbs)) {
272
+ return;
273
+ }
274
+ const allowedRoot = path.resolve(this.watchDir) + path.sep;
275
+ const normalizedAbs = path.resolve(abs);
276
+ if (!normalizedAbs.startsWith(allowedRoot)) {
277
+ return;
278
+ }
279
+ try {
280
+ if (msg.event === 'delete') {
281
+ await this.vfs.remove(normalizedAbs);
282
+ this.active.delete(normalizedAbs);
283
+ }
284
+ else {
285
+ const contentStr = msg.content;
286
+ if (contentStr === undefined) {
287
+ return;
288
+ }
289
+ const content = Buffer.from(contentStr, 'base64');
290
+ await this.vfs.write(normalizedAbs, new Uint8Array(content));
291
+ }
292
+ }
293
+ catch {
294
+ // file change error
295
+ }
296
+ }
297
+ stop() {
298
+ if (this.watcher) {
299
+ void this.watcher.close();
300
+ }
301
+ if (this.debounce) {
302
+ clearTimeout(this.debounce);
303
+ }
304
+ if (this.autoConfigDebounce) {
305
+ clearTimeout(this.autoConfigDebounce);
306
+ }
307
+ for (const client of this.clients.values()) {
308
+ client.response.end();
309
+ }
310
+ this.clients.clear();
311
+ }
312
+ async findAutoConfigFile() {
313
+ const candidates = [path.join(this.watchDir, 'auto.config.ts'), path.join(this.watchDir, 'auto.config.js')];
314
+ for (const candidate of candidates) {
315
+ try {
316
+ const exists = await this.vfs.exists(candidate);
317
+ if (exists) {
318
+ return candidate;
319
+ }
320
+ }
321
+ catch {
322
+ // Ignore errors
323
+ }
324
+ }
325
+ return null;
326
+ }
327
+ async serializeConfig(cfg) {
328
+ let configWithCreds = cfg;
329
+ try {
330
+ const active = getActiveProvider();
331
+ if (active !== null) {
332
+ const configWithFileId = cfg;
333
+ const jwe = await createJWE({
334
+ provider: active.provider,
335
+ apiKey: active.apiKey,
336
+ model: active.model,
337
+ custom: active.provider === 'custom' ? active.custom : undefined,
338
+ roomId: configWithFileId.fileId,
339
+ });
340
+ if (typeof cfg === 'object' && cfg !== null) {
341
+ configWithCreds = {
342
+ ...cfg,
343
+ token: jwe,
344
+ };
345
+ }
346
+ }
347
+ }
348
+ catch {
349
+ // continue without encryption
350
+ }
351
+ return JSON.stringify(configWithCreds, (_key, value) => {
352
+ if (typeof value === 'function') {
353
+ const funcName = value.name;
354
+ return `[Function: ${funcName != null ? funcName : 'anonymous'}]`;
355
+ }
356
+ return value;
357
+ }, 2);
358
+ }
359
+ async computeInitialFiles() {
360
+ const desired = await resolveSyncFileSet({
361
+ vfs: this.vfs,
362
+ watchDir: this.watchDir,
363
+ projectRoot: this.projectRoot,
364
+ });
365
+ const files = [];
366
+ for (const abs of desired) {
367
+ const content = await readBase64(this.vfs, abs);
368
+ if (content === null) {
369
+ continue;
370
+ }
371
+ const wire = toWirePath(abs, this.projectRoot);
372
+ const size = await statSize(this.vfs, abs);
373
+ const hash = await md5(this.vfs, abs);
374
+ if (hash === null) {
375
+ continue;
376
+ }
377
+ this.active.set(abs, { hash, size });
378
+ files.push({ path: wire, content });
379
+ }
380
+ if (this.autoConfigContent !== null) {
381
+ const serializedConfig = await this.serializeConfig(this.autoConfigContent);
382
+ const virtualContent = Buffer.from(serializedConfig, 'utf8').toString('base64');
383
+ const virtualPath = path.join(this.watchDir, 'auto.config.json');
384
+ files.push({ path: toWirePath(virtualPath, this.projectRoot), content: virtualContent });
385
+ }
386
+ files.sort((a, b) => a.path.localeCompare(b.path));
387
+ return { files, directory: path.resolve(this.watchDir) };
388
+ }
389
+ }
390
+ export { createJWE } from './crypto/jwe-encryptor.js';
391
+ export { AIProvider, getActiveProvider, getProviderEnvHash } from './crypto/provider-resolver.js';
392
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/file-syncer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { NodeFileStore } from '@auto-engineer/file-store/node';
2
+ export declare function resolveSyncFileSet(opts: {
3
+ vfs: NodeFileStore;
4
+ watchDir: string;
5
+ projectRoot: string;
6
+ }): Promise<Set<string>>;
7
+ //# sourceMappingURL=resolveSyncFileSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSyncFileSet.d.ts","sourceRoot":"","sources":["../../../../src/file-syncer/sync/resolveSyncFileSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAyDpE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAwCvB"}
@@ -0,0 +1,86 @@
1
+ import { collectBareImportsFromFiles } from '../discovery/bareImports.js';
2
+ import { nmRootsForBases, probeEntryDtsForPackagesFromRoots } from '../discovery/dts.js';
3
+ import { dirOf, pkgNameFromPath, scorePathForDedupe, uniq } from '../utils/path.js';
4
+ function flattenPaths(x) {
5
+ if (!x)
6
+ return [];
7
+ if (Array.isArray(x))
8
+ return x;
9
+ return Object.values(x).flat();
10
+ }
11
+ function stableCandidateNmRoots(projectRoot) {
12
+ const roots = new Set();
13
+ let cur = projectRoot.replace(/\\/g, '/');
14
+ for (let i = 0; i < 8; i++) {
15
+ roots.add(`${cur}/node_modules`);
16
+ const parent = cur.replace(/\/+$/, '').split('/').slice(0, -1).join('/') || '/';
17
+ if (parent === cur)
18
+ break;
19
+ cur = parent;
20
+ }
21
+ roots.add(`${projectRoot}/server/node_modules`);
22
+ return [...roots].map((p) => p.replace(/\/+/g, '/'));
23
+ }
24
+ function isNarrativeModule(mod) {
25
+ if (typeof mod !== 'object' || mod === null) {
26
+ return false;
27
+ }
28
+ if (!('getNarratives' in mod)) {
29
+ return false;
30
+ }
31
+ const modWithMethod = mod;
32
+ return typeof modWithMethod.getNarratives === 'function';
33
+ }
34
+ function dedupeTypeDefinitionsByPackage(allDts) {
35
+ const bestByPkg = new Map();
36
+ for (const p of allDts) {
37
+ const pkg = pkgNameFromPath(p);
38
+ if (pkg === null)
39
+ continue;
40
+ const prev = bestByPkg.get(pkg);
41
+ if (prev === undefined || scorePathForDedupe(p) < scorePathForDedupe(prev)) {
42
+ bestByPkg.set(pkg, p);
43
+ }
44
+ }
45
+ return [...bestByPkg.values()];
46
+ }
47
+ export async function resolveSyncFileSet(opts) {
48
+ const { vfs, watchDir, projectRoot } = opts;
49
+ try {
50
+ let flows = null;
51
+ try {
52
+ const flowPackage = '@auto-engineer/narrative';
53
+ const flowModule = await import(flowPackage);
54
+ if (isNarrativeModule(flowModule)) {
55
+ flows = await flowModule.getNarratives({ vfs, root: watchDir });
56
+ }
57
+ }
58
+ catch {
59
+ // narrative package not available
60
+ }
61
+ const files = flows?.vfsFiles ?? [];
62
+ const baseDirs = uniq([projectRoot, ...files.map(dirOf)]);
63
+ const dynamicRoots = nmRootsForBases(baseDirs);
64
+ const fallbackRoots = stableCandidateNmRoots(projectRoot);
65
+ const nmRoots = uniq([...dynamicRoots, ...fallbackRoots]);
66
+ const externalsFromFlows = flows?.externals ?? [];
67
+ const extraPkgs = await collectBareImportsFromFiles(files, vfs);
68
+ const externals = Array.from(new Set([...externalsFromFlows, ...extraPkgs]));
69
+ const dtsFromGraph = flows !== null ? flattenPaths(flows.typings) : [];
70
+ const dtsFromProbe = await probeEntryDtsForPackagesFromRoots(vfs, nmRoots, externals);
71
+ const allDts = Array.from(new Set([...dtsFromGraph, ...dtsFromProbe]));
72
+ allDts.sort((a, b) => {
73
+ const pa = a.includes('/.pnpm/') ? 1 : 0;
74
+ const pb = b.includes('/.pnpm/') ? 1 : 0;
75
+ if (pa !== pb)
76
+ return pa - pb;
77
+ return a.length - b.length;
78
+ });
79
+ const dts = dedupeTypeDefinitionsByPackage(allDts);
80
+ return new Set([...files, ...dts]);
81
+ }
82
+ catch {
83
+ return new Set();
84
+ }
85
+ }
86
+ //# sourceMappingURL=resolveSyncFileSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSyncFileSet.js","sourceRoot":"","sources":["../../../../src/file-syncer/sync/resolveSyncFileSet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type FileEvent = 'add' | 'change' | 'delete';
2
+ export type WireChange = {
3
+ event: FileEvent;
4
+ path: string;
5
+ content?: string;
6
+ };
7
+ export type WireInitial = {
8
+ files: Array<{
9
+ path: string;
10
+ content: string;
11
+ }>;
12
+ directory: string;
13
+ };
14
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/file-syncer/types/wire.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../../src/file-syncer/types/wire.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { NodeFileStore } from '@auto-engineer/file-store/node';
2
+ export declare function readBase64(vfs: NodeFileStore, abs: string): Promise<string | null>;
3
+ export declare function md5(vfs: NodeFileStore, abs: string): Promise<string | null>;
4
+ export declare function statSize(vfs: NodeFileStore, abs: string): Promise<number>;
5
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/file-syncer/utils/hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxF;AAED,wBAAsB,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIjF;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/E"}
@@ -0,0 +1,19 @@
1
+ import crypto from 'node:crypto';
2
+ export async function readBase64(vfs, abs) {
3
+ const buf = await vfs.read(abs);
4
+ if (!buf) {
5
+ return null;
6
+ }
7
+ return Buffer.from(buf).toString('base64');
8
+ }
9
+ export async function md5(vfs, abs) {
10
+ const buf = await vfs.read(abs);
11
+ if (!buf)
12
+ return null;
13
+ return crypto.createHash('md5').update(buf).digest('hex');
14
+ }
15
+ export async function statSize(vfs, abs) {
16
+ const buf = await vfs.read(abs);
17
+ return buf ? buf.byteLength : 0;
18
+ }
19
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../src/file-syncer/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAkB,EAAE,GAAW;IAC9D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAW;IACvD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAkB,EAAE,GAAW;IAC5D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const posix: (p: string) => string;
2
+ export declare function rebuildWirePathCache(files: Array<{
3
+ abs: string;
4
+ projectRoot: string;
5
+ }>): void;
6
+ export declare function toWirePath(abs: string, projectRoot: string): string;
7
+ export declare function fromWirePath(wirePath: string, projectRoot: string): string;
8
+ export declare function sample<T>(arr: T[], n?: number): T[];
9
+ export declare function uniq<T>(arr: T[]): T[];
10
+ export declare function dirOf(p: string): string;
11
+ export declare function pkgNameFromPath(p: string): string | null;
12
+ export declare function scorePathForDedupe(p: string): number;
13
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../src/file-syncer/utils/path.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MAAqC,CAAC;AAUxE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAK7F;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAuBnE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,SAAI,GAAG,CAAC,EAAE,CAE9C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAErC;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvC;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpD"}