@riddledc/riddle-proof 0.5.54 → 0.5.56

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/index.cjs CHANGED
@@ -2778,6 +2778,9 @@ __export(index_exports, {
2778
2778
  DEFAULT_DIAGNOSTIC_STRING_LIMIT: () => DEFAULT_DIAGNOSTIC_STRING_LIMIT,
2779
2779
  DEFAULT_RIDDLE_API_BASE_URL: () => DEFAULT_RIDDLE_API_BASE_URL,
2780
2780
  DEFAULT_RIDDLE_API_KEY_FILE: () => DEFAULT_RIDDLE_API_KEY_FILE,
2781
+ RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION: () => RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
2782
+ RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION: () => RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION,
2783
+ RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION: () => RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
2781
2784
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION: () => RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
2782
2785
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION: () => RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
2783
2786
  RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION: () => RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
@@ -2793,6 +2796,8 @@ __export(index_exports, {
2793
2796
  appendStageHeartbeat: () => appendStageHeartbeat,
2794
2797
  applyPrLifecycleState: () => applyPrLifecycleState,
2795
2798
  applyTerminalMetadata: () => applyTerminalMetadata,
2799
+ assessBasicGameplayEvidence: () => assessBasicGameplayEvidence,
2800
+ assessBasicGameplayRoute: () => assessBasicGameplayRoute,
2796
2801
  assessPlayabilityEvidence: () => assessPlayabilityEvidence,
2797
2802
  authorPacketPayloadFromCheckpointResponse: () => authorPacketPayloadFromCheckpointResponse,
2798
2803
  buildAuthorCheckpointPacket: () => buildAuthorCheckpointPacket,
@@ -2804,6 +2809,7 @@ __export(index_exports, {
2804
2809
  checkpointSummaryFromState: () => checkpointSummaryFromState,
2805
2810
  compactRecord: () => compactRecord,
2806
2811
  compareVisualProofSessionFingerprint: () => compareVisualProofSessionFingerprint,
2812
+ createBasicGameplayCatchSummary: () => createBasicGameplayCatchSummary,
2807
2813
  createCaptureDiagnostic: () => createCaptureDiagnostic,
2808
2814
  createCheckpointResponseTemplate: () => createCheckpointResponseTemplate,
2809
2815
  createCodexExecAgentAdapter: () => createCodexExecAgentAdapter,
@@ -2817,6 +2823,7 @@ __export(index_exports, {
2817
2823
  createRunState: () => createRunState,
2818
2824
  createRunStatusSnapshot: () => createRunStatusSnapshot,
2819
2825
  deployRiddleStaticPreview: () => deployRiddleStaticPreview,
2826
+ extractBasicGameplayEvidence: () => extractBasicGameplayEvidence,
2820
2827
  extractPlayabilityEvidence: () => extractPlayabilityEvidence,
2821
2828
  isDuplicateCheckpointResponse: () => isDuplicateCheckpointResponse,
2822
2829
  isRiddleProofPlayabilityMode: () => isRiddleProofPlayabilityMode,
@@ -2843,6 +2850,7 @@ __export(index_exports, {
2843
2850
  runRiddleProof: () => runRiddleProof,
2844
2851
  runRiddleProofEngineHarness: () => runRiddleProofEngineHarness,
2845
2852
  runRiddleScript: () => runRiddleScript,
2853
+ runRiddleServerPreview: () => runRiddleServerPreview,
2846
2854
  setRunStatus: () => setRunStatus,
2847
2855
  statePathsForRunState: () => statePathsForRunState,
2848
2856
  summarizeCaptureArtifacts: () => summarizeCaptureArtifacts,
@@ -7611,6 +7619,273 @@ function parseJson(value) {
7611
7619
  }
7612
7620
  }
7613
7621
 
7622
+ // src/basic-gameplay.ts
7623
+ var RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION = "riddle-proof.basic-gameplay.v1";
7624
+ var RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION = "riddle-proof.basic-gameplay.assessment.v1";
7625
+ var RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION = "riddle-proof.basic-gameplay.catch.v1";
7626
+ var BASIC_GAMEPLAY_CONTAINER_KEYS = [
7627
+ "basic_gameplay",
7628
+ "basicGameplay",
7629
+ "basic_gameplay_evidence",
7630
+ "basicGameplayEvidence",
7631
+ "gameplay_proof",
7632
+ "gameplayProof"
7633
+ ];
7634
+ function assessBasicGameplayEvidence(evidence, options = {}) {
7635
+ const run = extractBasicGameplayEvidence(evidence);
7636
+ if (!run) {
7637
+ return {
7638
+ version: RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
7639
+ evidence_present: false,
7640
+ passed: false,
7641
+ checked_routes: 0,
7642
+ passing_routes: 0,
7643
+ failing_routes: [],
7644
+ failure_counts: {},
7645
+ warning_counts: {},
7646
+ route_results: []
7647
+ };
7648
+ }
7649
+ const routeResults = (run.results || []).map((route) => assessBasicGameplayRoute(route, options));
7650
+ const failingRoutes = routeResults.filter((result) => !result.ok).map((result) => ({
7651
+ name: result.name,
7652
+ path: result.path,
7653
+ failures: result.failures,
7654
+ warnings: result.warnings
7655
+ }));
7656
+ return {
7657
+ version: RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
7658
+ evidence_present: true,
7659
+ passed: failingRoutes.length === 0,
7660
+ checked_routes: routeResults.length,
7661
+ passing_routes: routeResults.filter((result) => result.ok).length,
7662
+ failing_routes: failingRoutes,
7663
+ failure_counts: countCodes(routeResults.flatMap((result) => result.failures)),
7664
+ warning_counts: countCodes(routeResults.flatMap((result) => result.warnings)),
7665
+ route_results: routeResults
7666
+ };
7667
+ }
7668
+ function assessBasicGameplayRoute(route, options = {}) {
7669
+ const maxMobileOverflowPx = options.maxMobileOverflowPx ?? 4;
7670
+ const minBodyTextLength = options.minBodyTextLength ?? 20;
7671
+ const minVisibleLargeNodes = options.minVisibleLargeNodes ?? 3;
7672
+ const minSurfaceLargeNodes = options.minSurfaceLargeNodes ?? 8;
7673
+ const warnOnMissingResetPath = options.warnOnMissingResetPath ?? true;
7674
+ const warnOnConsoleError = options.warnOnConsoleError ?? true;
7675
+ const failOnConsoleError = options.failOnConsoleError ?? false;
7676
+ const failures = [];
7677
+ const warnings = [];
7678
+ const initial = route.initial || {};
7679
+ const timed = route.timed || {};
7680
+ const afterAction = route.after_action || route.afterAction || {};
7681
+ const mobile = route.mobile || {};
7682
+ const timedChange = changed(initial, timed);
7683
+ const actionChange = changed(timed, afterAction);
7684
+ const surfaceVisible = numberValue2(initial.visible_canvas_count) > 0 || numberValue2(initial.enabled_clickable_count) > 0 || numberValue2(initial.visible_large_node_count) >= minSurfaceLargeNodes;
7685
+ const actionResults = listValue2(route.action_results || route.actionResults);
7686
+ const actionAttempted = actionResults.some((result) => result.ok === true && result.action !== "wait");
7687
+ const actionFailed = actionResults.some((result) => result.ok === false && result.action !== "wait");
7688
+ const stateChangeObserved = actionChange.changed || timedChange.changed;
7689
+ const resetPathPresent = numberValue2(initial.reset_control_count) > 0 || numberValue2(timed.reset_control_count) > 0 || numberValue2(afterAction.reset_control_count) > 0;
7690
+ const responseStatus = firstNumber(route.http_status, route.response_status, route.status);
7691
+ const pageErrorCount = numberValue2(route.page_error_count);
7692
+ const consoleErrorCount = numberValue2(route.console_error_count);
7693
+ const mobileOverflowPx = numberValue2(mobile.overflow_px);
7694
+ if (responseStatus !== null && responseStatus >= 400) failures.push("route_http_error");
7695
+ if (pageErrorCount > 0) failures.push("fatal_page_error");
7696
+ if (numberValue2(initial.body_text_length) < minBodyTextLength && numberValue2(initial.visible_large_node_count) < minVisibleLargeNodes) {
7697
+ failures.push("route_blank_or_thin");
7698
+ }
7699
+ if (!surfaceVisible) failures.push("no_game_surface");
7700
+ if (mobileOverflowPx > maxMobileOverflowPx) failures.push("mobile_horizontal_overflow");
7701
+ if (!actionAttempted && !timedChange.changed) failures.push("primary_control_missing");
7702
+ if (actionAttempted && !stateChangeObserved) failures.push("primary_control_inert");
7703
+ if (failOnConsoleError && consoleErrorCount > 0) failures.push("fatal_page_error");
7704
+ if (numberValue2(initial.visible_canvas_count) > 0 && actionAttempted && !timedChange.canvas_changed && !actionChange.canvas_changed && !actionChange.screenshot_changed) {
7705
+ warnings.push("canvas_inert");
7706
+ }
7707
+ if (actionFailed) warnings.push("some_actions_failed");
7708
+ if (warnOnMissingResetPath && !resetPathPresent && route.requires_reset !== false && actionAttempted && stateChangeObserved) {
7709
+ warnings.push("missing_reset_path");
7710
+ }
7711
+ if (warnOnConsoleError && consoleErrorCount > 0) warnings.push("critical_console_error");
7712
+ return {
7713
+ name: route.name,
7714
+ path: route.path,
7715
+ ok: failures.length === 0,
7716
+ failures,
7717
+ warnings,
7718
+ signals: {
7719
+ route_loaded: !failures.includes("route_http_error") && !failures.includes("route_blank_or_thin"),
7720
+ surface_visible: surfaceVisible,
7721
+ action_attempted: actionAttempted,
7722
+ timed_progression_observed: timedChange.changed,
7723
+ first_interaction_observed: actionChange.changed,
7724
+ state_change_observed: stateChangeObserved,
7725
+ mobile_overflow_absent: mobileOverflowPx <= maxMobileOverflowPx,
7726
+ reset_path_present: resetPathPresent,
7727
+ fatal_errors_absent: pageErrorCount === 0
7728
+ },
7729
+ diffs: {
7730
+ timed: timedChange,
7731
+ after_action: actionChange
7732
+ }
7733
+ };
7734
+ }
7735
+ function createBasicGameplayCatchSummary(input, options = {}) {
7736
+ const before = summarizeAssessment(assessBasicGameplayEvidence(input.before, options));
7737
+ const after = input.after === void 0 ? void 0 : summarizeAssessment(assessBasicGameplayEvidence(input.after, options));
7738
+ const fixed = Boolean(after && before.notable_codes.length > 0 && after.passed && after.notable_codes.length === 0);
7739
+ const title = input.title || [
7740
+ input.site || "Basic gameplay",
7741
+ input.route ? `${input.route} proof catch` : "proof catch"
7742
+ ].join(" ");
7743
+ const beforeCodes = before.notable_codes.length ? before.notable_codes.join(", ") : "no failing or warning codes";
7744
+ const afterCodes = after ? after.notable_codes.length ? after.notable_codes.join(", ") : "no failing or warning codes" : "not verified";
7745
+ const summaryLines = [
7746
+ `Before: ${before.checked_routes} checked, ${before.passing_routes} passing, codes: ${beforeCodes}.`,
7747
+ after ? `After: ${after.checked_routes} checked, ${after.passing_routes} passing, codes: ${afterCodes}.` : "After: not provided."
7748
+ ];
7749
+ if (input.fix?.summary) summaryLines.push(`Fix: ${input.fix.summary}`);
7750
+ if (input.artifacts?.length) summaryLines.push(`Artifacts: ${input.artifacts.length} attached.`);
7751
+ return {
7752
+ version: RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION,
7753
+ title,
7754
+ site: input.site,
7755
+ route: input.route,
7756
+ detected_at: input.detected_at || (/* @__PURE__ */ new Date()).toISOString(),
7757
+ before,
7758
+ after,
7759
+ fixed,
7760
+ fix: input.fix,
7761
+ artifacts: input.artifacts || [],
7762
+ summary_lines: summaryLines,
7763
+ marketing_summary: fixed ? `${title}: Riddle Proof caught ${beforeCodes}; after the fix, ${afterCodes}.` : `${title}: Riddle Proof caught ${beforeCodes}; after evidence is ${after ? "not yet clean" : "not yet attached"}.`
7764
+ };
7765
+ }
7766
+ function extractBasicGameplayEvidence(...sources) {
7767
+ const seen = /* @__PURE__ */ new Set();
7768
+ for (const source of sources) {
7769
+ const found = findBasicGameplayEvidence(source, seen);
7770
+ if (found) return found;
7771
+ }
7772
+ return null;
7773
+ }
7774
+ function summarizeAssessment(assessment) {
7775
+ return {
7776
+ evidence_present: assessment.evidence_present,
7777
+ passed: assessment.passed,
7778
+ checked_routes: assessment.checked_routes,
7779
+ passing_routes: assessment.passing_routes,
7780
+ failing_routes: assessment.failing_routes,
7781
+ failure_counts: assessment.failure_counts,
7782
+ warning_counts: assessment.warning_counts,
7783
+ notable_codes: [
7784
+ ...Object.keys(assessment.failure_counts),
7785
+ ...Object.keys(assessment.warning_counts)
7786
+ ].sort()
7787
+ };
7788
+ }
7789
+ function findBasicGameplayEvidence(value, seen, depth = 0) {
7790
+ if (depth > 6 || value === null || value === void 0) return null;
7791
+ if (typeof value === "string") {
7792
+ const parsed = parseJson2(value);
7793
+ return parsed === null ? null : findBasicGameplayEvidence(parsed, seen, depth + 1);
7794
+ }
7795
+ if (Array.isArray(value)) {
7796
+ if (seen.has(value)) return null;
7797
+ seen.add(value);
7798
+ if (value.some((item) => hasRouteShape(recordValue3(item)))) {
7799
+ return { results: value.filter((item) => hasRouteShape(recordValue3(item))) };
7800
+ }
7801
+ for (const item of value) {
7802
+ const found = findBasicGameplayEvidence(item, seen, depth + 1);
7803
+ if (found) return found;
7804
+ }
7805
+ return null;
7806
+ }
7807
+ const record = recordValue3(value);
7808
+ if (!record || seen.has(record)) return null;
7809
+ seen.add(record);
7810
+ if (record.version === RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION || Array.isArray(record.results)) {
7811
+ return {
7812
+ ...record,
7813
+ results: listValue2(record.results).filter((item) => Boolean(recordValue3(item)))
7814
+ };
7815
+ }
7816
+ if (hasRouteShape(record)) {
7817
+ return { results: [record] };
7818
+ }
7819
+ for (const key of BASIC_GAMEPLAY_CONTAINER_KEYS) {
7820
+ if (Object.prototype.hasOwnProperty.call(record, key)) {
7821
+ const nested = findBasicGameplayEvidence(record[key], seen, depth + 1);
7822
+ if (nested) return nested;
7823
+ }
7824
+ }
7825
+ for (const item of Object.values(record)) {
7826
+ const found = findBasicGameplayEvidence(item, seen, depth + 1);
7827
+ if (found) return found;
7828
+ }
7829
+ return null;
7830
+ }
7831
+ function hasRouteShape(record) {
7832
+ return Boolean(record && (record.initial || record.after_action || record.afterAction || record.action_results || record.actionResults) && (record.path || record.name));
7833
+ }
7834
+ function changed(before, after) {
7835
+ const bodyTextChanged = Boolean(before.body_text_hash && after.body_text_hash && before.body_text_hash !== after.body_text_hash);
7836
+ const screenshotChanged = Boolean(before.screenshot_hash && after.screenshot_hash && before.screenshot_hash !== after.screenshot_hash);
7837
+ const beforeCanvasHashes = canvasHashes(before.canvases);
7838
+ const afterCanvasHashes = canvasHashes(after.canvases);
7839
+ const canvasChanged = Boolean(beforeCanvasHashes && afterCanvasHashes && beforeCanvasHashes !== afterCanvasHashes);
7840
+ return {
7841
+ body_text_changed: bodyTextChanged,
7842
+ screenshot_changed: screenshotChanged,
7843
+ canvas_changed: canvasChanged,
7844
+ changed: bodyTextChanged || screenshotChanged || canvasChanged
7845
+ };
7846
+ }
7847
+ function canvasHashes(canvases) {
7848
+ return (canvases || []).map((canvas) => canvas.hash).filter(Boolean).join("|");
7849
+ }
7850
+ function countCodes(codes) {
7851
+ const counts = {};
7852
+ for (const code of codes) counts[code] = (counts[code] || 0) + 1;
7853
+ return counts;
7854
+ }
7855
+ function firstNumber(...values) {
7856
+ for (const value of values) {
7857
+ const number = numericValue3(value);
7858
+ if (number !== null) return number;
7859
+ }
7860
+ return null;
7861
+ }
7862
+ function numberValue2(value) {
7863
+ return numericValue3(value) ?? 0;
7864
+ }
7865
+ function numericValue3(value) {
7866
+ if (typeof value === "number" && Number.isFinite(value)) return value;
7867
+ if (typeof value === "string" && value.trim()) {
7868
+ const parsed = Number(value);
7869
+ return Number.isFinite(parsed) ? parsed : null;
7870
+ }
7871
+ return null;
7872
+ }
7873
+ function recordValue3(value) {
7874
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
7875
+ }
7876
+ function listValue2(value) {
7877
+ return Array.isArray(value) ? value : [];
7878
+ }
7879
+ function parseJson2(value) {
7880
+ const trimmed = value.trim();
7881
+ if (!trimmed || !/^[{[]/.test(trimmed)) return null;
7882
+ try {
7883
+ return JSON.parse(trimmed);
7884
+ } catch {
7885
+ return null;
7886
+ }
7887
+ }
7888
+
7614
7889
  // src/riddle-client.ts
7615
7890
  var import_node_child_process4 = require("child_process");
7616
7891
  var import_node_fs5 = require("fs");
@@ -7700,12 +7975,94 @@ async function deployRiddleStaticPreview(config, directory, label) {
7700
7975
  raw: published
7701
7976
  };
7702
7977
  }
7978
+ function createTarball(directory, label, exclude = []) {
7979
+ const scratch = (0, import_node_fs5.mkdtempSync)(import_node_path5.default.join((0, import_node_os2.tmpdir)(), "riddle-upload-"));
7980
+ const tarball = import_node_path5.default.join(scratch, `${label}.tar.gz`);
7981
+ const excludeArgs = exclude.flatMap((item) => ["--exclude", item]);
7982
+ try {
7983
+ (0, import_node_child_process4.execFileSync)("tar", ["czf", tarball, ...excludeArgs, "-C", directory, "."], { stdio: "pipe" });
7984
+ return { scratch, tarball };
7985
+ } catch (error) {
7986
+ (0, import_node_fs5.rmSync)(scratch, { recursive: true, force: true });
7987
+ throw error;
7988
+ }
7989
+ }
7703
7990
  function parseRiddleViewport(value) {
7704
7991
  if (!value) return void 0;
7705
7992
  const match = /^(\d+)x(\d+)$/.exec(value.trim());
7706
7993
  if (!match) throw new Error("viewport must look like 1280x720");
7707
7994
  return { width: Number(match[1]), height: Number(match[2]) };
7708
7995
  }
7996
+ function scriptErrorFrom(job) {
7997
+ const nested = job?.proof_of_execution && typeof job.proof_of_execution === "object" && !Array.isArray(job.proof_of_execution) ? job.proof_of_execution : null;
7998
+ return typeof job?.script_error === "string" && job.script_error.trim() ? job.script_error : typeof nested?.script_error === "string" && nested.script_error.trim() ? nested.script_error : null;
7999
+ }
8000
+ async function runRiddleServerPreview(config, input) {
8001
+ if (!input.directory?.trim()) throw new Error("directory is required");
8002
+ if (!input.script?.trim()) throw new Error("script is required");
8003
+ const port = input.port || 3e3;
8004
+ const routePath = input.path || "/";
8005
+ const timeoutSec = input.timeoutSec || 180;
8006
+ const created = await riddleRequestJson(config, "/v1/server-preview", {
8007
+ method: "POST",
8008
+ body: JSON.stringify({
8009
+ image: input.image || "node:22-slim",
8010
+ command: input.command || "node scripts/riddleSpaPreviewServer.mjs build 3000",
8011
+ port,
8012
+ path: routePath,
8013
+ readiness_path: input.readinessPath || routePath,
8014
+ readiness_timeout: input.readinessTimeoutSec || 90,
8015
+ wait_until: input.waitUntil || "domcontentloaded",
8016
+ wait_for_selector: input.waitForSelector || "body",
8017
+ navigation_timeout: input.navigationTimeoutSec || 60,
8018
+ viewport: input.viewport,
8019
+ timeout: timeoutSec,
8020
+ script: input.script
8021
+ })
8022
+ });
8023
+ const jobId = String(created.job_id || "");
8024
+ const uploadUrl = String(created.upload_url || "");
8025
+ if (!jobId || !uploadUrl) {
8026
+ throw new Error(`Riddle server preview create response was missing job_id or upload_url.`);
8027
+ }
8028
+ const { scratch, tarball } = createTarball(input.directory, jobId, [
8029
+ ".git",
8030
+ "node_modules",
8031
+ "test-results",
8032
+ ...input.exclude || []
8033
+ ]);
8034
+ try {
8035
+ const upload = await fetchFor(config)(uploadUrl, {
8036
+ method: "PUT",
8037
+ headers: { "Content-Type": "application/gzip" },
8038
+ body: (0, import_node_fs5.readFileSync)(tarball)
8039
+ });
8040
+ if (!upload.ok) throw new RiddleApiError(uploadUrl, upload.status, await upload.text());
8041
+ } finally {
8042
+ (0, import_node_fs5.rmSync)(scratch, { recursive: true, force: true });
8043
+ }
8044
+ await riddleRequestJson(config, `/v1/server-preview/${jobId}/start`, {
8045
+ method: "POST"
8046
+ });
8047
+ let job = null;
8048
+ const attempts = input.pollAttempts || Math.ceil((timeoutSec + 90) / 2);
8049
+ const intervalMs = input.pollIntervalMs || 2e3;
8050
+ for (let index = 0; index < attempts; index += 1) {
8051
+ job = await riddleRequestJson(config, `/v1/server-preview/${jobId}`);
8052
+ if (isTerminalRiddleJobStatus(job.status)) break;
8053
+ if (index + 1 < attempts) await new Promise((resolve) => setTimeout(resolve, intervalMs));
8054
+ }
8055
+ const status = job?.status ? String(job.status) : null;
8056
+ const scriptError = scriptErrorFrom(job);
8057
+ return {
8058
+ ok: (status === "completed" || status === "complete") && !scriptError,
8059
+ job_id: jobId,
8060
+ status,
8061
+ terminal: isTerminalRiddleJobStatus(status),
8062
+ script_error: scriptError,
8063
+ job
8064
+ };
8065
+ }
7709
8066
  async function runRiddleScript(config, input) {
7710
8067
  if (!input.url?.trim()) throw new Error("url is required");
7711
8068
  if (!input.script?.trim()) throw new Error("script is required");
@@ -7757,6 +8114,7 @@ function createRiddleApiClient(config = {}) {
7757
8114
  requestJson: (pathname, init) => riddleRequestJson(config, pathname, init),
7758
8115
  deployStaticPreview: (directory, label) => deployRiddleStaticPreview(config, directory, label),
7759
8116
  runScript: (input) => runRiddleScript(config, input),
8117
+ runServerPreview: (input) => runRiddleServerPreview(config, input),
7760
8118
  pollJob: (jobId, options) => pollRiddleJob(config, jobId, options)
7761
8119
  };
7762
8120
  }
@@ -7767,6 +8125,9 @@ function createRiddleApiClient(config = {}) {
7767
8125
  DEFAULT_DIAGNOSTIC_STRING_LIMIT,
7768
8126
  DEFAULT_RIDDLE_API_BASE_URL,
7769
8127
  DEFAULT_RIDDLE_API_KEY_FILE,
8128
+ RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
8129
+ RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION,
8130
+ RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
7770
8131
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
7771
8132
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
7772
8133
  RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
@@ -7782,6 +8143,8 @@ function createRiddleApiClient(config = {}) {
7782
8143
  appendStageHeartbeat,
7783
8144
  applyPrLifecycleState,
7784
8145
  applyTerminalMetadata,
8146
+ assessBasicGameplayEvidence,
8147
+ assessBasicGameplayRoute,
7785
8148
  assessPlayabilityEvidence,
7786
8149
  authorPacketPayloadFromCheckpointResponse,
7787
8150
  buildAuthorCheckpointPacket,
@@ -7793,6 +8156,7 @@ function createRiddleApiClient(config = {}) {
7793
8156
  checkpointSummaryFromState,
7794
8157
  compactRecord,
7795
8158
  compareVisualProofSessionFingerprint,
8159
+ createBasicGameplayCatchSummary,
7796
8160
  createCaptureDiagnostic,
7797
8161
  createCheckpointResponseTemplate,
7798
8162
  createCodexExecAgentAdapter,
@@ -7806,6 +8170,7 @@ function createRiddleApiClient(config = {}) {
7806
8170
  createRunState,
7807
8171
  createRunStatusSnapshot,
7808
8172
  deployRiddleStaticPreview,
8173
+ extractBasicGameplayEvidence,
7809
8174
  extractPlayabilityEvidence,
7810
8175
  isDuplicateCheckpointResponse,
7811
8176
  isRiddleProofPlayabilityMode,
@@ -7832,6 +8197,7 @@ function createRiddleApiClient(config = {}) {
7832
8197
  runRiddleProof,
7833
8198
  runRiddleProofEngineHarness,
7834
8199
  runRiddleScript,
8200
+ runRiddleServerPreview,
7835
8201
  setRunStatus,
7836
8202
  statePathsForRunState,
7837
8203
  summarizeCaptureArtifacts,
package/dist/index.d.cts CHANGED
@@ -9,4 +9,5 @@ export { CodexExecAgentConfig, CodexJsonRequest, CodexJsonResult, CodexJsonRunne
9
9
  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';
10
10
  export { BuildVisualProofSessionInput, RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION, RIDDLE_PROOF_VISUAL_SESSION_VERSION, VisualProofSessionMismatch, buildVisualProofSession, compareVisualProofSessionFingerprint, parseVisualProofSession, visualSessionFingerprint, visualSessionFingerprintBasis } from './proof-session.cjs';
11
11
  export { AssessPlayabilityOptions, RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION, RIDDLE_PROOF_PLAYABILITY_VERSION, RiddleProofPlayabilityAssessment, RiddleProofPlayabilityEvidence, assessPlayabilityEvidence, extractPlayabilityEvidence, isRiddleProofPlayabilityMode } from './playability.cjs';
12
- export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RiddleApiError, RiddleClientConfig, RiddleFetch, RiddlePollJobResult, RiddlePreviewDeployResult, RiddleRunScriptInput, createRiddleApiClient, deployRiddleStaticPreview, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, riddleRequestJson, runRiddleScript } from './riddle-client.cjs';
12
+ export { AssessBasicGameplayOptions, BasicGameplayActionResult, BasicGameplayAssessmentSummary, BasicGameplayCanvasState, BasicGameplayChangeSummary, BasicGameplayFailureCode, BasicGameplayFixReference, BasicGameplayMobileEvidence, BasicGameplayProofArtifact, BasicGameplaySnapshot, BasicGameplayWarningCode, CreateBasicGameplayCatchSummaryInput, RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION, RiddleProofBasicGameplayAssessment, RiddleProofBasicGameplayCatchSummary, RiddleProofBasicGameplayEvidence, RiddleProofBasicGameplayRouteAssessment, RiddleProofBasicGameplayRouteEvidence, assessBasicGameplayEvidence, assessBasicGameplayRoute, createBasicGameplayCatchSummary, extractBasicGameplayEvidence } from './basic-gameplay.cjs';
13
+ export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RiddleApiError, RiddleClientConfig, RiddleFetch, RiddlePollJobResult, RiddlePreviewDeployResult, RiddleRunScriptInput, RiddleServerPreviewInput, RiddleServerPreviewResult, createRiddleApiClient, deployRiddleStaticPreview, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, riddleRequestJson, runRiddleScript, runRiddleServerPreview } from './riddle-client.cjs';
package/dist/index.d.ts CHANGED
@@ -9,4 +9,5 @@ export { CodexExecAgentConfig, CodexJsonRequest, CodexJsonResult, CodexJsonRunne
9
9
  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';
10
10
  export { BuildVisualProofSessionInput, RIDDLE_PROOF_VISUAL_SESSION_FINGERPRINT_VERSION, RIDDLE_PROOF_VISUAL_SESSION_VERSION, VisualProofSessionMismatch, buildVisualProofSession, compareVisualProofSessionFingerprint, parseVisualProofSession, visualSessionFingerprint, visualSessionFingerprintBasis } from './proof-session.js';
11
11
  export { AssessPlayabilityOptions, RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION, RIDDLE_PROOF_PLAYABILITY_VERSION, RiddleProofPlayabilityAssessment, RiddleProofPlayabilityEvidence, assessPlayabilityEvidence, extractPlayabilityEvidence, isRiddleProofPlayabilityMode } from './playability.js';
12
- export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RiddleApiError, RiddleClientConfig, RiddleFetch, RiddlePollJobResult, RiddlePreviewDeployResult, RiddleRunScriptInput, createRiddleApiClient, deployRiddleStaticPreview, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, riddleRequestJson, runRiddleScript } from './riddle-client.js';
12
+ export { AssessBasicGameplayOptions, BasicGameplayActionResult, BasicGameplayAssessmentSummary, BasicGameplayCanvasState, BasicGameplayChangeSummary, BasicGameplayFailureCode, BasicGameplayFixReference, BasicGameplayMobileEvidence, BasicGameplayProofArtifact, BasicGameplaySnapshot, BasicGameplayWarningCode, CreateBasicGameplayCatchSummaryInput, RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION, RiddleProofBasicGameplayAssessment, RiddleProofBasicGameplayCatchSummary, RiddleProofBasicGameplayEvidence, RiddleProofBasicGameplayRouteAssessment, RiddleProofBasicGameplayRouteEvidence, assessBasicGameplayEvidence, assessBasicGameplayRoute, createBasicGameplayCatchSummary, extractBasicGameplayEvidence } from './basic-gameplay.js';
13
+ export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RiddleApiError, RiddleClientConfig, RiddleFetch, RiddlePollJobResult, RiddlePreviewDeployResult, RiddleRunScriptInput, RiddleServerPreviewInput, RiddleServerPreviewResult, createRiddleApiClient, deployRiddleStaticPreview, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, riddleRequestJson, runRiddleScript, runRiddleServerPreview } from './riddle-client.js';
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ import {
2
+ runRiddleProof
3
+ } from "./chunk-RXFKKYWA.js";
1
4
  import "./chunk-6F4PWJZI.js";
2
5
  import {
3
6
  RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION,
@@ -16,8 +19,14 @@ import {
16
19
  visualSessionFingerprintBasis
17
20
  } from "./chunk-ODORKNSO.js";
18
21
  import {
19
- runRiddleProof
20
- } from "./chunk-RXFKKYWA.js";
22
+ RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
23
+ RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION,
24
+ RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
25
+ assessBasicGameplayEvidence,
26
+ assessBasicGameplayRoute,
27
+ createBasicGameplayCatchSummary,
28
+ extractBasicGameplayEvidence
29
+ } from "./chunk-53DJMNQ6.js";
21
30
  import {
22
31
  DEFAULT_RIDDLE_API_BASE_URL,
23
32
  DEFAULT_RIDDLE_API_KEY_FILE,
@@ -29,8 +38,9 @@ import {
29
38
  pollRiddleJob,
30
39
  resolveRiddleApiKey,
31
40
  riddleRequestJson,
32
- runRiddleScript
33
- } from "./chunk-UR6ADV4Y.js";
41
+ runRiddleScript,
42
+ runRiddleServerPreview
43
+ } from "./chunk-3CVGVQTQ.js";
34
44
  import {
35
45
  DEFAULT_DIAGNOSTIC_ARRAY_LIMIT,
36
46
  DEFAULT_DIAGNOSTIC_HISTORY_LIMIT,
@@ -45,14 +55,7 @@ import {
45
55
  createDisabledRiddleProofAgentAdapter,
46
56
  readRiddleProofRunStatus,
47
57
  runRiddleProofEngineHarness
48
- } from "./chunk-A2AWRZ5B.js";
49
- import "./chunk-RFJ5BQF6.js";
50
- import "./chunk-JFQXAJH2.js";
51
- import {
52
- createCodexExecAgentAdapter,
53
- createCodexExecJsonRunner,
54
- runCodexExecAgentDoctor
55
- } from "./chunk-3266V3MO.js";
58
+ } from "./chunk-2FBF2UDZ.js";
56
59
  import {
57
60
  RIDDLE_PROOF_RUN_STATE_VERSION,
58
61
  appendRunEvent,
@@ -65,6 +68,7 @@ import {
65
68
  normalizeRunParams,
66
69
  setRunStatus
67
70
  } from "./chunk-MO24D3PY.js";
71
+ import "./chunk-RFJ5BQF6.js";
68
72
  import {
69
73
  RIDDLE_PROOF_RUN_CARD_VERSION,
70
74
  createRiddleProofRunCard
@@ -85,6 +89,12 @@ import {
85
89
  proofContractFromAuthorCheckpointResponse,
86
90
  statePathsForRunState
87
91
  } from "./chunk-33XO42CY.js";
92
+ import "./chunk-JFQXAJH2.js";
93
+ import {
94
+ createCodexExecAgentAdapter,
95
+ createCodexExecJsonRunner,
96
+ runCodexExecAgentDoctor
97
+ } from "./chunk-3266V3MO.js";
88
98
  import {
89
99
  applyTerminalMetadata,
90
100
  compactRecord,
@@ -101,6 +111,9 @@ export {
101
111
  DEFAULT_DIAGNOSTIC_STRING_LIMIT,
102
112
  DEFAULT_RIDDLE_API_BASE_URL,
103
113
  DEFAULT_RIDDLE_API_KEY_FILE,
114
+ RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION,
115
+ RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION,
116
+ RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
104
117
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
105
118
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
106
119
  RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
@@ -116,6 +129,8 @@ export {
116
129
  appendStageHeartbeat,
117
130
  applyPrLifecycleState,
118
131
  applyTerminalMetadata,
132
+ assessBasicGameplayEvidence,
133
+ assessBasicGameplayRoute,
119
134
  assessPlayabilityEvidence,
120
135
  authorPacketPayloadFromCheckpointResponse,
121
136
  buildAuthorCheckpointPacket,
@@ -127,6 +142,7 @@ export {
127
142
  checkpointSummaryFromState,
128
143
  compactRecord,
129
144
  compareVisualProofSessionFingerprint,
145
+ createBasicGameplayCatchSummary,
130
146
  createCaptureDiagnostic,
131
147
  createCheckpointResponseTemplate,
132
148
  createCodexExecAgentAdapter,
@@ -140,6 +156,7 @@ export {
140
156
  createRunState,
141
157
  createRunStatusSnapshot,
142
158
  deployRiddleStaticPreview,
159
+ extractBasicGameplayEvidence,
143
160
  extractPlayabilityEvidence,
144
161
  isDuplicateCheckpointResponse,
145
162
  isRiddleProofPlayabilityMode,
@@ -166,6 +183,7 @@ export {
166
183
  runRiddleProof,
167
184
  runRiddleProofEngineHarness,
168
185
  runRiddleScript,
186
+ runRiddleServerPreview,
169
187
  setRunStatus,
170
188
  statePathsForRunState,
171
189
  summarizeCaptureArtifacts,
@@ -277,7 +277,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
277
277
  blocking?: boolean;
278
278
  details?: Record<string, unknown>;
279
279
  ok: boolean;
280
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
280
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
281
281
  state_path: string;
282
282
  stage: any;
283
283
  summary: string;
@@ -362,7 +362,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
362
362
  continueWithStage?: WorkflowStage | null;
363
363
  blocking?: boolean;
364
364
  details?: Record<string, unknown>;
365
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
365
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
366
366
  state_path: string;
367
367
  stage: any;
368
368
  checkpoint: string;
@@ -624,7 +624,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
624
624
  error?: undefined;
625
625
  } | {
626
626
  ok: boolean;
627
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
627
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
628
628
  state_path: string;
629
629
  stage: any;
630
630
  summary: string;
@@ -277,7 +277,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
277
277
  blocking?: boolean;
278
278
  details?: Record<string, unknown>;
279
279
  ok: boolean;
280
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
280
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
281
281
  state_path: string;
282
282
  stage: any;
283
283
  summary: string;
@@ -362,7 +362,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
362
362
  continueWithStage?: WorkflowStage | null;
363
363
  blocking?: boolean;
364
364
  details?: Record<string, unknown>;
365
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
365
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
366
366
  state_path: string;
367
367
  stage: any;
368
368
  checkpoint: string;
@@ -624,7 +624,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
624
624
  error?: undefined;
625
625
  } | {
626
626
  ok: boolean;
627
- action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
627
+ action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
628
628
  state_path: string;
629
629
  stage: any;
630
630
  summary: string;