unbrowse 9.3.8 → 9.3.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbrowse",
3
- "version": "9.3.8",
3
+ "version": "9.3.10",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/unbrowse-ai/unbrowse.git"
package/runtime/cli.js CHANGED
@@ -5020,7 +5020,7 @@ var init_cached_resolution = __esm(() => {
5020
5020
  });
5021
5021
 
5022
5022
  // .tmp-runtime-src/build-info.generated.ts
5023
- var BUILD_RELEASE_VERSION = "9.3.8", BUILD_GIT_SHA = "b6b3ccddbddb", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjgiLCJnaXRfc2hhIjoiYjZiM2NjZGRiZGRiIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBiNmIzY2NkZGJkZGIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA2LTE1VDA4OjA4OjEzLjIwOVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "_Iq92fuWcstPs_AVWy9QRA1dfWknSpisW8xHV-wUuW4", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
5023
+ var BUILD_RELEASE_VERSION = "9.3.10", BUILD_GIT_SHA = "af8f07846fbb", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjEwIiwiZ2l0X3NoYSI6ImFmOGYwNzg0NmZiYiIsImNvZGVfaGFzaCI6IjVkOWViZjYxOWM2MSIsInRyYWNlX3ZlcnNpb24iOiI1ZDllYmY2MTljNjFAYWY4ZjA3ODQ2ZmJiIiwiaXNzdWVkX2F0IjoiMjAyNi0wNi0xNVQwOTo1NToxMy40MTZaIn0", BUILD_RELEASE_MANIFEST_SIGNATURE = "l1iGjuqMzW6Ohn0tN6_Ws5HyYXhzdZWLIrKB4hzlg8U", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
5024
5024
 
5025
5025
  // .tmp-runtime-src/version.ts
5026
5026
  import { createHash as createHash4 } from "crypto";
@@ -172947,6 +172947,12 @@ async function executeEndpoint(skill, endpoint, params = {}, projection, options
172947
172947
  }
172948
172948
  })();
172949
172949
  await reloadExecutionAuthState(skill, epDomain, authHeaders, cookies);
172950
+ if (options?.authHeaders) {
172951
+ for (const [k, v] of Object.entries(options.authHeaders)) {
172952
+ if (typeof v === "string" && v.length > 0)
172953
+ authHeaders[k] = v;
172954
+ }
172955
+ }
172950
172956
  log("exec", `auth_tokens check: ${endpoint.auth_tokens?.length ?? 0} bindings on ${endpoint.endpoint_id}`);
