unbrowse 9.3.2 → 9.3.4
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 +137 -17
- package/runtime/mcp.js +34 -15
- package/vendor/kuri/darwin-arm64/kuri +0 -0
- 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 +9 -9
- 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.4", BUILD_GIT_SHA = "bd3c57c942a6", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjQiLCJnaXRfc2hhIjoiYmQzYzU3Yzk0MmE2IiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBiZDNjNTdjOTQyYTYiLCJpc3N1ZWRfYXQiOiIyMDI2LTA2LTE1VDA0OjMwOjQ2Ljk5M1oifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "krTVf83pB30lX90qYQrOzkj61TOClxaahv1pA3BaHLs", 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";
|
|
@@ -108366,10 +108366,13 @@ function updateCapturePipelineSettings(update) {
|
|
|
108366
108366
|
});
|
|
108367
108367
|
return next;
|
|
108368
108368
|
}
|
|
108369
|
-
function
|
|
108369
|
+
function getBrowserAttachPreference() {
|
|
108370
108370
|
const raw = loadRawConfig();
|
|
108371
108371
|
const browser = raw.browser && typeof raw.browser === "object" ? raw.browser : {};
|
|
108372
|
-
return browser.attach_existing_chrome ===
|
|
108372
|
+
return typeof browser.attach_existing_chrome === "boolean" ? browser.attach_existing_chrome : undefined;
|
|
108373
|
+
}
|
|
108374
|
+
function getBrowserAttachEnabled() {
|
|
108375
|
+
return getBrowserAttachPreference() !== false;
|
|
108373
108376
|
}
|
|
108374
108377
|
function setBrowserAttachEnabled(enabled2) {
|
|
108375
108378
|
const raw = loadRawConfig();
|
|
@@ -108519,6 +108522,7 @@ __export(exports_client2, {
|
|
|
108519
108522
|
discoverTabs: () => discoverTabs,
|
|
108520
108523
|
closeTab: () => closeTab,
|
|
108521
108524
|
click: () => click2,
|
|
108525
|
+
chromeCdpAttachLaunchArgs: () => chromeCdpAttachLaunchArgs,
|
|
108522
108526
|
bestEffortRehydratePlugins: () => bestEffortRehydratePlugins,
|
|
108523
108527
|
authProfileSave: () => authProfileSave,
|
|
108524
108528
|
authProfileLoad: () => authProfileLoad,
|
|
@@ -108606,14 +108610,15 @@ function resolveKuriLaunchConfig(env2 = process.env) {
|
|
|
108606
108610
|
}
|
|
108607
108611
|
const cleanRoom = envFlag(env2.UNBROWSE_LOCAL_ONLY) || envFlag(env2.KURI_CLEAN_ROOM);
|
|
108608
108612
|
const disableCdpAttach = envFlag(env2.KURI_DISABLE_CDP_ATTACH);
|
|
108609
|
-
const explicitAttachEnv =
|
|
108610
|
-
|
|
108613
|
+
const explicitAttachEnv = env2.KURI_ATTACH_EXISTING_CHROME;
|
|
108614
|
+
const attachByEnv = explicitAttachEnv === undefined ? undefined : !falseyEnv(explicitAttachEnv);
|
|
108615
|
+
let attachPreference;
|
|
108611
108616
|
try {
|
|
108612
|
-
|
|
108617
|
+
attachPreference = getBrowserAttachPreference();
|
|
108613
108618
|
} catch {
|
|
108614
|
-
|
|
108619
|
+
attachPreference = undefined;
|
|
108615
108620
|
}
|
|
108616
|
-
const attachToExistingChrome = (
|
|
108621
|
+
const attachToExistingChrome = (attachByEnv ?? attachPreference ?? true) && !disableCdpAttach && !cleanRoom;
|
|
108617
108622
|
return {
|
|
108618
108623
|
headless,
|
|
108619
108624
|
attachToExistingChrome
|
|
@@ -108806,11 +108811,7 @@ async function ensureUserChromeRunning(state) {
|
|
|
108806
108811
|
state.cdpPort = port;
|
|
108807
108812
|
log("kuri", `launching user Chrome with CDP on port ${port}`);
|
|
108808
108813
|
try {
|
|
108809
|
-
const child = spawn9(chromeBin,
|
|
108810
|
-
`--remote-debugging-port=${port}`,
|
|
108811
|
-
"--no-first-run",
|
|
108812
|
-
"--no-default-browser-check"
|
|
108813
|
-
], {
|
|
108814
|
+
const child = spawn9(chromeBin, chromeCdpAttachLaunchArgs(port), {
|
|
108814
108815
|
stdio: "ignore",
|
|
108815
108816
|
detached: true
|
|
108816
108817
|
});
|
|
@@ -108833,6 +108834,20 @@ async function ensureUserChromeRunning(state) {
|
|
|
108833
108834
|
state.cdpPort = null;
|
|
108834
108835
|
}
|
|
108835
108836
|
}
|
|
108837
|
+
function chromeCdpAttachLaunchArgs(port, platform6 = process.platform) {
|
|
108838
|
+
const args = [
|
|
108839
|
+
`--remote-debugging-port=${port}`,
|
|
108840
|
+
"--no-first-run",
|
|
108841
|
+
"--no-default-browser-check",
|
|
108842
|
+
"--password-store=basic",
|
|
108843
|
+
"--disable-save-password-bubble",
|
|
108844
|
+
"--disable-features=PasswordManagerOnboarding,AutofillServerCommunication"
|
|
108845
|
+
];
|
|
108846
|
+
if (platform6 === "darwin") {
|
|
108847
|
+
args.push("--use-mock-keychain");
|
|
108848
|
+
}
|
|
108849
|
+
return args;
|
|
108850
|
+
}
|
|
108836
108851
|
async function terminateBrokerOnPort(port) {
|
|
108837
108852
|
try {
|
|
108838
108853
|
const output2 = execFileSync5("lsof", ["-tiTCP:" + String(port), "-sTCP:LISTEN"], {
|
|
@@ -108858,7 +108873,11 @@ async function reuseHealthyBrokerIfPossible(state, launchConfig, deps = {}) {
|
|
|
108858
108873
|
state.ready = true;
|
|
108859
108874
|
const cdpAvailable = deps.isChromeCdpAvailable ?? isChromeCdpAvailable;
|
|
108860
108875
|
const discover = deps.discoverCdpPort ?? discoverCdpPort;
|
|
108861
|
-
|
|
108876
|
+
if (launchConfig.attachToExistingChrome || state.managedChrome) {
|
|
108877
|
+
await discover(state);
|
|
108878
|
+
} else {
|
|
108879
|
+
state.cdpPort = null;
|
|
108880
|
+
}
|
|
108862
108881
|
if (!state.cdpPort && launchConfig.attachToExistingChrome) {
|
|
108863
108882
|
const ensureChrome2 = deps.ensureUserChromeRunning ?? ensureUserChromeRunning;
|
|
108864
108883
|
await ensureChrome2(state);
|
|
@@ -108869,7 +108888,7 @@ async function reuseHealthyBrokerIfPossible(state, launchConfig, deps = {}) {
|
|
|
108869
108888
|
const syncTabs = deps.ensureTabsDiscovered ?? ensureTabsDiscovered;
|
|
108870
108889
|
await syncTabs(state).catch(() => {});
|
|
108871
108890
|
const tabs = await (deps.listTabs ?? listRegisteredTabs)(state).catch(() => []);
|
|
108872
|
-
if (state.cdpPort) {
|
|
108891
|
+
if (state.cdpPort && (launchConfig.attachToExistingChrome || state.managedChrome)) {
|
|
108873
108892
|
return true;
|
|
108874
108893
|
}
|
|
108875
108894
|
if (tabs.length > 0) {
|
|
@@ -206806,11 +206825,75 @@ function parseCmdGetArgs(args, flags) {
|
|
|
206806
206825
|
function parseCmdFillArgs(args, flags) {
|
|
206807
206826
|
return parseCmdHoleIntentArgs(args, flags, "fill");
|
|
206808
206827
|
}
|
|
206828
|
+
function isDraftOnlyMutationIntent(intent) {
|
|
206829
|
+
const s = intent.toLowerCase();
|
|
206830
|
+
const asksForDraft = /\b(draft|write|compose|prepare|suggest)\b/.test(s) && /\b(message|reply|dm|contact|inquiry|enquiry|seller|agent)\b/.test(s);
|
|
206831
|
+
const explicitSendSideEffect = (/\b(send|buy|purchase|offer|submit|click)\b/.test(s) || /\b(message|dm|contact)\s+(the\s+)?(seller|agent|owner|user|them|him|her)\b/.test(s)) && !/\bdo not (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s) && !/\bdon't (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s) && !/\bwithout (sending|contacting|messaging|buying|purchasing|offering|submitting|clicking)\b/.test(s) && !/\b(no|never) (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s);
|
|
206832
|
+
const forbidsSideEffect = /\bdo not (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s) || /\bdon't (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s) || /\bwithout (sending|contacting|messaging|buying|purchasing|offering|submitting|clicking)\b/.test(s) || /\b(no|never) (send|contact|message|buy|purchase|offer|submit|click)\b/.test(s);
|
|
206833
|
+
return asksForDraft && (forbidsSideEffect || !explicitSendSideEffect);
|
|
206834
|
+
}
|
|
206835
|
+
function draftOnlySubjectHint(intent) {
|
|
206836
|
+
let subject = intent.replace(/\bdo not\b[^.?!]*(?:[.?!]|$)/gi, " ").replace(/\bdon't\b[^.?!]*(?:[.?!]|$)/gi, " ").replace(/\bwithout\b[^.?!]*(?:[.?!]|$)/gi, " ").replace(/\b(?:no|never)\s+(?:send|contact|message|buy|purchase|offer|submit|click)\b[^.?!]*(?:[.?!]|$)/gi, " ").replace(/\b(draft|write|compose|prepare|suggest)\b/gi, " ").replace(/\b(polite|message|reply|dm|contact|inquiry|enquiry|seller|agent|asking|ask|whether|if|still|available|availability)\b/gi, " ").replace(/\b(send|sent|buy|purchase|offer|submit|click)\b/gi, " ").replace(/\b(a|an|the|to|for|with|and|or|is|are|it|this|that|me|my|please)\b/gi, " ").replace(/\s+/g, " ").trim();
|
|
206837
|
+
subject = subject.replace(/^[,.:;!?-]+|[,.:;!?-]+$/g, "").trim();
|
|
206838
|
+
return subject.length >= 3 ? subject : "the first relevant visible listing";
|
|
206839
|
+
}
|
|
206840
|
+
function draftOnlyReadIntent(intent) {
|
|
206841
|
+
const subject = draftOnlySubjectHint(intent);
|
|
206842
|
+
const wantsAvailability = /\b(available|availability|still there|still for sale)\b/i.test(intent);
|
|
206843
|
+
return [
|
|
206844
|
+
`Find the first visible ${subject} on this public page.`,
|
|
206845
|
+
"Return only public listing context: title, price, condition, seller/page context, and visible availability cues.",
|
|
206846
|
+
wantsAvailability ? "This is read-only context for a later local availability draft." : "This is read-only context for a later local draft."
|
|
206847
|
+
].join(" ");
|
|
206848
|
+
}
|
|
206849
|
+
function textExcerptFromResult(result) {
|
|
206850
|
+
const direct = result.result;
|
|
206851
|
+
const candidates = [
|
|
206852
|
+
direct?.text_excerpt,
|
|
206853
|
+
direct?.markdown,
|
|
206854
|
+
direct?.content,
|
|
206855
|
+
direct?.result?.text_excerpt,
|
|
206856
|
+
result.text_excerpt,
|
|
206857
|
+
result.markdown,
|
|
206858
|
+
result.content
|
|
206859
|
+
];
|
|
206860
|
+
for (const c of candidates) {
|
|
206861
|
+
if (typeof c === "string" && c.trim())
|
|
206862
|
+
return c.trim().slice(0, 2400);
|
|
206863
|
+
}
|
|
206864
|
+
return;
|
|
206865
|
+
}
|
|
206866
|
+
function buildDraftOnlyEnvelope(originalIntent, url, sourceResult) {
|
|
206867
|
+
const excerpt = textExcerptFromResult(sourceResult);
|
|
206868
|
+
return {
|
|
206869
|
+
status: "draft_only",
|
|
206870
|
+
safety: {
|
|
206871
|
+
side_effects: "none",
|
|
206872
|
+
sent: false,
|
|
206873
|
+
offer_made: false,
|
|
206874
|
+
purchase_made: false,
|
|
206875
|
+
approval_required_before_send: true
|
|
206876
|
+
},
|
|
206877
|
+
intent: originalIntent,
|
|
206878
|
+
url,
|
|
206879
|
+
draft: "Hi, is this still available? I am interested and would like to know the condition, what is included, and whether the price is negotiable. Thanks.",
|
|
206880
|
+
source_excerpt: excerpt,
|
|
206881
|
+
source: sourceResult.source ?? sourceResult.result?.source ?? "read_only_lookup",
|
|
206882
|
+
trace: sourceResult.trace,
|
|
206883
|
+
impact: sourceResult.impact,
|
|
206884
|
+
next_action: {
|
|
206885
|
+
title: "Human approval required before any send/contact action",
|
|
206886
|
+
why: "This request asked for a draft only. Unbrowse did not open a composer, send a message, make an offer, or buy anything."
|
|
206887
|
+
}
|
|
206888
|
+
};
|
|
206889
|
+
}
|
|
206809
206890
|
async function cmdRun(args, flags, verb = "run") {
|
|
206810
206891
|
const parsed = parseCmdRunArgs(args, flags, verb);
|
|
206811
206892
|
if ("error" in parsed)
|
|
206812
206893
|
die(parsed.error);
|
|
206813
206894
|
const { url, intent } = parsed;
|
|
206895
|
+
const draftOnlyIntent = isDraftOnlyMutationIntent(intent);
|
|
206896
|
+
const resolveIntent = draftOnlyIntent ? draftOnlyReadIntent(intent) : intent;
|
|
206814
206897
|
maybeShowContributionNotice();
|
|
206815
206898
|
const hostType = detectTelemetryHostType2();
|
|
206816
206899
|
await ensureCliInstallTracked2(hostType);
|
|
@@ -206842,7 +206925,7 @@ async function cmdRun(args, flags, verb = "run") {
|
|
|
206842
206925
|
const runPlan = [];
|
|
206843
206926
|
function resolveBody() {
|
|
206844
206927
|
const body = {
|
|
206845
|
-
intent,
|
|
206928
|
+
intent: resolveIntent,
|
|
206846
206929
|
params: { url, ...extraParams },
|
|
206847
206930
|
context: { url },
|
|
206848
206931
|
projection: { raw: true }
|
|
@@ -206867,7 +206950,7 @@ async function cmdRun(args, flags, verb = "run") {
|
|
|
206867
206950
|
function execBody(endpointId) {
|
|
206868
206951
|
return {
|
|
206869
206952
|
params: { endpoint_id: endpointId, url, ...extraParams },
|
|
206870
|
-
intent,
|
|
206953
|
+
intent: resolveIntent,
|
|
206871
206954
|
projection: { raw: true },
|
|
206872
206955
|
...flags["confirm-third-party-terms"] ? { confirm_third_party_terms: true } : {}
|
|
206873
206956
|
};
|
|
@@ -207041,6 +207124,40 @@ async function cmdRun(args, flags, verb = "run") {
|
|
|
207041
207124
|
}
|
|
207042
207125
|
try {
|
|
207043
207126
|
let result = await resolveStep("initial");
|
|
207127
|
+
if (draftOnlyIntent) {
|
|
207128
|
+
if (isResolveSuccessResult(result)) {
|
|
207129
|
+
runPlan.push({
|
|
207130
|
+
step: "execute",
|
|
207131
|
+
mode: "draft_only_guard",
|
|
207132
|
+
status: "skipped",
|
|
207133
|
+
reason: "no_side_effects_without_approval"
|
|
207134
|
+
});
|
|
207135
|
+
output2(decorate(buildDraftOnlyEnvelope(intent, url, result)), !!flags.pretty);
|
|
207136
|
+
return;
|
|
207137
|
+
}
|
|
207138
|
+
const err = resolveResultError(result);
|
|
207139
|
+
output2(decorate({
|
|
207140
|
+
...result,
|
|
207141
|
+
status: err === "auth_required" ? "auth_required" : "draft_unavailable",
|
|
207142
|
+
original_intent: intent,
|
|
207143
|
+
safety: {
|
|
207144
|
+
side_effects: "none",
|
|
207145
|
+
sent: false,
|
|
207146
|
+
offer_made: false,
|
|
207147
|
+
purchase_made: false,
|
|
207148
|
+
approval_required_before_send: true
|
|
207149
|
+
},
|
|
207150
|
+
next_action: err === "auth_required" ? {
|
|
207151
|
+
title: "Authenticate site before drafting",
|
|
207152
|
+
command: `unbrowse auth "${resolveLoginUrl(result, url) ?? url}"`,
|
|
207153
|
+
why: "The site requires a local authenticated session before Unbrowse can read enough context to draft safely."
|
|
207154
|
+
} : {
|
|
207155
|
+
title: "Draft unavailable",
|
|
207156
|
+
why: "Unbrowse could not read enough page context to draft a message, and it did not attempt to send/contact/buy."
|
|
207157
|
+
}
|
|
207158
|
+
}), !!flags.pretty);
|
|
207159
|
+
return;
|
|
207160
|
+
}
|
|
207044
207161
|
const firstError = resolveResultError(result);
|
|
207045
207162
|
if (firstError === "auth_required") {
|
|
207046
207163
|
const loginUrl = resolveLoginUrl(result, url);
|
|
@@ -210427,7 +210544,10 @@ export {
|
|
|
210427
210544
|
parseCmdGetArgs,
|
|
210428
210545
|
parseCmdFillArgs,
|
|
210429
210546
|
parseArgs,
|
|
210547
|
+
isDraftOnlyMutationIntent,
|
|
210430
210548
|
fetchOutcome,
|
|
210549
|
+
draftOnlySubjectHint,
|
|
210550
|
+
draftOnlyReadIntent,
|
|
210431
210551
|
deprecationNotice,
|
|
210432
210552
|
ESSENTIAL_VERBS,
|
|
210433
210553
|
DEPRECATED_VERBS,
|
package/runtime/mcp.js
CHANGED
|
@@ -34015,10 +34015,13 @@ function updateCapturePipelineSettings(update) {
|
|
|
34015
34015
|
});
|
|
34016
34016
|
return next;
|
|
34017
34017
|
}
|
|
34018
|
-
function
|
|
34018
|
+
function getBrowserAttachPreference() {
|
|
34019
34019
|
const raw = loadRawConfig();
|
|
34020
34020
|
const browser = raw.browser && typeof raw.browser === "object" ? raw.browser : {};
|
|
34021
|
-
return browser.attach_existing_chrome ===
|
|
34021
|
+
return typeof browser.attach_existing_chrome === "boolean" ? browser.attach_existing_chrome : undefined;
|
|
34022
|
+
}
|
|
34023
|
+
function getBrowserAttachEnabled() {
|
|
34024
|
+
return getBrowserAttachPreference() !== false;
|
|
34022
34025
|
}
|
|
34023
34026
|
function setBrowserAttachEnabled(enabled) {
|
|
34024
34027
|
const raw = loadRawConfig();
|
|
@@ -34168,6 +34171,7 @@ __export(exports_client, {
|
|
|
34168
34171
|
discoverTabs: () => discoverTabs,
|
|
34169
34172
|
closeTab: () => closeTab,
|
|
34170
34173
|
click: () => click,
|
|
34174
|
+
chromeCdpAttachLaunchArgs: () => chromeCdpAttachLaunchArgs,
|
|
34171
34175
|
bestEffortRehydratePlugins: () => bestEffortRehydratePlugins,
|
|
34172
34176
|
authProfileSave: () => authProfileSave,
|
|
34173
34177
|
authProfileLoad: () => authProfileLoad,
|
|
@@ -34255,14 +34259,15 @@ function resolveKuriLaunchConfig(env = process.env) {
|
|
|
34255
34259
|
}
|
|
34256
34260
|
const cleanRoom = envFlag(env.UNBROWSE_LOCAL_ONLY) || envFlag(env.KURI_CLEAN_ROOM);
|
|
34257
34261
|
const disableCdpAttach = envFlag(env.KURI_DISABLE_CDP_ATTACH);
|
|
34258
|
-
const explicitAttachEnv =
|
|
34259
|
-
|
|
34262
|
+
const explicitAttachEnv = env.KURI_ATTACH_EXISTING_CHROME;
|
|
34263
|
+
const attachByEnv = explicitAttachEnv === undefined ? undefined : !falseyEnv(explicitAttachEnv);
|
|
34264
|
+
let attachPreference;
|
|
34260
34265
|
try {
|
|
34261
|
-
|
|
34266
|
+
attachPreference = getBrowserAttachPreference();
|
|
34262
34267
|
} catch {
|
|
34263
|
-
|
|
34268
|
+
attachPreference = undefined;
|
|
34264
34269
|
}
|
|
34265
|
-
const attachToExistingChrome = (
|
|
34270
|
+
const attachToExistingChrome = (attachByEnv ?? attachPreference ?? true) && !disableCdpAttach && !cleanRoom;
|
|
34266
34271
|
return {
|
|
34267
34272
|
headless,
|
|
34268
34273
|
attachToExistingChrome
|
|
@@ -34455,11 +34460,7 @@ async function ensureUserChromeRunning(state) {
|
|
|
34455
34460
|
state.cdpPort = port;
|
|
34456
34461
|
log("kuri", `launching user Chrome with CDP on port ${port}`);
|
|
34457
34462
|
try {
|
|
34458
|
-
const child = spawn(chromeBin,
|
|
34459
|
-
`--remote-debugging-port=${port}`,
|
|
34460
|
-
"--no-first-run",
|
|
34461
|
-
"--no-default-browser-check"
|
|
34462
|
-
], {
|
|
34463
|
+
const child = spawn(chromeBin, chromeCdpAttachLaunchArgs(port), {
|
|
34463
34464
|
stdio: "ignore",
|
|
34464
34465
|
detached: true
|
|
34465
34466
|
});
|
|
@@ -34482,6 +34483,20 @@ async function ensureUserChromeRunning(state) {
|
|
|
34482
34483
|
state.cdpPort = null;
|
|
34483
34484
|
}
|
|
34484
34485
|
}
|
|
34486
|
+
function chromeCdpAttachLaunchArgs(port, platform = process.platform) {
|
|
34487
|
+
const args = [
|
|
34488
|
+
`--remote-debugging-port=${port}`,
|
|
34489
|
+
"--no-first-run",
|
|
34490
|
+
"--no-default-browser-check",
|
|
34491
|
+
"--password-store=basic",
|
|
34492
|
+
"--disable-save-password-bubble",
|
|
34493
|
+
"--disable-features=PasswordManagerOnboarding,AutofillServerCommunication"
|
|
34494
|
+
];
|
|
34495
|
+
if (platform === "darwin") {
|
|
34496
|
+
args.push("--use-mock-keychain");
|
|
34497
|
+
}
|
|
34498
|
+
return args;
|
|
34499
|
+
}
|
|
34485
34500
|
async function terminateBrokerOnPort(port) {
|
|
34486
34501
|
try {
|
|
34487
34502
|
const output = execFileSync("lsof", ["-tiTCP:" + String(port), "-sTCP:LISTEN"], {
|
|
@@ -34507,7 +34522,11 @@ async function reuseHealthyBrokerIfPossible(state, launchConfig, deps = {}) {
|
|
|
34507
34522
|
state.ready = true;
|
|
34508
34523
|
const cdpAvailable = deps.isChromeCdpAvailable ?? isChromeCdpAvailable;
|
|
34509
34524
|
const discover = deps.discoverCdpPort ?? discoverCdpPort;
|
|
34510
|
-
|
|
34525
|
+
if (launchConfig.attachToExistingChrome || state.managedChrome) {
|
|
34526
|
+
await discover(state);
|
|
34527
|
+
} else {
|
|
34528
|
+
state.cdpPort = null;
|
|
34529
|
+
}
|
|
34511
34530
|
if (!state.cdpPort && launchConfig.attachToExistingChrome) {
|
|
34512
34531
|
const ensureChrome = deps.ensureUserChromeRunning ?? ensureUserChromeRunning;
|
|
34513
34532
|
await ensureChrome(state);
|
|
@@ -34518,7 +34537,7 @@ async function reuseHealthyBrokerIfPossible(state, launchConfig, deps = {}) {
|
|
|
34518
34537
|
const syncTabs = deps.ensureTabsDiscovered ?? ensureTabsDiscovered;
|
|
34519
34538
|
await syncTabs(state).catch(() => {});
|
|
34520
34539
|
const tabs = await (deps.listTabs ?? listRegisteredTabs)(state).catch(() => []);
|
|
34521
|
-
if (state.cdpPort) {
|
|
34540
|
+
if (state.cdpPort && (launchConfig.attachToExistingChrome || state.managedChrome)) {
|
|
34522
34541
|
return true;
|
|
34523
34542
|
}
|
|
34524
34543
|
if (tabs.length > 0) {
|
|
@@ -36159,7 +36178,7 @@ var init_cached_resolution = __esm(() => {
|
|
|
36159
36178
|
});
|
|
36160
36179
|
|
|
36161
36180
|
// .tmp-runtime-src/build-info.generated.ts
|
|
36162
|
-
var BUILD_RELEASE_VERSION = "9.3.
|
|
36181
|
+
var BUILD_RELEASE_VERSION = "9.3.4", BUILD_GIT_SHA = "bd3c57c942a6", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiOS4zLjQiLCJnaXRfc2hhIjoiYmQzYzU3Yzk0MmE2IiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBiZDNjNTdjOTQyYTYiLCJpc3N1ZWRfYXQiOiIyMDI2LTA2LTE1VDA0OjMwOjQ2Ljk5M1oifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "krTVf83pB30lX90qYQrOzkj61TOClxaahv1pA3BaHLs", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
|
|
36163
36182
|
|
|
36164
36183
|
// .tmp-runtime-src/version.ts
|
|
36165
36184
|
import { createHash as createHash3 } from "crypto";
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"repo_url": "https://github.com/justrach/kuri.git",
|
|
3
3
|
"branch": "adding-extensions",
|
|
4
|
-
"source_sha": "
|
|
5
|
-
"built_at": "2026-06-
|
|
4
|
+
"source_sha": "149881254046a20778f642b69f20f0c6468f6fb4",
|
|
5
|
+
"built_at": "2026-06-15T04:13:38.802Z",
|
|
6
6
|
"binaries": {
|
|
7
7
|
"darwin-arm64": {
|
|
8
8
|
"zig_target": "aarch64-macos",
|
|
9
|
-
"sha256": "
|
|
9
|
+
"sha256": "e7a2f965535c10fe4faf2e962ffa3237e96e65fb8bfe37428c84e72fcbcce613",
|
|
10
10
|
"source": "pre-staged"
|
|
11
11
|
},
|
|
12
12
|
"darwin-x64": {
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
},
|
|
22
22
|
"linux-x64": {
|
|
23
23
|
"zig_target": "x86_64-linux",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "454bf8b1a9262b807c4f574ad80e92de3b7a37ab74f01a085731e4c5bfbe4c0b"
|
|
25
25
|
},
|
|
26
26
|
"win-x64": {
|
|
27
27
|
"zig_target": "x86_64-windows-gnu",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "cb47a01bd92c780e92a4e4d297404ec5db4ebd69b02b19892037bbf8df05e84a",
|
|
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": "d1cb0e8ebed6f465c623e5c9e54524fc75f39a08d55e8edd3a8a1b58ebb0f984"
|
|
37
37
|
},
|
|
38
38
|
"darwin-x64": {
|
|
39
39
|
"zig_target": "x86_64-macos",
|
|
40
40
|
"lib": "libkuri_ffi.dylib",
|
|
41
|
-
"sha256": "
|
|
41
|
+
"sha256": "7a2d65d52f3379e74e65357e144fba1a705b8f7c387d877bb3b0a5c595a7e64d"
|
|
42
42
|
},
|
|
43
43
|
"linux-arm64": {
|
|
44
44
|
"zig_target": "aarch64-linux",
|
|
45
45
|
"lib": "libkuri_ffi.so",
|
|
46
|
-
"sha256": "
|
|
46
|
+
"sha256": "1d7983dab291a8fdbcafb479f42fcbf8a3fbf7abcc7bbfd899cc4a6fdd3ec64c"
|
|
47
47
|
},
|
|
48
48
|
"linux-x64": {
|
|
49
49
|
"zig_target": "x86_64-linux",
|
|
50
50
|
"lib": "libkuri_ffi.so",
|
|
51
|
-
"sha256": "
|
|
51
|
+
"sha256": "031bf0228b4c7585ccc66af458ce09bbd310522c6864e1b400ac7b2604e1018e"
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
Binary file
|