@quanta-intellect/vessel-browser 0.1.101 → 0.1.103
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/out/main/index.js
CHANGED
|
@@ -4801,7 +4801,14 @@ const TELEMETRY_PROPERTY_ALLOWLIST = {
|
|
|
4801
4801
|
bookmark_action: /* @__PURE__ */ new Set(["action"]),
|
|
4802
4802
|
vault_action: /* @__PURE__ */ new Set(["action"]),
|
|
4803
4803
|
extraction_failed: /* @__PURE__ */ new Set(["reason"]),
|
|
4804
|
-
premium_funnel: /* @__PURE__ */ new Set([
|
|
4804
|
+
premium_funnel: /* @__PURE__ */ new Set([
|
|
4805
|
+
"step",
|
|
4806
|
+
"status",
|
|
4807
|
+
"reason",
|
|
4808
|
+
"source",
|
|
4809
|
+
"previous_status",
|
|
4810
|
+
"new_status"
|
|
4811
|
+
])
|
|
4805
4812
|
};
|
|
4806
4813
|
function getDeviceIdPath() {
|
|
4807
4814
|
return path.join(electron.app.getPath("userData"), ".vessel-device-id");
|
|
@@ -27266,6 +27273,14 @@ const PREMIUM_TRACKABLE_STEPS = [
|
|
|
27266
27273
|
];
|
|
27267
27274
|
const premiumApiOrigin = process.env.VESSEL_PREMIUM_API ? new URL(process.env.VESSEL_PREMIUM_API).origin : "https://vesselpremium.quantaintellect.com";
|
|
27268
27275
|
function registerPremiumHandlers(tabManager, sendToRendererViews) {
|
|
27276
|
+
const trackPremiumStatusChange = (previousStatus, nextStatus, source) => {
|
|
27277
|
+
if (previousStatus === nextStatus) return;
|
|
27278
|
+
trackPremiumFunnel("premium_status_changed", {
|
|
27279
|
+
previous_status: previousStatus,
|
|
27280
|
+
new_status: nextStatus,
|
|
27281
|
+
source
|
|
27282
|
+
});
|
|
27283
|
+
};
|
|
27269
27284
|
const watchPremiumCheckoutTab = (tabId) => {
|
|
27270
27285
|
const tab = tabManager.getTab(tabId);
|
|
27271
27286
|
const wc = tab?.view.webContents;
|
|
@@ -27303,13 +27318,26 @@ function registerPremiumHandlers(tabManager, sendToRendererViews) {
|
|
|
27303
27318
|
return;
|
|
27304
27319
|
}
|
|
27305
27320
|
trackPremiumFunnel("auto_activation_attempted");
|
|
27321
|
+
trackPremiumFunnel("premium_verify_started", {
|
|
27322
|
+
source: "checkout_auto"
|
|
27323
|
+
});
|
|
27324
|
+
const previousStatus = getPremiumState().status;
|
|
27306
27325
|
const state2 = await verifySubscription(sessionId);
|
|
27307
27326
|
if (isPremiumActiveState(state2)) {
|
|
27308
27327
|
sendToRendererViews(Channels.PREMIUM_UPDATE, state2);
|
|
27328
|
+
trackPremiumFunnel("premium_verify_succeeded", {
|
|
27329
|
+
status: state2.status,
|
|
27330
|
+
source: "checkout_auto"
|
|
27331
|
+
});
|
|
27332
|
+
trackPremiumStatusChange(previousStatus, state2.status, "checkout_auto");
|
|
27309
27333
|
trackPremiumFunnel("auto_activation_succeeded", {
|
|
27310
27334
|
status: state2.status
|
|
27311
27335
|
});
|
|
27312
27336
|
} else {
|
|
27337
|
+
trackPremiumFunnel("premium_verify_failed", {
|
|
27338
|
+
status: state2.status,
|
|
27339
|
+
source: "checkout_auto"
|
|
27340
|
+
});
|
|
27313
27341
|
trackPremiumFunnel("auto_activation_failed", {
|
|
27314
27342
|
status: state2.status
|
|
27315
27343
|
});
|
|
@@ -27342,9 +27370,19 @@ function registerPremiumHandlers(tabManager, sendToRendererViews) {
|
|
|
27342
27370
|
return errorResult("Invalid email format");
|
|
27343
27371
|
}
|
|
27344
27372
|
trackPremiumFunnel("activation_attempted");
|
|
27373
|
+
trackPremiumFunnel("activation_code_requested", {
|
|
27374
|
+
source: "settings"
|
|
27375
|
+
});
|
|
27345
27376
|
const result = await requestActivationCode(email);
|
|
27346
27377
|
if (!result.ok) {
|
|
27378
|
+
trackPremiumFunnel("activation_code_failed", {
|
|
27379
|
+
source: "settings"
|
|
27380
|
+
});
|
|
27347
27381
|
trackPremiumFunnel("activation_failed");
|
|
27382
|
+
} else {
|
|
27383
|
+
trackPremiumFunnel("activation_code_sent", {
|
|
27384
|
+
source: "settings"
|
|
27385
|
+
});
|
|
27348
27386
|
}
|
|
27349
27387
|
return result;
|
|
27350
27388
|
});
|
|
@@ -27361,13 +27399,30 @@ function registerPremiumHandlers(tabManager, sendToRendererViews) {
|
|
|
27361
27399
|
});
|
|
27362
27400
|
}
|
|
27363
27401
|
trackPremiumFunnel("activation_attempted");
|
|
27402
|
+
trackPremiumFunnel("premium_verify_started", {
|
|
27403
|
+
source: "settings_code"
|
|
27404
|
+
});
|
|
27405
|
+
const previousStatus = getPremiumState().status;
|
|
27364
27406
|
const result = await verifyActivationCode(email, code, challengeToken);
|
|
27365
27407
|
if (result.ok) {
|
|
27408
|
+
trackPremiumFunnel("premium_verify_succeeded", {
|
|
27409
|
+
status: result.state.status,
|
|
27410
|
+
source: "settings_code"
|
|
27411
|
+
});
|
|
27366
27412
|
trackPremiumFunnel("activation_succeeded", {
|
|
27367
27413
|
status: result.state.status
|
|
27368
27414
|
});
|
|
27415
|
+
trackPremiumStatusChange(
|
|
27416
|
+
previousStatus,
|
|
27417
|
+
result.state.status,
|
|
27418
|
+
"settings_code"
|
|
27419
|
+
);
|
|
27369
27420
|
sendToRendererViews(Channels.PREMIUM_UPDATE, result.state);
|
|
27370
27421
|
} else {
|
|
27422
|
+
trackPremiumFunnel("premium_verify_failed", {
|
|
27423
|
+
status: result.state.status,
|
|
27424
|
+
source: "settings_code"
|
|
27425
|
+
});
|
|
27371
27426
|
trackPremiumFunnel("activation_failed", { status: result.state.status });
|
|
27372
27427
|
}
|
|
27373
27428
|
return result;
|
|
@@ -27380,6 +27435,8 @@ function registerPremiumHandlers(tabManager, sendToRendererViews) {
|
|
|
27380
27435
|
if (result.ok && result.url) {
|
|
27381
27436
|
const tabId = tabManager.createTab(result.url);
|
|
27382
27437
|
watchPremiumCheckoutTab(tabId);
|
|
27438
|
+
} else {
|
|
27439
|
+
trackPremiumFunnel("checkout_open_failed");
|
|
27383
27440
|
}
|
|
27384
27441
|
return result;
|
|
27385
27442
|
});
|
|
@@ -11515,7 +11515,7 @@ const SettingsPrivacy = (props) => {
|
|
|
11515
11515
|
})();
|
|
11516
11516
|
};
|
|
11517
11517
|
delegateEvents(["input", "click"]);
|
|
11518
|
-
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$3$3 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$5$2 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$6$2 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade"
|
|
11518
|
+
var _tmpl$$4 = /* @__PURE__ */ template(`<div class=premium-section><div class=premium-active-badge>Premium Active</div><p class=premium-detail></p><div class=premium-actions-row><button class="premium-btn premium-btn-manage">Manage Subscription</button><button class="premium-btn premium-btn-reset">Sign Out`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=vault-entries>`), _tmpl$3$3 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-field><label class=settings-label>Vessel Premium</label></div><div class=settings-field><label class=settings-label>Saved Sessions</label><p class=settings-hint style=margin-bottom:10px>Save the current browser state (tabs, cookies, storage) as a named session. Restore it later from this panel.</p><div class=premium-activate-row style=margin-bottom:8px><input class="settings-input premium-email-input"placeholder="Session name"><button class="premium-btn premium-btn-activate">Save Current`), _tmpl$4$3 = /* @__PURE__ */ template(`<div class=premium-activate-row><input class="settings-input premium-email-input"inputmode=numeric maxlength=6 placeholder="Enter 6-digit code"><button class="premium-btn premium-btn-activate">`), _tmpl$5$2 = /* @__PURE__ */ template(`<button class="premium-btn premium-btn-reset">Clear Saved Email`), _tmpl$6$2 = /* @__PURE__ */ template(`<div class=premium-section><p class=premium-description>Unlock screenshot/vision analysis, session management, Obsidian integration, workflow tracking, DevTools tools, table extraction, Agent Credential Vault, and unlimited tool iterations.</p><div class=premium-activate-row><input class="settings-input premium-email-input"type=email placeholder="Enter your subscription email"><button class="premium-btn premium-btn-activate"></button></div><button class="premium-btn premium-btn-upgrade">`), _tmpl$7$2 = /* @__PURE__ */ template(`<p class=settings-status>`), _tmpl$8$1 = /* @__PURE__ */ template(`<div class=vault-entry><div class=vault-entry-info><span class=vault-entry-label></span><span class=vault-entry-detail> · <!> cookies · <!> domains</span></div><div style=display:flex;gap:6px;align-items:center><button class="premium-btn premium-btn-activate"title="Restore this session (replaces current tabs and cookies)"style="padding:2px 10px;font-size:12px">Load</button><button class=vault-entry-remove title="Delete session">×`);
|
|
11519
11519
|
const SettingsAccount = (props) => {
|
|
11520
11520
|
const p = props.premium;
|
|
11521
11521
|
const s = props.sessions;
|
|
@@ -11620,6 +11620,7 @@ const SettingsAccount = (props) => {
|
|
|
11620
11620
|
_el$24.$$click = () => {
|
|
11621
11621
|
p.startCheckout();
|
|
11622
11622
|
};
|
|
11623
|
+
insert(_el$24, () => p.loading() ? "Opening Checkout..." : "Subscribe to Premium — $5.99/mo after 7-day free trial");
|
|
11623
11624
|
insert(_el$16, createComponent(Show, {
|
|
11624
11625
|
get when() {
|
|
11625
11626
|
return p.message();
|
|
@@ -11628,9 +11629,9 @@ const SettingsAccount = (props) => {
|
|
|
11628
11629
|
var _el$26 = _tmpl$7$2();
|
|
11629
11630
|
insert(_el$26, () => msg().text);
|
|
11630
11631
|
createRenderEffect((_p$) => {
|
|
11631
|
-
var _v$ = !!(msg().kind === "success"), _v$
|
|
11632
|
-
_v$ !== _p$.e && _el$26.classList.toggle("success", _p$.e = _v$);
|
|
11633
|
-
_v$
|
|
11632
|
+
var _v$3 = !!(msg().kind === "success"), _v$4 = !!(msg().kind === "error");
|
|
11633
|
+
_v$3 !== _p$.e && _el$26.classList.toggle("success", _p$.e = _v$3);
|
|
11634
|
+
_v$4 !== _p$.t && _el$26.classList.toggle("error", _p$.t = _v$4);
|
|
11634
11635
|
return _p$;
|
|
11635
11636
|
}, {
|
|
11636
11637
|
e: void 0,
|
|
@@ -11655,7 +11656,15 @@ const SettingsAccount = (props) => {
|
|
|
11655
11656
|
return _el$25;
|
|
11656
11657
|
}
|
|
11657
11658
|
}), null);
|
|
11658
|
-
createRenderEffect(() =>
|
|
11659
|
+
createRenderEffect((_p$) => {
|
|
11660
|
+
var _v$ = p.loading() || !p.email().trim(), _v$2 = p.loading();
|
|
11661
|
+
_v$ !== _p$.e && (_el$20.disabled = _p$.e = _v$);
|
|
11662
|
+
_v$2 !== _p$.t && (_el$24.disabled = _p$.t = _v$2);
|
|
11663
|
+
return _p$;
|
|
11664
|
+
}, {
|
|
11665
|
+
e: void 0,
|
|
11666
|
+
t: void 0
|
|
11667
|
+
});
|
|
11659
11668
|
createRenderEffect(() => _el$19.value = p.email());
|
|
11660
11669
|
return _el$16;
|
|
11661
11670
|
})();
|
|
@@ -11706,9 +11715,9 @@ const SettingsAccount = (props) => {
|
|
|
11706
11715
|
var _el$27 = _tmpl$7$2();
|
|
11707
11716
|
insert(_el$27, () => msg().text);
|
|
11708
11717
|
createRenderEffect((_p$) => {
|
|
11709
|
-
var _v$
|
|
11710
|
-
_v$
|
|
11711
|
-
_v$
|
|
11718
|
+
var _v$5 = !!(msg().kind === "success"), _v$6 = !!(msg().kind === "error");
|
|
11719
|
+
_v$5 !== _p$.e && _el$27.classList.toggle("success", _p$.e = _v$5);
|
|
11720
|
+
_v$6 !== _p$.t && _el$27.classList.toggle("error", _p$.t = _v$6);
|
|
11712
11721
|
return _p$;
|
|
11713
11722
|
}, {
|
|
11714
11723
|
e: void 0,
|
|
@@ -12807,8 +12816,30 @@ const Settings = () => {
|
|
|
12807
12816
|
const trackPremiumContext = (step) => window.vessel.premium.trackContext(step).catch((err) => {
|
|
12808
12817
|
logger.warn("Failed to track premium context:", err);
|
|
12809
12818
|
});
|
|
12810
|
-
const startPremiumCheckout = () => {
|
|
12811
|
-
|
|
12819
|
+
const startPremiumCheckout = async () => {
|
|
12820
|
+
setPremiumLoading(true);
|
|
12821
|
+
setPremiumMessage(null);
|
|
12822
|
+
try {
|
|
12823
|
+
const result = await window.vessel.premium.checkout(premiumEmail().trim() || void 0);
|
|
12824
|
+
if (result.ok) {
|
|
12825
|
+
setPremiumMessage({
|
|
12826
|
+
kind: "success",
|
|
12827
|
+
text: "Checkout opened. This screen will update when Premium activates."
|
|
12828
|
+
});
|
|
12829
|
+
} else {
|
|
12830
|
+
setPremiumMessage({
|
|
12831
|
+
kind: "error",
|
|
12832
|
+
text: result.error || "Could not open checkout."
|
|
12833
|
+
});
|
|
12834
|
+
}
|
|
12835
|
+
} catch (err) {
|
|
12836
|
+
setPremiumMessage({
|
|
12837
|
+
kind: "error",
|
|
12838
|
+
text: err instanceof Error ? err.message : "Could not open checkout."
|
|
12839
|
+
});
|
|
12840
|
+
} finally {
|
|
12841
|
+
setPremiumLoading(false);
|
|
12842
|
+
}
|
|
12812
12843
|
};
|
|
12813
12844
|
const resetPremiumActivationFlow = () => {
|
|
12814
12845
|
setPremiumCode("");
|
package/out/renderer/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; base-uri 'none'; object-src 'none'; frame-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self' data:; form-action 'self';" />
|
|
7
7
|
<title>Vessel</title>
|
|
8
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-D3ABnKy4.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/index-BF_JrL2V.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quanta-intellect/vessel-browser",
|
|
3
3
|
"mcpName": "io.github.unmodeled-tyler/vessel-browser",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.103",
|
|
5
5
|
"description": "AI-native web browser runtime for autonomous agents with human supervision",
|
|
6
6
|
"main": "./out/main/index.js",
|
|
7
7
|
"bin": {
|