@jinn-network/client 0.1.3-canary.8e61ba74 → 0.1.3-canary.92af7ba9
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/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +38 -0
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/doctor.d.ts +15 -0
- package/dist/cli/commands/doctor.js +21 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/prediction-scoreboard.d.ts +10 -0
- package/dist/cli/commands/prediction-scoreboard.js +136 -0
- package/dist/cli/commands/prediction-scoreboard.js.map +1 -0
- package/dist/cli/commands/solver-nets.js +26 -2
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.js +11 -3
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.d.ts +8 -1
- package/dist/cli/commands/update.js +232 -7
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +27 -0
- package/dist/cli/task-native-readiness.js +170 -0
- package/dist/cli/task-native-readiness.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -1
- package/dist/corpus/envelope-projection.d.ts +12 -0
- package/dist/corpus/envelope-projection.js +110 -0
- package/dist/corpus/envelope-projection.js.map +1 -0
- package/dist/corpus/index.d.ts +3 -0
- package/dist/corpus/index.js +3 -0
- package/dist/corpus/index.js.map +1 -1
- package/dist/corpus/prediction-brier-scoreboard-report.d.ts +17 -0
- package/dist/corpus/prediction-brier-scoreboard-report.js +148 -0
- package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -0
- package/dist/corpus/prediction-brier-scoreboard.d.ts +56 -0
- package/dist/corpus/prediction-brier-scoreboard.js +269 -0
- package/dist/corpus/prediction-brier-scoreboard.js.map +1 -0
- package/dist/corpus/prediction-scoreable-verdicts.d.ts +4 -0
- package/dist/corpus/prediction-scoreable-verdicts.js +23 -0
- package/dist/corpus/prediction-scoreable-verdicts.js.map +1 -0
- package/dist/corpus/types.d.ts +43 -1
- package/dist/corpus/types.js.map +1 -1
- package/dist/daemon/daemon.js +1 -1
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/earning/contracts.d.ts +1 -0
- package/dist/earning/contracts.js +16 -0
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/store.d.ts +1 -0
- package/dist/earning/store.js +3 -0
- package/dist/earning/store.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +2 -0
- package/dist/harnesses/engine/engine.js +18 -3
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/registry.d.ts +2 -0
- package/dist/harnesses/engine/registry.js +3 -0
- package/dist/harnesses/engine/registry.js.map +1 -1
- package/dist/harnesses/impls/index.js +4 -9
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js +33 -12
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
- package/dist/main.js +8 -4
- package/dist/main.js.map +1 -1
- package/dist/solver-nets/prediction-operator-ux.d.ts +102 -0
- package/dist/solver-nets/prediction-operator-ux.js +438 -0
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -0
- package/dist/solver-types/index.d.ts +11 -0
- package/dist/solver-types/index.js +8 -1
- package/dist/solver-types/index.js.map +1 -1
- package/dist/solver-types/prediction-v0.d.ts +1 -1
- package/dist/solver-types/prediction-v0.js +1 -1
- package/dist/solver-types/prediction-v0.js.map +1 -1
- package/dist/solver-types/prediction-v1-auto.d.ts +2 -0
- package/dist/solver-types/prediction-v1-auto.js +56 -7
- package/dist/solver-types/prediction-v1-auto.js.map +1 -1
- package/dist/solver-types/prediction-v1.js +25 -1
- package/dist/solver-types/prediction-v1.js.map +1 -1
- package/dist/solver-types/solver-type.d.ts +18 -5
- package/dist/store/store.d.ts +11 -0
- package/dist/store/store.js +316 -0
- package/dist/store/store.js.map +1 -1
- package/package.json +1 -1
- package/plugins/jinn-prediction-plugin/.claude-plugin/plugin.json +3 -1
- package/plugins/jinn-prediction-plugin/GEMINI.md +2 -0
- package/plugins/jinn-prediction-plugin/jinn.plugin.json +3 -1
- package/plugins/jinn-prediction-plugin/mcp/polymarket-server.mjs +321 -1
- package/plugins/jinn-prediction-plugin/skills/common-biases/SKILL.md +3 -0
- package/plugins/jinn-prediction-plugin/skills/polymarket-task-handling/SKILL.md +5 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
5
|
import { signTaskV1 } from '../tasks/signing.js';
|
|
6
|
-
import { getOrderbook, listMarketCandidates, } from '../venues/polymarket/client.js';
|
|
6
|
+
import { getResolution, getOrderbook, listMarketCandidates, } from '../venues/polymarket/client.js';
|
|
7
7
|
const DEFAULTS = {
|
|
8
8
|
minTimeToResolutionHours: 24,
|
|
9
9
|
maxTimeToResolutionHours: 168,
|
|
@@ -11,6 +11,7 @@ const DEFAULTS = {
|
|
|
11
11
|
minVolume24hUsd: '2500',
|
|
12
12
|
maxYesSpread: '0.10',
|
|
13
13
|
maxOrderbookAgeSeconds: 60,
|
|
14
|
+
cadenceMs: 6 * 60 * 60 * 1000,
|
|
14
15
|
maxNewRoundsPerPoll: 25,
|
|
15
16
|
maxNewRoundsPerDay: 100,
|
|
16
17
|
maxOpenRounds: 250,
|
|
@@ -19,9 +20,16 @@ const DEFAULTS = {
|
|
|
19
20
|
export function makePredictionV1Generator(config = {}) {
|
|
20
21
|
const postedAtByCondition = new Map();
|
|
21
22
|
const postedCountByDay = new Map();
|
|
22
|
-
const
|
|
23
|
+
const allowlist = conditionIdSet(config.allowlistConditionIds);
|
|
24
|
+
const blocklist = conditionIdSet(config.blocklistConditionIds);
|
|
25
|
+
let lastPollStartedAt = 0;
|
|
23
26
|
return async () => {
|
|
24
27
|
const now = Date.now();
|
|
28
|
+
const cadenceMs = config.cadenceMs ?? DEFAULTS.cadenceMs;
|
|
29
|
+
if (cadenceMs > 0 && lastPollStartedAt > 0 && now - lastPollStartedAt < cadenceMs) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
lastPollStartedAt = now;
|
|
25
33
|
pruneOpenRounds(postedAtByCondition, now);
|
|
26
34
|
const dayKey = new Date(now).toISOString().slice(0, 10);
|
|
27
35
|
const todayCount = postedCountByDay.get(dayKey) ?? 0;
|
|
@@ -38,16 +46,21 @@ export function makePredictionV1Generator(config = {}) {
|
|
|
38
46
|
return null;
|
|
39
47
|
}
|
|
40
48
|
const eligible = [];
|
|
41
|
-
for (const market of candidates) {
|
|
49
|
+
for (const market of prioritizeAllowlisted(candidates, allowlist)) {
|
|
42
50
|
if (eligible.length >= pollLimit * 3)
|
|
43
51
|
break;
|
|
44
|
-
|
|
52
|
+
const conditionId = normalizeConditionId(market.conditionId);
|
|
53
|
+
if (postedAtByCondition.has(conditionId) || blocklist.has(conditionId))
|
|
45
54
|
continue;
|
|
46
55
|
const checked = await checkMarketEligibility(market, config, now);
|
|
47
56
|
if (checked)
|
|
48
57
|
eligible.push(checked);
|
|
49
58
|
}
|
|
50
59
|
eligible.sort((a, b) => {
|
|
60
|
+
const allowDelta = Number(allowlist.has(normalizeConditionId(b.market.conditionId))) -
|
|
61
|
+
Number(allowlist.has(normalizeConditionId(a.market.conditionId)));
|
|
62
|
+
if (allowDelta !== 0)
|
|
63
|
+
return allowDelta;
|
|
51
64
|
const liquidityDelta = Number(b.market.liquidityUsd) - Number(a.market.liquidityUsd);
|
|
52
65
|
if (Number.isFinite(liquidityDelta) && liquidityDelta !== 0)
|
|
53
66
|
return liquidityDelta;
|
|
@@ -60,7 +73,7 @@ export function makePredictionV1Generator(config = {}) {
|
|
|
60
73
|
const tasks = [];
|
|
61
74
|
for (const entry of selected) {
|
|
62
75
|
const task = await buildTask(entry, config, now);
|
|
63
|
-
postedAtByCondition.set(entry.market.conditionId, Date.parse(entry.market.endTime));
|
|
76
|
+
postedAtByCondition.set(normalizeConditionId(entry.market.conditionId), Date.parse(entry.market.endTime));
|
|
64
77
|
tasks.push(task);
|
|
65
78
|
}
|
|
66
79
|
if (tasks.length > 0) {
|
|
@@ -70,8 +83,6 @@ export function makePredictionV1Generator(config = {}) {
|
|
|
70
83
|
};
|
|
71
84
|
}
|
|
72
85
|
async function checkMarketEligibility(market, config, now) {
|
|
73
|
-
if (!market.active || market.closed || market.archived)
|
|
74
|
-
return null;
|
|
75
86
|
if (!market.rulesText.trim())
|
|
76
87
|
return null;
|
|
77
88
|
if (Number(market.liquidityUsd) < Number(config.minLiquidityUsd ?? DEFAULTS.minLiquidityUsd))
|
|
@@ -86,6 +97,22 @@ async function checkMarketEligibility(market, config, now) {
|
|
|
86
97
|
return null;
|
|
87
98
|
if (timeToResolutionHours > (config.maxTimeToResolutionHours ?? DEFAULTS.maxTimeToResolutionHours))
|
|
88
99
|
return null;
|
|
100
|
+
let resolutionStatus;
|
|
101
|
+
try {
|
|
102
|
+
const resolution = await getResolution({
|
|
103
|
+
...config,
|
|
104
|
+
marketId: market.marketId,
|
|
105
|
+
sourceUrl: market.url,
|
|
106
|
+
});
|
|
107
|
+
resolutionStatus = resolution.status;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
if (resolutionStatus !== 'unresolved')
|
|
113
|
+
return null;
|
|
114
|
+
if (!market.active || market.closed || market.archived)
|
|
115
|
+
return null;
|
|
89
116
|
let orderbook;
|
|
90
117
|
try {
|
|
91
118
|
orderbook = await getOrderbook({
|
|
@@ -168,6 +195,11 @@ async function buildTask(entry, config, now) {
|
|
|
168
195
|
minVolume24hUsd: config.minVolume24hUsd ?? DEFAULTS.minVolume24hUsd,
|
|
169
196
|
maxYesSpread: config.maxYesSpread ?? DEFAULTS.maxYesSpread,
|
|
170
197
|
maxOrderbookAgeSeconds: config.maxOrderbookAgeSeconds ?? DEFAULTS.maxOrderbookAgeSeconds,
|
|
198
|
+
generatorCadenceMs: config.cadenceMs ?? DEFAULTS.cadenceMs,
|
|
199
|
+
maxNewRoundsPerPoll: config.maxNewRoundsPerPoll ?? DEFAULTS.maxNewRoundsPerPoll,
|
|
200
|
+
maxNewRoundsPerDay: config.maxNewRoundsPerDay ?? DEFAULTS.maxNewRoundsPerDay,
|
|
201
|
+
maxOpenRounds: config.maxOpenRounds ?? DEFAULTS.maxOpenRounds,
|
|
202
|
+
manualAllowlistHit: conditionIdSet(config.allowlistConditionIds).has(normalizeConditionId(market.conditionId)),
|
|
171
203
|
};
|
|
172
204
|
const baseTask = {
|
|
173
205
|
id,
|
|
@@ -208,4 +240,21 @@ function pruneOpenRounds(postedAtByCondition, now) {
|
|
|
208
240
|
}
|
|
209
241
|
}
|
|
210
242
|
}
|
|
243
|
+
function normalizeConditionId(conditionId) {
|
|
244
|
+
return conditionId.trim().toLowerCase();
|
|
245
|
+
}
|
|
246
|
+
function conditionIdSet(values) {
|
|
247
|
+
return new Set((values ?? [])
|
|
248
|
+
.map((value) => normalizeConditionId(value))
|
|
249
|
+
.filter(Boolean));
|
|
250
|
+
}
|
|
251
|
+
function prioritizeAllowlisted(markets, allowlist) {
|
|
252
|
+
if (allowlist.size === 0)
|
|
253
|
+
return markets;
|
|
254
|
+
return [...markets].sort((a, b) => {
|
|
255
|
+
const allowDelta = Number(allowlist.has(normalizeConditionId(b.conditionId))) -
|
|
256
|
+
Number(allowlist.has(normalizeConditionId(a.conditionId)));
|
|
257
|
+
return allowDelta;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
211
260
|
//# sourceMappingURL=prediction-v1-auto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prediction-v1-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v1-auto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,oBAAoB,GAIrB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"prediction-v1-auto.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v1-auto.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,12 +13,19 @@ export const predictionV1 = {
|
|
|
13
13
|
},
|
|
14
14
|
buildGenerator: (config) => makePredictionV1Generator(config),
|
|
15
15
|
getTestnetAutoConfig: (ctx) => {
|
|
16
|
-
if (ctx.network !== 'testnet')
|
|
16
|
+
if (ctx.network !== 'testnet' || !ctx.predictionV1LauncherEnabled)
|
|
17
17
|
return undefined;
|
|
18
18
|
return {
|
|
19
19
|
agentEoa: ctx.agentEoa,
|
|
20
20
|
safeAddress: ctx.safeAddress,
|
|
21
21
|
agentPrivateKey: ctx.agentPrivateKey,
|
|
22
|
+
submissionWindowMs: ctx.predictionV1WindowMs ?? nonNegativeNumberEnv(ctx.env, 'JINN_PREDICTION_V1_WINDOW_MS'),
|
|
23
|
+
cadenceMs: ctx.predictionV1CadenceMs ?? nonNegativeNumberEnv(ctx.env, 'JINN_PREDICTION_V1_CADENCE_MS'),
|
|
24
|
+
maxNewRoundsPerPoll: ctx.predictionV1MaxNewRoundsPerPoll ?? nonNegativeNumberEnv(ctx.env, 'JINN_PREDICTION_V1_MAX_NEW_ROUNDS_PER_POLL'),
|
|
25
|
+
maxNewRoundsPerDay: ctx.predictionV1MaxNewRoundsPerDay ?? nonNegativeNumberEnv(ctx.env, 'JINN_PREDICTION_V1_MAX_NEW_ROUNDS_PER_DAY'),
|
|
26
|
+
maxOpenRounds: ctx.predictionV1MaxOpenRounds ?? nonNegativeNumberEnv(ctx.env, 'JINN_PREDICTION_V1_MAX_OPEN_ROUNDS'),
|
|
27
|
+
allowlistConditionIds: ctx.predictionV1AllowlistConditionIds ?? csvEnv(ctx.env, 'JINN_PREDICTION_V1_ALLOWLIST_CONDITION_IDS'),
|
|
28
|
+
blocklistConditionIds: ctx.predictionV1BlocklistConditionIds ?? csvEnv(ctx.env, 'JINN_PREDICTION_V1_BLOCKLIST_CONDITION_IDS'),
|
|
22
29
|
};
|
|
23
30
|
},
|
|
24
31
|
ui: {
|
|
@@ -26,4 +33,21 @@ export const predictionV1 = {
|
|
|
26
33
|
category: 'prediction',
|
|
27
34
|
},
|
|
28
35
|
};
|
|
36
|
+
function nonNegativeNumberEnv(env, name) {
|
|
37
|
+
const value = env[name]?.trim();
|
|
38
|
+
if (!value)
|
|
39
|
+
return undefined;
|
|
40
|
+
const parsed = Number(value);
|
|
41
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
|
|
42
|
+
}
|
|
43
|
+
function csvEnv(env, name) {
|
|
44
|
+
const value = env[name];
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
return undefined;
|
|
47
|
+
const parts = value
|
|
48
|
+
.split(',')
|
|
49
|
+
.map((part) => part.trim())
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
return parts.length > 0 ? parts : undefined;
|
|
52
|
+
}
|
|
29
53
|
//# sourceMappingURL=prediction-v1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prediction-v1.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AAGjC,MAAM,CAAC,MAAM,YAAY,GAAiD;IACxE,UAAU,EAAE,eAAe;IAC3B,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAC7D,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prediction-v1.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AAGjC,MAAM,CAAC,MAAM,YAAY,GAAiD;IACxE,UAAU,EAAE,eAAe;IAC3B,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAC7D,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,2BAA2B;YAAE,OAAO,SAAS,CAAC;QACpF,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,kBAAkB,EAAE,GAAG,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,8BAA8B,CAAC;YAC7G,SAAS,EAAE,GAAG,CAAC,qBAAqB,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,+BAA+B,CAAC;YACtG,mBAAmB,EAAE,GAAG,CAAC,+BAA+B,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,4CAA4C,CAAC;YACvI,kBAAkB,EAAE,GAAG,CAAC,8BAA8B,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,2CAA2C,CAAC;YACpI,aAAa,EAAE,GAAG,CAAC,yBAAyB,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,oCAAoC,CAAC;YACnH,qBAAqB,EAAE,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,4CAA4C,CAAC;YAC7H,qBAAqB,EAAE,GAAG,CAAC,iCAAiC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,4CAA4C,CAAC;SAC9H,CAAC;IACJ,CAAC;IACD,EAAE,EAAE;QACF,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAE,YAAY;KACvB;CACF,CAAC;AAEF,SAAS,oBAAoB,CAAC,GAAsB,EAAE,IAAY;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,SAAS,MAAM,CAAC,GAAsB,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC"}
|
|
@@ -29,14 +29,27 @@ export interface TestnetAutoContext {
|
|
|
29
29
|
/** Agent EOA private key — threaded into auto-gen configs so generators can sign SignedTaskV1. */
|
|
30
30
|
agentPrivateKey?: `0x${string}`;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
|
|
32
|
+
* Explicit opt-in for the launcher-owned Polymarket prediction.v1 generator.
|
|
33
|
+
* Ordinary operator daemons leave this unset/false and do not create rounds.
|
|
34
|
+
*/
|
|
35
|
+
predictionV1LauncherEnabled?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Override the prediction.v1 Polymarket submission window (ms).
|
|
38
|
+
* The generator default applies when unset.
|
|
35
39
|
*/
|
|
36
40
|
predictionV1WindowMs?: number;
|
|
41
|
+
/** Launcher-owned Polymarket generator cadence (ms). */
|
|
42
|
+
predictionV1CadenceMs?: number;
|
|
43
|
+
/** Launcher-owned Polymarket generator safety caps. */
|
|
44
|
+
predictionV1MaxNewRoundsPerPoll?: number;
|
|
45
|
+
predictionV1MaxNewRoundsPerDay?: number;
|
|
46
|
+
predictionV1MaxOpenRounds?: number;
|
|
47
|
+
/** Launcher-owned Polymarket manual conditionId controls. */
|
|
48
|
+
predictionV1AllowlistConditionIds?: string[];
|
|
49
|
+
predictionV1BlocklistConditionIds?: string[];
|
|
37
50
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
51
|
+
* Legacy Chainlink prediction.v1 gap from window end → resolveTs (ms).
|
|
52
|
+
* Retained for direct legacy generator tests; unused by Polymarket prediction.v1.
|
|
40
53
|
*/
|
|
41
54
|
predictionV1ResolveGapMs?: number;
|
|
42
55
|
}
|
package/dist/store/store.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
|
+
import type { EnvelopeProjection, EnvelopeProjectionQuery } from '../corpus/types.js';
|
|
2
3
|
export interface ActivityEventInput {
|
|
3
4
|
ts: string | null;
|
|
4
5
|
kind: string;
|
|
@@ -109,6 +110,14 @@ export declare class Store {
|
|
|
109
110
|
private ensureNetworkArtifactsPeerCatalogId;
|
|
110
111
|
/** Fresh v1 state is Task-first; older local DBs get additive columns only. */
|
|
111
112
|
private ensureTaskPostsTaskCoordinatorColumns;
|
|
113
|
+
/** Older local DBs may have the projection table from before Task grouping fields landed. */
|
|
114
|
+
private ensureEnvelopeProjectionColumns;
|
|
115
|
+
/**
|
|
116
|
+
* Task-native startup ignores the retired request-first `restoration_intents`
|
|
117
|
+
* table. Keep a one-time local marker when old in-flight rows are present so
|
|
118
|
+
* operators can see why they were not resumed without blocking Store startup.
|
|
119
|
+
*/
|
|
120
|
+
private recordLegacyRestorationIntentsIgnored;
|
|
112
121
|
/** Idempotent: older DBs before idx_reward_claims_tx may lack the unique index. */
|
|
113
122
|
private ensureRewardClaimsTxIndex;
|
|
114
123
|
recordOwnActivity(requestId: string, role: 'created' | 'claimed' | 'delivered' | 'evaluated'): void;
|
|
@@ -250,5 +259,7 @@ export declare class Store {
|
|
|
250
259
|
envelopeCid: string | null;
|
|
251
260
|
createdAt: string;
|
|
252
261
|
}>;
|
|
262
|
+
saveEnvelopeProjection(projection: EnvelopeProjection): void;
|
|
263
|
+
queryEnvelopeProjections(query?: EnvelopeProjectionQuery): EnvelopeProjection[];
|
|
253
264
|
close(): void;
|
|
254
265
|
}
|
package/dist/store/store.js
CHANGED
|
@@ -119,6 +119,46 @@ CREATE INDEX IF NOT EXISTS idx_network_artifacts_envelope ON network_artifacts (
|
|
|
119
119
|
CREATE INDEX IF NOT EXISTS idx_network_artifacts_artifact_type ON network_artifacts (artifact_type);
|
|
120
120
|
CREATE INDEX IF NOT EXISTS idx_network_artifacts_last_used ON network_artifacts (last_used_at DESC);
|
|
121
121
|
|
|
122
|
+
CREATE TABLE IF NOT EXISTS envelope_projections (
|
|
123
|
+
envelope_id TEXT PRIMARY KEY,
|
|
124
|
+
envelope_cid TEXT,
|
|
125
|
+
envelope_sha256 TEXT,
|
|
126
|
+
signature_hash TEXT NOT NULL,
|
|
127
|
+
solver_type TEXT NOT NULL,
|
|
128
|
+
role TEXT NOT NULL,
|
|
129
|
+
task_cid TEXT,
|
|
130
|
+
task_id TEXT,
|
|
131
|
+
request_id TEXT,
|
|
132
|
+
generated_at INTEGER NOT NULL,
|
|
133
|
+
evidence_tier TEXT NOT NULL,
|
|
134
|
+
participant_safe_address TEXT,
|
|
135
|
+
participant_agent_eoa TEXT,
|
|
136
|
+
executor_impl_name TEXT,
|
|
137
|
+
executor_impl_version TEXT,
|
|
138
|
+
executor_runtime_bundle_digest TEXT,
|
|
139
|
+
executor_plugins_json TEXT NOT NULL DEFAULT '[]',
|
|
140
|
+
solution_envelope_cid TEXT,
|
|
141
|
+
solution_envelope_sha256 TEXT,
|
|
142
|
+
solution_envelope_ref TEXT,
|
|
143
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
144
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
145
|
+
);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_envelope_projections_solver_role ON envelope_projections (solver_type, role);
|
|
147
|
+
CREATE INDEX IF NOT EXISTS idx_envelope_projections_task_cid ON envelope_projections (task_cid);
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_envelope_projections_request ON envelope_projections (request_id);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS idx_envelope_projections_generated ON envelope_projections (generated_at DESC);
|
|
150
|
+
|
|
151
|
+
CREATE TABLE IF NOT EXISTS envelope_projection_metadata (
|
|
152
|
+
envelope_id TEXT NOT NULL,
|
|
153
|
+
key TEXT NOT NULL,
|
|
154
|
+
value_text TEXT NOT NULL,
|
|
155
|
+
value_type TEXT NOT NULL CHECK (value_type IN ('string', 'number', 'boolean')),
|
|
156
|
+
PRIMARY KEY (envelope_id, key),
|
|
157
|
+
FOREIGN KEY (envelope_id) REFERENCES envelope_projections(envelope_id) ON DELETE CASCADE
|
|
158
|
+
);
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_envelope_projection_metadata_key_value
|
|
160
|
+
ON envelope_projection_metadata (key, value_text);
|
|
161
|
+
|
|
122
162
|
CREATE TABLE IF NOT EXISTS task_post_locks (
|
|
123
163
|
creator_safe_address TEXT NOT NULL,
|
|
124
164
|
source_key TEXT NOT NULL,
|
|
@@ -146,7 +186,9 @@ export class Store {
|
|
|
146
186
|
this.ensureRewardClaimsTxIndex();
|
|
147
187
|
this.ensureNetworkArtifactsPeerCatalogId();
|
|
148
188
|
this.ensureTaskPostsTaskCoordinatorColumns();
|
|
189
|
+
this.ensureEnvelopeProjectionColumns();
|
|
149
190
|
this.backfillActivityEvents();
|
|
191
|
+
this.recordLegacyRestorationIntentsIgnored();
|
|
150
192
|
}
|
|
151
193
|
/** Older on-disk DBs predate `peer_catalog_id` on network_artifacts. */
|
|
152
194
|
ensureNetworkArtifactsPeerCatalogId() {
|
|
@@ -167,6 +209,70 @@ export class Store {
|
|
|
167
209
|
this.db.exec(`ALTER TABLE task_posts ADD COLUMN task_cid TEXT`);
|
|
168
210
|
}
|
|
169
211
|
}
|
|
212
|
+
/** Older local DBs may have the projection table from before Task grouping fields landed. */
|
|
213
|
+
ensureEnvelopeProjectionColumns() {
|
|
214
|
+
const cols = this.db.prepare(`PRAGMA table_info(envelope_projections)`).all();
|
|
215
|
+
const names = new Set(cols.map((c) => c.name));
|
|
216
|
+
const addColumn = (name, ddl) => {
|
|
217
|
+
if (!names.has(name))
|
|
218
|
+
this.db.exec(`ALTER TABLE envelope_projections ADD COLUMN ${ddl}`);
|
|
219
|
+
};
|
|
220
|
+
addColumn('task_id', 'task_id TEXT');
|
|
221
|
+
addColumn('executor_runtime_bundle_digest', 'executor_runtime_bundle_digest TEXT');
|
|
222
|
+
addColumn('executor_plugins_json', `executor_plugins_json TEXT NOT NULL DEFAULT '[]'`);
|
|
223
|
+
addColumn('solution_envelope_cid', 'solution_envelope_cid TEXT');
|
|
224
|
+
addColumn('solution_envelope_sha256', 'solution_envelope_sha256 TEXT');
|
|
225
|
+
addColumn('solution_envelope_ref', 'solution_envelope_ref TEXT');
|
|
226
|
+
addColumn('metadata_json', `metadata_json TEXT NOT NULL DEFAULT '{}'`);
|
|
227
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_envelope_projections_task_id ON envelope_projections (task_id)`);
|
|
228
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_envelope_projections_solution_ref ON envelope_projections (solution_envelope_ref)`);
|
|
229
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_envelope_projections_generated ON envelope_projections (generated_at DESC)`);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Task-native startup ignores the retired request-first `restoration_intents`
|
|
233
|
+
* table. Keep a one-time local marker when old in-flight rows are present so
|
|
234
|
+
* operators can see why they were not resumed without blocking Store startup.
|
|
235
|
+
*/
|
|
236
|
+
recordLegacyRestorationIntentsIgnored() {
|
|
237
|
+
const table = this.db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'restoration_intents'`).get();
|
|
238
|
+
if (!table)
|
|
239
|
+
return;
|
|
240
|
+
const cols = this.db.prepare(`PRAGMA table_info(restoration_intents)`).all();
|
|
241
|
+
const names = new Set(cols.map((c) => c.name));
|
|
242
|
+
if (!names.has('state'))
|
|
243
|
+
return;
|
|
244
|
+
try {
|
|
245
|
+
const row = this.db.prepare(`SELECT COUNT(*) AS count
|
|
246
|
+
FROM restoration_intents
|
|
247
|
+
WHERE state NOT IN ('COMPLETE', 'FAILED')`).get();
|
|
248
|
+
const count = row?.count ?? 0;
|
|
249
|
+
if (count <= 0)
|
|
250
|
+
return;
|
|
251
|
+
const detail = `Ignored ${count} legacy request-first restoration_intents row${count === 1 ? '' : 's'}; ` +
|
|
252
|
+
'Task-native recovery does not resume ClaimRegistry/request-first jobs.';
|
|
253
|
+
const ts = new Date().toISOString();
|
|
254
|
+
const marker = {
|
|
255
|
+
schemaVersion: 1,
|
|
256
|
+
ignoredAt: ts,
|
|
257
|
+
table: 'restoration_intents',
|
|
258
|
+
inFlightRows: count,
|
|
259
|
+
reason: 'legacy_request_first_task_native_update',
|
|
260
|
+
};
|
|
261
|
+
const tx = this.db.transaction(() => {
|
|
262
|
+
this.db.prepare(`INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)`).run('legacy_restoration_intents_ignored_v1', JSON.stringify(marker));
|
|
263
|
+
this.db.prepare(`INSERT INTO activity_events (ts, kind, outcome, detail)
|
|
264
|
+
SELECT @ts, 'legacy_ignored', 'ignored', @detail
|
|
265
|
+
WHERE NOT EXISTS (
|
|
266
|
+
SELECT 1 FROM activity_events
|
|
267
|
+
WHERE kind = 'legacy_ignored' AND detail = @detail
|
|
268
|
+
)`).run({ ts, detail });
|
|
269
|
+
});
|
|
270
|
+
tx();
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Legacy schemas varied. Never let stale request-first state block Store startup.
|
|
274
|
+
}
|
|
275
|
+
}
|
|
170
276
|
/** Idempotent: older DBs before idx_reward_claims_tx may lack the unique index. */
|
|
171
277
|
ensureRewardClaimsTxIndex() {
|
|
172
278
|
this.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_reward_claims_tx ON reward_claims (tx_hash)`);
|
|
@@ -703,8 +809,218 @@ export class Store {
|
|
|
703
809
|
})),
|
|
704
810
|
];
|
|
705
811
|
}
|
|
812
|
+
saveEnvelopeProjection(projection) {
|
|
813
|
+
const tx = this.db.transaction((p) => {
|
|
814
|
+
this.db.prepare(`INSERT INTO envelope_projections
|
|
815
|
+
(envelope_id, envelope_cid, envelope_sha256, signature_hash, solver_type, role,
|
|
816
|
+
task_cid, task_id, request_id, generated_at, evidence_tier,
|
|
817
|
+
participant_safe_address, participant_agent_eoa,
|
|
818
|
+
executor_impl_name, executor_impl_version, executor_runtime_bundle_digest,
|
|
819
|
+
executor_plugins_json, solution_envelope_cid, solution_envelope_sha256,
|
|
820
|
+
solution_envelope_ref, metadata_json)
|
|
821
|
+
VALUES
|
|
822
|
+
(@envelopeId, @envelopeCid, @envelopeSha256, @signatureHash, @solverType, @role,
|
|
823
|
+
@taskCid, @taskId, @requestId, @generatedAt, @evidenceTier,
|
|
824
|
+
@participantSafeAddress, @participantAgentEoa,
|
|
825
|
+
@executorImplName, @executorImplVersion, @executorRuntimeBundleDigest,
|
|
826
|
+
@executorPluginsJson, @solutionEnvelopeCid, @solutionEnvelopeSha256,
|
|
827
|
+
@solutionEnvelopeRef, @metadataJson)
|
|
828
|
+
ON CONFLICT(envelope_id) DO UPDATE SET
|
|
829
|
+
envelope_cid = excluded.envelope_cid,
|
|
830
|
+
envelope_sha256 = excluded.envelope_sha256,
|
|
831
|
+
signature_hash = excluded.signature_hash,
|
|
832
|
+
solver_type = excluded.solver_type,
|
|
833
|
+
role = excluded.role,
|
|
834
|
+
task_cid = excluded.task_cid,
|
|
835
|
+
task_id = excluded.task_id,
|
|
836
|
+
request_id = excluded.request_id,
|
|
837
|
+
generated_at = excluded.generated_at,
|
|
838
|
+
evidence_tier = excluded.evidence_tier,
|
|
839
|
+
participant_safe_address = excluded.participant_safe_address,
|
|
840
|
+
participant_agent_eoa = excluded.participant_agent_eoa,
|
|
841
|
+
executor_impl_name = excluded.executor_impl_name,
|
|
842
|
+
executor_impl_version = excluded.executor_impl_version,
|
|
843
|
+
executor_runtime_bundle_digest = excluded.executor_runtime_bundle_digest,
|
|
844
|
+
executor_plugins_json = excluded.executor_plugins_json,
|
|
845
|
+
solution_envelope_cid = excluded.solution_envelope_cid,
|
|
846
|
+
solution_envelope_sha256 = excluded.solution_envelope_sha256,
|
|
847
|
+
solution_envelope_ref = excluded.solution_envelope_ref,
|
|
848
|
+
metadata_json = excluded.metadata_json`).run({
|
|
849
|
+
envelopeId: p.envelopeId,
|
|
850
|
+
envelopeCid: p.envelopeCid,
|
|
851
|
+
envelopeSha256: p.envelopeSha256,
|
|
852
|
+
signatureHash: p.signatureHash,
|
|
853
|
+
solverType: p.solverType,
|
|
854
|
+
role: p.role,
|
|
855
|
+
taskCid: p.taskCid,
|
|
856
|
+
taskId: p.taskId,
|
|
857
|
+
requestId: p.requestId,
|
|
858
|
+
generatedAt: p.generatedAt,
|
|
859
|
+
evidenceTier: p.evidenceTier,
|
|
860
|
+
participantSafeAddress: p.participantSafeAddress,
|
|
861
|
+
participantAgentEoa: p.participantAgentEoa,
|
|
862
|
+
executorImplName: p.executorImplName,
|
|
863
|
+
executorImplVersion: p.executorImplVersion,
|
|
864
|
+
executorRuntimeBundleDigest: p.executorRuntimeBundleDigest,
|
|
865
|
+
executorPluginsJson: JSON.stringify(p.executorPlugins),
|
|
866
|
+
solutionEnvelopeCid: p.solutionEnvelopeCid,
|
|
867
|
+
solutionEnvelopeSha256: p.solutionEnvelopeSha256,
|
|
868
|
+
solutionEnvelopeRef: p.solutionEnvelopeRef,
|
|
869
|
+
metadataJson: JSON.stringify(p.metadata),
|
|
870
|
+
});
|
|
871
|
+
this.db.prepare(`DELETE FROM envelope_projection_metadata WHERE envelope_id = ?`).run(p.envelopeId);
|
|
872
|
+
const insertMetadata = this.db.prepare(`INSERT INTO envelope_projection_metadata (envelope_id, key, value_text, value_type)
|
|
873
|
+
VALUES (@envelopeId, @key, @valueText, @valueType)`);
|
|
874
|
+
for (const [key, value] of Object.entries(p.metadata)) {
|
|
875
|
+
insertMetadata.run({
|
|
876
|
+
envelopeId: p.envelopeId,
|
|
877
|
+
key,
|
|
878
|
+
valueText: metadataValueText(value),
|
|
879
|
+
valueType: typeof value,
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
});
|
|
883
|
+
tx(projection);
|
|
884
|
+
}
|
|
885
|
+
queryEnvelopeProjections(query = {}) {
|
|
886
|
+
const conditions = [];
|
|
887
|
+
const params = {};
|
|
888
|
+
if (query.envelopeRefs && query.envelopeRefs.length > 0) {
|
|
889
|
+
const placeholders = query.envelopeRefs.map((ref, index) => {
|
|
890
|
+
const key = `envelopeRef${index}`;
|
|
891
|
+
params[key] = ref;
|
|
892
|
+
return `@${key}`;
|
|
893
|
+
}).join(', ');
|
|
894
|
+
conditions.push(`(envelope_id IN (${placeholders})
|
|
895
|
+
OR envelope_cid IN (${placeholders})
|
|
896
|
+
OR envelope_sha256 IN (${placeholders})
|
|
897
|
+
OR signature_hash IN (${placeholders}))`);
|
|
898
|
+
}
|
|
899
|
+
if (query.solverType) {
|
|
900
|
+
conditions.push('solver_type = @solverType');
|
|
901
|
+
params['solverType'] = query.solverType;
|
|
902
|
+
}
|
|
903
|
+
if (query.role) {
|
|
904
|
+
conditions.push('role = @role');
|
|
905
|
+
params['role'] = query.role;
|
|
906
|
+
}
|
|
907
|
+
if (query.taskCid) {
|
|
908
|
+
conditions.push('task_cid = @taskCid');
|
|
909
|
+
params['taskCid'] = query.taskCid;
|
|
910
|
+
}
|
|
911
|
+
if (query.taskId) {
|
|
912
|
+
conditions.push('task_id = @taskId');
|
|
913
|
+
params['taskId'] = query.taskId;
|
|
914
|
+
}
|
|
915
|
+
if (query.requestId) {
|
|
916
|
+
conditions.push('request_id = @requestId');
|
|
917
|
+
params['requestId'] = query.requestId;
|
|
918
|
+
}
|
|
919
|
+
if (query.participant?.safeAddress) {
|
|
920
|
+
conditions.push('participant_safe_address = @participantSafeAddress');
|
|
921
|
+
params['participantSafeAddress'] = query.participant.safeAddress;
|
|
922
|
+
}
|
|
923
|
+
if (query.participant?.agentEoa) {
|
|
924
|
+
conditions.push('participant_agent_eoa = @participantAgentEoa');
|
|
925
|
+
params['participantAgentEoa'] = query.participant.agentEoa;
|
|
926
|
+
}
|
|
927
|
+
if (query.solutionEnvelopeRef) {
|
|
928
|
+
conditions.push('solution_envelope_ref = @solutionEnvelopeRef');
|
|
929
|
+
params['solutionEnvelopeRef'] = query.solutionEnvelopeRef;
|
|
930
|
+
}
|
|
931
|
+
if (query.generatedAfter !== undefined) {
|
|
932
|
+
conditions.push('generated_at >= @generatedAfter');
|
|
933
|
+
params['generatedAfter'] = query.generatedAfter;
|
|
934
|
+
}
|
|
935
|
+
if (query.generatedBefore !== undefined) {
|
|
936
|
+
conditions.push('generated_at <= @generatedBefore');
|
|
937
|
+
params['generatedBefore'] = query.generatedBefore;
|
|
938
|
+
}
|
|
939
|
+
let metadataIndex = 0;
|
|
940
|
+
for (const [key, value] of Object.entries(query.metadata ?? {})) {
|
|
941
|
+
const keyParam = `metadataKey${metadataIndex}`;
|
|
942
|
+
const valueParam = `metadataValue${metadataIndex}`;
|
|
943
|
+
conditions.push(`EXISTS (
|
|
944
|
+
SELECT 1 FROM envelope_projection_metadata m${metadataIndex}
|
|
945
|
+
WHERE m${metadataIndex}.envelope_id = envelope_projections.envelope_id
|
|
946
|
+
AND m${metadataIndex}.key = @${keyParam}
|
|
947
|
+
AND m${metadataIndex}.value_text = @${valueParam}
|
|
948
|
+
)`);
|
|
949
|
+
params[keyParam] = key;
|
|
950
|
+
params[valueParam] = metadataValueText(value);
|
|
951
|
+
metadataIndex += 1;
|
|
952
|
+
}
|
|
953
|
+
const limit = Math.max(0, Math.min(query.limit ?? 100, 1000));
|
|
954
|
+
params['limit'] = limit;
|
|
955
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
956
|
+
const rows = this.db.prepare(`SELECT envelope_id, envelope_cid, envelope_sha256, signature_hash, solver_type, role,
|
|
957
|
+
task_cid, task_id, request_id, generated_at, evidence_tier,
|
|
958
|
+
participant_safe_address, participant_agent_eoa,
|
|
959
|
+
executor_impl_name, executor_impl_version, executor_runtime_bundle_digest,
|
|
960
|
+
executor_plugins_json, solution_envelope_cid, solution_envelope_sha256,
|
|
961
|
+
solution_envelope_ref, metadata_json
|
|
962
|
+
FROM envelope_projections
|
|
963
|
+
${where}
|
|
964
|
+
ORDER BY generated_at DESC, envelope_id ASC
|
|
965
|
+
LIMIT @limit`).all(params);
|
|
966
|
+
return rows.map(rowToEnvelopeProjection);
|
|
967
|
+
}
|
|
706
968
|
close() {
|
|
707
969
|
this.db.close();
|
|
708
970
|
}
|
|
709
971
|
}
|
|
972
|
+
function rowToEnvelopeProjection(row) {
|
|
973
|
+
return {
|
|
974
|
+
envelopeId: row.envelope_id,
|
|
975
|
+
envelopeCid: row.envelope_cid,
|
|
976
|
+
envelopeSha256: row.envelope_sha256,
|
|
977
|
+
signatureHash: row.signature_hash,
|
|
978
|
+
solverType: row.solver_type,
|
|
979
|
+
role: row.role,
|
|
980
|
+
taskCid: row.task_cid,
|
|
981
|
+
taskId: row.task_id,
|
|
982
|
+
requestId: row.request_id,
|
|
983
|
+
generatedAt: row.generated_at,
|
|
984
|
+
evidenceTier: row.evidence_tier,
|
|
985
|
+
participantSafeAddress: row.participant_safe_address,
|
|
986
|
+
participantAgentEoa: row.participant_agent_eoa,
|
|
987
|
+
executorImplName: row.executor_impl_name,
|
|
988
|
+
executorImplVersion: row.executor_impl_version,
|
|
989
|
+
executorRuntimeBundleDigest: row.executor_runtime_bundle_digest,
|
|
990
|
+
executorPlugins: parseStringArray(row.executor_plugins_json),
|
|
991
|
+
solutionEnvelopeCid: row.solution_envelope_cid,
|
|
992
|
+
solutionEnvelopeSha256: row.solution_envelope_sha256,
|
|
993
|
+
solutionEnvelopeRef: row.solution_envelope_ref,
|
|
994
|
+
metadata: parseMetadata(row.metadata_json),
|
|
995
|
+
};
|
|
996
|
+
}
|
|
997
|
+
function metadataValueText(value) {
|
|
998
|
+
return String(value);
|
|
999
|
+
}
|
|
1000
|
+
function parseStringArray(json) {
|
|
1001
|
+
try {
|
|
1002
|
+
const parsed = JSON.parse(json);
|
|
1003
|
+
return Array.isArray(parsed) ? parsed.filter((value) => typeof value === 'string') : [];
|
|
1004
|
+
}
|
|
1005
|
+
catch {
|
|
1006
|
+
return [];
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
function parseMetadata(json) {
|
|
1010
|
+
try {
|
|
1011
|
+
const parsed = JSON.parse(json);
|
|
1012
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
1013
|
+
return {};
|
|
1014
|
+
const out = {};
|
|
1015
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
1016
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
1017
|
+
out[key] = value;
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
return out;
|
|
1021
|
+
}
|
|
1022
|
+
catch {
|
|
1023
|
+
return {};
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
710
1026
|
//# sourceMappingURL=store.js.map
|