@riddledc/openclaw-riddledc 0.9.3 → 0.9.4

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/CHECKSUMS.txt CHANGED
@@ -1,9 +1,9 @@
1
- eb37fd02bb17201162234ea8fdd351ab85fe9d96a99c0c8247ec83d3001c7e77 dist/chunk-LJCZ53PU.js
2
- 548b6419feb09a22f2134a12ce378687eb60cfb0c5eb8f2a47eda6c52c89c5ee dist/core.cjs
1
+ c320ef98658b4d0bbe03485cb28105e299b85d0fb240c3a1e45f337c7011464e dist/chunk-SNGACMAL.js
2
+ 64cc01e78e10d5cc8855cb849431b8c4b9c9da5c8cb1d2030cc1857f8db2e4f1 dist/core.cjs
3
3
  9e6f2ccdbc993bea4445dbc20e131b442c01b298c19f87fe81846a22d6c92c48 dist/core.d.cts
4
4
  9e6f2ccdbc993bea4445dbc20e131b442c01b298c19f87fe81846a22d6c92c48 dist/core.d.ts
5
- ba8c0a86594c1586b130a787a721ebb3fde4fce481ff924e195bed31a4e6f9b2 dist/core.js
6
- ae60b6124c90f7aa4028120b87856221a2531b262702c82d54da9161f6ed6368 dist/index.cjs
5
+ b42375f824ecc6089e065b28268c828b29ccef979c9d8ae53ffff4abe138c0b4 dist/core.js
6
+ 2ecc1e44daec4535712881dd0fbc3af4afe98d58bf1a2336a1a377cb94e41eb5 dist/index.cjs
7
7
  94ce04f0e2d84bf64dd68f0500dfdd2f951287a3deccec87f197261961927f6f dist/index.d.cts
8
8
  94ce04f0e2d84bf64dd68f0500dfdd2f951287a3deccec87f197261961927f6f dist/index.d.ts
