unbrowse 3.5.1 → 3.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.
package/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ var __promiseAll = (args) => Promise.all(args);
31
31
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
32
32
 
33
33
  // ../../src/build-info.generated.ts
34
- var BUILD_RELEASE_VERSION = "3.5.1", BUILD_GIT_SHA = "e7c750e1b8d0", BUILD_CODE_HASH = "527243268ab4", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjEiLCJnaXRfc2hhIjoiZTdjNzUwZTFiOGQwIiwiY29kZV9oYXNoIjoiNTI3MjQzMjY4YWI0IiwidHJhY2VfdmVyc2lvbiI6IjUyNzI0MzI2OGFiNEBlN2M3NTBlMWI4ZDAiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE2OjM2OjUyLjgyOFoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "OKjQmllM1We29ojGhYIEAOhJJG5e_UuMa3d2CwuwWj8", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
34
+ var BUILD_RELEASE_VERSION = "3.5.2", BUILD_GIT_SHA = "e127b1b897ab", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjIiLCJnaXRfc2hhIjoiZTEyN2IxYjg5N2FiIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBlMTI3YjFiODk3YWIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE3OjQ2OjAyLjE1NVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "ikYTrNqqCeeJZL-NVi1xUe95K8AHkk2hzdOXvhEepgQ", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
35
35
 
36
36
  // ../../src/version.ts
37
37
  import { createHash } from "crypto";
