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 +1 -1
- package/runtime/cli.js +24 -4
- package/runtime/mcp.js +13 -4
- package/vendor/kuri/darwin-arm64/libkuri_ffi.dylib +0 -0
- package/vendor/kuri/darwin-x64/libkuri_ffi.dylib +0 -0
- package/vendor/kuri/linux-arm64/libkuri_ffi.so +0 -0
- package/vendor/kuri/linux-x64/kuri +0 -0
- package/vendor/kuri/linux-x64/libkuri_ffi.so +0 -0
- package/vendor/kuri/manifest.json +7 -7
- package/vendor/kuri/win-x64/kuri.exe +0 -0
package/package.json
CHANGED
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.
|
|
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.
|
|
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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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-
|
|
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": "
|
|
24
|
+
"sha256": "135e3d36d09af49c5e488ab399f7a6c4271cb8a57c547287fbad492eb886a0b6"
|
|
25
25
|
},
|
|
26
26
|
"win-x64": {
|
|
27
27
|
"zig_target": "x86_64-windows-gnu",
|
|
28
|
-
"sha256": "
|
|
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": "
|
|
36
|
+
"sha256": "c4ecfca37cabaf3d7f1788ae41a46af78d725b9aebd47e868e4451b3c6cca196"
|
|
37
37
|
},
|
|
38
38
|
"darwin-x64": {
|
|
39
39
|
"zig_target": "x86_64-macos",
|
|
40
40
|
"lib": "libkuri_ffi.dylib",
|
|
41
|
-
"sha256": "
|
|
41
|
+
"sha256": "f88547a053815bf9b6b54db606f9d71f78a67cae9ea59fc1329728ac7496f0bb"
|
|
42
42
|
},
|
|
43
43
|
"linux-arm64": {
|
|
44
44
|
"zig_target": "aarch64-linux",
|
|
45
45
|
"lib": "libkuri_ffi.so",
|
|
46
|
-
"sha256": "
|
|
46
|
+
"sha256": "c311172e6d38b34fe18dfee3f3746cbd9b7a0b437ca286561cacacaab98e07b7"
|
|
47
47
|
},
|
|
48
48
|
"linux-x64": {
|
|
49
49
|
"zig_target": "x86_64-linux",
|
|
50
50
|
"lib": "libkuri_ffi.so",
|
|
51
|
-
"sha256": "
|
|
51
|
+
"sha256": "f02f65ca1d27fc35f7be1006cccf7264d51978a397524198eeb70d2c502e9f9f"
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
Binary file
|