9
- b92db4977e965d1a9f4d996df1347114046bbcf93ed9ac740e4de40d937bc5eb dist/index.js
9
+ 4b4cdbf998c5d79fb14c43d0137846696c15c48676914ab243d8d3a78cdb242e dist/index.js
@@ -132,6 +132,25 @@ async function fetchWithRetry(url, init, timeoutMs, label, opts = {}) {
132
132
  function isAlreadyStartedResponse(status, body) {
133
133
  return status === 409 && /already in status:\s*(queued|running|complete|completed)/i.test(body);
134
134
  }
135
+ function previewTimeoutResult(jobId, timeoutMs, lastStatusData, resultExtras = () => ({})) {
136
+ const lastStatus = lastStatusData?.status ?? "unknown";
137
+ const lastPhase = lastStatusData?.phase ?? lastStatus;
138
+ const result = {
139
+ ok: false,
140
+ job_id: jobId,
141
+ status: lastStatus,
142
+ phase: lastPhase,
143
+ phase_updated_at: lastStatusData?.phase_updated_at,
144
+ phase_details: lastStatusData?.phase_details,
145
+ outputs: lastStatusData?.outputs || [],
146
+ compute_seconds: lastStatusData?.compute_seconds,
147
+ egress_bytes: lastStatusData?.egress_bytes,
148
+ error: `Job did not complete within ${timeoutMs / 1e3}s; last status was ${lastStatus}, phase was ${lastPhase}`,
149
+ ...resultExtras(lastStatusData ?? {})
150
+ };
151
+ if (lastStatusData?.error) result.server_error = lastStatusData.error;
152
+ return result;
153
+ }
135
154
  async function writeArtifact(workspace, subdir, filename, content) {
136
155
  const dir = join(workspace, "riddle", subdir);
137
156
  await mkdir(dir, { recursive: true });
@@ -471,6 +490,7 @@ async function pollPreviewJob(config, pathPrefix, jobId, timeoutMs, resultExtras
471
490
  const endpoint = config.baseUrl.replace(/\/$/, "");
472
491
  const pollStart = Date.now();
473
492
  const pollIntervalMs = 3e3;
493
+ let lastStatusData = null;
474
494
  while (Date.now() - pollStart < timeoutMs) {
475
495
  let statusRes;
476
496
  try {
@@ -484,24 +504,29 @@ async function pollPreviewJob(config, pathPrefix, jobId, timeoutMs, resultExtras
484
504
  return { ok: false, job_id: jobId, error: `Poll failed: HTTP ${statusRes.status}` };
485
505
  }
486
506
  const statusData = await statusRes.json();
507
+ lastStatusData = statusData;
487
508
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
488
509
  const result = {
489
510
  ok: statusData.status === "complete" || statusData.status === "completed",
490
511
  job_id: jobId,
491
512
  status: statusData.status,
513
+ phase: statusData.phase ?? statusData.status,
514
+ phase_updated_at: statusData.phase_updated_at,
515
+ phase_details: statusData.phase_details,
492
516
  outputs: statusData.outputs || [],
493
517
  compute_seconds: statusData.compute_seconds,
494
518
  egress_bytes: statusData.egress_bytes,
495
519
  ...resultExtras(statusData)
496
520
  };
497
521
  if (statusData.error) result.error = statusData.error;
522
+ if (statusData.script_error) result.script_error = statusData.script_error;
498
523
  await saveImageOutputs(config.workspace, jobId, result.outputs, pathPrefix.slice(1));
499
524
  result.screenshots = result.outputs.filter((o) => /\.(png|jpg|jpeg)$/i.test(o.name));
500
525
  return result;
501
526
  }
502
527
  await sleep(pollIntervalMs);
503
528
  }
504
- return { ok: false, job_id: jobId, error: `Job did not complete within ${timeoutMs / 1e3}s` };
529
+ return previewTimeoutResult(jobId, timeoutMs, lastStatusData, resultExtras);
505
530
  }
506
531
  async function createStaticPreview(config, params) {
507
532
  let cfg;
package/dist/core.cjs CHANGED
@@ -171,6 +171,25 @@ async function fetchWithRetry(url, init, timeoutMs, label, opts = {}) {
171
171
  function isAlreadyStartedResponse(status, body) {
172
172
  return status === 409 && /already in status:\s*(queued|running|complete|completed)/i.test(body);
173
173
  }
174
+ function previewTimeoutResult(jobId, timeoutMs, lastStatusData, resultExtras = () => ({})) {
175
+ const lastStatus = lastStatusData?.status ?? "unknown";
176
+ const lastPhase = lastStatusData?.phase ?? lastStatus;
177
+ const result = {
178
+ ok: false,
179
+ job_id: jobId,
180
+ status: lastStatus,
181
+ phase: lastPhase,
182
+ phase_updated_at: lastStatusData?.phase_updated_at,
183
+ phase_details: lastStatusData?.phase_details,
184
+ outputs: lastStatusData?.outputs || [],
185
+ compute_seconds: lastStatusData?.compute_seconds,
186
+ egress_bytes: lastStatusData?.egress_bytes,
187
+ error: `Job did not complete within ${timeoutMs / 1e3}s; last status was ${lastStatus}, phase was ${lastPhase}`,
188
+ ...resultExtras(lastStatusData ?? {})
189
+ };
190
+ if (lastStatusData?.error) result.server_error = lastStatusData.error;
191
+ return result;
192
+ }
174
193
  async function writeArtifact(workspace, subdir, filename, content) {
175
194
  const dir = (0, import_node_path.join)(workspace, "riddle", subdir);
176
195
  await (0, import_promises.mkdir)(dir, { recursive: true });
@@ -510,6 +529,7 @@ async function pollPreviewJob(config, pathPrefix, jobId, timeoutMs, resultExtras
510
529
  const endpoint = config.baseUrl.replace(/\/$/, "");
511
530
  const pollStart = Date.now();
512
531
  const pollIntervalMs = 3e3;
532
+ let lastStatusData = null;
513
533
  while (Date.now() - pollStart < timeoutMs) {
514
534
  let statusRes;
515
535
  try {
@@ -523,24 +543,29 @@ async function pollPreviewJob(config, pathPrefix, jobId, timeoutMs, resultExtras
523
543
  return { ok: false, job_id: jobId, error: `Poll failed: HTTP ${statusRes.status}` };
524
544
  }
525
545
  const statusData = await statusRes.json();
546
+ lastStatusData = statusData;
526
547
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
527
548
  const result = {
528
549
  ok: statusData.status === "complete" || statusData.status === "completed",
529
550
  job_id: jobId,
530
551
  status: statusData.status,
552
+ phase: statusData.phase ?? statusData.status,
553
+ phase_updated_at: statusData.phase_updated_at,
554
+ phase_details: statusData.phase_details,
531
555
  outputs: statusData.outputs || [],
532
556
  compute_seconds: statusData.compute_seconds,
533
557
  egress_bytes: statusData.egress_bytes,
534
558
  ...resultExtras(statusData)
535
559
  };
536
560
  if (statusData.error) result.error = statusData.error;
561
+ if (statusData.script_error) result.script_error = statusData.script_error;
537
562
  await saveImageOutputs(config.workspace, jobId, result.outputs, pathPrefix.slice(1));
538
563
  result.screenshots = result.outputs.filter((o) => /\.(png|jpg|jpeg)$/i.test(o.name));
539
564
  return result;
540
565
  }
541
566
  await sleep(pollIntervalMs);
542
567
  }
543
- return { ok: false, job_id: jobId, error: `Job did not complete within ${timeoutMs / 1e3}s` };
568
+ return previewTimeoutResult(jobId, timeoutMs, lastStatusData, resultExtras);
544
569
  }
545
570
  async function createStaticPreview(config, params) {
546
571
  let cfg;
package/dist/core.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  riddleApiFetch,
16
16
  runWithDefaults,
17
17
  writeArtifactBinary
18
- } from "./chunk-LJCZ53PU.js";
18
+ } from "./chunk-SNGACMAL.js";
19
19
  export {
20
20
  applySafetySpec,
21
21
  assertAllowedBaseUrl,
package/dist/index.cjs CHANGED
@@ -364,6 +364,21 @@ async function fetchWithRetry2(url, init, timeoutMs, label, opts = {}) {
364
364
  function isAlreadyStartedResponse(status, body) {
365
365
  return status === 409 && /already in status:\s*(queued|running|complete|completed)/i.test(body);
366
366
  }
367
+ function previewTimeoutToolResult(jobId, timeoutMs, lastStatusData, extras = {}) {
368
+ const lastStatus = lastStatusData?.status ?? "unknown";
369
+ const result = {
370
+ ok: false,
371
+ job_id: jobId,
372
+ status: lastStatus,
373
+ outputs: lastStatusData?.outputs || [],
374
+ compute_seconds: lastStatusData?.compute_seconds,
375
+ egress_bytes: lastStatusData?.egress_bytes,
376
+ error: `Job did not complete within ${timeoutMs / 1e3}s; last status was ${lastStatus}`,
377
+ ...extras
378
+ };
379
+ if (lastStatusData?.error) result.server_error = lastStatusData.error;
380
+ return result;
381
+ }
367
382
  async function writeArtifact(workspace, subdir, filename, content) {
368
383
  const dir = (0, import_node_path2.join)(workspace, "riddle", subdir);
369
384
  await (0, import_promises2.mkdir)(dir, { recursive: true });
@@ -1260,6 +1275,7 @@ function register(api) {
1260
1275
  const timeoutMs = ((params.timeout || 120) + 60) * 1e3;
1261
1276
  const pollStart = Date.now();
1262
1277
  const POLL_INTERVAL = 3e3;
1278
+ let lastStatusData = null;
1263
1279
  while (Date.now() - pollStart < timeoutMs) {
1264
1280
  let statusRes;
1265
1281
  try {
@@ -1273,6 +1289,7 @@ function register(api) {
1273
1289
  return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Poll failed: HTTP ${statusRes.status}` }, null, 2) }] };
1274
1290
  }
1275
1291
  const statusData = await statusRes.json();
1292
+ lastStatusData = statusData;
1276
1293
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
1277
1294
  const result = {
1278
1295
  ok: statusData.status === "complete" || statusData.status === "completed",
@@ -1304,7 +1321,7 @@ function register(api) {
1304
1321
  }
1305
1322
  await new Promise((r) => setTimeout(r, POLL_INTERVAL));
1306
1323
  }
1307
- return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Job did not complete within ${timeoutMs / 1e3}s` }, null, 2) }] };
1324
+ return { content: [{ type: "text", text: JSON.stringify(previewTimeoutToolResult(created.job_id, timeoutMs, lastStatusData), null, 2) }] };
1308
1325
  }
1309
1326
  },
1310
1327
  { optional: true }
@@ -1460,6 +1477,7 @@ function register(api) {
1460
1477
  const timeoutMs = ((params.timeout || 180) + 120) * 1e3;
1461
1478
  const pollStart = Date.now();
1462
1479
  const POLL_INTERVAL = 3e3;
1480
+ let lastStatusData = null;
1463
1481
  while (Date.now() - pollStart < timeoutMs) {
1464
1482
  let statusRes;
1465
1483
  try {
@@ -1473,6 +1491,7 @@ function register(api) {
1473
1491
  return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Poll failed: HTTP ${statusRes.status}` }, null, 2) }] };
1474
1492
  }
1475
1493
  const statusData = await statusRes.json();
1494
+ lastStatusData = statusData;
1476
1495
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
1477
1496
  const result = {
1478
1497
  ok: statusData.status === "complete" || statusData.status === "completed",
@@ -1508,7 +1527,12 @@ function register(api) {
1508
1527
  }
1509
1528
  await new Promise((r) => setTimeout(r, POLL_INTERVAL));
1510
1529
  }
1511
- return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Job did not complete within ${timeoutMs / 1e3}s` }, null, 2) }] };
1530
+ return { content: [{ type: "text", text: JSON.stringify(previewTimeoutToolResult(created.job_id, timeoutMs, lastStatusData, {
1531
+ build_duration_ms: lastStatusData?.build_duration_ms,
1532
+ ...lastStatusData?.build_log ? { build_log: lastStatusData.build_log } : {},
1533
+ ...lastStatusData?.container_log ? { container_log: lastStatusData.container_log } : {},
1534
+ ...lastStatusData?.audit ? { audit: lastStatusData.audit } : {}
1535
+ }), null, 2) }] };
1512
1536
  }
1513
1537
  },
1514
1538
  { optional: true }
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  configFromOpenClawApi,
3
3
  createStaticPreview,
4
4
  deleteStaticPreview
5
- } from "./chunk-LJCZ53PU.js";
5
+ } from "./chunk-SNGACMAL.js";
6
6
 
