opencrowd 0.5.1 → 0.5.3

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 +26 -12
  2. package/package.json +1 -1
@@ -16347,9 +16347,13 @@ function normalizeConfig(value) {
16347
16347
  const provider = legacyProvider && raw.blockrun === void 0 ? "blockrun" : normalizeConfigProvider(raw.provider) ?? DEFAULT_CONFIG.provider;
16348
16348
  const proxyDefaults = providerDefaults(raw["openrouter-x402-proxy"] ?? raw.x402, DEFAULT_CONFIG["openrouter-x402-proxy"]);
16349
16349
  const mcpServers = recordValue(raw.mcpServers);
16350
+ const servers = { ...DEFAULT_CONFIG.mcpServers, ...mcpServers };
16351
+ if (servers.crowdcode?.command === "npx" && JSON.stringify(servers.crowdcode.args) === JSON.stringify(["--yes", "crowdcode-mcp@0.5"])) {
16352
+ servers.crowdcode = { ...servers.crowdcode, args: [...DEFAULT_CONFIG.mcpServers.crowdcode.args] };
16353
+ }
16350
16354
  return {
16351
16355
  configVersion: 3,
16352
- mcpServers: mcpServers ? mcpServers : DEFAULT_CONFIG.mcpServers,
16356
+ mcpServers: servers,
16353
16357
  provider,
16354
16358
  blockrun: providerDefaults(raw.blockrun, DEFAULT_CONFIG.blockrun),
16355
16359
  "openrouter-x402-proxy": proxyDefaults,
@@ -16394,7 +16398,7 @@ var init_config = __esm({
16394
16398
  configVersion: 3,
16395
16399
  mcpServers: {
16396
16400
  agentcash: { command: "npx", args: ["--yes", "agentcash@0.17"] },
16397
- crowdcode: { command: "npx", args: ["--yes", "crowdcode-mcp@0.5"] }
16401
+ crowdcode: { command: "npx", args: ["--yes", "crowdcode-mcp@0.5.2"] }
16398
16402
  },
16399
16403
  // GAIA provider benchmark (2026-08-25): same-model BlockRun matched the
16400
16404
  // current route's accuracy and completed the sample 6.7x faster. The
@@ -33573,6 +33577,9 @@ async function recordReviewSubmitted(session, purchaseId, rating) {
33573
33577
  submitted_at: (/* @__PURE__ */ new Date()).toISOString()
33574
33578
  });
33575
33579
  }
33580
+ async function recordReviewFailed(session, purchaseId) {
33581
+ await appendPurchaseEvent(session, { type: "review_failed", purchase_id: purchaseId, attempted_at: (/* @__PURE__ */ new Date()).toISOString() });
33582
+ }
33576
33583
  async function appendPurchaseEvent(session, event) {
33577
33584
  const path3 = purchasesPath(session);
33578
33585
  await mkdir8(dirname7(path3), { recursive: true });
@@ -33605,6 +33612,10 @@ async function listPurchases(session) {
33605
33612
  record: event.record,
33606
33613
  reviewStatus: event.record.review_required ? "pending" : "not_required"
33607
33614
  });
33615
+ } else if (event.type === "review_failed") {
33616
+ const state = states.get(event.purchase_id);
33617
+ if (state)
33618
+ state.reviewAttempts = (state.reviewAttempts ?? 0) + 1;
33608
33619
  } else if (event.type === "review_submitted") {
33609
33620
  const state = states.get(event.purchase_id);
33610
33621
  if (state) {
@@ -33616,7 +33627,7 @@ async function listPurchases(session) {
33616
33627
  return [...states.values()];
33617
33628
  }
33618
33629
  async function pendingRequiredReviews(session) {
33619
- return (await listPurchases(session)).filter((state) => state.reviewStatus === "pending");
33630
+ 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
33631
  }
33621
33632
  function redactPurchase(state) {
33622
33633
  const { record: record3 } = state;
@@ -33630,12 +33641,15 @@ function redactPurchase(state) {
33630
33641
  charged_cost_cents: record3.charged_cost_cents,
33631
33642
  artifact_path: record3.artifact_path,
33632
33643
  review_status: state.reviewStatus,
33644
+ review_deferred: state.reviewStatus === "pending" && (state.reviewAttempts ?? 0) >= MAX_REVIEW_ATTEMPTS,
33633
33645
  created_at: record3.created_at
33634
33646
  };
33635
33647
  }
33648
+ var MAX_REVIEW_ATTEMPTS;
33636
33649
  var init_purchases = __esm({
33637
33650
  "../../packages/economy/dist/purchases.js"() {
33638
33651
  "use strict";
33652
+ MAX_REVIEW_ATTEMPTS = 2;
33639
33653
  }
33640
33654
  });
33641
33655
 
@@ -33913,6 +33927,7 @@ var init_gateway = __esm({
33913
33927
  const record3 = {
33914
33928
  purchase_id: purchaseId,
33915
33929
  session_id: session.sessionId,
33930
+ query_id: session.query?.id,
33916
33931
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
33917
33932
  endpoint,
33918
33933
  method,
@@ -34079,7 +34094,9 @@ var init_gateway = __esm({
34079
34094
  taskContext: stringArg(args.task_context)
34080
34095
  });
34081
34096
  if (!result.ok) {
34082
- return { ok: false, error: `CrowdCode review failed (${result.error}); the review stays pending \u2014 retry review_paid_service` };
34097
+ await recordReviewFailed(this.options.session, purchaseId);
34098
+ const deferred = (state.reviewAttempts ?? 0) + 1 >= MAX_REVIEW_ATTEMPTS;
34099
+ 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
34100
  }
34084
34101
  await recordReviewSubmitted(this.options.session, purchaseId, rating);
34085
34102
  return { ok: true, data: { purchase_id: purchaseId, review: "submitted", rating } };
@@ -34432,6 +34449,8 @@ ${text.slice(0, 2400)}`),
34432
34449
  return sharedPromise;
34433
34450
  }
34434
34451
  function resolvePinnedCommand(config4, binaryName) {
34452
+ if (binaryName === "crowdcode-mcp")
34453
+ return config4;
34435
34454
  if (config4.command !== "npx") {
34436
34455
  return config4;
34437
34456
  }
@@ -79804,25 +79823,20 @@ var init_llm_runtime = __esm({
79804
79823
 
79805
79824
  // ../../packages/agent-runtime/dist/economy-tools.js
79806
79825
  function economyTools(economy, options = {}) {
79807
- let failedReviews = 0;
79808
79826
  return {
79809
79827
  definitions: economy.definitions().filter((tool) => !options.hidden?.has(tool.name)),
79810
79828
  execute: async (name, args, operationId) => {
79811
79829
  if (options.resuming && name === "call_paid_service")
79812
79830
  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;
79831
+ return economy.execute(name, args, operationId);
79817
79832
  },
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"
79833
+ completionGate: async () => !await economy.hasPendingRequiredReviews() ? void 0 : "a paid purchase still needs its required review; submit it with review_paid_service"
79819
79834
  };
79820
79835
  }
79821
- var MAX_REVIEW_ATTEMPTS;
79822
79836
  var init_economy_tools = __esm({
79823
79837
  "../../packages/agent-runtime/dist/economy-tools.js"() {
79824
79838
  "use strict";
79825
- MAX_REVIEW_ATTEMPTS = 2;
79839
+ init_dist4();
79826
79840
  }
79827
79841
  });
79828
79842
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencrowd",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
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",