@panorama-ai/gateway 2.30.211 → 2.30.279
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/README.md +10 -0
- package/dist/cli-providers/types.d.ts +1 -1
- package/dist/cli-providers/types.d.ts.map +1 -1
- package/dist/database.types.d.ts +1723 -172
- package/dist/database.types.d.ts.map +1 -1
- package/dist/database.types.js.map +1 -1
- package/dist/finalize-subagent-run.d.ts +2 -1
- package/dist/finalize-subagent-run.d.ts.map +1 -1
- package/dist/finalize-subagent-run.js.map +1 -1
- package/dist/index.js +3384 -241
- package/dist/index.js.map +4 -4
- package/dist/managed-runtime/config.d.ts +13 -0
- package/dist/managed-runtime/config.d.ts.map +1 -1
- package/dist/managed-runtime/config.js +31 -0
- package/dist/managed-runtime/config.js.map +1 -1
- package/dist/managed-runtime/dependencies.d.ts +2 -0
- package/dist/managed-runtime/dependencies.d.ts.map +1 -1
- package/dist/managed-runtime/dependencies.js +2 -0
- package/dist/managed-runtime/dependencies.js.map +1 -1
- package/dist/managed-runtime/drive-sync-filesystem.d.ts +39 -0
- package/dist/managed-runtime/drive-sync-filesystem.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-filesystem.js +434 -0
- package/dist/managed-runtime/drive-sync-filesystem.js.map +1 -0
- package/dist/managed-runtime/drive-sync-planner.d.ts +76 -0
- package/dist/managed-runtime/drive-sync-planner.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-planner.js +363 -0
- package/dist/managed-runtime/drive-sync-planner.js.map +1 -0
- package/dist/managed-runtime/drive-sync-remote-planner.d.ts +52 -0
- package/dist/managed-runtime/drive-sync-remote-planner.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-remote-planner.js +77 -0
- package/dist/managed-runtime/drive-sync-remote-planner.js.map +1 -0
- package/dist/managed-runtime/drive-sync-scheduler.d.ts +50 -0
- package/dist/managed-runtime/drive-sync-scheduler.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-scheduler.js +302 -0
- package/dist/managed-runtime/drive-sync-scheduler.js.map +1 -0
- package/dist/managed-runtime/drive-sync-state-applier.d.ts +84 -0
- package/dist/managed-runtime/drive-sync-state-applier.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-state-applier.js +153 -0
- package/dist/managed-runtime/drive-sync-state-applier.js.map +1 -0
- package/dist/managed-runtime/drive-sync-transfer.d.ts +86 -0
- package/dist/managed-runtime/drive-sync-transfer.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync-transfer.js +245 -0
- package/dist/managed-runtime/drive-sync-transfer.js.map +1 -0
- package/dist/managed-runtime/drive-sync.d.ts +416 -0
- package/dist/managed-runtime/drive-sync.d.ts.map +1 -0
- package/dist/managed-runtime/drive-sync.js +1641 -0
- package/dist/managed-runtime/drive-sync.js.map +1 -0
- package/dist/managed-runtime.d.ts.map +1 -1
- package/dist/managed-runtime.js +44 -0
- package/dist/managed-runtime.js.map +1 -1
- package/dist/subagent-adapters/types.d.ts +1 -1
- package/dist/subagent-adapters/types.d.ts.map +1 -1
- package/dist/subagent-output-persistence.d.ts +1 -1
- package/dist/subagent-output-persistence.d.ts.map +1 -1
- package/dist/subagent-output-persistence.js +1 -1
- package/dist/subagent-output-persistence.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type DriveSyncRunSummary, type ManagedDriveSyncService } from './drive-sync.js';
|
|
2
|
+
export type ManagedDriveSyncSchedulerStatus = {
|
|
3
|
+
running: boolean;
|
|
4
|
+
pending: boolean;
|
|
5
|
+
watchStatus: 'active' | 'unavailable' | 'error';
|
|
6
|
+
lastReason: string | null;
|
|
7
|
+
lastStartedAt: string | null;
|
|
8
|
+
lastFinishedAt: string | null;
|
|
9
|
+
lastError: string | null;
|
|
10
|
+
watchError: string | null;
|
|
11
|
+
lastSummary: DriveSyncRunSummary | null;
|
|
12
|
+
};
|
|
13
|
+
export type ManagedDriveSyncRequestResult = {
|
|
14
|
+
status: 'success';
|
|
15
|
+
summary: DriveSyncRunSummary;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'degraded';
|
|
18
|
+
summary: DriveSyncRunSummary;
|
|
19
|
+
error: string;
|
|
20
|
+
} | {
|
|
21
|
+
status: 'failed';
|
|
22
|
+
error: string;
|
|
23
|
+
} | {
|
|
24
|
+
status: 'skipped';
|
|
25
|
+
reason: string;
|
|
26
|
+
};
|
|
27
|
+
export type ManagedDriveSyncScheduler = {
|
|
28
|
+
requestSync(reason: string, options?: {
|
|
29
|
+
immediate?: boolean;
|
|
30
|
+
dirtyLocalPaths?: Iterable<string>;
|
|
31
|
+
}): Promise<ManagedDriveSyncRequestResult>;
|
|
32
|
+
getStatus(): ManagedDriveSyncSchedulerStatus;
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
type WatchHandle = {
|
|
36
|
+
close(): void;
|
|
37
|
+
};
|
|
38
|
+
type ManagedDriveSyncSchedulerDependencies = {
|
|
39
|
+
watchRoot?: (rootDir: string, onChange: (reason: string, dirtyPath?: string | null) => void, onError: (error: Error) => void) => WatchHandle | null;
|
|
40
|
+
};
|
|
41
|
+
export declare function startManagedDriveSyncScheduler(params: {
|
|
42
|
+
service: ManagedDriveSyncService;
|
|
43
|
+
rootDir: string;
|
|
44
|
+
debounceMs: number;
|
|
45
|
+
pollIntervalMs: number;
|
|
46
|
+
localAuditIntervalMs?: number;
|
|
47
|
+
dependencies?: ManagedDriveSyncSchedulerDependencies;
|
|
48
|
+
}): ManagedDriveSyncScheduler;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=drive-sync-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync-scheduler.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/drive-sync-scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,uBAAuB,EAC7B,MAAM,iBAAiB,CAAA;AAGxB,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAA;IAC/C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;KAAE,GACpE,OAAO,CAAC,6BAA6B,CAAC,CAAA;IACzC,SAAS,IAAI,+BAA+B,CAAA;IAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,IAAI,IAAI,CAAA;CACd,CAAA;AAED,KAAK,qCAAqC,GAAG;IAC3C,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC7D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAC5B,WAAW,GAAG,IAAI,CAAA;CACxB,CAAA;AAMD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,OAAO,EAAE,uBAAuB,CAAA;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,qCAAqC,CAAA;CACrD,GAAG,yBAAyB,CAoP5B"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { lstatSync, readdirSync, watch } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { logDriveSyncRunSummary, } from './drive-sync.js';
|
|
4
|
+
import { asError, MANAGED_GATEWAY_LOG_PREFIX } from './runtime-utils.js';
|
|
5
|
+
export function startManagedDriveSyncScheduler(params) {
|
|
6
|
+
let stopped = false;
|
|
7
|
+
let running = false;
|
|
8
|
+
let pendingReason = null;
|
|
9
|
+
let pendingRequiresLocalWrites = false;
|
|
10
|
+
let pendingRequiresFullLocalScan = false;
|
|
11
|
+
let pendingDirtyLocalPaths = new Set();
|
|
12
|
+
let pendingWaiters = [];
|
|
13
|
+
let debounceTimer = null;
|
|
14
|
+
let pollTimer = null;
|
|
15
|
+
let currentRun = null;
|
|
16
|
+
let watchHandle = null;
|
|
17
|
+
let watchStatus = 'unavailable';
|
|
18
|
+
let lastReason = null;
|
|
19
|
+
let lastStartedAt = null;
|
|
20
|
+
let lastFinishedAt = null;
|
|
21
|
+
let lastError = null;
|
|
22
|
+
let watchError = null;
|
|
23
|
+
let lastSummary = null;
|
|
24
|
+
let lastSuccessfulLocalWriteSyncAt = Date.now();
|
|
25
|
+
let hasCompletedLocalWriteSync = false;
|
|
26
|
+
const localAuditIntervalMs = params.localAuditIntervalMs ?? 300_000;
|
|
27
|
+
const completeWaiters = (waiters, result) => {
|
|
28
|
+
for (const waiter of waiters) {
|
|
29
|
+
waiter.resolve(result);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const clearDebounceTimer = () => {
|
|
33
|
+
if (!debounceTimer) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
clearTimeout(debounceTimer);
|
|
37
|
+
debounceTimer = null;
|
|
38
|
+
};
|
|
39
|
+
const runPendingSync = async () => {
|
|
40
|
+
if (stopped || running || !pendingReason) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
clearDebounceTimer();
|
|
44
|
+
const reason = pendingReason;
|
|
45
|
+
const includeLocalWrites = pendingRequiresLocalWrites;
|
|
46
|
+
const dirtyLocalPaths = pendingRequiresFullLocalScan ? undefined : [...pendingDirtyLocalPaths];
|
|
47
|
+
const waiters = pendingWaiters;
|
|
48
|
+
pendingReason = null;
|
|
49
|
+
pendingRequiresLocalWrites = false;
|
|
50
|
+
pendingRequiresFullLocalScan = false;
|
|
51
|
+
pendingDirtyLocalPaths = new Set();
|
|
52
|
+
pendingWaiters = [];
|
|
53
|
+
running = true;
|
|
54
|
+
lastReason = reason;
|
|
55
|
+
lastStartedAt = new Date().toISOString();
|
|
56
|
+
lastError = null;
|
|
57
|
+
const run = (async () => {
|
|
58
|
+
let result = {
|
|
59
|
+
status: 'failed',
|
|
60
|
+
error: 'Drive sync did not produce a result',
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
const syncOptions = {
|
|
64
|
+
includeLocalWrites,
|
|
65
|
+
dirtyLocalPaths,
|
|
66
|
+
schedulerStatus: {
|
|
67
|
+
watchStatus,
|
|
68
|
+
watchError,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
const summary = await params.service.syncOnce(syncOptions);
|
|
72
|
+
lastSummary = summary;
|
|
73
|
+
logDriveSyncRunSummary(summary);
|
|
74
|
+
result =
|
|
75
|
+
summary.failedDriveCount > 0
|
|
76
|
+
? {
|
|
77
|
+
status: 'degraded',
|
|
78
|
+
summary,
|
|
79
|
+
error: `${summary.failedDriveCount} drive sync${summary.failedDriveCount === 1 ? '' : 's'} failed`,
|
|
80
|
+
}
|
|
81
|
+
: { status: 'success', summary };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const normalizedError = asError(error);
|
|
85
|
+
lastError = normalizedError.message;
|
|
86
|
+
result = { status: 'failed', error: normalizedError.message };
|
|
87
|
+
console.error(`${MANAGED_GATEWAY_LOG_PREFIX} failed to sync drives`, {
|
|
88
|
+
reason,
|
|
89
|
+
error: normalizedError,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
if (includeLocalWrites &&
|
|
94
|
+
(result.status === 'success' ||
|
|
95
|
+
(result.status === 'degraded' && result.summary.failedDriveCount === 0))) {
|
|
96
|
+
lastSuccessfulLocalWriteSyncAt = Date.now();
|
|
97
|
+
hasCompletedLocalWriteSync = true;
|
|
98
|
+
}
|
|
99
|
+
lastFinishedAt = new Date().toISOString();
|
|
100
|
+
running = false;
|
|
101
|
+
completeWaiters(waiters, result);
|
|
102
|
+
if (pendingReason && !stopped) {
|
|
103
|
+
schedulePendingSync(false);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
currentRun = run;
|
|
108
|
+
await run;
|
|
109
|
+
if (currentRun === run) {
|
|
110
|
+
currentRun = null;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const schedulePendingSync = (immediate) => {
|
|
114
|
+
if (stopped || running || !pendingReason) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (immediate) {
|
|
118
|
+
clearDebounceTimer();
|
|
119
|
+
void runPendingSync();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (debounceTimer) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
debounceTimer = setTimeout(() => {
|
|
126
|
+
debounceTimer = null;
|
|
127
|
+
void runPendingSync();
|
|
128
|
+
}, params.debounceMs);
|
|
129
|
+
debounceTimer.unref?.();
|
|
130
|
+
};
|
|
131
|
+
const requestSync = (reason, options = {}) => {
|
|
132
|
+
if (stopped) {
|
|
133
|
+
return Promise.resolve({ status: 'skipped', reason: 'scheduler_stopped' });
|
|
134
|
+
}
|
|
135
|
+
pendingReason = reason;
|
|
136
|
+
const requiresLocalWrites = requestRequiresLocalWrites({
|
|
137
|
+
reason,
|
|
138
|
+
watchStatus,
|
|
139
|
+
lastSuccessfulLocalWriteSyncAt,
|
|
140
|
+
hasCompletedLocalWriteSync,
|
|
141
|
+
localAuditIntervalMs,
|
|
142
|
+
});
|
|
143
|
+
pendingRequiresLocalWrites = pendingRequiresLocalWrites || requiresLocalWrites;
|
|
144
|
+
if (options.dirtyLocalPaths && !pendingRequiresFullLocalScan) {
|
|
145
|
+
for (const dirtyPath of options.dirtyLocalPaths) {
|
|
146
|
+
pendingDirtyLocalPaths.add(dirtyPath);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else if (requiresLocalWrites) {
|
|
150
|
+
pendingRequiresFullLocalScan = true;
|
|
151
|
+
pendingDirtyLocalPaths.clear();
|
|
152
|
+
}
|
|
153
|
+
const promise = new Promise((resolve) => {
|
|
154
|
+
pendingWaiters.push({ resolve });
|
|
155
|
+
});
|
|
156
|
+
schedulePendingSync(options.immediate === true);
|
|
157
|
+
return promise;
|
|
158
|
+
};
|
|
159
|
+
const startWatching = () => {
|
|
160
|
+
try {
|
|
161
|
+
watchHandle = (params.dependencies?.watchRoot ?? watchDriveRoot)(params.rootDir, (reason, dirtyPath) => {
|
|
162
|
+
void requestSync(reason, {
|
|
163
|
+
dirtyLocalPaths: dirtyPath ? [dirtyPath] : undefined,
|
|
164
|
+
});
|
|
165
|
+
}, (error) => {
|
|
166
|
+
const normalizedError = asError(error);
|
|
167
|
+
watchStatus = 'error';
|
|
168
|
+
watchError = normalizedError.message;
|
|
169
|
+
console.error(`${MANAGED_GATEWAY_LOG_PREFIX} drive sync filesystem watcher failed`, {
|
|
170
|
+
rootDir: params.rootDir,
|
|
171
|
+
error: normalizedError,
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
watchStatus = watchHandle ? 'active' : 'unavailable';
|
|
175
|
+
watchError = watchHandle ? null : 'filesystem watcher unavailable';
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const normalizedError = asError(error);
|
|
179
|
+
watchStatus = 'unavailable';
|
|
180
|
+
watchError = normalizedError.message;
|
|
181
|
+
console.warn(`${MANAGED_GATEWAY_LOG_PREFIX} drive sync filesystem watcher unavailable`, {
|
|
182
|
+
rootDir: params.rootDir,
|
|
183
|
+
error: normalizedError,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
startWatching();
|
|
188
|
+
pollTimer = setInterval(() => {
|
|
189
|
+
void requestSync('drive_sync_poll', { immediate: true });
|
|
190
|
+
}, params.pollIntervalMs);
|
|
191
|
+
pollTimer.unref?.();
|
|
192
|
+
return {
|
|
193
|
+
requestSync,
|
|
194
|
+
getStatus() {
|
|
195
|
+
return {
|
|
196
|
+
running,
|
|
197
|
+
pending: pendingReason !== null,
|
|
198
|
+
watchStatus,
|
|
199
|
+
lastReason,
|
|
200
|
+
lastStartedAt,
|
|
201
|
+
lastFinishedAt,
|
|
202
|
+
lastError,
|
|
203
|
+
watchError,
|
|
204
|
+
lastSummary,
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
async stop() {
|
|
208
|
+
stopped = true;
|
|
209
|
+
clearDebounceTimer();
|
|
210
|
+
if (pollTimer) {
|
|
211
|
+
clearInterval(pollTimer);
|
|
212
|
+
pollTimer = null;
|
|
213
|
+
}
|
|
214
|
+
watchHandle?.close();
|
|
215
|
+
watchHandle = null;
|
|
216
|
+
completeWaiters(pendingWaiters, { status: 'skipped', reason: 'scheduler_stopped' });
|
|
217
|
+
pendingWaiters = [];
|
|
218
|
+
pendingReason = null;
|
|
219
|
+
pendingRequiresLocalWrites = false;
|
|
220
|
+
pendingRequiresFullLocalScan = false;
|
|
221
|
+
pendingDirtyLocalPaths.clear();
|
|
222
|
+
await currentRun;
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function requestRequiresLocalWrites(params) {
|
|
227
|
+
if (params.reason !== 'drive_sync_poll') {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
if (!params.hasCompletedLocalWriteSync && params.watchStatus !== 'active') {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
return Date.now() - params.lastSuccessfulLocalWriteSyncAt >= params.localAuditIntervalMs;
|
|
234
|
+
}
|
|
235
|
+
function watchDriveRoot(rootDir, onChange, onError) {
|
|
236
|
+
const watchers = new Map();
|
|
237
|
+
let closed = false;
|
|
238
|
+
let refreshTimer = null;
|
|
239
|
+
const addDirectoryTree = (directoryPath) => {
|
|
240
|
+
if (closed || watchers.has(directoryPath)) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const directoryStat = lstatSync(directoryPath);
|
|
244
|
+
if (!directoryStat.isDirectory() || directoryStat.isSymbolicLink()) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const watcher = watch(directoryPath, (_eventType, filename) => {
|
|
248
|
+
const dirtyPath = typeof filename === 'string' || Buffer.isBuffer(filename)
|
|
249
|
+
? path.join(directoryPath, filename.toString())
|
|
250
|
+
: directoryPath;
|
|
251
|
+
onChange('drive_sync_filesystem_change', dirtyPath);
|
|
252
|
+
scheduleRefresh();
|
|
253
|
+
});
|
|
254
|
+
watcher.on('error', (error) => {
|
|
255
|
+
watchers.delete(directoryPath);
|
|
256
|
+
onError(asError(error));
|
|
257
|
+
});
|
|
258
|
+
watchers.set(directoryPath, watcher);
|
|
259
|
+
for (const child of readdirSync(directoryPath, { withFileTypes: true })) {
|
|
260
|
+
if (!child.isDirectory()) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
addDirectoryTree(path.join(directoryPath, child.name));
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const refreshDirectoryTree = () => {
|
|
267
|
+
if (closed) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
addDirectoryTree(rootDir);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
onError(asError(error));
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
const scheduleRefresh = () => {
|
|
278
|
+
if (closed || refreshTimer) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
refreshTimer = setTimeout(() => {
|
|
282
|
+
refreshTimer = null;
|
|
283
|
+
refreshDirectoryTree();
|
|
284
|
+
}, 250);
|
|
285
|
+
refreshTimer.unref?.();
|
|
286
|
+
};
|
|
287
|
+
addDirectoryTree(rootDir);
|
|
288
|
+
return {
|
|
289
|
+
close() {
|
|
290
|
+
closed = true;
|
|
291
|
+
if (refreshTimer) {
|
|
292
|
+
clearTimeout(refreshTimer);
|
|
293
|
+
refreshTimer = null;
|
|
294
|
+
}
|
|
295
|
+
for (const watcher of watchers.values()) {
|
|
296
|
+
watcher.close();
|
|
297
|
+
}
|
|
298
|
+
watchers.clear();
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=drive-sync-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync-scheduler.js","sourceRoot":"","sources":["../../src/managed-runtime/drive-sync-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type DriveSyncConflictRecord, type DriveSyncStateEntry, type LocalDriveConflictAction, type LocalDriveMutation, type LocalDriveScanEntry } from './drive-sync-planner.js';
|
|
2
|
+
export type DriveSyncStateMutationStore = {
|
|
3
|
+
getConflict?(driveId: string, drivePath: string): DriveSyncConflictRecord | null;
|
|
4
|
+
upsertEntry(entry: DriveSyncStateEntry): void;
|
|
5
|
+
upsertConflict?(conflict: DriveSyncConflictRecord): void;
|
|
6
|
+
deleteConflict?(driveId: string, drivePath: string): void;
|
|
7
|
+
deleteConflictTree?(driveId: string, drivePath: string): void;
|
|
8
|
+
deleteEntryTree(driveId: string, drivePath: string): void;
|
|
9
|
+
moveEntryTree(driveId: string, fromPath: string, toPath: string): void;
|
|
10
|
+
};
|
|
11
|
+
export type LocalDriveMutationResult = {
|
|
12
|
+
status: 'applied' | 'conflicted' | 'unsupported' | 'rejected';
|
|
13
|
+
path?: string;
|
|
14
|
+
from_path?: string;
|
|
15
|
+
to_path?: string;
|
|
16
|
+
version_id?: string;
|
|
17
|
+
conflict_id?: string;
|
|
18
|
+
reason?: string;
|
|
19
|
+
};
|
|
20
|
+
export type RemoteDriveVersionMetadata = {
|
|
21
|
+
content_sha256: string;
|
|
22
|
+
size_bytes: number;
|
|
23
|
+
mime_type: string | null;
|
|
24
|
+
} | null;
|
|
25
|
+
export declare function applyLocalDriveConflictActions(params: {
|
|
26
|
+
stateStore: Pick<DriveSyncStateMutationStore, 'getConflict' | 'upsertConflict' | 'deleteConflict'>;
|
|
27
|
+
actions: LocalDriveConflictAction[];
|
|
28
|
+
}): void;
|
|
29
|
+
export declare function applyAppliedLocalDriveMutationState(params: {
|
|
30
|
+
stateStore: DriveSyncStateMutationStore;
|
|
31
|
+
driveId: string;
|
|
32
|
+
mutation: LocalDriveMutation;
|
|
33
|
+
result: LocalDriveMutationResult;
|
|
34
|
+
}): void;
|
|
35
|
+
export declare function applyUnsupportedLocalDriveMutationState(params: {
|
|
36
|
+
stateStore: DriveSyncStateMutationStore;
|
|
37
|
+
driveId: string;
|
|
38
|
+
mutation: LocalDriveMutation;
|
|
39
|
+
}): void;
|
|
40
|
+
export declare function recordLocalUploadConflict(params: {
|
|
41
|
+
stateStore: DriveSyncStateMutationStore;
|
|
42
|
+
driveId: string;
|
|
43
|
+
mutation: LocalDriveMutation;
|
|
44
|
+
result: LocalDriveMutationResult;
|
|
45
|
+
conflictPath: string;
|
|
46
|
+
localConflictPath: string | null;
|
|
47
|
+
}): void;
|
|
48
|
+
export declare function applyRemoteDriveMoveState(params: {
|
|
49
|
+
stateStore: DriveSyncStateMutationStore;
|
|
50
|
+
driveId: string;
|
|
51
|
+
fromPath: string;
|
|
52
|
+
toPath: string;
|
|
53
|
+
}): void;
|
|
54
|
+
export declare function applyRemoteDriveDeleteState(params: {
|
|
55
|
+
stateStore: DriveSyncStateMutationStore;
|
|
56
|
+
driveId: string;
|
|
57
|
+
path: string;
|
|
58
|
+
}): void;
|
|
59
|
+
export declare function applyRemoteDriveDirectoryState(params: {
|
|
60
|
+
stateStore: DriveSyncStateMutationStore;
|
|
61
|
+
driveId: string;
|
|
62
|
+
path: string;
|
|
63
|
+
}): void;
|
|
64
|
+
export declare function applyRemoteDriveFileState(params: {
|
|
65
|
+
stateStore: DriveSyncStateMutationStore;
|
|
66
|
+
driveId: string;
|
|
67
|
+
path: string;
|
|
68
|
+
versionId: string;
|
|
69
|
+
version: RemoteDriveVersionMetadata;
|
|
70
|
+
downloadedSizeBytes: number;
|
|
71
|
+
}): void;
|
|
72
|
+
export declare function recordRemoteApplyConflict(params: {
|
|
73
|
+
stateStore: DriveSyncStateMutationStore;
|
|
74
|
+
driveId: string;
|
|
75
|
+
path: string;
|
|
76
|
+
reason: string;
|
|
77
|
+
localEntry: LocalDriveScanEntry | null;
|
|
78
|
+
baselineEntry: DriveSyncStateEntry | null;
|
|
79
|
+
conflictPath: string | null;
|
|
80
|
+
remoteBatchId: string;
|
|
81
|
+
remoteSequence: number;
|
|
82
|
+
}): DriveSyncConflictRecord;
|
|
83
|
+
export declare function resolveLocalMutationResultPath(result: LocalDriveMutationResult, mutation: LocalDriveMutation): string;
|
|
84
|
+
//# sourceMappingURL=drive-sync-state-applier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync-state-applier.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/drive-sync-state-applier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
export function applyLocalDriveConflictActions(params) {
|
|
2
|
+
for (const action of params.actions) {
|
|
3
|
+
if (action.type === 'clear_conflict') {
|
|
4
|
+
params.stateStore.deleteConflict?.(action.driveId, action.path);
|
|
5
|
+
continue;
|
|
6
|
+
}
|
|
7
|
+
const existingConflict = params.stateStore.getConflict?.(action.driveId, action.path) ?? null;
|
|
8
|
+
if (!existingConflict) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
params.stateStore.upsertConflict?.({
|
|
12
|
+
...existingConflict,
|
|
13
|
+
conflictPath: action.conflictPath,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function applyAppliedLocalDriveMutationState(params) {
|
|
18
|
+
if (params.mutation.request.type === 'move') {
|
|
19
|
+
const fromPath = readMutationPath(params.mutation.request, 'from_path');
|
|
20
|
+
const toPath = readMutationPath(params.mutation.request, 'to_path');
|
|
21
|
+
params.stateStore.moveEntryTree(params.driveId, fromPath, toPath);
|
|
22
|
+
params.stateStore.deleteConflictTree?.(params.driveId, fromPath);
|
|
23
|
+
params.stateStore.deleteConflictTree?.(params.driveId, toPath);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (params.mutation.request.type === 'delete') {
|
|
27
|
+
const drivePath = readMutationPath(params.mutation.request, 'path');
|
|
28
|
+
params.stateStore.deleteEntryTree(params.driveId, drivePath);
|
|
29
|
+
params.stateStore.deleteConflictTree?.(params.driveId, drivePath);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (!params.mutation.stateEntry) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
params.stateStore.upsertEntry({
|
|
36
|
+
...params.mutation.stateEntry,
|
|
37
|
+
versionId: typeof params.result.version_id === 'string'
|
|
38
|
+
? params.result.version_id
|
|
39
|
+
: params.mutation.stateEntry.versionId,
|
|
40
|
+
});
|
|
41
|
+
params.stateStore.deleteConflict?.(params.driveId, params.mutation.stateEntry.path);
|
|
42
|
+
}
|
|
43
|
+
export function applyUnsupportedLocalDriveMutationState(params) {
|
|
44
|
+
if (!params.mutation.stateEntry) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
params.stateStore.upsertEntry(params.mutation.stateEntry);
|
|
48
|
+
params.stateStore.deleteConflict?.(params.driveId, params.mutation.stateEntry.path);
|
|
49
|
+
}
|
|
50
|
+
export function recordLocalUploadConflict(params) {
|
|
51
|
+
params.stateStore.upsertConflict?.({
|
|
52
|
+
driveId: params.driveId,
|
|
53
|
+
path: params.conflictPath,
|
|
54
|
+
conflictType: 'local_upload',
|
|
55
|
+
reason: params.result.reason ?? null,
|
|
56
|
+
localContentSha256: params.mutation.stateEntry?.contentSha256 ?? null,
|
|
57
|
+
localSizeBytes: params.mutation.stateEntry?.sizeBytes ?? null,
|
|
58
|
+
localVersionId: typeof params.result.version_id === 'string'
|
|
59
|
+
? params.result.version_id
|
|
60
|
+
: (params.mutation.stateEntry?.versionId ?? null),
|
|
61
|
+
conflictId: typeof params.result.conflict_id === 'string' ? params.result.conflict_id : null,
|
|
62
|
+
conflictPath: params.localConflictPath,
|
|
63
|
+
remoteBatchId: null,
|
|
64
|
+
remoteSequence: null,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export function applyRemoteDriveMoveState(params) {
|
|
68
|
+
params.stateStore.moveEntryTree(params.driveId, normalizeDrivePath(params.fromPath), normalizeDrivePath(params.toPath));
|
|
69
|
+
}
|
|
70
|
+
export function applyRemoteDriveDeleteState(params) {
|
|
71
|
+
params.stateStore.deleteEntryTree(params.driveId, normalizeDrivePath(params.path));
|
|
72
|
+
}
|
|
73
|
+
export function applyRemoteDriveDirectoryState(params) {
|
|
74
|
+
params.stateStore.upsertEntry({
|
|
75
|
+
driveId: params.driveId,
|
|
76
|
+
path: normalizeDrivePath(params.path),
|
|
77
|
+
entryType: 'directory',
|
|
78
|
+
versionId: null,
|
|
79
|
+
contentSha256: null,
|
|
80
|
+
sizeBytes: null,
|
|
81
|
+
mimeType: null,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function applyRemoteDriveFileState(params) {
|
|
85
|
+
params.stateStore.upsertEntry({
|
|
86
|
+
driveId: params.driveId,
|
|
87
|
+
path: normalizeDrivePath(params.path),
|
|
88
|
+
entryType: 'file',
|
|
89
|
+
versionId: params.versionId,
|
|
90
|
+
contentSha256: params.version?.content_sha256 ?? null,
|
|
91
|
+
sizeBytes: params.version?.size_bytes ?? params.downloadedSizeBytes,
|
|
92
|
+
mimeType: params.version?.mime_type ?? null,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export function recordRemoteApplyConflict(params) {
|
|
96
|
+
const conflict = {
|
|
97
|
+
driveId: params.driveId,
|
|
98
|
+
path: normalizeDrivePath(params.path),
|
|
99
|
+
conflictType: 'remote_apply',
|
|
100
|
+
reason: params.reason,
|
|
101
|
+
localContentSha256: params.localEntry?.contentSha256 ?? null,
|
|
102
|
+
localSizeBytes: params.localEntry?.sizeBytes ?? null,
|
|
103
|
+
localVersionId: params.baselineEntry?.versionId ?? null,
|
|
104
|
+
conflictId: null,
|
|
105
|
+
conflictPath: params.conflictPath,
|
|
106
|
+
remoteBatchId: params.remoteBatchId,
|
|
107
|
+
remoteSequence: params.remoteSequence,
|
|
108
|
+
};
|
|
109
|
+
params.stateStore.upsertConflict?.(conflict);
|
|
110
|
+
return conflict;
|
|
111
|
+
}
|
|
112
|
+
export function resolveLocalMutationResultPath(result, mutation) {
|
|
113
|
+
if (typeof result.path === 'string') {
|
|
114
|
+
return normalizeDrivePath(result.path);
|
|
115
|
+
}
|
|
116
|
+
if (typeof result.to_path === 'string') {
|
|
117
|
+
return normalizeDrivePath(result.to_path);
|
|
118
|
+
}
|
|
119
|
+
if (typeof result.from_path === 'string') {
|
|
120
|
+
return normalizeDrivePath(result.from_path);
|
|
121
|
+
}
|
|
122
|
+
if (mutation.stateEntry) {
|
|
123
|
+
return mutation.stateEntry.path;
|
|
124
|
+
}
|
|
125
|
+
if (typeof mutation.request.path === 'string') {
|
|
126
|
+
return normalizeDrivePath(mutation.request.path);
|
|
127
|
+
}
|
|
128
|
+
if (typeof mutation.request.to_path === 'string') {
|
|
129
|
+
return normalizeDrivePath(mutation.request.to_path);
|
|
130
|
+
}
|
|
131
|
+
if (typeof mutation.request.from_path === 'string') {
|
|
132
|
+
return normalizeDrivePath(mutation.request.from_path);
|
|
133
|
+
}
|
|
134
|
+
throw new Error('Local drive sync mutation result did not include a path');
|
|
135
|
+
}
|
|
136
|
+
function readMutationPath(request, key) {
|
|
137
|
+
const value = request[key];
|
|
138
|
+
if (typeof value !== 'string') {
|
|
139
|
+
throw new Error(`Local drive sync mutation is missing ${key}`);
|
|
140
|
+
}
|
|
141
|
+
return normalizeDrivePath(value);
|
|
142
|
+
}
|
|
143
|
+
function normalizeDrivePath(input) {
|
|
144
|
+
if (!input.startsWith('/')) {
|
|
145
|
+
throw new Error(`Drive path must be absolute: ${input}`);
|
|
146
|
+
}
|
|
147
|
+
const segments = input.split('/').filter(Boolean);
|
|
148
|
+
if (segments.some((segment) => segment === '.' || segment === '..')) {
|
|
149
|
+
throw new Error(`Drive path must not contain traversal segments: ${input}`);
|
|
150
|
+
}
|
|
151
|
+
return input === '/' ? '/' : `/${segments.join('/')}`;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=drive-sync-state-applier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync-state-applier.js","sourceRoot":"","sources":["../../src/managed-runtime/drive-sync-state-applier.ts"],"names":[],"mappings":"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"}
|