@riddledc/riddle-proof 0.5.33 → 0.5.35

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 (41) hide show
  1. package/dist/{chunk-A5AWVY5A.js → chunk-4YCWZVBN.js} +20 -2
  2. package/dist/{chunk-CHKYSZLU.js → chunk-7R6ZQE3X.js} +5 -5
  3. package/dist/{chunk-TMMKRKY5.js → chunk-J2MERROF.js} +1 -0
  4. package/dist/{chunk-F6VFKS7K.js → chunk-MQ2BHHLX.js} +2 -2
  5. package/dist/{chunk-7ZJAUEUN.js → chunk-OASB3CYU.js} +6 -1
  6. package/dist/chunk-ODORKNSO.js +121 -0
  7. package/dist/engine-harness.cjs +26 -2
  8. package/dist/engine-harness.js +4 -4
  9. package/dist/index.cjs +154 -4
  10. package/dist/index.d.cts +2 -1
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.js +24 -8
  13. package/dist/openclaw.cjs +29 -0
  14. package/dist/openclaw.d.cts +7 -1
  15. package/dist/openclaw.d.ts +7 -1
  16. package/dist/openclaw.js +25 -2
  17. package/dist/proof-run-core.cjs +20 -2
  18. package/dist/proof-run-core.d.cts +16 -0
  19. package/dist/proof-run-core.d.ts +16 -0
  20. package/dist/proof-run-core.js +1 -1
  21. package/dist/proof-run-engine.cjs +20 -2
  22. package/dist/proof-run-engine.d.cts +24 -0
  23. package/dist/proof-run-engine.d.ts +24 -0
  24. package/dist/proof-run-engine.js +1 -1
  25. package/dist/proof-session.cjs +151 -0
  26. package/dist/proof-session.d.cts +37 -0
  27. package/dist/proof-session.d.ts +37 -0
  28. package/dist/proof-session.js +18 -0
  29. package/dist/result.cjs +1 -0
  30. package/dist/result.js +1 -1
  31. package/dist/runner.cjs +6 -0
  32. package/dist/runner.js +3 -3
  33. package/dist/state.cjs +5 -0
  34. package/dist/state.js +2 -2
  35. package/dist/types.d.cts +67 -1
  36. package/dist/types.d.ts +67 -1
  37. package/package.json +7 -2
  38. package/runtime/lib/preflight.py +42 -2
  39. package/runtime/lib/util.py +237 -0
  40. package/runtime/lib/verify.py +55 -2
  41. package/runtime/tests/recon_verify_smoke.py +120 -1