@@ -1264,6 +1264,16 @@ var init_routing_telemetry = __esm(() => {
1264
1264
  import { nanoid as nanoid9 } from "nanoid";
1265
1265
  import { existsSync as existsSync10, writeFileSync as writeFileSync3, readFileSync as readFileSync6, mkdirSync as mkdirSync5, readdirSync as readdirSync3 } from "node:fs";
1266
1266
  import { dirname as dirname3, join as join9 } from "node:path";
1267
+ function _writeRouteCacheToDisk() {
1268
+ try {
1269
+ const dir = dirname3(ROUTE_CACHE_FILE);
1270
+ if (!existsSync10(dir))
1271
+ mkdirSync5(dir, { recursive: true });
1272
+ const entries = Object.fromEntries(skillRouteCache);
1273
+ writeFileSync3(ROUTE_CACHE_FILE, JSON.stringify(entries), "utf-8");
1274
+ } catch {}
1275
+ _routeCacheDirty = false;
1276
+ }
1267
1277
  var LIVE_CAPTURE_TIMEOUT_MS, capturedDomainCache, captureInFlight, captureDomainLocks, skillRouteCache, ROUTE_CACHE_FILE, SKILL_SNAPSHOT_DIR2, domainSkillCache, DOMAIN_CACHE_FILE, _routeCacheDirty = false, routeCacheFlushTimer, routeResultCache, ROUTE_CACHE_TTL, MARKETPLACE_HYDRATE_LIMIT, MARKETPLACE_GET_SKILL_TIMEOUT_MS, MARKETPLACE_DOMAIN_SEARCH_K, MARKETPLACE_GLOBAL_SEARCH_K, SEARCH_INTENT_STOPWORDS;
1268
1278
  var init_orchestrator = __esm(async () => {
1269
1279
  init_client();
@@ -1312,14 +1322,7 @@ var init_orchestrator = __esm(async () => {
1312
1322
  routeCacheFlushTimer = setInterval(() => {
1313
1323
  if (!_routeCacheDirty)
1314
1324
  return;
1315
- _routeCacheDirty = false;
1316
- try {
1317
- const dir = dirname3(ROUTE_CACHE_FILE);
1318
- if (!existsSync10(dir))
1319
- mkdirSync5(dir, { recursive: true });
1320
- const entries = Object.fromEntries(skillRouteCache);
1321
- writeFileSync3(ROUTE_CACHE_FILE, JSON.stringify(entries), "utf-8");
1322
- } catch {}
1325
+ _writeRouteCacheToDisk();
1323
1326
  }, 5000);
1324
1327
  routeCacheFlushTimer.unref?.();
1325
1328
  try {
package/dist/mcp.js CHANGED
@@ -225,11 +225,11 @@ import { dirname, join, parse } from "path";
225
225
  import { fileURLToPath as fileURLToPath2 } from "url";
226
226
 
227
227
  // ../../src/build-info.generated.ts
228
- var BUILD_RELEASE_VERSION = "3.5.1";
229
- var BUILD_GIT_SHA = "e7c750e1b8d0";
230
- var BUILD_CODE_HASH = "527243268ab4";
231
- var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjEiLCJnaXRfc2hhIjoiZTdjNzUwZTFiOGQwIiwiY29kZV9oYXNoIjoiNTI3MjQzMjY4YWI0IiwidHJhY2VfdmVyc2lvbiI6IjUyNzI0MzI2OGFiNEBlN2M3NTBlMWI4ZDAiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE2OjM2OjUyLjgyOFoifQ";
232
- var BUILD_RELEASE_MANIFEST_SIGNATURE = "OKjQmllM1We29ojGhYIEAOhJJG5e_UuMa3d2CwuwWj8";
228
+ var BUILD_RELEASE_VERSION = "3.5.2";
229
+ var BUILD_GIT_SHA = "e127b1b897ab";
230
+ var BUILD_CODE_HASH = "5d9ebf619c61";
231
+ var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjIiLCJnaXRfc2hhIjoiZTEyN2IxYjg5N2FiIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBlMTI3YjFiODk3YWIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE3OjQ2OjAyLjE1NVoifQ";
232
+ var BUILD_RELEASE_MANIFEST_SIGNATURE = "ikYTrNqqCeeJZL-NVi1xUe95K8AHkk2hzdOXvhEepgQ";
233
233
  var BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
234
234
 
235
235
  // ../../src/version.ts
package/dist/server.js CHANGED
@@ -5770,23 +5770,28 @@ function mergePassiveCaptureData(intercepted, harEntries, extensionEntries, resp
5770
5770
  const respHeaders = {};
5771
5771
  for (const h of entry.responseHeaders ?? [])
5772
5772
  respHeaders[h.name] = h.value;
5773
+ const dedupKey = graphqlDedup(entry.url, entry.requestBody);
5773
5774
  let merged = false;
5774
5775
  for (const [key, existing] of seen) {
5775
- if (existing.url === entry.url) {
5776
+ if (existing.url === entry.url || key === dedupKey) {
5776
5777
  for (const [k, v] of Object.entries(reqHeaders)) {
5777
5778
  if (!existing.request_headers[k])
5778
5779
  existing.request_headers[k] = v;
5779
5780
  }
5781
+ if (!existing.request_body && entry.requestBody) {
5782
+ existing.request_body = entry.requestBody;
5783
+ }
5780
5784
  merged = true;
5781
5785
  break;
5782
5786
  }
5783
5787
  }
5784
5788
  if (merged)
5785
5789
  continue;
5786
- seen.set(entry.url, {
5790
+ seen.set(dedupKey, {
5787
5791
  url: entry.url,
5788
5792
  method: entry.method,
5789
5793
  request_headers: reqHeaders,
5794
+ request_body: entry.requestBody,
5790
5795
  response_status: entry.statusCode ?? 0,
5791
5796
  response_headers: respHeaders,
5792
5797
  response_body: responseBodies.get(entry.url),
@@ -7091,7 +7096,7 @@ var init_capture = __esm(async () => {
7091
7096
  });
7092
7097
 
7093
7098
  // ../../src/build-info.generated.ts
7094
- var BUILD_RELEASE_VERSION = "3.5.1", BUILD_GIT_SHA = "e7c750e1b8d0", BUILD_CODE_HASH = "527243268ab4", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjEiLCJnaXRfc2hhIjoiZTdjNzUwZTFiOGQwIiwiY29kZV9oYXNoIjoiNTI3MjQzMjY4YWI0IiwidHJhY2VfdmVyc2lvbiI6IjUyNzI0MzI2OGFiNEBlN2M3NTBlMWI4ZDAiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE2OjM2OjUyLjgyOFoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "OKjQmllM1We29ojGhYIEAOhJJG5e_UuMa3d2CwuwWj8", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
7099
+ var BUILD_RELEASE_VERSION = "3.5.2", BUILD_GIT_SHA = "e127b1b897ab", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMy41LjIiLCJnaXRfc2hhIjoiZTEyN2IxYjg5N2FiIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBlMTI3YjFiODk3YWIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTA5VDE3OjQ2OjAyLjE1NVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "ikYTrNqqCeeJZL-NVi1xUe95K8AHkk2hzdOXvhEepgQ", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
7095
7100
 
7096
7101
  // ../../src/version.ts
7097
7102
  import { createHash } from "crypto";
@@ -19009,9 +19014,22 @@ function persistDomainCache() {
19009
19014
  writeFileSync8(DOMAIN_CACHE_FILE, JSON.stringify(Object.fromEntries(domainSkillCache)), "utf-8");
19010
19015
  } catch {}
19011
19016
  }
19017
+ function _writeRouteCacheToDisk() {
19018
+ try {
19019
+ const dir = dirname2(ROUTE_CACHE_FILE);
19020
+ if (!existsSync13(dir))
19021
+ mkdirSync9(dir, { recursive: true });
19022
+ const entries = Object.fromEntries(skillRouteCache);
19023
+ writeFileSync8(ROUTE_CACHE_FILE, JSON.stringify(entries), "utf-8");
19024
+ } catch {}
19025
+ _routeCacheDirty = false;
19026
+ }
19012
19027
  function persistRouteCache() {
19013
19028
  _routeCacheDirty = true;
19014
19029
  }
19030
+ function flushRouteCacheSync() {
19031
+ _writeRouteCacheToDisk();
19032
+ }
19015
19033
  function invalidateRouteCacheForDomain(domain) {
19016
19034
  let deleted = 0;
19017
19035
  for (const [k] of skillRouteCache) {
@@ -22030,8 +22048,10 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
22030
22048
  contextUrl: context?.url
22031
22049
  });
22032
22050
  timing.execute_ms += Date.now() - te1;
22033
- if (execOut.trace.success)
22051
+ if (execOut.trace.success) {
22034
22052
  promoteLearnedSkill(clientScope, cacheKey, learned_skill, execOut.trace.endpoint_id, context?.url);
22053
+ flushRouteCacheSync();
22054
+ }
22035
22055
  if (execOut.trace.success && isAcceptableIntentResult(execOut.result, queryIntent)) {
22036
22056
  queuePassivePublishIfExecuted(learned_skill, {
22037
22057
  result: execOut.result,
@@ -22067,6 +22087,8 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
22067
22087
  auth_recommended: true,
22068
22088
  auth_hint: captureResult.auth_hint
22069
22089
  } : undefined);
22090
+ promoteLearnedSkill(clientScope, cacheKey, learned_skill, deferred.orchestratorResult.trace.endpoint_id || undefined, context?.url);
22091
+ flushRouteCacheSync();
22070
22092
  queuePassivePublishIfExecuted(learned_skill, deferred.orchestratorResult, parityBaseline);
22071
22093
  upsertDagEdgesFromOperationGraph(learned_skill);
22072
22094
  return deferred.orchestratorResult;
@@ -22353,14 +22375,7 @@ var init_orchestrator = __esm(async () => {
22353
22375
  routeCacheFlushTimer = setInterval(() => {
22354
22376
  if (!_routeCacheDirty)
22355
22377
  return;
22356
- _routeCacheDirty = false;
22357
- try {
22358
- const dir = dirname2(ROUTE_CACHE_FILE);
22359
- if (!existsSync13(dir))
22360
- mkdirSync9(dir, { recursive: true });
22361
- const entries = Object.fromEntries(skillRouteCache);
22362
- writeFileSync8(ROUTE_CACHE_FILE, JSON.stringify(entries), "utf-8");
22363
- } catch {}
22378
+ _writeRouteCacheToDisk();
22364
22379
  }, 5000);
22365
22380
  routeCacheFlushTimer.unref?.();
22366
22381
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbrowse",
3
- "version": "3.5.1",
3
+ "version": "3.5.2",
4
4
  "description": "Reverse-engineer any website into reusable API skills. Zero-dep single binary with embedded browser engine.",
5
5
  "type": "module",
6
6
  "bin": {