@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.
Files changed (87) hide show
  1. package/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +38 -0
  2. package/dist/build-info.json +4 -4
  3. package/dist/build-meta.json +1 -1
  4. package/dist/cli/commands/doctor.d.ts +15 -0
  5. package/dist/cli/commands/doctor.js +21 -0
  6. package/dist/cli/commands/doctor.js.map +1 -1
  7. package/dist/cli/commands/prediction-scoreboard.d.ts +10 -0
  8. package/dist/cli/commands/prediction-scoreboard.js +136 -0
  9. package/dist/cli/commands/prediction-scoreboard.js.map +1 -0
  10. package/dist/cli/commands/solver-nets.js +26 -2
  11. package/dist/cli/commands/solver-nets.js.map +1 -1
  12. package/dist/cli/commands/status.d.ts +3 -0
  13. package/dist/cli/commands/status.js +11 -3
  14. package/dist/cli/commands/status.js.map +1 -1
  15. package/dist/cli/commands/update.d.ts +8 -1
  16. package/dist/cli/commands/update.js +232 -7
  17. package/dist/cli/commands/update.js.map +1 -1
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/task-native-readiness.d.ts +27 -0
  21. package/dist/cli/task-native-readiness.js +170 -0
  22. package/dist/cli/task-native-readiness.js.map +1 -0
  23. package/dist/config.d.ts +61 -0
  24. package/dist/config.js +76 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/corpus/envelope-projection.d.ts +12 -0
  27. package/dist/corpus/envelope-projection.js +110 -0
  28. package/dist/corpus/envelope-projection.js.map +1 -0
  29. package/dist/corpus/index.d.ts +3 -0
  30. package/dist/corpus/index.js +3 -0
  31. package/dist/corpus/index.js.map +1 -1
  32. package/dist/corpus/prediction-brier-scoreboard-report.d.ts +17 -0
  33. package/dist/corpus/prediction-brier-scoreboard-report.js +148 -0
  34. package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -0
  35. package/dist/corpus/prediction-brier-scoreboard.d.ts +56 -0
  36. package/dist/corpus/prediction-brier-scoreboard.js +269 -0
  37. package/dist/corpus/prediction-brier-scoreboard.js.map +1 -0
  38. package/dist/corpus/prediction-scoreable-verdicts.d.ts +4 -0
  39. package/dist/corpus/prediction-scoreable-verdicts.js +23 -0
  40. package/dist/corpus/prediction-scoreable-verdicts.js.map +1 -0
  41. package/dist/corpus/types.d.ts +43 -1
  42. package/dist/corpus/types.js.map +1 -1
  43. package/dist/daemon/daemon.js +1 -1
  44. package/dist/daemon/daemon.js.map +1 -1
  45. package/dist/earning/contracts.d.ts +1 -0
  46. package/dist/earning/contracts.js +16 -0
  47. package/dist/earning/contracts.js.map +1 -1
  48. package/dist/earning/store.d.ts +1 -0
  49. package/dist/earning/store.js +3 -0
  50. package/dist/earning/store.js.map +1 -1
  51. package/dist/harnesses/engine/engine.d.ts +2 -0
  52. package/dist/harnesses/engine/engine.js +18 -3
  53. package/dist/harnesses/engine/engine.js.map +1 -1
  54. package/dist/harnesses/engine/registry.d.ts +2 -0
  55. package/dist/harnesses/engine/registry.js +3 -0
  56. package/dist/harnesses/engine/registry.js.map +1 -1
  57. package/dist/harnesses/impls/index.js +4 -9
  58. package/dist/harnesses/impls/index.js.map +1 -1
  59. package/dist/harnesses/impls/prediction-v1-evaluator/index.js +33 -12
  60. package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
  61. package/dist/main.js +8 -4
  62. package/dist/main.js.map +1 -1
  63. package/dist/solver-nets/prediction-operator-ux.d.ts +102 -0
  64. package/dist/solver-nets/prediction-operator-ux.js +438 -0
  65. package/dist/solver-nets/prediction-operator-ux.js.map +1 -0
  66. package/dist/solver-types/index.d.ts +11 -0
  67. package/dist/solver-types/index.js +8 -1
  68. package/dist/solver-types/index.js.map +1 -1
  69. package/dist/solver-types/prediction-v0.d.ts +1 -1
  70. package/dist/solver-types/prediction-v0.js +1 -1
  71. package/dist/solver-types/prediction-v0.js.map +1 -1
  72. package/dist/solver-types/prediction-v1-auto.d.ts +2 -0
  73. package/dist/solver-types/prediction-v1-auto.js +56 -7
  74. package/dist/solver-types/prediction-v1-auto.js.map +1 -1
  75. package/dist/solver-types/prediction-v1.js +25 -1
  76. package/dist/solver-types/prediction-v1.js.map +1 -1
  77. package/dist/solver-types/solver-type.d.ts +18 -5
  78. package/dist/store/store.d.ts +11 -0
  79. package/dist/store/store.js +316 -0
  80. package/dist/store/store.js.map +1 -1
  81. package/package.json +1 -1
  82. package/plugins/jinn-prediction-plugin/.claude-plugin/plugin.json +3 -1
  83. package/plugins/jinn-prediction-plugin/GEMINI.md +2 -0
  84. package/plugins/jinn-prediction-plugin/jinn.plugin.json +3 -1
  85. package/plugins/jinn-prediction-plugin/mcp/polymarket-server.mjs +321 -1
  86. package/plugins/jinn-prediction-plugin/skills/common-biases/SKILL.md +3 -0
  87. 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 blocklist = new Set(config.blocklistConditionIds ?? []);
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
- if (postedAtByCondition.has(market.conditionId) || blocklist.has(market.conditionId))
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":"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"}
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;QAChD,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,EAAE,EAAE;QACF,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAE,YAAY;KACvB;CACF,CAAC"}
1
+ {"version":3,"file":"prediction-v1.js","sourceRoot":"","sources":["../../src/solver-types/prediction-v1.ts"],"names":[],"mappings":"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"}
@@ -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
- * Override the prediction.v1 auto-generator submission window (ms). Used by the
33
- * docker acceptance gate to keep the protocol loop tight (gate sets 120000).
34
- * Default 600000 (10 min) when unset.
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
- * Override the prediction.v1 auto-generator gap from window end → resolveTs (ms).
39
- * Default 300000 (5 min) when unset; gate sets 60000.
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
  }
@@ -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
  }
@@ -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