172951
172957
  if (endpoint.auth_tokens?.length) {
172952
172958
  try {
@@ -173234,6 +173240,9 @@ async function executeEndpoint(skill, endpoint, params = {}, projection, options
173234
173240
  let last2 = { data: null, status: 0, response_headers: {} };
173235
173241
  for (const replayUrl2 of replayUrls) {
173236
173242
  const replayHeaders = buildStructuredReplayHeaders(url, replayUrl2, headers);
173243
+ if (bodyOverride && typeof bodyOverride === "object" && endpoint.method !== "GET" && endpoint.method !== "HEAD" && !replayHeaders["content-type"] && !replayHeaders["Content-Type"]) {
173244
+ replayHeaders["content-type"] = "application/json";
173245
+ }
173237
173246
  log("exec", `server-fetch: ${endpoint.method} ${replayUrl2.substring(0, 200)} csrf-token=${(replayHeaders["csrf-token"] || "none").substring(0, 20)}... hdrs=${Object.keys(replayHeaders).length} cookies=${replayHeaders["cookie"]?.length ?? 0}chars`);
173238
173247
  const res = await fetch(replayUrl2, {
173239
173248
  method: endpoint.method,
@@ -189474,7 +189483,7 @@ async function registerRoutes(app) {
189474
189483
  app.post("/v1/skills/:skill_id/execute", { config: { rateLimit: ROUTE_LIMITS["/v1/skills/:skill_id/execute"] } }, async (req, reply) => {
189475
189484
  const clientScope = clientScopeFor(req);
189476
189485
  const { skill_id } = req.params;
189477
- const { params, projection, confirm_unsafe, confirm_third_party_terms, dry_run, intent, context_url, session_id } = req.body;
189486
+ const { params, projection, confirm_unsafe, confirm_third_party_terms, dry_run, intent, context_url, session_id, auth_headers } = req.body;
189478
189487
  let skill = getRecentLocalSkill(skill_id, clientScope);
189479
189488
  if (!skill) {
189480
189489
  const { findExistingSkillForDomain: findLocal } = await Promise.resolve().then(() => (init_client(), exports_client));
@@ -189574,7 +189583,7 @@ async function registerRoutes(app) {
189574
189583
  try {
189575
189584
  const executeDeadlineMs = Number(process.env.UNBROWSE_EXECUTE_TIMEOUT_MS) || 60000;
189576
189585
  const endpointIdForTrace = typeof execParams.endpoint_id === "string" ? execParams.endpoint_id : "";
189577
- let execResult = await withExecuteDeadline(executeSkill(skill, execParams, projection, { confirm_unsafe: effectiveConfirmUnsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope }), executeDeadlineMs, () => {
189586
+ let execResult = await withExecuteDeadline(executeSkill(skill, execParams, projection, { confirm_unsafe: effectiveConfirmUnsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope, authHeaders: auth_headers }), executeDeadlineMs, () => {
189578
189587
  const now = new Date().toISOString();
189579
189588
  return {
189580
189589
  trace: {
@@ -189642,7 +189651,7 @@ async function registerRoutes(app) {
189642
189651
  }
189643
189652
  }
189644
189653
  if (recovered) {
189645
- execResult = await executeSkill(skill, execParams, projection, { confirm_unsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope });
189654
+ execResult = await executeSkill(skill, execParams, projection, { confirm_unsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope, authHeaders: auth_headers });
189646
189655
  }
189647
189656
  }
189648
189657
  saveTrace(execResult.trace);
@@ -207587,6 +207596,17 @@ async function cmdExecute(flags) {
207587
207596
  body.method = flags.method.toUpperCase();
207588
207597
  if (typeof flags.session === "string")
207589
207598
  body.session_id = flags.session;
207599
+ {
207600
+ const rawHeaders = Array.isArray(flags.header) ? flags.header : typeof flags.header === "string" ? [flags.header] : [];
207601
+ const authHeaders = {};
207602
+ for (const h of rawHeaders) {
207603
+ const idx = h.indexOf(":");
207604
+ if (idx > 0)
207605
+ authHeaders[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();
207606
+ }
207607
+ if (Object.keys(authHeaders).length > 0)
207608
+ body.auth_headers = authHeaders;
207609
+ }
207590
207610
  if (flags.intent ?? flags.task)
207591
207611
  body.intent = flags.intent ?? flags.task;
207592
207612
  if (flags["dry-run"])
package/runtime/mcp.js CHANGED
@@ -36178,7 +36178,7 @@ var init_cached_resolution = __esm(() => {
36178
36178
  });
36179
36179
 
36180
36180
  // .tmp-runtime-src/build-info.generated.ts
36181
- var BUILD_RELEASE_VERSION = "9.3.8", BUILD_GIT_SHA = "b6b3ccddbddb", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjgiLCJnaXRfc2hhIjoiYjZiM2NjZGRiZGRiIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBiNmIzY2NkZGJkZGIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA2LTE1VDA4OjA4OjEzLjIwOVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "_Iq92fuWcstPs_AVWy9QRA1dfWknSpisW8xHV-wUuW4", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
36181
+ var BUILD_RELEASE_VERSION = "9.3.10", BUILD_GIT_SHA = "af8f07846fbb", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjEwIiwiZ2l0X3NoYSI6ImFmOGYwNzg0NmZiYiIsImNvZGVfaGFzaCI6IjVkOWViZjYxOWM2MSIsInRyYWNlX3ZlcnNpb24iOiI1ZDllYmY2MTljNjFAYWY4ZjA3ODQ2ZmJiIiwiaXNzdWVkX2F0IjoiMjAyNi0wNi0xNVQwOTo1NToxMy40MTZaIn0", BUILD_RELEASE_MANIFEST_SIGNATURE = "l1iGjuqMzW6Ohn0tN6_Ws5HyYXhzdZWLIrKB4hzlg8U", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
36182
36182
 
36183
36183
  // .tmp-runtime-src/version.ts
36184
36184
  import { createHash as createHash3 } from "crypto";
@@ -106870,6 +106870,12 @@ async function executeEndpoint(skill, endpoint, params = {}, projection, options
106870
106870
  }
106871
106871
  })();
106872
106872
  await reloadExecutionAuthState(skill, epDomain, authHeaders, cookies);
106873
+ if (options?.authHeaders) {
106874
+ for (const [k, v] of Object.entries(options.authHeaders)) {
106875
+ if (typeof v === "string" && v.length > 0)
106876
+ authHeaders[k] = v;
106877
+ }
106878
+ }
106873
106879
  log("exec", `auth_tokens check: ${endpoint.auth_tokens?.length ?? 0} bindings on ${endpoint.endpoint_id}`);
106874
106880
  if (endpoint.auth_tokens?.length) {
106875
106881
  try {
@@ -107157,6 +107163,9 @@ async function executeEndpoint(skill, endpoint, params = {}, projection, options
107157
107163
  let last2 = { data: null, status: 0, response_headers: {} };
107158
107164
  for (const replayUrl2 of replayUrls) {
107159
107165
  const replayHeaders = buildStructuredReplayHeaders(url, replayUrl2, headers);
107166
+ if (bodyOverride && typeof bodyOverride === "object" && endpoint.method !== "GET" && endpoint.method !== "HEAD" && !replayHeaders["content-type"] && !replayHeaders["Content-Type"]) {
107167
+ replayHeaders["content-type"] = "application/json";
107168
+ }
107160
107169
  log("exec", `server-fetch: ${endpoint.method} ${replayUrl2.substring(0, 200)} csrf-token=${(replayHeaders["csrf-token"] || "none").substring(0, 20)}... hdrs=${Object.keys(replayHeaders).length} cookies=${replayHeaders["cookie"]?.length ?? 0}chars`);
107161
107170
  const res = await fetch(replayUrl2, {
107162
107171
  method: endpoint.method,
@@ -139874,7 +139883,7 @@ async function registerRoutes(app) {
139874
139883
  app.post("/v1/skills/:skill_id/execute", { config: { rateLimit: ROUTE_LIMITS["/v1/skills/:skill_id/execute"] } }, async (req, reply) => {
139875
139884
  const clientScope = clientScopeFor(req);
139876
139885
  const { skill_id } = req.params;
139877
- const { params, projection, confirm_unsafe, confirm_third_party_terms, dry_run, intent, context_url, session_id } = req.body;
139886
+ const { params, projection, confirm_unsafe, confirm_third_party_terms, dry_run, intent, context_url, session_id, auth_headers } = req.body;
139878
139887
  let skill = getRecentLocalSkill(skill_id, clientScope);
139879
139888
  if (!skill) {
139880
139889
  const { findExistingSkillForDomain: findLocal } = await Promise.resolve().then(() => (init_client2(), exports_client2));
@@ -139974,7 +139983,7 @@ async function registerRoutes(app) {
139974
139983
  try {
139975
139984
  const executeDeadlineMs = Number(process.env.UNBROWSE_EXECUTE_TIMEOUT_MS) || 60000;
139976
139985
  const endpointIdForTrace = typeof execParams.endpoint_id === "string" ? execParams.endpoint_id : "";
139977
- let execResult = await withExecuteDeadline(executeSkill(skill, execParams, projection, { confirm_unsafe: effectiveConfirmUnsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope }), executeDeadlineMs, () => {
139986
+ let execResult = await withExecuteDeadline(executeSkill(skill, execParams, projection, { confirm_unsafe: effectiveConfirmUnsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope, authHeaders: auth_headers }), executeDeadlineMs, () => {
139978
139987
  const now = new Date().toISOString();
139979
139988
  return {
139980
139989
  trace: {
@@ -140042,7 +140051,7 @@ async function registerRoutes(app) {
140042
140051
  }
140043
140052
  }
140044
140053
  if (recovered) {
140045
- execResult = await executeSkill(skill, execParams, projection, { confirm_unsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope });
140054
+ execResult = await executeSkill(skill, execParams, projection, { confirm_unsafe, confirm_third_party_terms, dry_run, intent, contextUrl: context_url, client_scope: clientScope, authHeaders: auth_headers });
140046
140055
  }
140047
140056
  }
140048
140057
  saveTrace(execResult.trace);
Binary file
@@ -2,7 +2,7 @@
2
2
  "repo_url": "https://github.com/justrach/kuri.git",
3
3
  "branch": "adding-extensions",
4
4
  "source_sha": "149881254046a20778f642b69f20f0c6468f6fb4",
5
- "built_at": "2026-06-15T07:49:42.329Z",
5
+ "built_at": "2026-06-15T09:37:01.720Z",
6
6
  "binaries": {
7
7
  "darwin-arm64": {
8
8
  "zig_target": "aarch64-macos",
@@ -21,11 +21,11 @@
21
21
  },
22
22
  "linux-x64": {
23
23
  "zig_target": "x86_64-linux",
24
- "sha256": "afeb7be07284a7aa84eb0ab532166b1ccf4f1ebdbe289b6d5b98c284a7f82c70"
24
+ "sha256": "135e3d36d09af49c5e488ab399f7a6c4271cb8a57c547287fbad492eb886a0b6"
25
25
  },
26
26
  "win-x64": {
27
27
  "zig_target": "x86_64-windows-gnu",
28
- "sha256": "a2428a63e9c881b32875d71c766397fb7bb771f901284fb5ed54430836f80991",
28
+ "sha256": "19de0449a106d38e77625816a8033d4641d0c5dac040179fee28ea5adc594310",
29
29
  "source": "pre-staged"
30
30
  }
31
31
  },
@@ -33,22 +33,22 @@
33
33
  "darwin-arm64": {
34
34
  "zig_target": "aarch64-macos",
35
35
  "lib": "libkuri_ffi.dylib",
36
- "sha256": "8817997af2c42fc0a0cae00651c6892c437fbd4ab78860af442786bd475d24ff"
36
+ "sha256": "c4ecfca37cabaf3d7f1788ae41a46af78d725b9aebd47e868e4451b3c6cca196"
37
37
  },
38
38
  "darwin-x64": {
39
39
  "zig_target": "x86_64-macos",
40
40
  "lib": "libkuri_ffi.dylib",
41
- "sha256": "dd8b62e581a51784a2b17b8cf21b2cd3fe98a070f97ef34c071f94030478da04"
41
+ "sha256": "f88547a053815bf9b6b54db606f9d71f78a67cae9ea59fc1329728ac7496f0bb"
42
42
  },
43
43
  "linux-arm64": {
44
44
  "zig_target": "aarch64-linux",
45
45
  "lib": "libkuri_ffi.so",
46
- "sha256": "5c8991c9a751f9f509a4d34ed7d139a7206f5484c92118f0d2cb49e1c690c60e"
46
+ "sha256": "c311172e6d38b34fe18dfee3f3746cbd9b7a0b437ca286561cacacaab98e07b7"
47
47
  },
48
48
  "linux-x64": {
49
49
  "zig_target": "x86_64-linux",
50
50
  "lib": "libkuri_ffi.so",
51
- "sha256": "875e7e160723d71742982b62f88e5c1a7c5c6325f4eae616233238e74e1d5885"
51
+ "sha256": "f02f65ca1d27fc35f7be1006cccf7264d51978a397524198eeb70d2c502e9f9f"
52
52
  }
53
53
  }
54
54
  }
Binary file