@tradejs/infra 3.1.29-beta.261 → 3.1.29-beta.262

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/jev.d.mts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { JevProviderConfig, JevResponse } from '@tradejs/types';
2
2
 
3
+ /** Provider criteria are zero-based: ten strength levels use raw scores 0–9. */
4
+ declare const jevScoreMaximum: (dimension: string) => 4 | 9;
3
5
  declare const jevStableJson: (value: unknown) => string;
4
6
  declare const jevHash: (value: unknown) => string;
5
7
  declare const jevFileHash: (contents: string) => string;
@@ -13,4 +15,4 @@ declare const requestJev: (provider: JevProviderConfig, apiKey: string, state: u
13
15
  }) => Promise<JevResponse>;
14
16
  declare const validateJevResponse: (body: unknown, expected: string[]) => JevResponse;
15
17
 
16
- export { jevFileHash, jevHash, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
18
+ export { jevFileHash, jevHash, jevScoreMaximum, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
package/dist/jev.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { JevProviderConfig, JevResponse } from '@tradejs/types';
2
2
 
3
+ /** Provider criteria are zero-based: ten strength levels use raw scores 0–9. */
4
+ declare const jevScoreMaximum: (dimension: string) => 4 | 9;
3
5
  declare const jevStableJson: (value: unknown) => string;
4
6
  declare const jevHash: (value: unknown) => string;
5
7
  declare const jevFileHash: (contents: string) => string;
@@ -13,4 +15,4 @@ declare const requestJev: (provider: JevProviderConfig, apiKey: string, state: u
13
15
  }) => Promise<JevResponse>;
14
16
  declare const validateJevResponse: (body: unknown, expected: string[]) => JevResponse;
15
17
 
16
- export { jevFileHash, jevHash, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
18
+ export { jevFileHash, jevHash, jevScoreMaximum, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
package/dist/jev.js CHANGED
@@ -32,6 +32,7 @@ var jev_exports = {};
32
32
  __export(jev_exports, {
33
33
  jevFileHash: () => jevFileHash,
34
34
  jevHash: () => jevHash,
35
+ jevScoreMaximum: () => jevScoreMaximum,
35
36
  jevStableJson: () => jevStableJson,
36
37
  readJevArtifact: () => readJevArtifact,
37
38
  requestJev: () => requestJev,
@@ -42,6 +43,7 @@ module.exports = __toCommonJS(jev_exports);
42
43
  var import_node_crypto = require("crypto");
43
44
  var import_promises = __toESM(require("fs/promises"));
44
45
  var import_node_path = __toESM(require("path"));
46
+ var jevScoreMaximum = (dimension) => dimension === "signalStrength" ? 9 : 4;
45
47
  var jevStableJson = (value) => {
46
48
  if (Array.isArray(value)) return `[${value.map(jevStableJson).join(",")}]`;
47
49
  if (value && typeof value === "object")
@@ -154,26 +156,28 @@ var validateJevResponse = (body, expected) => {
154
156
  const result = body;
155
157
  if (!result || typeof result.model !== "string" || !result.model || !result.answers)
156
158
  throw new Error("Invalid Jev response");
157
- if (!expected.length || expected.length > 8 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
159
+ if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
158
160
  throw new Error("Invalid Jev answer set");
159
161
  for (const key of expected) {
160
162
  const answer = result.answers[key];
161
- if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > 4 || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
163
+ const maximum = jevScoreMaximum(key);
164
+ const levels = Array.from({ length: maximum + 1 }, (_, index) => index);
165
+ if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > maximum || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
162
166
  throw new Error(`Invalid Jev ${key} answer`);
163
167
  const probabilities = answer.probabilities;
164
- if (!probabilities || Object.keys(probabilities).length !== 5 || [0, 1, 2, 3, 4].some(
168
+ if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
165
169
  (level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
166
170
  ))
167
171
  throw new Error(`Invalid Jev ${key} probabilities`);
168
172
  const roundingHalfUnit = 5e-3;
169
173
  const epsilon = 1e-9;
170
- if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > 5 * roundingHalfUnit + epsilon)
174
+ if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > levels.length * roundingHalfUnit + epsilon)
171
175
  throw new Error("Jev probabilities must sum to one");
172
- const mean = [0, 1, 2, 3, 4].reduce(
176
+ const mean = levels.reduce(
173
177
  (sum, level) => sum + level * probabilities[level],
174
178
  0
175
179
  );
176
- if (Math.abs(mean - answer.score) > (0 + 1 + 2 + 3 + 4 + 1) * roundingHalfUnit + epsilon)
180
+ if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
177
181
  throw new Error("Jev score disagrees with probabilities");
178
182
  }
179
183
  return result;
@@ -182,6 +186,7 @@ var validateJevResponse = (body, expected) => {
182
186
  0 && (module.exports = {
183
187
  jevFileHash,
184
188
  jevHash,
189
+ jevScoreMaximum,
185
190
  jevStableJson,
186
191
  readJevArtifact,
187
192
  requestJev,
package/dist/jev.mjs CHANGED
@@ -2,6 +2,7 @@
2
2
  import { createHash, randomUUID } from "crypto";
3
3
  import fs from "fs/promises";
4
4
  import path from "path";
5
+ var jevScoreMaximum = (dimension) => dimension === "signalStrength" ? 9 : 4;
5
6
  var jevStableJson = (value) => {
6
7
  if (Array.isArray(value)) return `[${value.map(jevStableJson).join(",")}]`;
7
8
  if (value && typeof value === "object")
@@ -114,26 +115,28 @@ var validateJevResponse = (body, expected) => {
114
115
  const result = body;
115
116
  if (!result || typeof result.model !== "string" || !result.model || !result.answers)
116
117
  throw new Error("Invalid Jev response");
117
- if (!expected.length || expected.length > 8 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
118
+ if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
118
119
  throw new Error("Invalid Jev answer set");
119
120
  for (const key of expected) {
120
121
  const answer = result.answers[key];
121
- if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > 4 || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
122
+ const maximum = jevScoreMaximum(key);
123
+ const levels = Array.from({ length: maximum + 1 }, (_, index) => index);
124
+ if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > maximum || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
122
125
  throw new Error(`Invalid Jev ${key} answer`);
123
126
  const probabilities = answer.probabilities;
124
- if (!probabilities || Object.keys(probabilities).length !== 5 || [0, 1, 2, 3, 4].some(
127
+ if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
125
128
  (level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
126
129
  ))
127
130
  throw new Error(`Invalid Jev ${key} probabilities`);
128
131
  const roundingHalfUnit = 5e-3;
129
132
  const epsilon = 1e-9;
130
- if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > 5 * roundingHalfUnit + epsilon)
133
+ if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > levels.length * roundingHalfUnit + epsilon)
131
134
  throw new Error("Jev probabilities must sum to one");
132
- const mean = [0, 1, 2, 3, 4].reduce(
135
+ const mean = levels.reduce(
133
136
  (sum, level) => sum + level * probabilities[level],
134
137
  0
135
138
  );
136
- if (Math.abs(mean - answer.score) > (0 + 1 + 2 + 3 + 4 + 1) * roundingHalfUnit + epsilon)
139
+ if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
137
140
  throw new Error("Jev score disagrees with probabilities");
138
141
  }
139
142
  return result;
@@ -141,6 +144,7 @@ var validateJevResponse = (body, expected) => {
141
144
  export {
142
145
  jevFileHash,
143
146
  jevHash,
147
+ jevScoreMaximum,
144
148
  jevStableJson,
145
149
  readJevArtifact,
146
150
  requestJev,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradejs/infra",
3
- "version": "3.1.29-beta.261",
3
+ "version": "3.1.29-beta.262",
4
4
  "description": "MIT-licensed server infrastructure adapters for TradeJS: Redis, Timescale, ML, logging, and IO.",
5
5
  "keywords": [
6
6
  "tradejs",
@@ -16,7 +16,8 @@
16
16
  "coinbase",
17
17
  "ai",
18
18
  "claude",
19
- "codex"
19
+ "codex",
20
+ "jev"
20
21
  ],
21
22
  "repository": {
22
23
  "type": "git",
@@ -140,7 +141,7 @@
140
141
  "dependencies": {
141
142
  "@grpc/grpc-js": "^1.14.4",
142
143
  "@grpc/proto-loader": "^0.8.1",
143
- "@tradejs/types": "^3.1.29-beta.261",
144
+ "@tradejs/types": "^3.1.29-beta.262",
144
145
  "chalk": "4.1.2",
145
146
  "date-fns": "^3.6.0",
146
147
  "ioredis": "5.11.1",