@tradejs/cli 3.1.29-beta.262 → 3.1.29-beta.264
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/dist/cli.js +864 -1424
- package/dist/lib/runtimeEvidenceArtifacts.js +3 -416
- package/dist/lib/runtimeEvidenceCompositionSnapshots.js +42 -211
- package/dist/lib/runtimeEvidenceCompositions.js +33 -310
- package/dist/lib/runtimeEvidenceDeployment.js +3 -315
- package/dist/lib/runtimeEvidenceProducer.js +3 -77
- package/dist/lib/runtimeEvidenceSync.js +32 -299
- package/dist/lib/runtimeFeedbackArtifacts.js +3 -545
- package/dist/lib/runtimeFeedbackNotification.js +7 -195
- package/dist/lib/runtimeFeedbackReplay.js +26 -525
- package/dist/lib/runtimeFeedbackSync.js +26 -219
- package/dist/lib/runtimeScorecard.js +5 -163
- package/dist/scripts/backtest.js +6 -1
- package/dist/scripts/mcpWorker.js +273 -0
- package/dist/scripts/replay.js +14 -250
- package/dist/scripts/replayRunner.js +14 -250
- package/dist/scripts/runtimeEvidence.js +47 -597
- package/dist/scripts/runtimeEvidenceSync.js +29 -296
- package/dist/scripts/runtimeFeedbackNotify.js +10 -188
- package/dist/scripts/runtimeFeedbackReplay.js +29 -528
- package/dist/scripts/runtimeFeedbackSync.js +28 -221
- package/dist/scripts/runtimeScorecard.js +88 -503
- package/dist/scripts/signals.js +55 -224
- package/dist/scripts/signalsDaemon.js +55 -224
- package/package.json +7 -7
|
@@ -17,6 +17,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
}
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
21
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
22
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
23
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -34,229 +35,35 @@ __export(runtimeFeedbackSync_exports, {
|
|
|
34
35
|
runtimeFeedbackSync: () => runtimeFeedbackSync
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(runtimeFeedbackSync_exports);
|
|
37
|
-
var
|
|
38
|
+
var import_node_path3 = __toESM(require("path"));
|
|
38
39
|
var import_args = __toESM(require("args"));
|
|
39
40
|
var import_chalk = __toESM(require("chalk"));
|
|
40
41
|
|
|
41
42
|
// src/lib/runtimeFeedbackSync.ts
|
|
42
43
|
var import_node_child_process2 = require("child_process");
|
|
43
|
-
var
|
|
44
|
-
var
|
|
44
|
+
var import_promises2 = __toESM(require("fs/promises"));
|
|
45
|
+
var import_node_path2 = __toESM(require("path"));
|
|
45
46
|
var import_node_util2 = require("util");
|
|
46
47
|
|
|
47
48
|
// src/lib/runtimeFeedbackArtifacts.ts
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
var import_node_path3 = __toESM(require("path"));
|
|
51
|
-
|
|
52
|
-
// src/lib/runtimeEvidenceDeployment.ts
|
|
53
|
-
var import_runtimeStrategies = require("@tradejs/node/runtimeStrategies");
|
|
54
|
-
var isRecord = (value) => value != null && typeof value === "object" && !Array.isArray(value);
|
|
55
|
-
var isNonEmptyString = (value) => typeof value === "string" && value.trim().length > 0;
|
|
56
|
-
var isPackageVersionMap = (value) => isRecord(value) && Object.keys(value).length > 0 && Object.entries(value).every(
|
|
57
|
-
([name, version]) => name.startsWith("@tradejs/") && isNonEmptyString(version)
|
|
58
|
-
);
|
|
59
|
-
var INTERVALS = /* @__PURE__ */ new Set([
|
|
60
|
-
"1",
|
|
61
|
-
"3",
|
|
62
|
-
"5",
|
|
63
|
-
"15",
|
|
64
|
-
"30",
|
|
65
|
-
"60",
|
|
66
|
-
"120",
|
|
67
|
-
"240",
|
|
68
|
-
"360",
|
|
69
|
-
"720",
|
|
70
|
-
"D",
|
|
71
|
-
"W",
|
|
72
|
-
"M"
|
|
73
|
-
]);
|
|
74
|
-
var UNIVERSES = /* @__PURE__ */ new Set(["crypto", "tradfi"]);
|
|
75
|
-
var isRuntimeStrategySelection = (value) => value === void 0 || isRecord(value) && Object.keys(value).length === 1 && Object.keys(value).every((key) => key === "tickers") && Array.isArray(value.tickers) && value.tickers.length > 0 && value.tickers.every((ticker) => isNonEmptyString(ticker));
|
|
76
|
-
var parseRuntimeEvidenceDeploymentSnapshot = (value) => {
|
|
77
|
-
if (!isRecord(value) || value.schemaVersion !== 2 || !isNonEmptyString(value.id) || !isNonEmptyString(value.deploymentCompositionId) || !/^dc1:[a-f0-9]{16}$/.test(value.deploymentCompositionId) || !isNonEmptyString(value.label) || !isNonEmptyString(value.connectorName) || !isNonEmptyString(value.provider) || !isNonEmptyString(value.accountId) || typeof value.enabled !== "boolean" || !Array.isArray(value.strategies)) {
|
|
78
|
-
throw new Error(
|
|
79
|
-
"Runtime evidence deployment snapshot is missing or invalid"
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
const strategies = value.strategies.map((candidate) => {
|
|
83
|
-
if (!isRecord(candidate) || !isNonEmptyString(candidate.strategyName) || !isNonEmptyString(candidate.strategyRevision) || !/^sr1:[a-f0-9]{16}$/.test(candidate.strategyRevision) || typeof candidate.enabled !== "boolean" || !["active", "entries_paused"].includes(String(candidate.controlState)) || !INTERVALS.has(String(candidate.interval)) || !UNIVERSES.has(String(candidate.universe)) || !isNonEmptyString(candidate.strategyPackage) || !isNonEmptyString(candidate.strategyPackageVersion) || !isPackageVersionMap(candidate.strategyDependencyVersions) || !isNonEmptyString(candidate.runtimePackageVersion) || !isRecord(candidate.strategyConfig) || !isRuntimeStrategySelection(candidate.selection)) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
"Runtime evidence deployment strategy snapshot is invalid"
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
if (String(candidate.strategyConfig.INTERVAL) !== String(candidate.interval) || String(candidate.strategyConfig.UNIVERSE) !== String(candidate.universe)) {
|
|
89
|
-
throw new Error(
|
|
90
|
-
`Runtime evidence strategy config does not match its scope: ${candidate.strategyName}`
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
if (candidate.accountId != null && (!isNonEmptyString(candidate.accountId) || candidate.accountId !== value.accountId)) {
|
|
94
|
-
throw new Error(
|
|
95
|
-
`Runtime evidence strategy account does not match deployment: ${candidate.strategyName}`
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
return candidate;
|
|
99
|
-
});
|
|
100
|
-
const identities = /* @__PURE__ */ new Set();
|
|
101
|
-
for (const strategy of strategies) {
|
|
102
|
-
if (identities.has(strategy.strategyName)) {
|
|
103
|
-
throw new Error(
|
|
104
|
-
`Duplicate runtime evidence strategy: ${strategy.strategyName}`
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
identities.add(strategy.strategyName);
|
|
108
|
-
}
|
|
109
|
-
return {
|
|
110
|
-
...value,
|
|
111
|
-
strategies
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
var activeRuntimeEvidenceStrategies = (deployment) => deployment.enabled ? deployment.strategies.filter((strategy) => strategy.enabled) : [];
|
|
49
|
+
var runtimeFeedbackArtifacts_exports = {};
|
|
50
|
+
__reExport(runtimeFeedbackArtifacts_exports, require("@tradejs/node/diagnostics"));
|
|
115
51
|
|
|
116
|
-
// src/lib/
|
|
117
|
-
var
|
|
52
|
+
// src/lib/runtimeEvidenceSync.ts
|
|
53
|
+
var import_node_child_process = require("child_process");
|
|
118
54
|
var import_promises = __toESM(require("fs/promises"));
|
|
119
55
|
var import_node_path = __toESM(require("path"));
|
|
56
|
+
var import_node_util = require("util");
|
|
120
57
|
|
|
121
|
-
// src/lib/
|
|
122
|
-
var
|
|
123
|
-
|
|
124
|
-
var import_node_path2 = __toESM(require("path"));
|
|
125
|
-
var isRecord2 = (value) => value != null && typeof value === "object" && !Array.isArray(value);
|
|
126
|
-
var parseRuntimeEvidenceProducer = (value) => {
|
|
127
|
-
const producer = isRecord2(value) ? value : null;
|
|
128
|
-
const runtimePackageManifest = isRecord2(producer?.runtimePackageManifest) ? producer.runtimePackageManifest : null;
|
|
129
|
-
if (producer?.schemaVersion !== 1 || typeof producer.projectSha !== "string" || !/^[a-f0-9]{40}$/.test(producer.projectSha) || typeof producer.imageDigest !== "string" || !/^sha256:[a-f0-9]{64}$/.test(producer.imageDigest) || runtimePackageManifest?.file !== "runtime-package-manifest.json" || typeof runtimePackageManifest.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(runtimePackageManifest.sha256)) {
|
|
130
|
-
throw new Error("Runtime evidence producer image identity is invalid");
|
|
131
|
-
}
|
|
132
|
-
return producer;
|
|
133
|
-
};
|
|
58
|
+
// src/lib/runtimeEvidenceArtifacts.ts
|
|
59
|
+
var runtimeEvidenceArtifacts_exports = {};
|
|
60
|
+
__reExport(runtimeEvidenceArtifacts_exports, require("@tradejs/node/diagnostics"));
|
|
134
61
|
|
|
135
|
-
// src/lib/
|
|
136
|
-
var
|
|
137
|
-
|
|
138
|
-
var RUNTIME_FEEDBACK_LOG_FILE = "replay.log";
|
|
139
|
-
var RUNTIME_FEEDBACK_COMPLETE_FILE = ".complete";
|
|
140
|
-
var isRecord3 = (value) => value != null && typeof value === "object" && !Array.isArray(value);
|
|
141
|
-
var sha256 = (value) => (0, import_node_crypto3.createHash)("sha256").update(value).digest("hex");
|
|
142
|
-
var parsePayload = (value, expectedFile) => {
|
|
143
|
-
const payload = isRecord3(value) ? value : null;
|
|
144
|
-
if (payload?.file !== expectedFile || typeof payload.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(payload.sha256) || typeof payload.bytes !== "number" || !Number.isFinite(payload.bytes) || payload.bytes < 0) {
|
|
145
|
-
throw new Error(`Invalid runtime feedback payload: ${expectedFile}`);
|
|
146
|
-
}
|
|
147
|
-
return payload;
|
|
148
|
-
};
|
|
149
|
-
var parseManifest = (value) => {
|
|
150
|
-
const manifest = isRecord3(value) ? value : null;
|
|
151
|
-
const window = isRecord3(manifest?.window) ? manifest.window : null;
|
|
152
|
-
const runtimeEvidence = isRecord3(manifest?.runtimeEvidence) ? manifest.runtimeEvidence : null;
|
|
153
|
-
const safety = isRecord3(manifest?.safety) ? manifest.safety : null;
|
|
154
|
-
const payloads = isRecord3(manifest?.payloads) ? manifest.payloads : null;
|
|
155
|
-
if (manifest?.schemaVersion !== 1 || manifest.reportType !== "runtime-feedback-replay" || typeof manifest.artifactId !== "string" || !manifest.artifactId.trim() || typeof manifest.runId !== "string" || !manifest.runId.trim() || typeof manifest.deploymentId !== "string" || !manifest.deploymentId.trim() || typeof manifest.deploymentCompositionId !== "string" || !/^dc1:[a-f0-9]{16}$/.test(manifest.deploymentCompositionId) || typeof manifest.userName !== "string" || !manifest.userName.trim() || typeof manifest.createdAt !== "number" || typeof window?.startTime !== "number" || typeof window.endTime !== "number" || typeof runtimeEvidence?.artifactId !== "string" || typeof runtimeEvidence.payloadSha256 !== "string" || !/^[a-f0-9]{64}$/.test(runtimeEvidence.payloadSha256) || !Array.isArray(manifest.activeStrategies) || manifest.activeStrategies.length === 0 || !manifest.activeStrategies.every(
|
|
156
|
-
(strategy) => typeof strategy === "string" && strategy.trim()
|
|
157
|
-
) || typeof manifest.cycleCount !== "number" || !Number.isFinite(manifest.cycleCount) || manifest.cycleCount <= 0 || safety?.cacheOnly !== true || safety.externalOrderPlacement !== false || safety.redis !== "isolated" || safety.timescale !== "read_only") {
|
|
158
|
-
throw new Error("Invalid runtime feedback replay manifest");
|
|
159
|
-
}
|
|
160
|
-
const replayEvidence = parsePayload(
|
|
161
|
-
payloads?.replayEvidence,
|
|
162
|
-
RUNTIME_FEEDBACK_REPLAY_FILE
|
|
163
|
-
);
|
|
164
|
-
const log = parsePayload(payloads?.log, RUNTIME_FEEDBACK_LOG_FILE);
|
|
165
|
-
return {
|
|
166
|
-
...manifest,
|
|
167
|
-
producer: parseRuntimeEvidenceProducer(manifest.producer),
|
|
168
|
-
payloads: {
|
|
169
|
-
replayEvidence: {
|
|
170
|
-
...replayEvidence,
|
|
171
|
-
file: RUNTIME_FEEDBACK_REPLAY_FILE
|
|
172
|
-
},
|
|
173
|
-
log: { ...log, file: RUNTIME_FEEDBACK_LOG_FILE }
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
var verifyRuntimeFeedbackReplayBundle = async (bundleDir) => {
|
|
178
|
-
const manifestPath = import_node_path3.default.join(bundleDir, RUNTIME_FEEDBACK_MANIFEST_FILE);
|
|
179
|
-
const replayEvidencePath = import_node_path3.default.join(bundleDir, RUNTIME_FEEDBACK_REPLAY_FILE);
|
|
180
|
-
const logPath = import_node_path3.default.join(bundleDir, RUNTIME_FEEDBACK_LOG_FILE);
|
|
181
|
-
const completePath = import_node_path3.default.join(bundleDir, RUNTIME_FEEDBACK_COMPLETE_FILE);
|
|
182
|
-
const [manifestText, replayPayload, logPayload, completeText] = await Promise.all([
|
|
183
|
-
import_promises3.default.readFile(manifestPath, "utf8"),
|
|
184
|
-
import_promises3.default.readFile(replayEvidencePath),
|
|
185
|
-
import_promises3.default.readFile(logPath),
|
|
186
|
-
import_promises3.default.readFile(completePath, "utf8")
|
|
187
|
-
]);
|
|
188
|
-
const manifest = parseManifest(JSON.parse(manifestText));
|
|
189
|
-
if (completeText.trim() !== manifest.artifactId) {
|
|
190
|
-
throw new Error(`Invalid runtime feedback completion marker: ${bundleDir}`);
|
|
191
|
-
}
|
|
192
|
-
for (const [payload, descriptor] of [
|
|
193
|
-
[replayPayload, manifest.payloads.replayEvidence],
|
|
194
|
-
[logPayload, manifest.payloads.log]
|
|
195
|
-
]) {
|
|
196
|
-
if (payload.byteLength !== descriptor.bytes) {
|
|
197
|
-
throw new Error(
|
|
198
|
-
`Runtime feedback payload size mismatch: ${descriptor.file}`
|
|
199
|
-
);
|
|
200
|
-
}
|
|
201
|
-
if (sha256(payload) !== descriptor.sha256) {
|
|
202
|
-
throw new Error(
|
|
203
|
-
`Runtime feedback payload checksum mismatch: ${descriptor.file}`
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
const replayEvidence = JSON.parse(replayPayload.toString("utf8"));
|
|
208
|
-
if (replayEvidence.reportType !== "replay-runtime-evidence") {
|
|
209
|
-
throw new Error("Invalid runtime feedback replay evidence payload");
|
|
210
|
-
}
|
|
211
|
-
const replayWindow = isRecord3(replayEvidence.window) ? replayEvidence.window : null;
|
|
212
|
-
const replay = isRecord3(replayEvidence.replay) ? replayEvidence.replay : null;
|
|
213
|
-
const replayDeployment = parseRuntimeEvidenceDeploymentSnapshot(
|
|
214
|
-
replayEvidence.deployment
|
|
215
|
-
);
|
|
216
|
-
const replayStrategies = activeRuntimeEvidenceStrategies(replayDeployment).map(({ strategyName }) => strategyName).sort();
|
|
217
|
-
if (replayEvidence.userName !== manifest.userName || replayWindow?.startTime !== manifest.window.startTime || replayWindow.endTime !== manifest.window.endTime || replayDeployment.id !== manifest.deploymentId || replayDeployment.deploymentCompositionId !== manifest.deploymentCompositionId || Number(replay?.cycleCount) !== manifest.cycleCount || JSON.stringify(replayStrategies) !== JSON.stringify([...manifest.activeStrategies].sort())) {
|
|
218
|
-
throw new Error("Runtime feedback replay payload does not match manifest");
|
|
219
|
-
}
|
|
220
|
-
return {
|
|
221
|
-
bundleDir,
|
|
222
|
-
manifestPath,
|
|
223
|
-
replayEvidencePath,
|
|
224
|
-
logPath,
|
|
225
|
-
manifest,
|
|
226
|
-
replayEvidence
|
|
227
|
-
};
|
|
228
|
-
};
|
|
229
|
-
var discoverRuntimeFeedbackReplayBundles = async (rootDir) => {
|
|
230
|
-
const bundles = [];
|
|
231
|
-
const visit = async (directory, depth) => {
|
|
232
|
-
if (depth > 10) return;
|
|
233
|
-
let entries;
|
|
234
|
-
try {
|
|
235
|
-
entries = await import_promises3.default.readdir(directory, { withFileTypes: true });
|
|
236
|
-
} catch (error) {
|
|
237
|
-
if (error.code === "ENOENT") return;
|
|
238
|
-
throw error;
|
|
239
|
-
}
|
|
240
|
-
const names = new Set(entries.map((entry) => entry.name));
|
|
241
|
-
if (names.has(RUNTIME_FEEDBACK_MANIFEST_FILE) && names.has(RUNTIME_FEEDBACK_REPLAY_FILE) && names.has(RUNTIME_FEEDBACK_LOG_FILE) && names.has(RUNTIME_FEEDBACK_COMPLETE_FILE)) {
|
|
242
|
-
bundles.push(directory);
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
await Promise.all(
|
|
246
|
-
entries.filter(
|
|
247
|
-
(entry) => entry.isDirectory() && !entry.name.startsWith(".") && !entry.name.includes(".tmp-")
|
|
248
|
-
).map((entry) => visit(import_node_path3.default.join(directory, entry.name), depth + 1))
|
|
249
|
-
);
|
|
250
|
-
};
|
|
251
|
-
await visit(rootDir, 0);
|
|
252
|
-
return bundles.sort();
|
|
253
|
-
};
|
|
62
|
+
// src/lib/runtimeEvidenceDeployment.ts
|
|
63
|
+
var runtimeEvidenceDeployment_exports = {};
|
|
64
|
+
__reExport(runtimeEvidenceDeployment_exports, require("@tradejs/node/diagnostics"));
|
|
254
65
|
|
|
255
66
|
// src/lib/runtimeEvidenceSync.ts
|
|
256
|
-
var import_node_child_process = require("child_process");
|
|
257
|
-
var import_promises4 = __toESM(require("fs/promises"));
|
|
258
|
-
var import_node_path4 = __toESM(require("path"));
|
|
259
|
-
var import_node_util = require("util");
|
|
260
67
|
var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
|
|
261
68
|
var withTrailingSlash = (value) => value.endsWith("/") ? value : `${value}/`;
|
|
262
69
|
var buildRuntimeEvidenceRsyncArgs = ({
|
|
@@ -302,46 +109,46 @@ var syncRuntimeFeedbackReplayBundles = async ({
|
|
|
302
109
|
}
|
|
303
110
|
}) => {
|
|
304
111
|
const safeDeploymentId = safeSegment(deploymentId, "production");
|
|
305
|
-
const inboxRoot =
|
|
306
|
-
const artifactsRoot =
|
|
112
|
+
const inboxRoot = import_node_path2.default.join(feedbackRoot, "inbox", safeDeploymentId);
|
|
113
|
+
const artifactsRoot = import_node_path2.default.join(feedbackRoot, "artifacts", safeDeploymentId);
|
|
307
114
|
await Promise.all([
|
|
308
|
-
|
|
309
|
-
|
|
115
|
+
import_promises2.default.mkdir(inboxRoot, { recursive: true }),
|
|
116
|
+
import_promises2.default.mkdir(artifactsRoot, { recursive: true })
|
|
310
117
|
]);
|
|
311
118
|
const rsyncArgs = buildRuntimeEvidenceRsyncArgs({
|
|
312
119
|
source,
|
|
313
120
|
destination: inboxRoot
|
|
314
121
|
});
|
|
315
122
|
const transfer = await runRsync(rsyncArgs);
|
|
316
|
-
const discovered = await discoverRuntimeFeedbackReplayBundles(inboxRoot);
|
|
123
|
+
const discovered = await (0, runtimeFeedbackArtifacts_exports.discoverRuntimeFeedbackReplayBundles)(inboxRoot);
|
|
317
124
|
const received = [];
|
|
318
125
|
for (const bundleDir of discovered) {
|
|
319
|
-
const verified = await verifyRuntimeFeedbackReplayBundle(bundleDir);
|
|
126
|
+
const verified = await (0, runtimeFeedbackArtifacts_exports.verifyRuntimeFeedbackReplayBundle)(bundleDir);
|
|
320
127
|
if (verified.manifest.deploymentId !== safeDeploymentId) {
|
|
321
128
|
throw new Error(
|
|
322
129
|
`Runtime feedback deployment mismatch: expected ${safeDeploymentId}, received ${verified.manifest.deploymentId}`
|
|
323
130
|
);
|
|
324
131
|
}
|
|
325
|
-
const destinationDir =
|
|
132
|
+
const destinationDir = import_node_path2.default.join(
|
|
326
133
|
artifactsRoot,
|
|
327
134
|
...dateParts(verified.manifest.window.endTime),
|
|
328
135
|
safeSegment(verified.manifest.runtimeEvidence.artifactId, "artifact"),
|
|
329
136
|
safeSegment(verified.manifest.runId, "run")
|
|
330
137
|
);
|
|
331
|
-
await
|
|
138
|
+
await import_promises2.default.mkdir(import_node_path2.default.dirname(destinationDir), { recursive: true });
|
|
332
139
|
try {
|
|
333
|
-
await
|
|
140
|
+
await import_promises2.default.rename(bundleDir, destinationDir);
|
|
334
141
|
} catch (error) {
|
|
335
142
|
if (!isExistingDestinationError(error)) throw error;
|
|
336
|
-
const existing = await verifyRuntimeFeedbackReplayBundle(destinationDir);
|
|
143
|
+
const existing = await (0, runtimeFeedbackArtifacts_exports.verifyRuntimeFeedbackReplayBundle)(destinationDir);
|
|
337
144
|
if (existing.manifest.payloads.replayEvidence.sha256 !== verified.manifest.payloads.replayEvidence.sha256) {
|
|
338
145
|
throw new Error(
|
|
339
146
|
`Conflicting runtime feedback replay ${verified.manifest.artifactId}`
|
|
340
147
|
);
|
|
341
148
|
}
|
|
342
|
-
await
|
|
149
|
+
await import_promises2.default.rm(bundleDir, { recursive: true, force: true });
|
|
343
150
|
}
|
|
344
|
-
received.push(await verifyRuntimeFeedbackReplayBundle(destinationDir));
|
|
151
|
+
received.push(await (0, runtimeFeedbackArtifacts_exports.verifyRuntimeFeedbackReplayBundle)(destinationDir));
|
|
345
152
|
}
|
|
346
153
|
return {
|
|
347
154
|
rsyncArgs,
|
|
@@ -376,7 +183,7 @@ var runtimeFeedbackSync = async () => {
|
|
|
376
183
|
"Provide --source or RUNTIME_FEEDBACK_RSYNC_SOURCE for runtime feedback sync."
|
|
377
184
|
);
|
|
378
185
|
}
|
|
379
|
-
const feedbackRoot =
|
|
186
|
+
const feedbackRoot = import_node_path3.default.resolve(projectRoot, String(flags.dir));
|
|
380
187
|
const result = await syncRuntimeFeedbackReplayBundles({
|
|
381
188
|
source,
|
|
382
189
|
feedbackRoot,
|