@riddledc/riddle-proof 0.7.128 → 0.7.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/profile.cjs CHANGED
@@ -654,6 +654,17 @@ function normalizeSetupActionCoordinateMode(value, index) {
654
654
  if (normalized === "ratio" || normalized === "relative" || normalized === "fraction") return "ratio";
655
655
  throw new Error(`target.setup_actions[${index}].coordinate_mode ${String(value)} is not supported. Supported coordinate modes: pixels, ratio.`);
656
656
  }
657
+ function normalizeSetupActionPointerType(value, type, index) {
658
+ if (value === void 0 || value === null || value === "") return void 0;
659
+ if (type !== "drag") {
660
+ throw new Error(`target.setup_actions[${index}].pointer_type is only supported for drag actions.`);
661
+ }
662
+ const normalized = String(value).trim().replace(/-/g, "_").toLowerCase();
663
+ if (normalized === "mouse") return "mouse";
664
+ if (normalized === "touch" || normalized === "finger") return "touch";
665
+ if (normalized === "pen" || normalized === "stylus") return "pen";
666
+ throw new Error(`target.setup_actions[${index}].pointer_type ${String(value)} is not supported. Supported pointer types: mouse, touch, pen.`);
667
+ }
657
668
  function normalizeSetupAction(input, index) {
658
669
  if (!isRecord(input)) throw new Error(`target.setup_actions[${index}] must be an object.`);
659
670
  const type = normalizeSetupActionType(stringValue(input.type), index);
@@ -672,6 +683,7 @@ function normalizeSetupAction(input, index) {
672
683
  const toX = numberValue(valueFromOwn(input, "to_x", "toX", "end_x", "endX", "x2"));
673
684
  const toY = numberValue(valueFromOwn(input, "to_y", "toY", "end_y", "endY", "y2"));
674
685
  const coordinateMode = normalizeSetupActionCoordinateMode(valueFromOwn(input, "coordinate_mode", "coordinateMode", "coords", "units"), index);
686
+ const pointerType = normalizeSetupActionPointerType(valueFromOwn(input, "pointer_type", "pointerType", "input_type", "inputType"), type, index);
675
687
  if (type === "drag") {
676
688
  if (fromX === void 0 || fromY === void 0 || toX === void 0 || toY === void 0) {
677
689
  throw new Error(`target.setup_actions[${index}] drag requires from_x, from_y, to_x, and to_y.`);
@@ -756,6 +768,7 @@ function normalizeSetupAction(input, index) {
756
768
  force: type === "click" && (input.force === true || input.force_click === true || input.forceClick === true),
757
769
  click_count: normalizeSetupActionClickCount(input, type, index),
758
770
  coordinate_mode: coordinateMode,
771
+ pointer_type: pointerType,
759
772
  from_x: fromX,
760
773
  from_y: fromY,
761
774
  to_x: toX,
@@ -1901,6 +1914,49 @@ function matchText(sample, check) {
1901
1914
  }
1902
1915
  return sample.includes(check.text || "");
1903
1916
  }
1917
+ function compactTextEvidenceSample(value) {
1918
+ return String(value || "").replace(/\s+/g, " ").trim();
1919
+ }
1920
+ function textSampleAroundMatch(sample, index, length) {
1921
+ if (index < 0) return void 0;
1922
+ const source = String(sample || "");
1923
+ const context = 120;
1924
+ const start = Math.max(0, index - context);
1925
+ const end = Math.min(source.length, index + Math.max(length, 1) + context);
1926
+ const prefix = start > 0 ? "..." : "";
1927
+ const suffix = end < source.length ? "..." : "";
1928
+ const compacted = compactTextEvidenceSample(`${prefix}${source.slice(start, end)}${suffix}`);
1929
+ return compacted ? compacted.slice(0, 240) : void 0;
1930
+ }
1931
+ function textMatchSamples(sample, check) {
1932
+ const source = String(sample || "");
1933
+ if (!source) return [];
1934
+ if (check.pattern) {
1935
+ try {
1936
+ const flags = Array.from(new Set(String(check.flags || "").replace(/[gy]/g, "").split(""))).join("");
1937
+ const match = new RegExp(check.pattern, flags).exec(source);
1938
+ const sampleText2 = match ? textSampleAroundMatch(source, match.index, match[0]?.length || 1) : void 0;
1939
+ return sampleText2 ? [sampleText2] : [];
1940
+ } catch {
1941
+ return [];
1942
+ }
1943
+ }
1944
+ const text = check.text || "";
1945
+ if (!text) return [];
1946
+ const index = source.indexOf(text);
1947
+ const sampleText = textSampleAroundMatch(source, index, text.length);
1948
+ return sampleText ? [sampleText] : [];
1949
+ }
1950
+ function textCheckFailureSamples(viewport, check) {
1951
+ const key = textKey(check);
1952
+ const captured = viewport.text_match_samples?.[key] || [];
1953
+ const capturedSamples = captured.map((sample) => compactTextEvidenceSample(sample).slice(0, 240)).filter(Boolean);
1954
+ if (capturedSamples.length) return capturedSamples.slice(0, 3);
1955
+ const matchedSamples = textMatchSamples(viewport.body_text_sample || "", check);
1956
+ if (matchedSamples.length) return matchedSamples.slice(0, 3);
1957
+ const fallback = compactTextEvidenceSample(viewport.body_text_sample || "").slice(0, 240);
1958
+ return fallback ? [fallback] : [];
1959
+ }
1904
1960
  function allowedMessageSample(input) {
1905
1961
  if (!isRecord(input)) return String(input || "");
1906
1962
  const parts = [
@@ -2345,10 +2401,17 @@ function assessCheckFromEvidence(check, evidence) {
2345
2401
  if (check.type === "text_visible" || check.type === "text_absent") {
2346
2402
  const key = textKey(check);
2347
2403
  const expectedVisible = check.type === "text_visible";
2348
- const matches = viewports.map((viewport) => {
2404
+ const results = viewports.map((viewport) => {
2349
2405
  const fromEvidence = viewport.text_matches?.[key];
2350
- return typeof fromEvidence === "boolean" ? fromEvidence : matchText(viewport.body_text_sample || "", check);
2406
+ const matched = typeof fromEvidence === "boolean" ? fromEvidence : matchText(viewport.body_text_sample || "", check);
2407
+ const failedAgainstExpectation = matched !== expectedVisible;
2408
+ return {
2409
+ viewport: viewport.name,
2410
+ matched,
2411
+ samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : []
2412
+ };
2351
2413
  });
2414
+ const matches = results.map((result) => result.matched);
2352
2415
  const failed = matches.filter((matched) => matched !== expectedVisible).length;
2353
2416
  return {
2354
2417
  type: check.type,
@@ -2357,7 +2420,8 @@ function assessCheckFromEvidence(check, evidence) {
2357
2420
  evidence: {
2358
2421
  text: check.text || null,
2359
2422
  pattern: check.pattern || null,
2360
- matches
2423
+ matches,
2424
+ viewports: results.map((result) => toJsonValue(result))
2361
2425
  },
2362
2426
  message: failed ? `Text assertion failed in ${failed} viewport(s).` : void 0
2363
2427
  };
@@ -2944,6 +3008,48 @@ function textMatches(sample, check) {
2944
3008
  }
2945
3009
  return String(sample || "").includes(check.text || "");
2946
3010
  }
3011
+ function compactTextEvidenceSample(value) {
3012
+ return String(value || "").replace(/\s+/g, " ").trim();
3013
+ }
3014
+ function textSampleAroundMatch(sample, index, length) {
3015
+ if (index < 0) return undefined;
3016
+ const source = String(sample || "");
3017
+ const context = 120;
3018
+ const start = Math.max(0, index - context);
3019
+ const end = Math.min(source.length, index + Math.max(length, 1) + context);
3020
+ const prefix = start > 0 ? "..." : "";
3021
+ const suffix = end < source.length ? "..." : "";
3022
+ const compacted = compactTextEvidenceSample(prefix + source.slice(start, end) + suffix);
3023
+ return compacted ? compacted.slice(0, 240) : undefined;
3024
+ }
3025
+ function textMatchSamples(sample, check) {
3026
+ const source = String(sample || "");
3027
+ if (!source) return [];
3028
+ if (check.pattern) {
3029
+ try {
3030
+ const flags = Array.from(new Set(String(check.flags || "").replace(/[gy]/g, "").split(""))).join("");
3031
+ const match = new RegExp(check.pattern, flags).exec(source);
3032
+ const sampleText = match ? textSampleAroundMatch(source, match.index, match[0] ? match[0].length : 1) : undefined;
3033
+ return sampleText ? [sampleText] : [];
3034
+ } catch { return []; }
3035
+ }
3036
+ const text = check.text || "";
3037
+ if (!text) return [];
3038
+ const sampleText = textSampleAroundMatch(source, source.indexOf(text), text.length);
3039
+ return sampleText ? [sampleText] : [];
3040
+ }
3041
+ function textCheckFailureSamples(viewport, check) {
3042
+ const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
3043
+ const captured = viewport && viewport.text_match_samples && Array.isArray(viewport.text_match_samples[key]) ? viewport.text_match_samples[key] : [];
3044
+ const capturedSamples = captured
3045
+ .map((sample) => compactTextEvidenceSample(sample).slice(0, 240))
3046
+ .filter(Boolean);
3047
+ if (capturedSamples.length) return capturedSamples.slice(0, 3);
3048
+ const matchedSamples = textMatchSamples(viewport && viewport.body_text_sample || "", check);
3049
+ if (matchedSamples.length) return matchedSamples.slice(0, 3);
3050
+ const fallback = compactTextEvidenceSample(viewport && viewport.body_text_sample || "").slice(0, 240);
3051
+ return fallback ? [fallback] : [];
3052
+ }
2947
3053
  function allowedMessageSample(input) {
2948
3054
  if (!input || typeof input !== "object" || Array.isArray(input)) return String(input || "");
2949
3055
  const parts = [
@@ -4021,13 +4127,22 @@ function assessProfile(profile, evidence) {
4021
4127
  if (check.type === "text_visible" || check.type === "text_absent") {
4022
4128
  const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
4023
4129
  const expectedVisible = check.type === "text_visible";
4024
- const matches = checkViewports.map((viewport) => viewport.text_matches && typeof viewport.text_matches[key] === "boolean" ? viewport.text_matches[key] : textMatches(viewport.body_text_sample || "", check));
4130
+ const results = checkViewports.map((viewport) => {
4131
+ const matched = viewport.text_matches && typeof viewport.text_matches[key] === "boolean" ? viewport.text_matches[key] : textMatches(viewport.body_text_sample || "", check);
4132
+ const failedAgainstExpectation = matched !== expectedVisible;
4133
+ return {
4134
+ viewport: viewport.name,
4135
+ matched,
4136
+ samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : [],
4137
+ };
4138
+ });
4139
+ const matches = results.map((result) => result.matched);
4025
4140
  const failed = matches.filter((matched) => matched !== expectedVisible).length;
4026
4141
  checks.push({
4027
4142
  type: check.type,
4028
4143
  label: check.label || check.type,
4029
4144
  status: failed ? "failed" : "passed",
4030
- evidence: { text: check.text, pattern: check.pattern, matches },
4145
+ evidence: { text: check.text, pattern: check.pattern, matches, viewports: results },
4031
4146
  message: failed ? "Text assertion failed in " + failed + " viewport(s)." : undefined,
4032
4147
  });
4033
4148
  continue;
@@ -4347,6 +4462,36 @@ function textMatches(sample, check) {
4347
4462
  }
4348
4463
  return String(sample || "").includes(check.text || "");
4349
4464
  }
4465
+ function compactTextEvidenceSample(value) {
4466
+ return String(value || "").replace(/\s+/g, " ").trim();
4467
+ }
4468
+ function textSampleAroundMatch(sample, index, length) {
4469
+ if (index < 0) return undefined;
4470
+ const source = String(sample || "");
4471
+ const context = 120;
4472
+ const start = Math.max(0, index - context);
4473
+ const end = Math.min(source.length, index + Math.max(length, 1) + context);
4474
+ const prefix = start > 0 ? "..." : "";
4475
+ const suffix = end < source.length ? "..." : "";
4476
+ const compacted = compactTextEvidenceSample(prefix + source.slice(start, end) + suffix);
4477
+ return compacted ? compacted.slice(0, 240) : undefined;
4478
+ }
4479
+ function textMatchSamples(sample, check) {
4480
+ const source = String(sample || "");
4481
+ if (!source) return [];
4482
+ if (check.pattern) {
4483
+ try {
4484
+ const flags = Array.from(new Set(String(check.flags || "").replace(/[gy]/g, "").split(""))).join("");
4485
+ const match = new RegExp(check.pattern, flags).exec(source);
4486
+ const sampleText = match ? textSampleAroundMatch(source, match.index, match[0] ? match[0].length : 1) : undefined;
4487
+ return sampleText ? [sampleText] : [];
4488
+ } catch { return []; }
4489
+ }
4490
+ const text = check.text || "";
4491
+ if (!text) return [];
4492
+ const sampleText = textSampleAroundMatch(source, source.indexOf(text), text.length);
4493
+ return sampleText ? [sampleText] : [];
4494
+ }
4350
4495
  function profileCheckAppliesToViewport(check, viewport) {
4351
4496
  if (!Array.isArray(check.viewports) || !check.viewports.length) return true;
4352
4497
  return Boolean(viewport && viewport.name && check.viewports.includes(viewport.name));
@@ -4824,23 +4969,75 @@ async function executeSetupAction(action, ordinal, viewport) {
4824
4969
  const requestedSteps = setupNumber(action.steps, 8);
4825
4970
  const steps = Math.min(100, Math.max(1, Math.floor(requestedSteps || 8)));
4826
4971
  const durationMs = setupNumber(action.duration_ms ?? action.durationMs, 0);
4827
- await page.mouse.move(start.x, start.y);
4828
- await page.mouse.down();
4829
- try {
4830
- if (durationMs && steps > 1) {
4831
- for (let step = 1; step <= steps; step += 1) {
4832
- const progress = step / steps;
4833
- await page.mouse.move(
4834
- start.x + (end.x - start.x) * progress,
4835
- start.y + (end.y - start.y) * progress,
4836
- );
4837
- await page.waitForTimeout(durationMs / steps);
4972
+ const pointerType = String(action.pointer_type || action.pointerType || "mouse").trim().toLowerCase();
4973
+ if (pointerType === "touch" || pointerType === "pen") {
4974
+ const localStart = {
4975
+ x: coordinate(fromX, box.width),
4976
+ y: coordinate(fromY, box.height),
4977
+ };
4978
+ const localEnd = {
4979
+ x: coordinate(toX, box.width),
4980
+ y: coordinate(toY, box.height),
4981
+ };
4982
+ await target.evaluate(async (element, payload) => {
4983
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
4984
+ const rect = element.getBoundingClientRect();
4985
+ const pointerId = payload.pointerType === "touch" ? 11 : 12;
4986
+ const point = (progress) => ({
4987
+ clientX: rect.left + payload.start.x + (payload.end.x - payload.start.x) * progress,
4988
+ clientY: rect.top + payload.start.y + (payload.end.y - payload.start.y) * progress,
4989
+ });
4990
+ const dispatch = (type, progress) => {
4991
+ const coords = point(progress);
4992
+ element.dispatchEvent(new PointerEvent(type, {
4993
+ bubbles: true,
4994
+ cancelable: true,
4995
+ composed: true,
4996
+ pointerId,
4997
+ pointerType: payload.pointerType,
4998
+ isPrimary: true,
4999
+ buttons: type === "pointerup" ? 0 : 1,
5000
+ button: type === "pointerup" ? 0 : 0,
5001
+ clientX: coords.clientX,
5002
+ clientY: coords.clientY,
5003
+ }));
5004
+ };
5005
+ dispatch("pointerover", 0);
5006
+ dispatch("pointerenter", 0);
5007
+ dispatch("pointerdown", 0);
5008
+ for (let step = 1; step <= payload.steps; step += 1) {
5009
+ dispatch("pointermove", step / payload.steps);
5010
+ if (payload.durationMs && payload.steps > 1) await wait(payload.durationMs / payload.steps);
4838
5011
  }
4839
- } else {
4840
- await page.mouse.move(end.x, end.y, { steps });
5012
+ dispatch("pointerup", 1);
5013
+ dispatch("pointerout", 1);
5014
+ dispatch("pointerleave", 1);
5015
+ }, {
5016
+ pointerType,
5017
+ start: localStart,
5018
+ end: localEnd,
5019
+ steps,
5020
+ durationMs,
5021
+ });
5022
+ } else {
5023
+ await page.mouse.move(start.x, start.y);
5024
+ await page.mouse.down();
5025
+ try {
5026
+ if (durationMs && steps > 1) {
5027
+ for (let step = 1; step <= steps; step += 1) {
5028
+ const progress = step / steps;
5029
+ await page.mouse.move(
5030
+ start.x + (end.x - start.x) * progress,
5031
+ start.y + (end.y - start.y) * progress,
5032
+ );
5033
+ await page.waitForTimeout(durationMs / steps);
5034
+ }
5035
+ } else {
5036
+ await page.mouse.move(end.x, end.y, { steps });
5037
+ }
5038
+ } finally {
5039
+ await page.mouse.up().catch(() => {});
4841
5040
  }
4842
- } finally {
4843
- await page.mouse.up().catch(() => {});
4844
5041
  }
4845
5042
  return {
4846
5043
  ...base,
@@ -4853,6 +5050,7 @@ async function executeSetupAction(action, ordinal, viewport) {
4853
5050
  from_y: fromY,
4854
5051
  to_x: toX,
4855
5052
  to_y: toY,
5053
+ pointer_type: pointerType,
4856
5054
  steps,
4857
5055
  duration_ms: durationMs || undefined,
4858
5056
  };
@@ -6298,6 +6496,7 @@ async function captureViewport(viewport) {
6298
6496
  const frames = {};
6299
6497
  const text_sequences = {};
6300
6498
  const text_matches = {};
6499
+ const text_match_samples = {};
6301
6500
  const http_statuses = {};
6302
6501
  const link_statuses = {};
6303
6502
  for (const check of profile.checks || []) {
@@ -6319,7 +6518,10 @@ async function captureViewport(viewport) {
6319
6518
  text_sequences[check.selector] = await selectorTextSequence(check.selector);
6320
6519
  }
6321
6520
  if ((check.type === "text_visible" || check.type === "text_absent") && (check.text || check.pattern)) {
6322
- text_matches[textKey(check)] = textMatches(dom.body_text || dom.body_text_sample || "", check);
6521
+ const key = textKey(check);
6522
+ const sample = dom.body_text || dom.body_text_sample || "";
6523
+ text_matches[key] = textMatches(sample, check);
6524
+ text_match_samples[key] = textMatchSamples(sample, check);
6323
6525
  }
6324
6526
  if ((check.type === "frame_text_visible" || check.type === "frame_url_equals" || check.type === "frame_url_matches" || check.type === "frame_no_horizontal_overflow") && check.selector) {
6325
6527
  selectors[check.selector] = selectors[check.selector] || await selectorStats(check.selector);
@@ -6396,6 +6598,7 @@ async function captureViewport(viewport) {
6396
6598
  frames,
6397
6599
  text_sequences,
6398
6600
  text_matches,
6601
+ text_match_samples,
6399
6602
  http_statuses,
6400
6603
  link_statuses,
6401
6604
  route_inventory: routeInventory,
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
115
115
  force?: boolean;
116
116
  click_count?: number;
117
117
  coordinate_mode?: "pixels" | "ratio";
118
+ pointer_type?: "mouse" | "touch" | "pen";
118
119
  from_x?: number;
119
120
  from_y?: number;
120
121
  to_x?: number;
@@ -307,6 +308,7 @@ interface RiddleProofProfileViewportEvidence {
307
308
  frames?: Record<string, Record<string, JsonValue>>;
308
309
  text_sequences?: Record<string, Record<string, JsonValue>>;
309
310
  text_matches?: Record<string, boolean>;
311
+ text_match_samples?: Record<string, string[]>;
310
312
  http_statuses?: Record<string, Record<string, JsonValue>>;
311
313
  link_statuses?: Record<string, Record<string, JsonValue>>;
312
314
  route_inventory?: Record<string, JsonValue>;
package/dist/profile.d.ts CHANGED
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
115
115
  force?: boolean;
116
116
  click_count?: number;
117
117
  coordinate_mode?: "pixels" | "ratio";
118
+ pointer_type?: "mouse" | "touch" | "pen";
118
119
  from_x?: number;
119
120
  from_y?: number;
120
121
  to_x?: number;
@@ -307,6 +308,7 @@ interface RiddleProofProfileViewportEvidence {
307
308
  frames?: Record<string, Record<string, JsonValue>>;
308
309
  text_sequences?: Record<string, Record<string, JsonValue>>;
309
310
  text_matches?: Record<string, boolean>;
311
+ text_match_samples?: Record<string, string[]>;
310
312
  http_statuses?: Record<string, Record<string, JsonValue>>;
311
313
  link_statuses?: Record<string, Record<string, JsonValue>>;
312
314
  route_inventory?: Record<string, JsonValue>;
package/dist/profile.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  resolveRiddleProofProfileTimeoutSec,
24
24
  slugifyRiddleProofProfileName,
25
25
  summarizeRiddleProofProfileResult
26
- } from "./chunk-TO3FVF5S.js";
26
+ } from "./chunk-ZJNM3YAB.js";
27
27
  export {
28
28
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
29
29
  RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
292
292
  blocking?: boolean;
293
293
  details?: Record<string, unknown>;
294
294
  ok: boolean;
295
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
295
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
296
296
  state_path: string;
297
297
  stage: any;
298
298
  summary: string;
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
382
382
  continueWithStage?: WorkflowStage | null;
383
383
  blocking?: boolean;
384
384
  details?: Record<string, unknown>;
385
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
385
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
386
386
  state_path: string;
387
387
  stage: any;
388
388
  checkpoint: string;
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
659
659
  error?: undefined;
660
660
  } | {
661
661
  ok: boolean;
662
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
662
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
663
663
  state_path: string;
664
664
  stage: any;
665
665
  summary: string;
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
292
292
  blocking?: boolean;
293
293
  details?: Record<string, unknown>;
294
294
  ok: boolean;
295
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
295
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
296
296
  state_path: string;
297
297
  stage: any;
298
298
  summary: string;
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
382
382
  continueWithStage?: WorkflowStage | null;
383
383
  blocking?: boolean;
384
384
  details?: Record<string, unknown>;
385
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
385
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
386
386
  state_path: string;
387
387
  stage: any;
388
388
  checkpoint: string;
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
659
659
  error?: undefined;
660
660
  } | {
661
661
  ok: boolean;
662
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
662
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
663
663
  state_path: string;
664
664
  stage: any;
665
665
  summary: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.7.128",
3
+ "version": "0.7.130",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",