@@ -63,6 +63,11 @@ function ensureAction(action) {
63
63
  function workflowFile(riddleProofDir, action) {
64
64
  return path.join(riddleProofDir, "pipelines", `riddle-proof-${action}.lobster`);
65
65
  }
66
+ function asJsonString(value) {
67
+ if (value === void 0 || value === null || value === "") return "";
68
+ if (typeof value === "string") return value;
69
+ return JSON.stringify(value);
70
+ }
66
71
  function buildSetupArgs(params, config) {
67
72
  if (!params.repo) throw new Error("repo is required for setup/run");
68
73
  if (!params.change_request) throw new Error("change_request is required for setup/run");
@@ -78,8 +83,13 @@ function buildSetupArgs(params, config) {
78
83
  prod_url: params.prod_url || "",
79
84
  capture_script: captureScript,
80
85
  success_criteria: params.success_criteria || "",
81
- assertions_json: params.assertions_json || "",
86
+ assertions_json: params.assertions_json || asJsonString(params.assertions),
82
87
  verification_mode: params.verification_mode || "proof",
88
+ resume_session: params.resume_session || "",
89
+ target_image_url: params.target_image_url || "",
90
+ target_image_hash: params.target_image_hash || "",
91
+ viewport_matrix_json: params.viewport_matrix_json || asJsonString(params.viewport_matrix),
92
+ deterministic_setup_json: params.deterministic_setup_json || asJsonString(params.deterministic_setup),
83
93
  reference: requestedReference,
84
94
  base_branch: params.base_branch || "main",
85
95
  before_ref: params.before_ref || "",
@@ -649,6 +659,11 @@ function mergeStateFromParams(statePath, params) {
649
659
  "success_criteria",
650
660
  "assertions_json",
651
661
  "verification_mode",
662
+ "resume_session",
663
+ "target_image_url",
664
+ "target_image_hash",
665
+ "viewport_matrix_json",
666
+ "deterministic_setup_json",
652
667
  "base_branch",
653
668
  "before_ref",
654
669
  "context",
@@ -880,7 +895,10 @@ function summarizeState(state) {
880
895
  explicit_stage_gate: Boolean(state.explicit_stage_gate),
881
896
  last_requested_advance_stage: state.last_requested_advance_stage || null,
882
897
  recon_results: state.recon_results || null,
883
- verify_results: state.verify_results || null
898
+ verify_results: state.verify_results || null,
899
+ proof_session: state.proof_session || null,
900
+ parent_proof_session: state.parent_proof_session || null,
901
+ proof_session_artifact_url: state.proof_session_artifact_url || null
884
902
  };
885
903
  const parts = [
886
904
  state.workspace_ready ? "workspace ready" : "workspace not ready",
@@ -1,6 +1,3 @@
1
- import {
2
- visualDeltaShipGateReason
3
- } from "./chunk-A5AWVY5A.js";
4
1
  import {
5
2
  appendRunEvent,
6
3
  appendStageHeartbeat,
@@ -8,7 +5,10 @@ import {
8
5
  createRunStatusSnapshot,
9
6
  normalizeRunParams,
10
7
  setRunStatus
11
- } from "./chunk-7ZJAUEUN.js";
8
+ } from "./chunk-OASB3CYU.js";
9
+ import {
10
+ visualDeltaShipGateReason
11
+ } from "./chunk-4YCWZVBN.js";
12
12
  import {
13
13
  applyTerminalMetadata,
14
14
  compactRecord,
@@ -16,7 +16,7 @@ import {
16
16
  nonEmptyString,
17
17
  normalizeTerminalMetadata,
18
18
  recordValue
19
- } from "./chunk-TMMKRKY5.js";
19
+ } from "./chunk-J2MERROF.js";
20
20
 
21
21
  // src/engine-harness.ts
22
22
  import { execFileSync } from "child_process";
@@ -202,6 +202,7 @@ function createRunResult(input) {
202
202
  merge_recommendation: state.merge_recommendation,
203
203
  finalized: state.finalized,
204
204
  blocker: state.blocker,
205
+ proof_session: state.proof_session,
205
206
  evidence_bundle: input.evidence_bundle,
206
207
  raw: input.raw
207
208
  });
@@ -3,10 +3,10 @@ import {
3
3
  appendStageHeartbeat,
4
4
  createRunState,
5
5
  setRunStatus
6
- } from "./chunk-7ZJAUEUN.js";
6
+ } from "./chunk-OASB3CYU.js";
7
7
  import {
8
8
  createRunResult
9
- } from "./chunk-TMMKRKY5.js";
9
+ } from "./chunk-J2MERROF.js";
10
10
 
11
11
  // src/runner.ts
12
12
  function errorDetails(error) {
@@ -3,7 +3,7 @@ import {
3
3
  isTerminalStatus,
4
4
  nonEmptyString,
5
5
  recordValue
6
- } from "./chunk-TMMKRKY5.js";
6
+ } from "./chunk-J2MERROF.js";
7
7
 
8
8
  // src/state.ts
9
9
  var RIDDLE_PROOF_RUN_STATE_VERSION = "riddle-proof.run-state.v1";
@@ -77,6 +77,11 @@ function normalizeRunParams(input) {
77
77
  success_criteria: input.success_criteria,
78
78
  assertions: input.assertions,
79
79
  verification_mode: input.verification_mode,
80
+ resume_session: input.resume_session,
81
+ target_image_url: input.target_image_url,
82
+ target_image_hash: input.target_image_hash,
83
+ viewport_matrix: input.viewport_matrix,
84
+ deterministic_setup: input.deterministic_setup,
80
85
  reference: input.reference,
81
86
  base_branch: input.base_branch,
82
87
  before_ref: input.before_ref,
@@ -0,0 +1,121 @@
1
+ // src/proof-session.ts
2
+ import { createHash, randomUUID } from "crypto";
3
+ var RIDDLE_PROOF_VISUAL_SESSION_VERSION = "riddle-proof.visual-session.v1";
4
+ var RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION = "riddle-proof.visual-session.fingerprint.v1";
5
+ function trim(value) {
6
+ const text = String(value ?? "").trim();
7
+ return text || void 0;
8
+ }
9
+ function hashString(value) {
10
+ const text = trim(value);
11
+ if (!text) return void 0;
12
+ return createHash("sha256").update(text).digest("hex");
13
+ }
14
+ function stableJson(value) {
15
+ if (value === void 0) return "null";
16
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
17
+ if (Array.isArray(value)) return `[${value.map((item) => stableJson(item)).join(",")}]`;
18
+ const record = value;
19
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`).join(",")}}`;
20
+ }
21
+ function withoutUndefined(record) {
22
+ for (const key of Object.keys(record)) {
23
+ if (record[key] === void 0) delete record[key];
24
+ }
25
+ return record;
26
+ }
27
+ function visualSessionFingerprintBasis(input) {
28
+ return withoutUndefined({
29
+ version: RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION,
30
+ repo: trim(input.repo),
31
+ route: trim(input.route),
32
+ wait_for_selector: trim(input.wait_for_selector),
33
+ reference: trim(input.reference),
34
+ verification_mode: trim(input.verification_mode)?.toLowerCase(),
35
+ target_image_url: trim(input.target_image_url),
36
+ target_image_hash: trim(input.target_image_hash),
37
+ viewport_matrix: input.viewport_matrix,
38
+ deterministic_setup: input.deterministic_setup,
39
+ assertions: input.assertions,
40
+ capture_script_hash: hashString(input.capture_script)
41
+ });
42
+ }
43
+ function visualSessionFingerprint(input) {
44
+ const basis = input.version === RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION ? input : visualSessionFingerprintBasis(input);
45
+ return createHash("sha256").update(stableJson(basis)).digest("hex");
46
+ }
47
+ function buildVisualProofSession(input) {
48
+ const basis = visualSessionFingerprintBasis(input);
49
+ const fingerprint = visualSessionFingerprint(basis);
50
+ const session = {
51
+ version: RIDDLE_PROOF_VISUAL_SESSION_VERSION,
52
+ session_id: `rps_${(/* @__PURE__ */ new Date()).toISOString().replace(/[-:.TZ]/g, "").slice(0, 14)}_${randomUUID().slice(0, 8)}`,
53
+ run_id: trim(input.run_id),
54
+ parent_session_id: input.parent?.session_id || null,
55
+ parent_fingerprint: input.parent?.fingerprint || null,
56
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
57
+ fingerprint,
58
+ fingerprint_basis: basis,
59
+ repo: trim(input.repo),
60
+ branch: trim(input.branch),
61
+ route: withoutUndefined({
62
+ path: trim(input.route),
63
+ observed_after_path: trim(input.observed_after_path)
64
+ }),
65
+ reference: trim(input.reference),
66
+ verification_mode: trim(input.verification_mode),
67
+ target_image: withoutUndefined({
68
+ url: trim(input.target_image_url),
69
+ hash: trim(input.target_image_hash)
70
+ }),
71
+ viewport_matrix: input.viewport_matrix,
72
+ deterministic_setup: input.deterministic_setup,
73
+ capture: withoutUndefined({
74
+ proof_plan: trim(input.proof_plan),
75
+ capture_script: trim(input.capture_script),
76
+ wait_for_selector: trim(input.wait_for_selector)
77
+ }),
78
+ assertions: input.assertions,
79
+ artifacts: input.artifacts,
80
+ evidence: input.evidence,
81
+ status: trim(input.status)
82
+ };
83
+ return JSON.parse(JSON.stringify(session));
84
+ }
85
+ function parseVisualProofSession(value) {
86
+ const parsed = typeof value === "string" ? JSON.parse(value) : value;
87
+ if (!parsed || typeof parsed !== "object") throw new Error("proof session must be a JSON object");
88
+ const session = parsed;
89
+ if (session.version !== RIDDLE_PROOF_VISUAL_SESSION_VERSION) {
90
+ throw new Error(`unsupported proof session version: ${String(session.version || "")}`);
91
+ }
92
+ if (!session.session_id) throw new Error("proof session missing session_id");
93
+ if (!session.fingerprint) throw new Error("proof session missing fingerprint");
94
+ return session;
95
+ }
96
+ function compareVisualProofSessionFingerprint(parent, input) {
97
+ const actual = visualSessionFingerprintBasis(input);
98
+ const expected = parent.fingerprint_basis || {};
99
+ const keys = /* @__PURE__ */ new Set([...Object.keys(expected), ...Object.keys(actual)]);
100
+ const expectedRecord = expected;
101
+ const actualRecord = actual;
102
+ const mismatches = [];
103
+ for (const key of keys) {
104
+ const expectedValue = expectedRecord[key];
105
+ const actualValue = actualRecord[key];
106
+ if (stableJson(expectedValue) !== stableJson(actualValue)) {
107
+ mismatches.push({ key, expected: expectedValue, actual: actualValue });
108
+ }
109
+ }
110
+ return mismatches;
111
+ }
112
+
113
+ export {
114
+ RIDDLE_PROOF_VISUAL_SESSION_VERSION,
115
+ RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION,
116
+ visualSessionFingerprintBasis,
117
+ visualSessionFingerprint,
118
+ buildVisualProofSession,
119
+ parseVisualProofSession,
120
+ compareVisualProofSessionFingerprint
121
+ };
@@ -81,6 +81,11 @@ function ensureAction(action) {
81
81
  function workflowFile(riddleProofDir, action) {
82
82
  return import_node_path.default.join(riddleProofDir, "pipelines", `riddle-proof-${action}.lobster`);
83
83
  }
84
+ function asJsonString(value) {
85
+ if (value === void 0 || value === null || value === "") return "";
86
+ if (typeof value === "string") return value;
87
+ return JSON.stringify(value);
88
+ }
84
89
  function buildSetupArgs(params, config) {
85
90
  if (!params.repo) throw new Error("repo is required for setup/run");
86
91
  if (!params.change_request) throw new Error("change_request is required for setup/run");
@@ -96,8 +101,13 @@ function buildSetupArgs(params, config) {
96
101
  prod_url: params.prod_url || "",
97
102
  capture_script: captureScript,
98
103
  success_criteria: params.success_criteria || "",
99
- assertions_json: params.assertions_json || "",
104
+ assertions_json: params.assertions_json || asJsonString(params.assertions),
100
105
  verification_mode: params.verification_mode || "proof",
106
+ resume_session: params.resume_session || "",
107
+ target_image_url: params.target_image_url || "",
108
+ target_image_hash: params.target_image_hash || "",
109
+ viewport_matrix_json: params.viewport_matrix_json || asJsonString(params.viewport_matrix),
110
+ deterministic_setup_json: params.deterministic_setup_json || asJsonString(params.deterministic_setup),
101
111
  reference: requestedReference,
102
112
  base_branch: params.base_branch || "main",
103
113
  before_ref: params.before_ref || "",
@@ -489,6 +499,11 @@ function mergeStateFromParams(statePath, params) {
489
499
  "success_criteria",
490
500
  "assertions_json",
491
501
  "verification_mode",
502
+ "resume_session",
503
+ "target_image_url",
504
+ "target_image_hash",
505
+ "viewport_matrix_json",
506
+ "deterministic_setup_json",
492
507
  "base_branch",
493
508
  "before_ref",
494
509
  "context",
@@ -720,7 +735,10 @@ function summarizeState(state) {
720
735
  explicit_stage_gate: Boolean(state.explicit_stage_gate),
721
736
  last_requested_advance_stage: state.last_requested_advance_stage || null,
722
737
  recon_results: state.recon_results || null,
723
- verify_results: state.verify_results || null
738
+ verify_results: state.verify_results || null,
739
+ proof_session: state.proof_session || null,
740
+ parent_proof_session: state.parent_proof_session || null,
741
+ proof_session_artifact_url: state.proof_session_artifact_url || null
724
742
  };
725
743
  const parts = [
726
744
  state.workspace_ready ? "workspace ready" : "workspace not ready",
@@ -2927,6 +2945,7 @@ function createRunResult(input) {
2927
2945
  merge_recommendation: state.merge_recommendation,
2928
2946
  finalized: state.finalized,
2929
2947
  blocker: state.blocker,
2948
+ proof_session: state.proof_session,
2930
2949
  evidence_bundle: input.evidence_bundle,
2931
2950
  raw: input.raw
2932
2951
  });
@@ -2974,6 +2993,11 @@ function normalizeRunParams(input) {
2974
2993
  success_criteria: input.success_criteria,
2975
2994
  assertions: input.assertions,
2976
2995
  verification_mode: input.verification_mode,
2996
+ resume_session: input.resume_session,
2997
+ target_image_url: input.target_image_url,
2998
+ target_image_hash: input.target_image_hash,
2999
+ viewport_matrix: input.viewport_matrix,
3000
+ deterministic_setup: input.deterministic_setup,
2977
3001
  reference: input.reference,
2978
3002
  base_branch: input.base_branch,
2979
3003
  before_ref: input.before_ref,
@@ -2,10 +2,10 @@ import {
2
2
  createDisabledRiddleProofAgentAdapter,
3
3
  readRiddleProofRunStatus,
4
4
  runRiddleProofEngineHarness
5
- } from "./chunk-CHKYSZLU.js";
6
- import "./chunk-A5AWVY5A.js";
7
- import "./chunk-7ZJAUEUN.js";
8
- import "./chunk-TMMKRKY5.js";
5
+ } from "./chunk-7R6ZQE3X.js";
6
+ import "./chunk-OASB3CYU.js";
7
+ import "./chunk-4YCWZVBN.js";
8
+ import "./chunk-J2MERROF.js";
9
9
  export {
10
10
  createDisabledRiddleProofAgentAdapter,
11
11
  readRiddleProofRunStatus,
package/dist/index.cjs CHANGED
@@ -81,6 +81,11 @@ function ensureAction(action) {
81
81
  function workflowFile(riddleProofDir, action) {
82
82
  return import_node_path.default.join(riddleProofDir, "pipelines", `riddle-proof-${action}.lobster`);
83
83
  }
84
+ function asJsonString(value) {
85
+ if (value === void 0 || value === null || value === "") return "";
86
+ if (typeof value === "string") return value;
87
+ return JSON.stringify(value);
88
+ }
84
89
  function buildSetupArgs(params, config) {
85
90
  if (!params.repo) throw new Error("repo is required for setup/run");
86
91
  if (!params.change_request) throw new Error("change_request is required for setup/run");
@@ -96,8 +101,13 @@ function buildSetupArgs(params, config) {
96
101
  prod_url: params.prod_url || "",
97
102
  capture_script: captureScript,
98
103
  success_criteria: params.success_criteria || "",
99
- assertions_json: params.assertions_json || "",
104
+ assertions_json: params.assertions_json || asJsonString(params.assertions),
100
105
  verification_mode: params.verification_mode || "proof",
106
+ resume_session: params.resume_session || "",
107
+ target_image_url: params.target_image_url || "",
108
+ target_image_hash: params.target_image_hash || "",
109
+ viewport_matrix_json: params.viewport_matrix_json || asJsonString(params.viewport_matrix),
110
+ deterministic_setup_json: params.deterministic_setup_json || asJsonString(params.deterministic_setup),
101
111
  reference: requestedReference,
102
112
  base_branch: params.base_branch || "main",
103
113
  before_ref: params.before_ref || "",
@@ -489,6 +499,11 @@ function mergeStateFromParams(statePath, params) {
489
499
  "success_criteria",
490
500
  "assertions_json",
491
501
  "verification_mode",
502
+ "resume_session",
503
+ "target_image_url",
504
+ "target_image_hash",
505
+ "viewport_matrix_json",
506
+ "deterministic_setup_json",
492
507
  "base_branch",
493
508
  "before_ref",
494
509
  "context",
@@ -720,7 +735,10 @@ function summarizeState(state) {
720
735
  explicit_stage_gate: Boolean(state.explicit_stage_gate),
721
736
  last_requested_advance_stage: state.last_requested_advance_stage || null,
722
737
  recon_results: state.recon_results || null,
723
- verify_results: state.verify_results || null
738
+ verify_results: state.verify_results || null,
739
+ proof_session: state.proof_session || null,
740
+ parent_proof_session: state.parent_proof_session || null,
741
+ proof_session_artifact_url: state.proof_session_artifact_url || null
724
742
  };
725
743
  const parts = [
726
744
  state.workspace_ready ? "workspace ready" : "workspace not ready",
@@ -2718,12 +2736,16 @@ __export(index_exports, {
2718
2736
  DEFAULT_DIAGNOSTIC_STRING_LIMIT: () => DEFAULT_DIAGNOSTIC_STRING_LIMIT,
2719
2737
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION: () => RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
2720
2738
  RIDDLE_PROOF_RUN_STATE_VERSION: () => RIDDLE_PROOF_RUN_STATE_VERSION,
2739
+ RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION: () => RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION,
2740
+ RIDDLE_PROOF_VISUAL_SESSION_VERSION: () => RIDDLE_PROOF_VISUAL_SESSION_VERSION,
2721
2741
  appendCaptureDiagnostic: () => appendCaptureDiagnostic,
2722
2742
  appendRunEvent: () => appendRunEvent,
2723
2743
  appendStageHeartbeat: () => appendStageHeartbeat,
2724
2744
  applyPrLifecycleState: () => applyPrLifecycleState,
2725
2745
  applyTerminalMetadata: () => applyTerminalMetadata,
2746
+ buildVisualProofSession: () => buildVisualProofSession,
2726
2747
  compactRecord: () => compactRecord,
2748
+ compareVisualProofSessionFingerprint: () => compareVisualProofSessionFingerprint,
2727
2749
  createCaptureDiagnostic: () => createCaptureDiagnostic,
2728
2750
  createDisabledRiddleProofAgentAdapter: () => createDisabledRiddleProofAgentAdapter,
2729
2751
  createRunResult: () => createRunResult,
@@ -2736,13 +2758,16 @@ __export(index_exports, {
2736
2758
  normalizePrLifecycleState: () => normalizePrLifecycleState,
2737
2759
  normalizeRunParams: () => normalizeRunParams,
2738
2760
  normalizeTerminalMetadata: () => normalizeTerminalMetadata,
2761
+ parseVisualProofSession: () => parseVisualProofSession,
2739
2762
  readRiddleProofRunStatus: () => readRiddleProofRunStatus,
2740
2763
  recordValue: () => recordValue,
2741
2764
  redactForProofDiagnostics: () => redactForProofDiagnostics,
2742
2765
  runRiddleProof: () => runRiddleProof,
2743
2766
  runRiddleProofEngineHarness: () => runRiddleProofEngineHarness,
2744
2767
  setRunStatus: () => setRunStatus,
2745
- summarizeCaptureArtifacts: () => summarizeCaptureArtifacts
2768
+ summarizeCaptureArtifacts: () => summarizeCaptureArtifacts,
2769
+ visualSessionFingerprint: () => visualSessionFingerprint,
2770
+ visualSessionFingerprintBasis: () => visualSessionFingerprintBasis
2746
2771
  });
2747
2772
  module.exports = __toCommonJS(index_exports);
2748
2773
 
@@ -2950,6 +2975,7 @@ function createRunResult(input) {
2950
2975
  merge_recommendation: state.merge_recommendation,
2951
2976
  finalized: state.finalized,
2952
2977
  blocker: state.blocker,
2978
+ proof_session: state.proof_session,
2953
2979
  evidence_bundle: input.evidence_bundle,
2954
2980
  raw: input.raw
2955
2981
  });
@@ -3027,6 +3053,11 @@ function normalizeRunParams(input) {
3027
3053
  success_criteria: input.success_criteria,
3028
3054
  assertions: input.assertions,
3029
3055
  verification_mode: input.verification_mode,
3056
+ resume_session: input.resume_session,
3057
+ target_image_url: input.target_image_url,
3058
+ target_image_hash: input.target_image_hash,
3059
+ viewport_matrix: input.viewport_matrix,
3060
+ deterministic_setup: input.deterministic_setup,
3030
3061
  reference: input.reference,
3031
3062
  base_branch: input.base_branch,
3032
3063
  before_ref: input.before_ref,
@@ -4683,6 +4714,118 @@ function appendCaptureDiagnostic(state, input, historyLimit = DEFAULT_DIAGNOSTIC
4683
4714
  state.capture_diagnostics = [...existing, diagnostic].slice(-Math.max(1, historyLimit));
4684
4715
  return diagnostic;
4685
4716
  }
4717
+
4718
+ // src/proof-session.ts
4719
+ var import_node_crypto3 = require("crypto");
4720
+ var RIDDLE_PROOF_VISUAL_SESSION_VERSION = "riddle-proof.visual-session.v1";
4721
+ var RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION = "riddle-proof.visual-session.fingerprint.v1";
4722
+ function trim(value) {
4723
+ const text = String(value ?? "").trim();
4724
+ return text || void 0;
4725
+ }
4726
+ function hashString(value) {
4727
+ const text = trim(value);
4728
+ if (!text) return void 0;
4729
+ return (0, import_node_crypto3.createHash)("sha256").update(text).digest("hex");
4730
+ }
4731
+ function stableJson(value) {
4732
+ if (value === void 0) return "null";
4733
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
4734
+ if (Array.isArray(value)) return `[${value.map((item) => stableJson(item)).join(",")}]`;
4735
+ const record = value;
4736
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`).join(",")}}`;
4737
+ }
4738
+ function withoutUndefined(record) {
4739
+ for (const key of Object.keys(record)) {
4740
+ if (record[key] === void 0) delete record[key];
4741
+ }
4742
+ return record;
4743
+ }
4744
+ function visualSessionFingerprintBasis(input) {
4745
+ return withoutUndefined({
4746
+ version: RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION,
4747
+ repo: trim(input.repo),
4748
+ route: trim(input.route),
4749
+ wait_for_selector: trim(input.wait_for_selector),
4750
+ reference: trim(input.reference),
4751
+ verification_mode: trim(input.verification_mode)?.toLowerCase(),
4752
+ target_image_url: trim(input.target_image_url),
4753
+ target_image_hash: trim(input.target_image_hash),
4754
+ viewport_matrix: input.viewport_matrix,
4755
+ deterministic_setup: input.deterministic_setup,
4756
+ assertions: input.assertions,
4757
+ capture_script_hash: hashString(input.capture_script)
4758
+ });
4759
+ }
4760
+ function visualSessionFingerprint(input) {
4761
+ const basis = input.version === RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION ? input : visualSessionFingerprintBasis(input);
4762
+ return (0, import_node_crypto3.createHash)("sha256").update(stableJson(basis)).digest("hex");
4763
+ }
4764
+ function buildVisualProofSession(input) {
4765
+ const basis = visualSessionFingerprintBasis(input);
4766
+ const fingerprint = visualSessionFingerprint(basis);
4767
+ const session = {
4768
+ version: RIDDLE_PROOF_VISUAL_SESSION_VERSION,
4769
+ session_id: `rps_${(/* @__PURE__ */ new Date()).toISOString().replace(/[-:.TZ]/g, "").slice(0, 14)}_${(0, import_node_crypto3.randomUUID)().slice(0, 8)}`,
4770
+ run_id: trim(input.run_id),
4771
+ parent_session_id: input.parent?.session_id || null,
4772
+ parent_fingerprint: input.parent?.fingerprint || null,
4773
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
4774
+ fingerprint,
4775
+ fingerprint_basis: basis,
4776
+ repo: trim(input.repo),
4777
+ branch: trim(input.branch),
4778
+ route: withoutUndefined({
4779
+ path: trim(input.route),
4780
+ observed_after_path: trim(input.observed_after_path)
4781
+ }),
4782
+ reference: trim(input.reference),
4783
+ verification_mode: trim(input.verification_mode),
4784
+ target_image: withoutUndefined({
4785
+ url: trim(input.target_image_url),
4786
+ hash: trim(input.target_image_hash)
4787
+ }),
4788
+ viewport_matrix: input.viewport_matrix,
4789
+ deterministic_setup: input.deterministic_setup,
4790
+ capture: withoutUndefined({
4791
+ proof_plan: trim(input.proof_plan),
4792
+ capture_script: trim(input.capture_script),
4793
+ wait_for_selector: trim(input.wait_for_selector)
4794
+ }),
4795
+ assertions: input.assertions,
4796
+ artifacts: input.artifacts,
4797
+ evidence: input.evidence,
4798
+ status: trim(input.status)
4799
+ };
4800
+ return JSON.parse(JSON.stringify(session));
4801
+ }
4802
+ function parseVisualProofSession(value) {
4803
+ const parsed = typeof value === "string" ? JSON.parse(value) : value;
4804
+ if (!parsed || typeof parsed !== "object") throw new Error("proof session must be a JSON object");
4805
+ const session = parsed;
4806
+ if (session.version !== RIDDLE_PROOF_VISUAL_SESSION_VERSION) {
4807
+ throw new Error(`unsupported proof session version: ${String(session.version || "")}`);
4808
+ }
4809
+ if (!session.session_id) throw new Error("proof session missing session_id");
4810
+ if (!session.fingerprint) throw new Error("proof session missing fingerprint");
4811
+ return session;
4812
+ }
4813
+ function compareVisualProofSessionFingerprint(parent, input) {
4814
+ const actual = visualSessionFingerprintBasis(input);
4815
+ const expected = parent.fingerprint_basis || {};
4816
+ const keys = /* @__PURE__ */ new Set([...Object.keys(expected), ...Object.keys(actual)]);
4817
+ const expectedRecord = expected;
4818
+ const actualRecord = actual;
4819
+ const mismatches = [];
4820
+ for (const key of keys) {
4821
+ const expectedValue = expectedRecord[key];
4822
+ const actualValue = actualRecord[key];
4823
+ if (stableJson(expectedValue) !== stableJson(actualValue)) {
4824
+ mismatches.push({ key, expected: expectedValue, actual: actualValue });
4825
+ }
4826
+ }
4827
+ return mismatches;
4828
+ }
4686
4829
  // Annotate the CommonJS export names for ESM import in node:
4687
4830
  0 && (module.exports = {
4688
4831
  DEFAULT_DIAGNOSTIC_ARRAY_LIMIT,
@@ -4690,12 +4833,16 @@ function appendCaptureDiagnostic(state, input, historyLimit = DEFAULT_DIAGNOSTIC
4690
4833
  DEFAULT_DIAGNOSTIC_STRING_LIMIT,
4691
4834
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
4692
4835
  RIDDLE_PROOF_RUN_STATE_VERSION,
4836
+ RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION,
4837
+ RIDDLE_PROOF_VISUAL_SESSION_VERSION,
4693
4838
  appendCaptureDiagnostic,
4694
4839
  appendRunEvent,
4695
4840
  appendStageHeartbeat,
4696
4841
  applyPrLifecycleState,
4697
4842
  applyTerminalMetadata,
4843
+ buildVisualProofSession,
4698
4844
  compactRecord,
4845
+ compareVisualProofSessionFingerprint,
4699
4846
  createCaptureDiagnostic,
4700
4847
  createDisabledRiddleProofAgentAdapter,
4701
4848
  createRunResult,
@@ -4708,11 +4855,14 @@ function appendCaptureDiagnostic(state, input, historyLimit = DEFAULT_DIAGNOSTIC
4708
4855
  normalizePrLifecycleState,
4709
4856
  normalizeRunParams,
4710
4857
  normalizeTerminalMetadata,
4858
+ parseVisualProofSession,
4711
4859
  readRiddleProofRunStatus,
4712
4860
  recordValue,
4713
4861
  redactForProofDiagnostics,
4714
4862
  runRiddleProof,
4715
4863
  runRiddleProofEngineHarness,
4716
4864
  setRunStatus,
4717
- summarizeCaptureArtifacts
4865
+ summarizeCaptureArtifacts,
4866
+ visualSessionFingerprint,
4867
+ visualSessionFingerprintBasis
4718
4868
  });
package/dist/index.d.cts CHANGED
@@ -1,6 +1,7 @@
1
- export { EvidenceArtifact, EvidenceReference, ImplementationAdapter, ImplementationAdapterInput, ImplementationAdapterResult, IntegrationContext, JsonObject, JsonPrimitive, JsonValue, JudgeAdapter, NotificationAdapter, PreflightAdapter, PreflightAdapterInput, PreflightAdapterResult, ProofAdapter, ProofAdapterInput, ProofAdapterResult, RiddleProofArtifactRole, RiddleProofAssessment, RiddleProofBlocker, RiddleProofDecision, RiddleProofEvent, RiddleProofEvidenceBundle, RiddleProofPrLifecycleState, RiddleProofPrLifecycleStatus, RiddleProofRunParams, RiddleProofRunResult, RiddleProofRunState, RiddleProofRunStatusSnapshot, RiddleProofStage, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofVerificationMode, SetupAdapter, SetupAdapterInput, SetupAdapterResult, ShipAdapter } from './types.cjs';
1
+ export { EvidenceArtifact, EvidenceReference, ImplementationAdapter, ImplementationAdapterInput, ImplementationAdapterResult, IntegrationContext, JsonObject, JsonPrimitive, JsonValue, JudgeAdapter, NotificationAdapter, PreflightAdapter, PreflightAdapterInput, PreflightAdapterResult, ProofAdapter, ProofAdapterInput, ProofAdapterResult, RiddleProofArtifactRole, RiddleProofAssessment, RiddleProofBlocker, RiddleProofDecision, RiddleProofEvent, RiddleProofEvidenceBundle, RiddleProofPrLifecycleState, RiddleProofPrLifecycleStatus, RiddleProofRunParams, RiddleProofRunResult, RiddleProofRunState, RiddleProofRunStatusSnapshot, RiddleProofStage, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofVerificationMode, RiddleProofVisualSession, RiddleProofVisualSessionFingerprintBasis, SetupAdapter, SetupAdapterInput, SetupAdapterResult, ShipAdapter } from './types.cjs';
2
2
  export { TerminalMetadataInput, applyTerminalMetadata, compactRecord, createRunResult, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue } from './result.cjs';
3
3
  export { CreateRunStateInput, RIDDLE_PROOF_RUN_STATE_VERSION, RunEventInput, appendRunEvent, appendStageHeartbeat, applyPrLifecycleState, createRunState, createRunStatusSnapshot, normalizeIntegrationContext, normalizePrLifecycleState, normalizeRunParams, setRunStatus } from './state.cjs';
4
4
  export { RiddleProofRunnerAdapters, RunRiddleProofInput, runRiddleProof } from './runner.cjs';
5
5
  export { RiddleProofAgentAdapter, RiddleProofAgentPayload, RiddleProofEngine, RiddleProofEngineHarnessConfig, RiddleProofEngineHarnessContext, RiddleProofEngineResult, RiddleProofShipMode, RiddleProofWorkflowParams, RunRiddleProofEngineHarnessInput, createDisabledRiddleProofAgentAdapter, readRiddleProofRunStatus, runRiddleProofEngineHarness } from './engine-harness.cjs';
6
6
  export { CreateCaptureDiagnosticInput, DEFAULT_DIAGNOSTIC_ARRAY_LIMIT, DEFAULT_DIAGNOSTIC_HISTORY_LIMIT, DEFAULT_DIAGNOSTIC_STRING_LIMIT, RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION, RiddleProofArtifactSummary, RiddleProofCaptureArtifactSummary, RiddleProofCaptureDiagnostic, RiddleProofDiagnosticRedactionOptions, appendCaptureDiagnostic, createCaptureDiagnostic, redactForProofDiagnostics, summarizeCaptureArtifacts } from './diagnostics.cjs';
7
+ export { BuildVisualProofSessionInput, RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION, RIDDLE_PROOF_VISUAL_SESSION_VERSION, VisualProofSessionMismatch, buildVisualProofSession, compareVisualProofSessionFingerprint, parseVisualProofSession, visualSessionFingerprint, visualSessionFingerprintBasis } from './proof-session.cjs';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- export { EvidenceArtifact, EvidenceReference, ImplementationAdapter, ImplementationAdapterInput, ImplementationAdapterResult, IntegrationContext, JsonObject, JsonPrimitive, JsonValue, JudgeAdapter, NotificationAdapter, PreflightAdapter, PreflightAdapterInput, PreflightAdapterResult, ProofAdapter, ProofAdapterInput, ProofAdapterResult, RiddleProofArtifactRole, RiddleProofAssessment, RiddleProofBlocker, RiddleProofDecision, RiddleProofEvent, RiddleProofEvidenceBundle, RiddleProofPrLifecycleState, RiddleProofPrLifecycleStatus, RiddleProofRunParams, RiddleProofRunResult, RiddleProofRunState, RiddleProofRunStatusSnapshot, RiddleProofStage, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofVerificationMode, SetupAdapter, SetupAdapterInput, SetupAdapterResult, ShipAdapter } from './types.js';
1
+ export { EvidenceArtifact, EvidenceReference, ImplementationAdapter, ImplementationAdapterInput, ImplementationAdapterResult, IntegrationContext, JsonObject, JsonPrimitive, JsonValue, JudgeAdapter, NotificationAdapter, PreflightAdapter, PreflightAdapterInput, PreflightAdapterResult, ProofAdapter, ProofAdapterInput, ProofAdapterResult, RiddleProofArtifactRole, RiddleProofAssessment, RiddleProofBlocker, RiddleProofDecision, RiddleProofEvent, RiddleProofEvidenceBundle, RiddleProofPrLifecycleState, RiddleProofPrLifecycleStatus, RiddleProofRunParams, RiddleProofRunResult, RiddleProofRunState, RiddleProofRunStatusSnapshot, RiddleProofStage, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofVerificationMode, RiddleProofVisualSession, RiddleProofVisualSessionFingerprintBasis, SetupAdapter, SetupAdapterInput, SetupAdapterResult, ShipAdapter } from './types.js';
2
2
  export { TerminalMetadataInput, applyTerminalMetadata, compactRecord, createRunResult, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue } from './result.js';
3
3
  export { CreateRunStateInput, RIDDLE_PROOF_RUN_STATE_VERSION, RunEventInput, appendRunEvent, appendStageHeartbeat, applyPrLifecycleState, createRunState, createRunStatusSnapshot, normalizeIntegrationContext, normalizePrLifecycleState, normalizeRunParams, setRunStatus } from './state.js';
4
4
  export { RiddleProofRunnerAdapters, RunRiddleProofInput, runRiddleProof } from './runner.js';
5
5
  export { RiddleProofAgentAdapter, RiddleProofAgentPayload, RiddleProofEngine, RiddleProofEngineHarnessConfig, RiddleProofEngineHarnessContext, RiddleProofEngineResult, RiddleProofShipMode, RiddleProofWorkflowParams, RunRiddleProofEngineHarnessInput, createDisabledRiddleProofAgentAdapter, readRiddleProofRunStatus, runRiddleProofEngineHarness } from './engine-harness.js';
6
6
  export { CreateCaptureDiagnosticInput, DEFAULT_DIAGNOSTIC_ARRAY_LIMIT, DEFAULT_DIAGNOSTIC_HISTORY_LIMIT, DEFAULT_DIAGNOSTIC_STRING_LIMIT, RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION, RiddleProofArtifactSummary, RiddleProofCaptureArtifactSummary, RiddleProofCaptureDiagnostic, RiddleProofDiagnosticRedactionOptions, appendCaptureDiagnostic, createCaptureDiagnostic, redactForProofDiagnostics, summarizeCaptureArtifacts } from './diagnostics.js';
7
+ export { BuildVisualProofSessionInput, RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION, RIDDLE_PROOF_VISUAL_SESSION_VERSION, VisualProofSessionMismatch, buildVisualProofSession, compareVisualProofSessionFingerprint, parseVisualProofSession, visualSessionFingerprint, visualSessionFingerprintBasis } from './proof-session.js';