@riddledc/riddle-proof 0.7.150 → 0.7.151
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/cli.cjs +65 -3
- package/dist/cli.js +66 -3
- package/dist/profile.d.cts +2 -0
- package/dist/profile.d.ts +2 -0
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -15064,6 +15064,7 @@ function profileRiddleJobMarkdown(result) {
|
|
|
15064
15064
|
const attempts = cliFiniteNumber(riddle.attempts);
|
|
15065
15065
|
const submittedAt = cliString(riddle.submitted_at);
|
|
15066
15066
|
const completedAt = cliString(riddle.completed_at);
|
|
15067
|
+
const artifactRecovery = riddle.artifact_recovery === true;
|
|
15067
15068
|
const parts = [
|
|
15068
15069
|
mode ? `mode ${markdownInlineCode(mode)}` : "",
|
|
15069
15070
|
jobCount === void 0 ? "" : `jobs ${jobCount}`,
|
|
@@ -15080,6 +15081,9 @@ function profileRiddleJobMarkdown(result) {
|
|
|
15080
15081
|
if (submittedAt || completedAt) {
|
|
15081
15082
|
lines.push(`- timing:${submittedAt ? ` submitted ${markdownInlineCode(submittedAt)}` : ""}${completedAt ? ` completed ${markdownInlineCode(completedAt)}` : ""}`);
|
|
15082
15083
|
}
|
|
15084
|
+
if (artifactRecovery) {
|
|
15085
|
+
lines.push("- artifact recovery: used artifacts endpoint after non-terminal poll");
|
|
15086
|
+
}
|
|
15083
15087
|
const splitJobs = Array.isArray(riddle.split_jobs) ? riddle.split_jobs.map(cliRecord).filter((job) => Boolean(job)) : [];
|
|
15084
15088
|
for (const job of splitJobs.slice(0, 12)) {
|
|
15085
15089
|
const viewport = cliString(job.viewport) || "viewport";
|
|
@@ -15088,13 +15092,15 @@ function profileRiddleJobMarkdown(result) {
|
|
|
15088
15092
|
const splitTerminal = typeof job.terminal === "boolean" ? job.terminal : void 0;
|
|
15089
15093
|
const splitElapsedMs = cliFiniteNumber(job.elapsed_ms);
|
|
15090
15094
|
const splitPreSubmissionElapsedMs = cliFiniteNumber(job.pre_submission_elapsed_ms);
|
|
15095
|
+
const splitArtifactRecovery = job.artifact_recovery === true;
|
|
15091
15096
|
lines.push(
|
|
15092
15097
|
`- ${viewport}: ${[
|
|
15093
15098
|
splitJobId ? `job ${markdownInlineCode(splitJobId)}` : "",
|
|
15094
15099
|
splitStatus ? `status ${markdownInlineCode(splitStatus)}` : "",
|
|
15095
15100
|
splitTerminal === void 0 ? "" : `terminal ${splitTerminal ? "true" : "false"}`,
|
|
15096
15101
|
splitElapsedMs === void 0 ? "" : `elapsed ${formatPollDuration(splitElapsedMs)}`,
|
|
15097
|
-
splitPreSubmissionElapsedMs === void 0 || splitPreSubmissionElapsedMs < 1e3 ? "" : `pre-submit ${formatPollDuration(splitPreSubmissionElapsedMs)}
|
|
15102
|
+
splitPreSubmissionElapsedMs === void 0 || splitPreSubmissionElapsedMs < 1e3 ? "" : `pre-submit ${formatPollDuration(splitPreSubmissionElapsedMs)}`,
|
|
15103
|
+
splitArtifactRecovery ? "artifact recovery" : ""
|
|
15098
15104
|
].filter(Boolean).join(", ") || "job metadata unavailable"}`
|
|
15099
15105
|
);
|
|
15100
15106
|
}
|
|
@@ -15734,7 +15740,8 @@ function withRiddleMetadata(result, input) {
|
|
|
15734
15740
|
elapsed_ms: poll?.elapsed_ms ?? result.riddle?.elapsed_ms,
|
|
15735
15741
|
attempt: poll?.attempt ?? result.riddle?.attempt,
|
|
15736
15742
|
attempts: poll?.attempts ?? result.riddle?.attempts,
|
|
15737
|
-
timed_out: poll?.timed_out ?? result.riddle?.timed_out
|
|
15743
|
+
timed_out: poll?.timed_out ?? result.riddle?.timed_out,
|
|
15744
|
+
artifact_recovery: input.artifactRecovery ?? result.riddle?.artifact_recovery
|
|
15738
15745
|
},
|
|
15739
15746
|
artifacts: {
|
|
15740
15747
|
...result.artifacts,
|
|
@@ -15742,6 +15749,52 @@ function withRiddleMetadata(result, input) {
|
|
|
15742
15749
|
}
|
|
15743
15750
|
};
|
|
15744
15751
|
}
|
|
15752
|
+
function riddleArtifactsPayloadStatus(payload) {
|
|
15753
|
+
const record = cliRecord(payload);
|
|
15754
|
+
return cliString(record?.status) ?? cliString(cliRecord(record?.job)?.status);
|
|
15755
|
+
}
|
|
15756
|
+
async function recoverProfileResultFromRiddleArtifacts(profile, input) {
|
|
15757
|
+
if (input.poll.poll?.timed_out !== true) return void 0;
|
|
15758
|
+
let artifactPayload;
|
|
15759
|
+
try {
|
|
15760
|
+
artifactPayload = await input.client.requestJson(`/v1/jobs/${input.jobId}/artifacts`);
|
|
15761
|
+
} catch {
|
|
15762
|
+
return void 0;
|
|
15763
|
+
}
|
|
15764
|
+
const artifacts = collectRiddleProfileArtifactRefs(artifactPayload);
|
|
15765
|
+
if (!artifacts.length) return void 0;
|
|
15766
|
+
const artifactStatus = riddleArtifactsPayloadStatus(artifactPayload);
|
|
15767
|
+
const terminal = artifactStatus ? isTerminalRiddleJobStatus(artifactStatus) : true;
|
|
15768
|
+
const recoveredPoll = input.poll.poll ? {
|
|
15769
|
+
...input.poll.poll,
|
|
15770
|
+
status: artifactStatus ?? input.poll.poll.status,
|
|
15771
|
+
terminal
|
|
15772
|
+
} : void 0;
|
|
15773
|
+
const artifactResult = await profileResultFromRiddleArtifacts(profile, artifacts, [artifactPayload, input.poll.job]);
|
|
15774
|
+
if (artifactResult) {
|
|
15775
|
+
return withRiddleMetadata(artifactResult, {
|
|
15776
|
+
job_id: input.jobId,
|
|
15777
|
+
status: artifactStatus ?? input.poll.status,
|
|
15778
|
+
terminal,
|
|
15779
|
+
poll: recoveredPoll,
|
|
15780
|
+
artifacts,
|
|
15781
|
+
artifactRecovery: true
|
|
15782
|
+
});
|
|
15783
|
+
}
|
|
15784
|
+
if (!terminal) return void 0;
|
|
15785
|
+
return createRiddleProofProfileInsufficientResult({
|
|
15786
|
+
profile,
|
|
15787
|
+
runner: input.runner,
|
|
15788
|
+
error: `Riddle job ${input.jobId} timed out in status ${input.poll.status || "unknown"}, but artifacts were recovered without a proof result.`,
|
|
15789
|
+
riddle: {
|
|
15790
|
+
...riddleMetadataFromPoll(input.jobId, input.poll),
|
|
15791
|
+
status: artifactStatus ?? input.poll.status,
|
|
15792
|
+
terminal,
|
|
15793
|
+
artifact_recovery: true
|
|
15794
|
+
},
|
|
15795
|
+
artifacts
|
|
15796
|
+
});
|
|
15797
|
+
}
|
|
15745
15798
|
function riddleMetadataFromPoll(jobId, poll) {
|
|
15746
15799
|
return {
|
|
15747
15800
|
job_id: jobId,
|
|
@@ -15804,13 +15857,15 @@ function splitViewportRiddleMetadata(childRuns) {
|
|
|
15804
15857
|
elapsed_ms: result.riddle?.elapsed_ms,
|
|
15805
15858
|
attempt: result.riddle?.attempt,
|
|
15806
15859
|
attempts: result.riddle?.attempts,
|
|
15807
|
-
timed_out: result.riddle?.timed_out
|
|
15860
|
+
timed_out: result.riddle?.timed_out,
|
|
15861
|
+
artifact_recovery: result.riddle?.artifact_recovery
|
|
15808
15862
|
}));
|
|
15809
15863
|
return {
|
|
15810
15864
|
mode: "split-viewports",
|
|
15811
15865
|
job_count: childRuns.length,
|
|
15812
15866
|
status: "split-viewports",
|
|
15813
15867
|
terminal: childRuns.every(({ result }) => result.riddle?.terminal !== false),
|
|
15868
|
+
artifact_recovery: childRuns.some(({ result }) => result.riddle?.artifact_recovery === true),
|
|
15814
15869
|
queue_elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.queue_elapsed_ms)),
|
|
15815
15870
|
pre_submission_elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.pre_submission_elapsed_ms)),
|
|
15816
15871
|
elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.elapsed_ms)),
|
|
@@ -15933,6 +15988,13 @@ async function runSingleRiddleProfileForCli(profile, options, input) {
|
|
|
15933
15988
|
});
|
|
15934
15989
|
const artifacts = collectRiddleProfileArtifactRefs(poll.artifacts);
|
|
15935
15990
|
if (!poll.ok || !poll.terminal) {
|
|
15991
|
+
const recoveredResult = await recoverProfileResultFromRiddleArtifacts(profile, {
|
|
15992
|
+
client,
|
|
15993
|
+
runner,
|
|
15994
|
+
jobId,
|
|
15995
|
+
poll
|
|
15996
|
+
});
|
|
15997
|
+
if (recoveredResult) return recoveredResult;
|
|
15936
15998
|
return createRiddleProofProfileEnvironmentBlockedResult({
|
|
15937
15999
|
profile,
|
|
15938
16000
|
runner,
|
package/dist/cli.js
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
} from "./chunk-QJJ3ISMK.js";
|
|
17
17
|
import {
|
|
18
18
|
createRiddleApiClient,
|
|
19
|
+
isTerminalRiddleJobStatus,
|
|
19
20
|
parseRiddleViewport
|
|
20
21
|
} from "./chunk-M3ZTY6PQ.js";
|
|
21
22
|
import {
|
|
@@ -430,6 +431,7 @@ function profileRiddleJobMarkdown(result) {
|
|
|
430
431
|
const attempts = cliFiniteNumber(riddle.attempts);
|
|
431
432
|
const submittedAt = cliString(riddle.submitted_at);
|
|
432
433
|
const completedAt = cliString(riddle.completed_at);
|
|
434
|
+
const artifactRecovery = riddle.artifact_recovery === true;
|
|
433
435
|
const parts = [
|
|
434
436
|
mode ? `mode ${markdownInlineCode(mode)}` : "",
|
|
435
437
|
jobCount === void 0 ? "" : `jobs ${jobCount}`,
|
|
@@ -446,6 +448,9 @@ function profileRiddleJobMarkdown(result) {
|
|
|
446
448
|
if (submittedAt || completedAt) {
|
|
447
449
|
lines.push(`- timing:${submittedAt ? ` submitted ${markdownInlineCode(submittedAt)}` : ""}${completedAt ? ` completed ${markdownInlineCode(completedAt)}` : ""}`);
|
|
448
450
|
}
|
|
451
|
+
if (artifactRecovery) {
|
|
452
|
+
lines.push("- artifact recovery: used artifacts endpoint after non-terminal poll");
|
|
453
|
+
}
|
|
449
454
|
const splitJobs = Array.isArray(riddle.split_jobs) ? riddle.split_jobs.map(cliRecord).filter((job) => Boolean(job)) : [];
|
|
450
455
|
for (const job of splitJobs.slice(0, 12)) {
|
|
451
456
|
const viewport = cliString(job.viewport) || "viewport";
|
|
@@ -454,13 +459,15 @@ function profileRiddleJobMarkdown(result) {
|
|
|
454
459
|
const splitTerminal = typeof job.terminal === "boolean" ? job.terminal : void 0;
|
|
455
460
|
const splitElapsedMs = cliFiniteNumber(job.elapsed_ms);
|
|
456
461
|
const splitPreSubmissionElapsedMs = cliFiniteNumber(job.pre_submission_elapsed_ms);
|
|
462
|
+
const splitArtifactRecovery = job.artifact_recovery === true;
|
|
457
463
|
lines.push(
|
|
458
464
|
`- ${viewport}: ${[
|
|
459
465
|
splitJobId ? `job ${markdownInlineCode(splitJobId)}` : "",
|
|
460
466
|
splitStatus ? `status ${markdownInlineCode(splitStatus)}` : "",
|
|
461
467
|
splitTerminal === void 0 ? "" : `terminal ${splitTerminal ? "true" : "false"}`,
|
|
462
468
|
splitElapsedMs === void 0 ? "" : `elapsed ${formatPollDuration(splitElapsedMs)}`,
|
|
463
|
-
splitPreSubmissionElapsedMs === void 0 || splitPreSubmissionElapsedMs < 1e3 ? "" : `pre-submit ${formatPollDuration(splitPreSubmissionElapsedMs)}
|
|
469
|
+
splitPreSubmissionElapsedMs === void 0 || splitPreSubmissionElapsedMs < 1e3 ? "" : `pre-submit ${formatPollDuration(splitPreSubmissionElapsedMs)}`,
|
|
470
|
+
splitArtifactRecovery ? "artifact recovery" : ""
|
|
464
471
|
].filter(Boolean).join(", ") || "job metadata unavailable"}`
|
|
465
472
|
);
|
|
466
473
|
}
|
|
@@ -1100,7 +1107,8 @@ function withRiddleMetadata(result, input) {
|
|
|
1100
1107
|
elapsed_ms: poll?.elapsed_ms ?? result.riddle?.elapsed_ms,
|
|
1101
1108
|
attempt: poll?.attempt ?? result.riddle?.attempt,
|
|
1102
1109
|
attempts: poll?.attempts ?? result.riddle?.attempts,
|
|
1103
|
-
timed_out: poll?.timed_out ?? result.riddle?.timed_out
|
|
1110
|
+
timed_out: poll?.timed_out ?? result.riddle?.timed_out,
|
|
1111
|
+
artifact_recovery: input.artifactRecovery ?? result.riddle?.artifact_recovery
|
|
1104
1112
|
},
|
|
1105
1113
|
artifacts: {
|
|
1106
1114
|
...result.artifacts,
|
|
@@ -1108,6 +1116,52 @@ function withRiddleMetadata(result, input) {
|
|
|
1108
1116
|
}
|
|
1109
1117
|
};
|
|
1110
1118
|
}
|
|
1119
|
+
function riddleArtifactsPayloadStatus(payload) {
|
|
1120
|
+
const record = cliRecord(payload);
|
|
1121
|
+
return cliString(record?.status) ?? cliString(cliRecord(record?.job)?.status);
|
|
1122
|
+
}
|
|
1123
|
+
async function recoverProfileResultFromRiddleArtifacts(profile, input) {
|
|
1124
|
+
if (input.poll.poll?.timed_out !== true) return void 0;
|
|
1125
|
+
let artifactPayload;
|
|
1126
|
+
try {
|
|
1127
|
+
artifactPayload = await input.client.requestJson(`/v1/jobs/${input.jobId}/artifacts`);
|
|
1128
|
+
} catch {
|
|
1129
|
+
return void 0;
|
|
1130
|
+
}
|
|
1131
|
+
const artifacts = collectRiddleProfileArtifactRefs(artifactPayload);
|
|
1132
|
+
if (!artifacts.length) return void 0;
|
|
1133
|
+
const artifactStatus = riddleArtifactsPayloadStatus(artifactPayload);
|
|
1134
|
+
const terminal = artifactStatus ? isTerminalRiddleJobStatus(artifactStatus) : true;
|
|
1135
|
+
const recoveredPoll = input.poll.poll ? {
|
|
1136
|
+
...input.poll.poll,
|
|
1137
|
+
status: artifactStatus ?? input.poll.poll.status,
|
|
1138
|
+
terminal
|
|
1139
|
+
} : void 0;
|
|
1140
|
+
const artifactResult = await profileResultFromRiddleArtifacts(profile, artifacts, [artifactPayload, input.poll.job]);
|
|
1141
|
+
if (artifactResult) {
|
|
1142
|
+
return withRiddleMetadata(artifactResult, {
|
|
1143
|
+
job_id: input.jobId,
|
|
1144
|
+
status: artifactStatus ?? input.poll.status,
|
|
1145
|
+
terminal,
|
|
1146
|
+
poll: recoveredPoll,
|
|
1147
|
+
artifacts,
|
|
1148
|
+
artifactRecovery: true
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
if (!terminal) return void 0;
|
|
1152
|
+
return createRiddleProofProfileInsufficientResult({
|
|
1153
|
+
profile,
|
|
1154
|
+
runner: input.runner,
|
|
1155
|
+
error: `Riddle job ${input.jobId} timed out in status ${input.poll.status || "unknown"}, but artifacts were recovered without a proof result.`,
|
|
1156
|
+
riddle: {
|
|
1157
|
+
...riddleMetadataFromPoll(input.jobId, input.poll),
|
|
1158
|
+
status: artifactStatus ?? input.poll.status,
|
|
1159
|
+
terminal,
|
|
1160
|
+
artifact_recovery: true
|
|
1161
|
+
},
|
|
1162
|
+
artifacts
|
|
1163
|
+
});
|
|
1164
|
+
}
|
|
1111
1165
|
function riddleMetadataFromPoll(jobId, poll) {
|
|
1112
1166
|
return {
|
|
1113
1167
|
job_id: jobId,
|
|
@@ -1170,13 +1224,15 @@ function splitViewportRiddleMetadata(childRuns) {
|
|
|
1170
1224
|
elapsed_ms: result.riddle?.elapsed_ms,
|
|
1171
1225
|
attempt: result.riddle?.attempt,
|
|
1172
1226
|
attempts: result.riddle?.attempts,
|
|
1173
|
-
timed_out: result.riddle?.timed_out
|
|
1227
|
+
timed_out: result.riddle?.timed_out,
|
|
1228
|
+
artifact_recovery: result.riddle?.artifact_recovery
|
|
1174
1229
|
}));
|
|
1175
1230
|
return {
|
|
1176
1231
|
mode: "split-viewports",
|
|
1177
1232
|
job_count: childRuns.length,
|
|
1178
1233
|
status: "split-viewports",
|
|
1179
1234
|
terminal: childRuns.every(({ result }) => result.riddle?.terminal !== false),
|
|
1235
|
+
artifact_recovery: childRuns.some(({ result }) => result.riddle?.artifact_recovery === true),
|
|
1180
1236
|
queue_elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.queue_elapsed_ms)),
|
|
1181
1237
|
pre_submission_elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.pre_submission_elapsed_ms)),
|
|
1182
1238
|
elapsed_ms: sumDefinedNumbers(splitJobs.map((job) => job.elapsed_ms)),
|
|
@@ -1299,6 +1355,13 @@ async function runSingleRiddleProfileForCli(profile, options, input) {
|
|
|
1299
1355
|
});
|
|
1300
1356
|
const artifacts = collectRiddleProfileArtifactRefs(poll.artifacts);
|
|
1301
1357
|
if (!poll.ok || !poll.terminal) {
|
|
1358
|
+
const recoveredResult = await recoverProfileResultFromRiddleArtifacts(profile, {
|
|
1359
|
+
client,
|
|
1360
|
+
runner,
|
|
1361
|
+
jobId,
|
|
1362
|
+
poll
|
|
1363
|
+
});
|
|
1364
|
+
if (recoveredResult) return recoveredResult;
|
|
1302
1365
|
return createRiddleProofProfileEnvironmentBlockedResult({
|
|
1303
1366
|
profile,
|
|
1304
1367
|
runner,
|
package/dist/profile.d.cts
CHANGED
|
@@ -391,6 +391,7 @@ interface RiddleProofProfileResult {
|
|
|
391
391
|
attempt?: number;
|
|
392
392
|
attempts?: number;
|
|
393
393
|
timed_out?: boolean;
|
|
394
|
+
artifact_recovery?: boolean;
|
|
394
395
|
split_jobs?: Array<{
|
|
395
396
|
viewport: string;
|
|
396
397
|
job_id?: string;
|
|
@@ -402,6 +403,7 @@ interface RiddleProofProfileResult {
|
|
|
402
403
|
attempt?: number;
|
|
403
404
|
attempts?: number;
|
|
404
405
|
timed_out?: boolean;
|
|
406
|
+
artifact_recovery?: boolean;
|
|
405
407
|
}>;
|
|
406
408
|
};
|
|
407
409
|
environment_blocker?: Record<string, JsonValue>;
|
package/dist/profile.d.ts
CHANGED
|
@@ -391,6 +391,7 @@ interface RiddleProofProfileResult {
|
|
|
391
391
|
attempt?: number;
|
|
392
392
|
attempts?: number;
|
|
393
393
|
timed_out?: boolean;
|
|
394
|
+
artifact_recovery?: boolean;
|
|
394
395
|
split_jobs?: Array<{
|
|
395
396
|
viewport: string;
|
|
396
397
|
job_id?: string;
|
|
@@ -402,6 +403,7 @@ interface RiddleProofProfileResult {
|
|
|
402
403
|
attempt?: number;
|
|
403
404
|
attempts?: number;
|
|
404
405
|
timed_out?: boolean;
|
|
406
|
+
artifact_recovery?: boolean;
|
|
405
407
|
}>;
|
|
406
408
|
};
|
|
407
409
|
environment_blocker?: Record<string, JsonValue>;
|