@tradejs/cli 3.1.29-beta.261 → 3.1.29-beta.263

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 (32) hide show
  1. package/README.md +47 -8
  2. package/dist/cli.js +990 -1448
  3. package/dist/lib/aiPocketSearch.js +16 -0
  4. package/dist/lib/aiPocketSearchCli.js +3 -3
  5. package/dist/lib/jevMicroReferences.js +73 -0
  6. package/dist/lib/jevResearch.js +11 -0
  7. package/dist/lib/runtimeEvidenceArtifacts.js +3 -416
  8. package/dist/lib/runtimeEvidenceCompositionSnapshots.js +42 -211
  9. package/dist/lib/runtimeEvidenceCompositions.js +33 -310
  10. package/dist/lib/runtimeEvidenceDeployment.js +3 -315
  11. package/dist/lib/runtimeEvidenceProducer.js +3 -77
  12. package/dist/lib/runtimeEvidenceSync.js +32 -299
  13. package/dist/lib/runtimeFeedbackArtifacts.js +3 -545
  14. package/dist/lib/runtimeFeedbackNotification.js +7 -195
  15. package/dist/lib/runtimeFeedbackReplay.js +26 -525
  16. package/dist/lib/runtimeFeedbackSync.js +26 -219
  17. package/dist/lib/runtimeScorecard.js +5 -163
  18. package/dist/scripts/aiPocketSearch.js +101 -23
  19. package/dist/scripts/backtest.js +10 -1
  20. package/dist/scripts/jev.js +11 -0
  21. package/dist/scripts/mcpWorker.js +273 -0
  22. package/dist/scripts/replay.js +14 -250
  23. package/dist/scripts/replayRunner.js +14 -250
  24. package/dist/scripts/runtimeEvidence.js +47 -597
  25. package/dist/scripts/runtimeEvidenceSync.js +29 -296
  26. package/dist/scripts/runtimeFeedbackNotify.js +10 -188
  27. package/dist/scripts/runtimeFeedbackReplay.js +29 -528
  28. package/dist/scripts/runtimeFeedbackSync.js +28 -221
  29. package/dist/scripts/runtimeScorecard.js +88 -503
  30. package/dist/scripts/signals.js +55 -224
  31. package/dist/scripts/signalsDaemon.js +55 -224
  32. package/package.json +9 -8
@@ -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 import_node_path6 = __toESM(require("path"));
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 import_promises5 = __toESM(require("fs/promises"));
44
- var import_node_path5 = __toESM(require("path"));
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 import_node_crypto3 = require("crypto");
49
- var import_promises3 = __toESM(require("fs/promises"));
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/runtimeEvidenceArtifacts.ts
117
- var import_node_crypto = require("crypto");
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/runtimeEvidenceProducer.ts
122
- var import_node_crypto2 = require("crypto");
123
- var import_promises2 = __toESM(require("fs/promises"));
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/runtimeFeedbackArtifacts.ts
136
- var RUNTIME_FEEDBACK_MANIFEST_FILE = "manifest.json";
137
- var RUNTIME_FEEDBACK_REPLAY_FILE = "replay-runtime-evidence.json";
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 = import_node_path5.default.join(feedbackRoot, "inbox", safeDeploymentId);
306
- const artifactsRoot = import_node_path5.default.join(feedbackRoot, "artifacts", safeDeploymentId);
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
- import_promises5.default.mkdir(inboxRoot, { recursive: true }),
309
- import_promises5.default.mkdir(artifactsRoot, { recursive: true })
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 = import_node_path5.default.join(
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 import_promises5.default.mkdir(import_node_path5.default.dirname(destinationDir), { recursive: true });
138
+ await import_promises2.default.mkdir(import_node_path2.default.dirname(destinationDir), { recursive: true });
332
139
  try {
333
- await import_promises5.default.rename(bundleDir, destinationDir);
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 import_promises5.default.rm(bundleDir, { recursive: true, force: true });
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 = import_node_path6.default.resolve(projectRoot, String(flags.dir));
186
+ const feedbackRoot = import_node_path3.default.resolve(projectRoot, String(flags.dir));
380
187
  const result = await syncRuntimeFeedbackReplayBundles({
381
188
  source,
382
189
  feedbackRoot,