7
7
  // src/index.ts
8
8
  import { Type } from "@sinclair/typebox";
@@ -132,6 +132,21 @@ async function fetchWithRetry(url, init, timeoutMs, label, opts = {}) {
132
132
  function isAlreadyStartedResponse(status, body) {
133
133
  return status === 409 && /already in status:\s*(queued|running|complete|completed)/i.test(body);
134
134
  }
135
+ function previewTimeoutToolResult(jobId, timeoutMs, lastStatusData, extras = {}) {
136
+ const lastStatus = lastStatusData?.status ?? "unknown";
137
+ const result = {
138
+ ok: false,
139
+ job_id: jobId,
140
+ status: lastStatus,
141
+ outputs: lastStatusData?.outputs || [],
142
+ compute_seconds: lastStatusData?.compute_seconds,
143
+ egress_bytes: lastStatusData?.egress_bytes,
144
+ error: `Job did not complete within ${timeoutMs / 1e3}s; last status was ${lastStatus}`,
145
+ ...extras
146
+ };
147
+ if (lastStatusData?.error) result.server_error = lastStatusData.error;
148
+ return result;
149
+ }
135
150
  async function writeArtifact(workspace, subdir, filename, content) {
136
151
  const dir = join(workspace, "riddle", subdir);
137
152
  await mkdir(dir, { recursive: true });
@@ -1028,6 +1043,7 @@ function register(api) {
1028
1043
  const timeoutMs = ((params.timeout || 120) + 60) * 1e3;
1029
1044
  const pollStart = Date.now();
1030
1045
  const POLL_INTERVAL = 3e3;
1046
+ let lastStatusData = null;
1031
1047
  while (Date.now() - pollStart < timeoutMs) {
1032
1048
  let statusRes;
1033
1049
  try {
@@ -1041,6 +1057,7 @@ function register(api) {
1041
1057
  return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Poll failed: HTTP ${statusRes.status}` }, null, 2) }] };
1042
1058
  }
1043
1059
  const statusData = await statusRes.json();
1060
+ lastStatusData = statusData;
1044
1061
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
1045
1062
  const result = {
1046
1063
  ok: statusData.status === "complete" || statusData.status === "completed",
@@ -1072,7 +1089,7 @@ function register(api) {
1072
1089
  }
1073
1090
  await new Promise((r) => setTimeout(r, POLL_INTERVAL));
1074
1091
  }
1075
- return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Job did not complete within ${timeoutMs / 1e3}s` }, null, 2) }] };
1092
+ return { content: [{ type: "text", text: JSON.stringify(previewTimeoutToolResult(created.job_id, timeoutMs, lastStatusData), null, 2) }] };
1076
1093
  }
