opencrowd 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bundle/opencrowd.js +18 -10
  2. package/package.json +1 -1
@@ -33573,6 +33573,9 @@ async function recordReviewSubmitted(session, purchaseId, rating) {
33573
33573
  submitted_at: (/* @__PURE__ */ new Date()).toISOString()
33574
33574
  });
33575
33575
  }
33576
+ async function recordReviewFailed(session, purchaseId) {
33577
+ await appendPurchaseEvent(session, { type: "review_failed", purchase_id: purchaseId, attempted_at: (/* @__PURE__ */ new Date()).toISOString() });
33578
+ }
33576
33579
  async function appendPurchaseEvent(session, event) {
33577
33580
  const path3 = purchasesPath(session);
33578
33581
  await mkdir8(dirname7(path3), { recursive: true });
@@ -33605,6 +33608,10 @@ async function listPurchases(session) {
33605
33608
  record: event.record,
33606
33609
  reviewStatus: event.record.review_required ? "pending" : "not_required"
33607
33610
  });
33611
+ } else if (event.type === "review_failed") {
33612
+ const state = states.get(event.purchase_id);
33613
+ if (state)
33614
+ state.reviewAttempts = (state.reviewAttempts ?? 0) + 1;
33608
33615
  } else if (event.type === "review_submitted") {
33609
33616
  const state = states.get(event.purchase_id);
33610
33617
  if (state) {
@@ -33616,7 +33623,7 @@ async function listPurchases(session) {
33616
33623
  return [...states.values()];
33617
33624
  }
33618
33625
  async function pendingRequiredReviews(session) {
33619
- return (await listPurchases(session)).filter((state) => state.reviewStatus === "pending");
33626
+ return (await listPurchases(session)).filter((state) => state.reviewStatus === "pending" && (state.reviewAttempts ?? 0) < MAX_REVIEW_ATTEMPTS && (!session.query || state.record.query_id === session.query.id));
33620
33627
  }
33621
33628
  function redactPurchase(state) {
33622
33629
  const { record: record3 } = state;
@@ -33630,12 +33637,15 @@ function redactPurchase(state) {
33630
33637
  charged_cost_cents: record3.charged_cost_cents,
33631
33638
  artifact_path: record3.artifact_path,
33632
33639
  review_status: state.reviewStatus,
33640
+ review_deferred: state.reviewStatus === "pending" && (state.reviewAttempts ?? 0) >= MAX_REVIEW_ATTEMPTS,
33633
33641
  created_at: record3.created_at
33634
33642
  };
33635
33643
  }
33644
+ var MAX_REVIEW_ATTEMPTS;
33636
33645
  var init_purchases = __esm({
33637
33646
  "../../packages/economy/dist/purchases.js"() {
33638
33647
  "use strict";
33648
+ MAX_REVIEW_ATTEMPTS = 2;
33639
33649
  }
33640
33650
  });
33641
33651
 
@@ -33913,6 +33923,7 @@ var init_gateway = __esm({
33913
33923
  const record3 = {
33914
33924
  purchase_id: purchaseId,
33915
33925
  session_id: session.sessionId,
33926
+ query_id: session.query?.id,
33916
33927
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
33917
33928
  endpoint,
33918
33929
  method,
@@ -34079,7 +34090,9 @@ var init_gateway = __esm({
34079
34090
  taskContext: stringArg(args.task_context)
34080
34091
  });
34081
34092
  if (!result.ok) {
34082
- return { ok: false, error: `CrowdCode review failed (${result.error}); the review stays pending \u2014 retry review_paid_service` };
34093
+ await recordReviewFailed(this.options.session, purchaseId);
34094
+ const deferred = (state.reviewAttempts ?? 0) + 1 >= MAX_REVIEW_ATTEMPTS;
34095
+ return { ok: false, error: `CrowdCode review failed (${result.error}); the review stays pending${deferred ? " for manual retry, without blocking completion or later purchases" : " \u2014 retry review_paid_service"}` };
34083
34096
  }
34084
34097
  await recordReviewSubmitted(this.options.session, purchaseId, rating);
34085
34098
  return { ok: true, data: { purchase_id: purchaseId, review: "submitted", rating } };
@@ -79804,25 +79817,20 @@ var init_llm_runtime = __esm({
79804
79817
 
79805
79818
  // ../../packages/agent-runtime/dist/economy-tools.js
79806
79819
  function economyTools(economy, options = {}) {
79807
- let failedReviews = 0;
79808
79820
  return {
79809
79821
  definitions: economy.definitions().filter((tool) => !options.hidden?.has(tool.name)),
79810
79822
  execute: async (name, args, operationId) => {
79811
79823
  if (options.resuming && name === "call_paid_service")
79812
79824
  await economy.execute("inspect_paid_service", { url: args.url, method: args.method, sample_body: args.body });
79813
- const result = await economy.execute(name, args, operationId);
79814
- if (name === "review_paid_service" && !result.ok)
79815
- failedReviews++;
79816
- return result;
79825
+ return economy.execute(name, args, operationId);
79817
79826
  },
79818
- completionGate: async () => failedReviews >= MAX_REVIEW_ATTEMPTS || !await economy.hasPendingRequiredReviews() ? void 0 : "a paid purchase still needs its required review; submit it with review_paid_service"
79827
+ completionGate: async () => !await economy.hasPendingRequiredReviews() ? void 0 : "a paid purchase still needs its required review; submit it with review_paid_service"
79819
79828
  };
79820
79829
  }
79821
- var MAX_REVIEW_ATTEMPTS;
79822
79830
  var init_economy_tools = __esm({
79823
79831
  "../../packages/agent-runtime/dist/economy-tools.js"() {
79824
79832
  "use strict";
79825
- MAX_REVIEW_ATTEMPTS = 2;
79833
+ init_dist4();
79826
79834
  }
79827
79835
  });
79828
79836
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencrowd",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "A CLI agent with its own wallet — discovers x402 services, pays in USDC, and completes tasks under a local budget",
5
5
  "type": "module",
6
6
  "license": "MIT",