1077
1094
  },
1078
1095
  { optional: true }
@@ -1228,6 +1245,7 @@ function register(api) {
1228
1245
  const timeoutMs = ((params.timeout || 180) + 120) * 1e3;
1229
1246
  const pollStart = Date.now();
1230
1247
  const POLL_INTERVAL = 3e3;
1248
+ let lastStatusData = null;
1231
1249
  while (Date.now() - pollStart < timeoutMs) {
1232
1250
  let statusRes;
1233
1251
  try {
@@ -1241,6 +1259,7 @@ function register(api) {
1241
1259
  return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Poll failed: HTTP ${statusRes.status}` }, null, 2) }] };
1242
1260
  }
1243
1261
  const statusData = await statusRes.json();
1262
+ lastStatusData = statusData;
1244
1263
  if (statusData.status === "complete" || statusData.status === "completed" || statusData.status === "failed") {
1245
1264
  const result = {
1246
1265
  ok: statusData.status === "complete" || statusData.status === "completed",
@@ -1276,7 +1295,12 @@ function register(api) {
1276
1295
  }
1277
1296
  await new Promise((r) => setTimeout(r, POLL_INTERVAL));
1278
1297
  }
1279
- return { content: [{ type: "text", text: JSON.stringify({ ok: false, job_id: created.job_id, error: `Job did not complete within ${timeoutMs / 1e3}s` }, null, 2) }] };
1298
+ return { content: [{ type: "text", text: JSON.stringify(previewTimeoutToolResult(created.job_id, timeoutMs, lastStatusData, {
1299
+ build_duration_ms: lastStatusData?.build_duration_ms,
1300
+ ...lastStatusData?.build_log ? { build_log: lastStatusData.build_log } : {},
1301
+ ...lastStatusData?.container_log ? { container_log: lastStatusData.container_log } : {},
1302
+ ...lastStatusData?.audit ? { audit: lastStatusData.audit } : {}
1303
+ }), null, 2) }] };
1280
1304
  }
1281
1305
  },
1282
1306
  { optional: true }
@@ -2,7 +2,7 @@
2
2
  "id": "openclaw-riddledc",
3
3
  "name": "Riddle",
4
4
  "description": "Riddle (riddledc.com) hosted browser API tools for OpenClaw agents.",
5
- "version": "0.9.3",
5
+ "version": "0.9.4",
6
6
  "notes": "0.8.0: Added riddle_build_preview for Dockerfile-based builds with image caching.",
7
7
  "type": "plugin",
8
8
  "bundledSkills": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/openclaw-riddledc",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
4
4
  "description": "OpenClaw integration package for RiddleDC (no secrets).",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",