clay-server 5.3.0-beta.5 → 5.3.0-beta.6
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/lib/clay-product-control-tools.js +2 -2
- package/lib/clay-product-control.js +1 -1
- package/lib/clay-screen-controls.js +1 -0
- package/lib/clay-split-view-awareness.js +5 -2
- package/lib/clay-split-view-controls.js +14 -7
- package/lib/clay-split-view-input.js +5 -4
- package/lib/clay-split-view-render-proof.js +14 -4
- package/lib/clay-view-workspace-input.js +71 -0
- package/lib/project-file-history.js +11 -9
- package/lib/project-file-watch.js +26 -7
- package/lib/project-filesystem.js +5 -4
- package/lib/project-shared-browser.js +7 -3
- package/lib/project-split-view-document.js +16 -2
- package/lib/project-split-views.js +15 -294
- package/lib/project-user-message.js +4 -3
- package/lib/project-vendor-login.js +2 -2
- package/lib/project-view-input.js +11 -0
- package/lib/project-view-pair.js +26 -0
- package/lib/project-view-store.js +346 -0
- package/lib/project-view-terminal-binding.js +16 -0
- package/lib/project-view-workspace.js +126 -0
- package/lib/project.js +1 -0
- package/lib/public/app.js +2 -0
- package/lib/public/css/issues.css +3 -0
- package/lib/public/css/pane.css +5 -1
- package/lib/public/css/right-workbench.css +0 -1
- package/lib/public/css/scheduled-tasks.css +7 -0
- package/lib/public/css/split-view-layout.css +37 -3
- package/lib/public/css/tool-pane.css +127 -0
- package/lib/public/index.html +1 -1
- package/lib/public/modules/clay-file-links.js +2 -1
- package/lib/public/modules/clay-split-view-screen.js +6 -3
- package/lib/public/modules/clay-tool-pane-screen.js +35 -0
- package/lib/public/modules/file-history-snapshot.js +12 -0
- package/lib/public/modules/file-pane-entrypoints.js +55 -0
- package/lib/public/modules/file-pane-history.js +78 -0
- package/lib/public/modules/file-pane-instances.js +140 -0
- package/lib/public/modules/file-pane-links.js +41 -0
- package/lib/public/modules/file-pane-render.js +48 -0
- package/lib/public/modules/file-pane-review.js +26 -0
- package/lib/public/modules/file-pane-toolbar.js +54 -0
- package/lib/public/modules/file-viewer-source.js +70 -0
- package/lib/public/modules/filebrowser.js +43 -82
- package/lib/public/modules/git-panel.js +5 -0
- package/lib/public/modules/issues.js +3 -4
- package/lib/public/modules/linear-panel.js +2 -2
- package/lib/public/modules/mate-knowledge-workbench.js +10 -6
- package/lib/public/modules/notifications.js +4 -1
- package/lib/public/modules/pane-activation.js +2 -0
- package/lib/public/modules/pane-binding.js +5 -1
- package/lib/public/modules/pane-browser-bridge.js +6 -2
- package/lib/public/modules/pane-browser-transport.js +110 -0
- package/lib/public/modules/plantuml-preview.js +12 -12
- package/lib/public/modules/right-workbench.js +34 -15
- package/lib/public/modules/scheduled-tasks.js +7 -6
- package/lib/public/modules/shared-browser.js +69 -9
- package/lib/public/modules/split-pane-renderer.js +1 -0
- package/lib/public/modules/split-view-drag-preview.js +90 -0
- package/lib/public/modules/split-view-layout-client.js +1 -1
- package/lib/public/modules/split-view-presentation-drag.js +36 -13
- package/lib/public/modules/split-view-presentation-drop.js +21 -18
- package/lib/public/modules/split-view-presentation-renderer.js +15 -10
- package/lib/public/modules/split-view-presentations.js +25 -33
- package/lib/public/modules/split-view.js +9 -2
- package/lib/public/modules/sticky-notes-browser.js +2 -2
- package/lib/public/modules/terminal.js +46 -19
- package/lib/public/modules/theme.js +1 -6
- package/lib/public/modules/tool-pane-chrome.js +82 -0
- package/lib/public/modules/tool-pane-drag.js +134 -0
- package/lib/public/modules/tool-pane-layout.js +95 -0
- package/lib/public/modules/tool-pane-legacy.js +60 -0
- package/lib/public/modules/tool-pane-tree.js +51 -0
- package/lib/public/modules/view-legacy-coordinates.js +16 -0
- package/lib/public/modules/view-mutations.js +24 -0
- package/lib/public/modules/view-pair-presentation.js +74 -0
- package/lib/public/modules/view-pair-validation.js +12 -0
- package/lib/public/modules/view-presentation-state.js +37 -0
- package/lib/public/modules/view-workspace-controller.js +210 -0
- package/lib/public/modules/view-workspace-state.js +103 -0
- package/lib/public/modules/view-workspace-validation.js +47 -0
- package/lib/public/modules/wireframe-workbench.js +11 -0
- package/lib/public/modules/workbench-layout-preference.js +12 -5
- package/lib/public/modules/workbench-panels.js +21 -0
- package/lib/public/pane-assets/{app-6H5S2Y3Z.js → app-7UZ727NA.js} +1 -1
- package/lib/public/pane-assets/chunk-2AIWCI6Y.js +1 -0
- package/lib/public/pane-assets/chunk-6MIHIQ2W.js +1 -0
- package/lib/public/pane-assets/chunk-6NYCNWVF.js +1 -0
- package/lib/public/pane-assets/chunk-6QFLYOVY.js +1 -0
- package/lib/public/pane-assets/chunk-6UJ2ALOB.js +1 -0
- package/lib/public/pane-assets/chunk-6XK2OATZ.js +1 -0
- package/lib/public/pane-assets/chunk-BKIDR2ME.js +1 -0
- package/lib/public/pane-assets/chunk-BMHTBRMO.js +1 -0
- package/lib/public/pane-assets/chunk-GEFCFZEN.js +1 -0
- package/lib/public/pane-assets/chunk-GN2NQEVC.js +2 -0
- package/lib/public/pane-assets/chunk-IMLMBPT4.js +166 -0
- package/lib/public/pane-assets/chunk-JIV7O5GN.js +1 -0
- package/lib/public/pane-assets/chunk-K5S6AILM.js +1 -0
- package/lib/public/pane-assets/chunk-LDIZLKB2.js +1 -0
- package/lib/public/pane-assets/chunk-OWNNLZ36.js +1 -0
- package/lib/public/pane-assets/chunk-P2C3LOWL.js +3 -0
- package/lib/public/pane-assets/chunk-PV4PCH2V.js +2 -0
- package/lib/public/pane-assets/chunk-R4LMPTKU.js +1 -0
- package/lib/public/pane-assets/chunk-R7QVVFUG.js +1 -0
- package/lib/public/pane-assets/chunk-TMGSDFJI.js +1 -0
- package/lib/public/pane-assets/chunk-VKYBAVWT.js +1 -0
- package/lib/public/pane-assets/chunk-VNAV23CM.js +1 -0
- package/lib/public/pane-assets/chunk-VWTHIQCE.js +1 -0
- package/lib/public/pane-assets/chunk-VZ2OKDAO.js +1 -0
- package/lib/public/pane-assets/chunk-WM3K5AFH.js +1 -0
- package/lib/public/pane-assets/chunk-XOB3O327.js +1 -0
- package/lib/public/pane-assets/chunk-XOOUCFYT.js +1 -0
- package/lib/public/pane-assets/manifest.json +426 -381
- package/lib/public/pane-assets/style-ZM7OOU3M.css +1 -0
- package/lib/public/style.css +1 -0
- package/lib/server-workbench-layout-settings.js +3 -3
- package/lib/split-view-layout.js +11 -7
- package/lib/users-workbench-layout-preferences.js +14 -4
- package/lib/workbench-window-layout.js +30 -0
- package/package.json +1 -1
- package/lib/public/pane-assets/chunk-3QV5SDC4.js +0 -1
- package/lib/public/pane-assets/chunk-4FM3U3DW.js +0 -1
- package/lib/public/pane-assets/chunk-7GZH3FZY.js +0 -1
- package/lib/public/pane-assets/chunk-AGJTF5WQ.js +0 -1
- package/lib/public/pane-assets/chunk-DGOFGEUK.js +0 -1
- package/lib/public/pane-assets/chunk-I57URYSL.js +0 -1
- package/lib/public/pane-assets/chunk-NPKRTUNG.js +0 -2
- package/lib/public/pane-assets/chunk-VGA2Y3D2.js +0 -2
- package/lib/public/pane-assets/chunk-WKO3T75E.js +0 -167
- package/lib/public/pane-assets/style-TSRDU54Z.css +0 -1
package/lib/public/style.css
CHANGED
|
@@ -32,7 +32,7 @@ function attachWorkbenchLayoutSettings(ctx) {
|
|
|
32
32
|
req.on('data', function (chunk) {
|
|
33
33
|
if (finished) return;
|
|
34
34
|
body += chunk;
|
|
35
|
-
if (Buffer.byteLength(body) >
|
|
35
|
+
if (Buffer.byteLength(body) > 65536) { finished = true; body = ''; reply(res, 413, { error: 'Request too large.' }); }
|
|
36
36
|
});
|
|
37
37
|
req.on('aborted', function () { finished = true; });
|
|
38
38
|
req.on('error', function () { finished = true; });
|
|
@@ -41,11 +41,11 @@ function attachWorkbenchLayoutSettings(ctx) {
|
|
|
41
41
|
if (identity(req) !== accountId) { reply(res, 401, { error: 'Account changed. Sign in again.' }); return; }
|
|
42
42
|
var input;
|
|
43
43
|
try { input = JSON.parse(body); } catch (error) { reply(res, 400, { error: 'Invalid JSON.' }); return; }
|
|
44
|
-
if (!input || Array.isArray(input) || Object.keys(input).
|
|
44
|
+
if (!input || Array.isArray(input) || Object.keys(input).some(function (key) { return ['mode', 'revision', 'layout'].indexOf(key) < 0; }) || !Object.prototype.hasOwnProperty.call(input, 'mode') || !Object.prototype.hasOwnProperty.call(input, 'revision')) {
|
|
45
45
|
reply(res, 400, { error: 'Invalid workbench preference.' }); return;
|
|
46
46
|
}
|
|
47
47
|
try {
|
|
48
|
-
var result = ctx.users.setWorkbenchLayoutPreference(accountId, input.mode, input.revision);
|
|
48
|
+
var result = ctx.users.setWorkbenchLayoutPreference(accountId, input.mode, input.revision, input.layout);
|
|
49
49
|
reply(res, result.error ? result.status || 400 : 200, result);
|
|
50
50
|
} catch (error) { reply(res, 500, { error: 'Workbench layout could not be saved. Your previous layout is retained.' }); }
|
|
51
51
|
});
|
package/lib/split-view-layout.js
CHANGED
|
@@ -12,7 +12,7 @@ function validateTree(tree, expectedOrigins) {
|
|
|
12
12
|
var invalid = null;
|
|
13
13
|
function walk(node, depth) {
|
|
14
14
|
if (invalid) return;
|
|
15
|
-
if (!node || typeof node !== "object" || depth > MAX_SESSIONS) { invalid = "Layout tree is malformed"; return; }
|
|
15
|
+
if (!node || typeof node !== "object" || Array.isArray(node) || depth > MAX_SESSIONS) { invalid = "Layout tree is malformed"; return; }
|
|
16
16
|
if (Object.prototype.hasOwnProperty.call(node, "id")) {
|
|
17
17
|
if (Object.keys(node).length !== 1 || !validOrigin(node.id) || origins.indexOf(node.id) !== -1) {
|
|
18
18
|
invalid = "Layout leaves must have unique valid session origins"; return;
|
|
@@ -28,11 +28,11 @@ function validateTree(tree, expectedOrigins) {
|
|
|
28
28
|
}
|
|
29
29
|
walk(node.left, depth + 1); walk(node.right, depth + 1);
|
|
30
30
|
}
|
|
31
|
-
walk(tree, 0);
|
|
31
|
+
if (tree !== null) walk(tree, 0);
|
|
32
32
|
if (invalid) return { ok: false, error: invalid, origins: origins };
|
|
33
|
-
if (origins.length
|
|
33
|
+
if (origins.length > MAX_SESSIONS) return { ok: false, error: "A View supports zero to eight sessions", origins: origins };
|
|
34
34
|
if (expectedOrigins) {
|
|
35
|
-
if (!Array.isArray(expectedOrigins) || expectedOrigins.length !== origins.length ||
|
|
35
|
+
if (!Array.isArray(expectedOrigins) || expectedOrigins.length !== origins.length || new Set(expectedOrigins).size !== expectedOrigins.length ||
|
|
36
36
|
expectedOrigins.some(function (id) { return !validOrigin(id) || origins.indexOf(id) === -1; })) {
|
|
37
37
|
return { ok: false, error: "Layout leaves must exactly match the selected sessions", origins: origins };
|
|
38
38
|
}
|
|
@@ -100,9 +100,9 @@ function validateViewShape(view) {
|
|
|
100
100
|
var name = validateName(view.name);
|
|
101
101
|
if (!name.ok) return name;
|
|
102
102
|
if (view.nameMode != null && ["automatic", "custom"].indexOf(view.nameMode) === -1) return { ok: false, error: "Split view name mode is invalid" };
|
|
103
|
-
if (!Number.
|
|
103
|
+
if (!Number.isSafeInteger(view.revision) || view.revision < 1 || !validatePreset(view.layout)) return { ok: false, error: "Split view revision or layout is invalid" };
|
|
104
104
|
var refs = view.sessionRefs;
|
|
105
|
-
if (!Array.isArray(refs) || refs.length
|
|
105
|
+
if (!Array.isArray(refs) || refs.length > MAX_SESSIONS) return { ok: false, error: "A View supports zero to eight sessions" };
|
|
106
106
|
var ids = [];
|
|
107
107
|
for (var i = 0; i < refs.length; i++) {
|
|
108
108
|
var ref = refs[i];
|
|
@@ -113,7 +113,11 @@ function validateViewShape(view) {
|
|
|
113
113
|
}
|
|
114
114
|
var tree = validateTree(view.tree, ids);
|
|
115
115
|
if (!tree.ok) return tree;
|
|
116
|
-
if (typeof view.activeSessionOriginId !== "string" || ids.indexOf(view.activeSessionOriginId) === -1) return { ok: false, error: "Active session must belong to the Split view" };
|
|
116
|
+
if (ids.length ? typeof view.activeSessionOriginId !== "string" || ids.indexOf(view.activeSessionOriginId) === -1 : view.activeSessionOriginId !== null) return { ok: false, error: "Active session must belong to the Split view" };
|
|
117
|
+
if (view.workspace !== undefined) {
|
|
118
|
+
var checked = require("./project-view-workspace").validate(view.workspace, view);
|
|
119
|
+
if (!checked.ok) return checked;
|
|
120
|
+
}
|
|
117
121
|
return { ok: true, name: name.name, origins: ids };
|
|
118
122
|
}
|
|
119
123
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var windowLayouts = require('./workbench-window-layout');
|
|
1
2
|
// Account UI preferences are excluded from canonical Clay controls.
|
|
2
3
|
function validMode(mode) { return mode === 'overlay' || mode === 'docked'; }
|
|
3
4
|
function attachWorkbenchLayoutPreferences(deps) {
|
|
@@ -12,16 +13,25 @@ function attachWorkbenchLayoutPreferences(deps) {
|
|
|
12
13
|
function value(accountId, saved) {
|
|
13
14
|
if (saved === undefined) return { accountId: accountId, mode: 'overlay', revision: 0 };
|
|
14
15
|
if (!saved || !validMode(saved.mode) || !Number.isSafeInteger(saved.revision) || saved.revision < 1) throw new Error('Invalid stored preference.');
|
|
15
|
-
|
|
16
|
+
if (saved.layouts && !windowLayouts.validLayouts(saved.layouts)) throw new Error('Invalid stored window layout.');
|
|
17
|
+
return Object.assign({ accountId: accountId, mode: saved.mode, revision: saved.revision }, saved.layouts ? { layouts: saved.layouts } : {});
|
|
16
18
|
}
|
|
17
19
|
function get(accountId) { return value(accountId, context(accountId).saved); }
|
|
18
|
-
function set(accountId, mode, revision) {
|
|
20
|
+
function set(accountId, mode, revision, layout) {
|
|
21
|
+
if (layout !== undefined && !windowLayouts.validLayout(layout)) return { status: 400, error: 'Invalid window layout.' };
|
|
19
22
|
if (!validMode(mode) || !Number.isSafeInteger(revision) || revision < 0) return { status: 400, error: 'Invalid workbench layout.' };
|
|
20
23
|
var current = context(accountId), prior = value(accountId, current.saved);
|
|
21
24
|
if (prior.revision !== revision) return { status: 409, error: 'Workbench layout changed elsewhere. Reload the preference and try again.' };
|
|
22
|
-
|
|
25
|
+
var layouts = Object.assign({}, prior.layouts || {});
|
|
26
|
+
var changed = layout && JSON.stringify(layouts[layout.key]) !== JSON.stringify({ base: layout.base, tree: layout.tree });
|
|
27
|
+
if (prior.mode === mode && !changed) return prior;
|
|
28
|
+
if (layout) {
|
|
29
|
+
delete layouts[layout.key];
|
|
30
|
+
if (Object.keys(layouts).length >= 32) delete layouts[Object.keys(layouts)[0]];
|
|
31
|
+
layouts[layout.key] = { base: layout.base, tree: layout.tree };
|
|
32
|
+
}
|
|
23
33
|
if (revision === Number.MAX_SAFE_INTEGER) throw new Error('Preference revision exhausted.');
|
|
24
|
-
var saved = { mode: mode, revision: revision + 1 };
|
|
34
|
+
var saved = Object.assign({ mode: mode, revision: revision + 1 }, Object.keys(layouts).length ? { layouts: layouts } : {});
|
|
25
35
|
if (current.settings) config.saveConfig(Object.assign({}, current.settings, { workbenchLayoutPreference: saved }));
|
|
26
36
|
else deps.saveUsers(Object.assign({}, current.data, { users: current.data.users.map(function (entry) {
|
|
27
37
|
return entry === current.user ? Object.assign({}, entry, { workbenchLayoutPreference: saved }) : entry;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Display preferences only: these records never open sessions or run tools.
|
|
2
|
+
var tools = ['tool-terminal', 'tool-browser', 'tool-file-viewer'];
|
|
3
|
+
function validTree(tree, allowTools) {
|
|
4
|
+
var ids = [], nodes = 0;
|
|
5
|
+
function walk(node, depth) {
|
|
6
|
+
if (!node || typeof node !== 'object' || Array.isArray(node) || ++nodes > 21 || depth > 10) return false;
|
|
7
|
+
if (Object.prototype.hasOwnProperty.call(node, 'id')) {
|
|
8
|
+
if (Object.keys(node).length !== 1 || typeof node.id !== 'string' || !/^[A-Za-z0-9_-]{1,128}$/.test(node.id)) return false;
|
|
9
|
+
if (node.id.indexOf('tool-') === 0 && (!allowTools || tools.indexOf(node.id) < 0)) return false;
|
|
10
|
+
ids.push(node.id); return true;
|
|
11
|
+
}
|
|
12
|
+
return Object.keys(node).sort().join(',') === 'axis,left,ratio,right' && ['horizontal', 'vertical'].indexOf(node.axis) >= 0 &&
|
|
13
|
+
Number.isFinite(node.ratio) && node.ratio >= .05 && node.ratio <= .95 && walk(node.left, depth + 1) && walk(node.right, depth + 1);
|
|
14
|
+
}
|
|
15
|
+
return walk(tree, 0) && ids.length > 0 && ids.length <= (allowTools ? 11 : 8) && new Set(ids).size === ids.length;
|
|
16
|
+
}
|
|
17
|
+
function validLayout(input) {
|
|
18
|
+
return !!input && typeof input === 'object' && !Array.isArray(input) && Object.keys(input).sort().join(',') === 'base,key,tree' &&
|
|
19
|
+
typeof input.key === 'string' && input.key.length > 0 && input.key.length <= 512 && input.key !== '__proto__' &&
|
|
20
|
+
validTree(input.base, false) && validTree(input.tree, true) && sameSessions(input.base, input.tree);
|
|
21
|
+
}
|
|
22
|
+
function sameSessions(base, tree) {
|
|
23
|
+
function ids(node) { return node.id ? (tools.indexOf(node.id) >= 0 ? [] : [node.id]) : ids(node.left).concat(ids(node.right)); }
|
|
24
|
+
return JSON.stringify(ids(base).sort()) === JSON.stringify(ids(tree).sort());
|
|
25
|
+
}
|
|
26
|
+
function validLayouts(layouts) {
|
|
27
|
+
return !!layouts && typeof layouts === 'object' && !Array.isArray(layouts) && Object.keys(layouts).length <= 32 &&
|
|
28
|
+
Object.keys(layouts).every(function (key) { var item = layouts[key]; return item && validLayout({ key: key, base: item.base, tree: item.tree }); });
|
|
29
|
+
}
|
|
30
|
+
module.exports = { validLayout: validLayout, validLayouts: validLayouts };
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as a,m as b,n as c,o as d}from"./chunk-WKO3T75E.js";import"./chunk-NPKRTUNG.js";import"./chunk-DGOFGEUK.js";export{a as closeLinear,c as handleLinearResult,d as initLinearPanel,b as openLinear};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{p as a,q as b,r as c,s as d,t as e,u as f}from"./chunk-WKO3T75E.js";import"./chunk-NPKRTUNG.js";import"./chunk-DGOFGEUK.js";export{c as closeIssues,f as handleIssuesMessage,e as initIssues,d as openIssues,b as refreshGithubIssue,a as requestIssue};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as a,M as b,N as c,O as d,P as e,Q as f}from"./chunk-NPKRTUNG.js";import"./chunk-DGOFGEUK.js";export{e as handleSharedBrowserMessage,d as hideSharedBrowser,f as initSharedBrowser,c as openSharedBrowser,b as openSharedBrowserAt,a as sendBrowserInput};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as b,B as c,z as a}from"./chunk-WKO3T75E.js";import"./chunk-NPKRTUNG.js";import"./chunk-DGOFGEUK.js";export{a as closeLoginBrowser,c as handleLoginBrowserMessage,b as openLoginBrowser};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var n={},e=[];function c(t){n=Object.assign({},t)}var o={get:function(t){return n[t]},snap:function(){return n},set:function(t){var r=n;n=Object.assign({},n,t);for(var u=0;u<e.length;u++)e[u](n,r)},getState:function(){return n},setState:function(t){o.set(t)},subscribe:function(t){return e.push(t),function(){e=e.filter(function(r){return r!==t})}}};var s=null;function f(){return s}function i(t){s=t}export{c as a,o as b,f as c,i as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as n,c}from"./chunk-DGOFGEUK.js";var w="/api/user/workbench-layout";function u(){return n.get("myUserId")||"default"}function k(e){return e==="overlay"||e==="docked"}function t(){return n.get("workbenchLayoutPreference")}function l(e){var r=e&&e.accountId===u();return{mode:r?e.mode:"overlay",accountId:u(),ready:!1,loading:!1,saving:!1,error:"",socket:c(),revision:r?e.revision:0,generation:(e&&e.generation||0)+1,checkedAt:0}}function f(){return(!t()||t().accountId!==u()||t().socket!==c())&&n.set({workbenchLayoutPreference:l(t())}),t()}function s(e){var r=t();return r&&r.receipt===e&&r.accountId===u()&&r.generation===e.generation&&n.get("currentSlug")===e.project&&c()===e.socket&&n.get("connected")===e.connected&&n.get("authIdentityLoaded")===e.identity&&n.get("projectSplitViewSocketGeneration")===e.socketGeneration}function m(e){var r=f(),i=e!==void 0,a={generation:r.generation,project:n.get("currentSlug"),socket:c(),connected:n.get("connected"),identity:n.get("authIdentityLoaded"),socketGeneration:n.get("projectSplitViewSocketGeneration")},g=new AbortController,y=Object.assign({},r,{loading:!i,saving:i,error:"",receipt:a}),h=Promise.resolve().then(async function(){var b=setTimeout(function(){g.abort()},15e3);try{if(!s(a))return!1;var d=await fetch(w,{method:i?"PUT":"GET",credentials:"same-origin",cache:"no-store",signal:g.signal,headers:{"Content-Type":"application/json","X-Clay-Settings":"1","X-Clay-Account-Id":r.accountId},body:i?JSON.stringify({mode:e,revision:r.revision}):void 0}),o=await d.json();if(!s(a))return!1;if(!d.ok)throw new Error(d.status===409?"Workbench layout changed elsewhere. Reload the preference and try again.":i?"Workbench layout could not be saved. Reload the preference before trying again.":"Workbench layout could not be loaded. Try again.");if(!o||o.accountId!==r.accountId||!k(o.mode)||!Number.isSafeInteger(o.revision)||o.revision<r.revision||o.revision===r.revision&&o.mode!==r.mode||i&&(o.mode!==e||o.revision!==r.revision+(e===r.mode?0:1)))throw new Error("Workbench preference response is stale. Reload and try again.");return n.set({workbenchLayoutPreference:Object.assign({},t(),{mode:o.mode,revision:o.revision,ready:!0,loading:!1,saving:!1,error:"",checkedAt:Date.now(),receipt:null,promise:null})}),!0}catch(v){return s(a)&&n.set({workbenchLayoutPreference:Object.assign({},t(),{ready:!1,loading:!1,saving:!1,receipt:null,promise:null,checkedAt:0,error:v.name==="AbortError"?"Workbench preference request timed out. Reload to check the saved layout.":v.message})}),!1}finally{clearTimeout(b),t()&&t().receipt===a&&!s(a)&&n.set({workbenchLayoutPreference:Object.assign(l(t()),{error:"Connection changed. Reload the workbench preference."})})}});return y.promise=h,n.set({workbenchLayoutPreference:y}),h}function L(){var e=f();return e.loading||e.saving?e.promise||Promise.resolve(!1):!n.get("authIdentityLoaded")||!n.get("connected")?Promise.resolve(!1):e.ready&&Date.now()-e.checkedAt<3e4?Promise.resolve(!0):m()}function S(e){var r=f();return!k(e)||!r.ready||r.loading||r.saving||!n.get("connected")||!n.get("authIdentityLoaded")?Promise.resolve(!1):m(e)}n.subscribe(function(e,r){(e.myUserId!==r.myUserId||e.currentSlug!==r.currentSlug||e.connected!==r.connected||e.authIdentityLoaded!==r.authIdentityLoaded||e.projectSplitViewSocketGeneration!==r.projectSplitViewSocketGeneration)&&n.set({workbenchLayoutPreference:l(t())})});export{L as ensureWorkbenchLayoutPreference,S as saveWorkbenchLayoutMode};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as i,c as m}from"./chunk-DGOFGEUK.js";function k(e,r,n){var t=document.createElement("div");if(t.className="toast",r&&t.classList.add("toast-"+r),t.textContent=e,n){var o=document.createElement("div");o.style.cssText="font-size:11px;opacity:0.7;margin-top:4px;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap",o.textContent=n.split(`
|
|
2
|
-
`)[0],t.appendChild(o)}document.body.appendChild(t),requestAnimationFrame(function(){t.classList.add("visible")});var s=r==="warn"?5e3:1500;setTimeout(function(){t.classList.remove("visible"),setTimeout(function(){t.remove()},300)},s)}var ze=/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;function cr(e){var r;if(ze){var n=document.createElement("textarea");n.value=e,n.style.cssText="position:fixed;left:-9999px;opacity:0",document.body.appendChild(n),n.focus(),n.setSelectionRange(0,n.value.length),document.execCommand("copy"),document.body.removeChild(n),r=Promise.resolve()}else if(navigator.clipboard&&navigator.clipboard.writeText)r=navigator.clipboard.writeText(e);else{var t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;left:-9999px;opacity:0",document.body.appendChild(t),t.focus(),t.setSelectionRange(0,t.value.length),document.execCommand("copy"),document.body.removeChild(t),r=Promise.resolve()}return r.then(function(){k("Copied to clipboard")})}function he(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function N(e){var r=i.snap();return e&&r.connected&&e.socket===m()&&e.ownerId===(r.myUserId||null)&&e.slug===r.currentSlug&&e.sessionId===r.activeSessionId&&e.origin===r.sessionOriginId&&e.runtime===r.controlRuntimeId}function we(e){var r=i.get("studioDocumentSource");r&&clearTimeout(r.timer),r&&N(r)&&r.socket.send(JSON.stringify({type:"fs_unwatch"}));var n=i.snap(),t={token:crypto.randomUUID(),socket:m(),ownerId:n.myUserId||null,slug:n.currentSlug,sessionId:n.activeSessionId,origin:n.sessionOriginId,runtime:n.controlRuntimeId,path:e.path,expires:Date.now()+3e5};return t.timer=setTimeout(function(){i.get("studioDocumentSource")===t&&(N(t)&&t.socket.send(JSON.stringify({type:"fs_unwatch"})),i.set({studioDocumentSource:null}))},3e5),i.set({studioDocumentSource:t}),N(t)&&t.socket.send(JSON.stringify({type:"fs_watch",path:t.path})),Object.assign({},e,{studioDocument:{token:t.token,sourceSlug:t.slug,sourceSessionId:t.sessionId,sourceOrigin:t.origin,runtimeId:t.runtime,expires:t.expires,path:t.path}})}function fr(e,r,n){var t=r.message&&r.message.studioDocument;if(!(!n||!t||t.path!==r.message.path||t.sourceSlug!==r.studioSource.slug||t.sourceSessionId!==r.studioSource.sessionId||t.sourceOrigin!==r.studioSource.origin||t.runtimeId!==r.studioSource.runtime)){me();var o=m();o&&o.readyState===1&&o.send(JSON.stringify({type:"fs_unwatch"})),i.set({fileReadRequest:null,pendingFileNavigation:null});var s={descriptor:t,frame:n,document:n.contentDocument,source:e.source,owner:i.get("myUserId"),context:i.get("currentSlug")};s.timer=setTimeout(function(){i.get("studioDocumentView")===s&&i.set({studioDocumentView:{descriptor:s.descriptor,invalidated:!0}})},Math.max(0,t.expires-Date.now())),i.set({studioDocumentView:s})}}function Ve(e){var r=i.get("studioDocumentView");if(!r||r.invalidated||!r.frame||Date.now()>r.descriptor.expires||r.descriptor.path!==e)return null;var n=r.frame.clayStudioSource,t=n&&n.document===r.frame.contentDocument&&n.window===r.source&&n.identity();return t&&t.connected&&t.ownerId===r.owner&&t.slug===r.descriptor.sourceSlug&&t.sessionId===r.descriptor.sourceSessionId&&t.origin===r.descriptor.sourceOrigin&&t.runtime===r.descriptor.runtimeId&&r.document===r.frame.contentDocument&&r.source===r.frame.contentWindow&&r.owner===i.get("myUserId")&&r.context===i.get("currentSlug")?r:null}function pr(e){var r=i.get("studioDocumentView");if(!r||r.descriptor.path!==e)return!1;var n=Ve(e);return n?(n.source.postMessage({type:"clay-studio-document-refresh",token:n.descriptor.token},location.origin),!0):(k("The source connection changed. Reopen this document from its conversation."),!0)}function me(){var e=i.get("studioDocumentView");e&&clearTimeout(e.timer),e&&e.frame&&e.source===e.frame.contentWindow&&e.document===e.frame.contentDocument&&e.source.postMessage({type:"clay-studio-document-close",token:e.descriptor.token},location.origin),i.set({studioDocumentView:null})}function hr(e){var r=i.get("studioDocumentSource");return!N(r)||Date.now()>r.expires||e.path!==r.path||e.type!=="fs_file_changed"&&!(e.type==="fs_read_result"&&e.requestId===r.requestId)?!1:(window.parent.postMessage({type:"clay-studio-document-update",token:r.token,message:e},location.origin),!0)}function wr(){window.addEventListener("message",function(r){var n=r.data,t=i.get("studioDocumentSource");r.origin!==location.origin||r.source!==window.parent||!n||!t||n.token!==t.token||!N(t)||(n.type==="clay-studio-document-close"&&(clearTimeout(t.timer),t.socket.send(JSON.stringify({type:"fs_unwatch"})),i.set({studioDocumentSource:null})),n.type==="clay-studio-document-refresh"&&Date.now()<=t.expires&&(t.requestId="studio-document-"+crypto.randomUUID(),t.socket.send(JSON.stringify({type:"fs_read",path:t.path,requestId:t.requestId,projectSlug:t.slug,sessionId:String(t.sessionId),accountId:t.ownerId}))))});function e(){var r=i.get("studioDocumentSource");r&&clearTimeout(r.timer),N(r)&&r.socket.send(JSON.stringify({type:"fs_unwatch"})),i.set({studioDocumentSource:null});var n=i.get("studioDocumentView");me(),n&&i.set({studioDocumentView:{descriptor:n.descriptor,invalidated:!0}})}i.subscribe(function(r,n){(!r.connected&&n.connected||r.currentSlug!==n.currentSlug||r.activeSessionId!==n.activeSessionId||r.myUserId!==n.myUserId)&&e()}),document.addEventListener("contextual-ask-stopped",e,!0),document.addEventListener("click",function(r){r.target.closest("#generation-stop, #autonomous-run-stop, #send-btn.stop")&&e()},!0)}function Je(){var e=i.snap();return{projectSlug:e.currentSlug,ownerId:e.myUserId,sessionId:e.activeSessionId,origin:e.sessionOriginId,socket:m(),binding:e.paneCommittedBinding||null,epoch:e.sessionActionEpoch||0}}function Ge(e,r){var n=i.snap();return!!e&&e.socket===m()&&n.connected&&e.projectSlug===n.currentSlug&&e.ownerId===n.myUserId&&e.sessionId===n.activeSessionId&&e.origin===n.sessionOriginId&&e.epoch===(n.sessionActionEpoch||0)&&(r||!n.deferredSessionSwitch)&&!n.panePendingBinding&&!n.paneSuspended&&(e.binding?n.paneReady&&$(e.binding,n.paneCommittedBinding):!n.paneCommittedBinding)}function yr(e,r){var n=Je();return function(){if(Ge(n,r)){var t=i.get("paneCallbackBinding");i.set({paneCallbackBinding:n.binding});try{return e.apply(this,arguments)}finally{i.set({paneCallbackBinding:t})}}}}function $(e,r){return!!e&&!!r&&["requestId","generation","projectSlug","viewerId","ownerId","sessionId","sessionOriginId","role","workerGeneration","groupStamp","parentSessionOriginId"].every(function(n){return e[n]===r[n]})}function Ke(e,r){return!!e&&!!r&&["projectSlug","viewerId","ownerId","sessionId","sessionOriginId","role","workerGeneration","groupStamp","parentSessionOriginId"].every(function(n){return e[n]===r[n]})}function Ye(e,r,n){var t=(r||[]).find(function(a){return a.id===n});if(!t||t.isMate||!t.sessionOriginId||(t.runtimeMode||t.mode||"gui")!=="gui"||t.tuiSuspended)return null;var o=(e.splitGroups||[]).find(function(a){return a.members.indexOf(n)>=0}),s=t.sessionRole==="worker"&&r.find(function(a){return a.id===t.parentSessionId});return t.sessionRole==="worker"&&(!s||!t.parentAvailable||!Number.isSafeInteger(t.workerGeneration)||!s.sessionOriginId||s.ownerId!==t.ownerId||!o||!o.pair||o.pair.driverId!==s.id)?null:{projectSlug:e.currentSlug,viewerId:e.myUserId||null,ownerId:t.ownerId||null,sessionId:t.id,sessionOriginId:t.sessionOriginId,role:t.sessionRole==="worker"?"worker":"driver",workerGeneration:t.workerGeneration||null,parentSessionOriginId:s?s.sessionOriginId:null,groupStamp:o?JSON.stringify({id:o.id,members:o.members,pair:o.pair||null}):null}}function F(e,r){if(!e||!e.clayPane||e.closest&&e.closest(".split-pane-cached"))return!1;var n=e.clayPane,t=n.identity(),o=i.snap(),s=o.splitPanes;if(!o.connected)return!1;var a=t&&Ye(o,o.paneBindingSessions||[],t.sessionId),c=!!(t&&s&&s.panes.some(function(g){return g.slug===t.projectSlug&&g.sessionId===t.sessionId})),u=(o.projectSplitViews||[]).find(function(g){return g.id===o.projectSplitViewActiveId}),d=!!(t&&t.binding&&!s&&u&&u.sessions.some(function(g){return g.id===t.sessionId&&g.sessionOriginId===t.binding.sessionOriginId})),l=!!(t&&t.binding&&!s&&!u&&o.projectSplitViewSingletonOrigin===t.binding.sessionOriginId&&t.sessionId===Number(e.dataset.sessionId)&&t.binding.sessionOriginId===e.dataset.sessionOriginId);return n.source===e.contentWindow&&n.document===e.contentDocument&&t&&t.ready&&Ke(a,t.binding)&&t.ownerId===(o.myUserId||null)&&t.projectSlug===o.currentSlug&&(c||d||l)&&(!r||$(t.binding,r.paneBinding))}function Q(){return i.get("paneReady")&&!i.get("paneSuspended")?i.get("paneCommittedBinding"):null}function Sr(e){return!e||!e.paneBinding?!0:e.isConnected!==!1&&i.get("paneReady")&&!i.get("paneSuspended")&&$(e.paneBinding,i.get("paneCommittedBinding"))}function kr(e){if(i.get("paneSuspended"))return!1;var r=i.get("panePendingBinding")||i.get("paneCommittedBinding");return r?$(r,e):!e}function $e(e){var r=(i.get("cachedMatesList")||[]).find(function(o){return o&&o.id===e});if(!r||r.archived||r.contentAccess===!1||r.accessible===!1)return null;var n=i.get("myUserId");if(n&&r.createdBy&&r.createdBy!==n)return null;var t=(i.get("projectsHubList")||[]).find(function(o){return o.slug==="mate-"+e});return t&&t.contentAccess===!1?null:r}function te(e){return JSON.stringify([e.id,e.createdBy||null,e.createdAt||null,e.builtinKey||null])}function Br(e,r){var n=e||(i.get("contextualClay")||{}).mateId,t=i.get("contextualClay")||{};if(!r&&t.mateId===n&&t.startingAsk)return null;var o=r||t.mateId===n&&t.sessionId||(i.get("contextualSessionSelection")||{})[n];return Array.from(document.querySelectorAll("#contextual-clay iframe")).find(function(s){return s.dataset.mateId===n&&(!o||String(o)===s.dataset.sessionId)})||null}function Cr(e){var r=$e(e||(i.get("contextualClay")||{}).mateId);return r&&r.builtinKey!=="clay"?document.querySelector('.icon-strip-project-mate[data-mate-id="'+CSS.escape(r.id)+'"]'):document.querySelector(".icon-strip-brand")}function Er(e){if(!e||!e.isConnected||e.closest('[hidden], [inert], [aria-hidden="true"]'))return!1;var r=e.getBoundingClientRect(),n=getComputedStyle(e);if(n.visibility!=="visible"||Number(n.opacity)===0||!r.width||!r.height||r.left<0||r.top<0||r.right>innerWidth||r.bottom>innerHeight)return!1;for(var t=e.parentElement;t;t=t.parentElement)if(Number(getComputedStyle(t).opacity)===0)return!1;return[r.left+2,r.left+r.width/2,r.right-2].every(function(o){var s=document.elementFromPoint(o,r.top+r.height/2);return s&&e.contains(s)})}function ne(e){var r=/^[a-f0-9-]{36}$/;return e&&e.version===1&&r.test(e.id)&&r.test(e.token)&&/^activity:[a-f0-9-]{36}$/.test(e.activityId)&&Number.isSafeInteger(e.deadline)&&e.target&&["document","sketch","browser"].indexOf(e.target.surface)>=0&&typeof e.target.key=="string"&&e.target.key.length<=400&&/^[a-f0-9]{64}$/.test(e.target.revision)}function ie(e,r){return ne(e)&&e.mateId===r.activeProjectMateId&&e.sourceSlug==="mate-"+e.mateId&&e.ownerId===(r.myUserId||null)&&e.runtimeId===r.controlRuntimeId&&e.sourceSlug===r.currentSlug&&e.sourceSessionId===r.activeSessionId&&e.sourceSessionOriginId===r.sessionOriginId&&(r.cachedMatesList||[]).some(function(n){return n.id===e.mateId&&n.builtinKey==="clay"&&!n.archived&&!n.lifecycleDeletion&&te(n)===e.sourceMateStamp})}function oe(e){var r=i.get("clayControlActivity"),n=i.get("clayControlForwarded"),t=i.get("paneMode")?n:r&&r.message;return t&&t.id===e.activityId&&t.mateId===e.mateId&&t.sourceSlug===e.sourceSlug&&t.sourceSessionId===e.sourceSessionId&&t.sourceSessionOriginId===e.sourceSessionOriginId&&t.sourceMateStamp===e.sourceMateStamp&&t.sourceQueryGeneration===e.sourceQueryGeneration&&t.phase!=="clear"&&!(i.get("clayControlReceipts")||[]).some(function(o){return o.id===e.activityId&&o.stopped})}function Qe(){return{window,document,identity:function(){var e=i.snap();return{ownerId:e.myUserId||null,slug:e.currentSlug,sessionId:e.activeSessionId,origin:e.sessionOriginId,connected:e.connected,runtime:e.controlRuntimeId,mateId:e.activeProjectMateId}}}}function Ur(e,r){if(!i.get("paneMode")||window.parent===window)return!1;var n=window.frameElement;if(!n)return!1;n.clayStudioSource=Qe();var t=e.controlPresentation;if(t&&(!ie(t,i.snap())||!oe(t)))return!0;r==="clay-pane-present-markdown"&&(e=we(e));var o=Object.assign({},i.get("clayStudioRelays")||{});return Object.keys(o).forEach(function(s){Date.now()>o[s].evidence.deadline&&delete o[s]}),Object.keys(o).length>=100||(t&&(o[t.id]={evidence:t,socket:m()}),i.set({clayStudioRelays:o}),window.parent.postMessage({type:r,message:e,paneBinding:Q(),studioSource:n.clayStudioSource.identity()},location.origin)),!0}function ve(e,r){if(e.origin!==location.origin||!r||!r.studioSource)return null;var n=Array.from(document.querySelectorAll("#contextual-clay iframe, .split-pane-frame")).find(function(l){return l.contentWindow===e.source}),t=n&&n.clayStudioSource,o=t&&t.window===n.contentWindow&&t.document===n.contentDocument&&t.identity(),s=r.studioSource;if(!o||!o.connected||o.ownerId!==(i.get("myUserId")||null)||o.ownerId!==s.ownerId||o.slug!==s.slug||o.sessionId!==s.sessionId||o.origin!==s.origin||o.runtime!==s.runtime||new URL(n.src,location.href).pathname!=="/p/"+encodeURIComponent(o.slug)+"/")return null;if(n.classList.contains("split-pane-frame")){if(n.clayPane&&!F(n,r))return null;var a=i.get("splitPanes");if(!a||!a.panes.some(function(l){return l.slug===o.slug&&String(l.sessionId)===String(o.sessionId)}))return null}else{var c=n.conversation,u=c&&c.document===n.contentDocument&&c.source===n.contentWindow&&c.identity();if(!u||!u.connected||!u.available||u.ownerId!==o.ownerId||u.sessionId!==o.sessionId||u.sessionOriginId!==o.origin)return null}var d=r.message&&r.message.controlPresentation;return d&&(!ne(d)||d.sourceSlug!=="mate-"+d.mateId||d.mateId!==o.mateId||!(i.get("cachedMatesList")||[]).some(function(l){return l.id===d.mateId&&l.builtinKey==="clay"&&!l.archived&&!l.lifecycleDeletion&&te(l)===d.sourceMateStamp})||d.sourceSlug!==o.slug||d.sourceSessionId!==o.sessionId||d.sourceSessionOriginId!==o.origin||d.ownerId!==o.ownerId||d.runtimeId!==o.runtime)?null:n}function jr(e,r){var n=ve(e,r),t=r.message&&r.message.controlPresentation;if(!n||!t||!oe(t)||Date.now()>t.deadline)return!1;var o=Object.assign({},i.get("clayStudioForwarded")||{});return Object.keys(o).forEach(function(s){Date.now()>o[s].evidence.deadline&&delete o[s]}),Object.keys(o).length>=100?!1:(o[t.id]={frame:n,document:n.contentDocument,window:e.source,data:r,evidence:t},i.set({clayStudioForwarded:o}),!0)}function Ze(e){var r=m(),n=i.get("myUserId"),t=i.get("currentSlug"),o=(i.get("clayStudioForwarded")||{})[e.id];return{valid:function(){return Date.now()>e.deadline||!oe(e)||!i.get("connected")||n!==i.get("myUserId")||t!==i.get("currentSlug")||m()!==r?!1:o?o.document===o.frame.contentDocument&&o.window===o.frame.contentWindow&&!!ve({origin:location.origin,source:o.window},o.data):ie(e,i.snap())},send:function(s){var a={type:"clay_studio_rendered",id:e.id,token:e.token,sessionOriginId:e.sourceSessionOriginId,revision:e.target.revision,visible:s};o?o.document===o.frame.contentDocument&&o.window.postMessage({type:"clay-studio-receipt",message:a},location.origin):m()===r&&r&&r.readyState===1&&r.send(JSON.stringify(a))}}}async function Xe(e){var r=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(JSON.stringify(e)));return Array.from(new Uint8Array(r)).map(function(n){return n.toString(16).padStart(2,"0")}).join("")}function be(e,r,n,t){if(!r)return;delete r.dataset.controlSurface;var o=e.controlPresentation;if(!ne(o))return;var s=Ze(o),a=!1,c,u,d=0,l={painted:!1,evidence:o,target:o.target,element:r,valid:s.valid};r.dataset.controlSurface=o.id;var g=Object.assign({},i.get("clayStudioSurfaces")||{});Object.keys(g).forEach(function(f){(!g[f].element.isConnected||g[f].element===r||Date.now()>g[f].evidence.deadline+6e3)&&delete g[f]}),g[o.id]=l,i.set({clayStudioSurfaces:g});function h(f){a||(a=!0,clearTimeout(u),cancelAnimationFrame(c),document.removeEventListener("visibilitychange",x),s.send(f))}l.cancel=function(){h(!1)};function x(){document.hidden&&h(!1)}document.addEventListener("visibilitychange",x),u=setTimeout(function(){h(!1)},Math.max(0,o.deadline-Date.now()));var S=o.target.surface==="document"?{content:e.content,exists:e.exists,size:e.size}:o.target.surface==="sketch"?e.source:e.data;Promise.all([Promise.resolve(n),Xe(S)]).then(function(f){if(f[1]!==o.target.revision){h(!1);return}function w(){if(!a){if(!s.valid()||document.hidden||r.dataset.controlSurface!==o.id){h(!1);return}d=er(t||r)?d+1:0,d>=2?(l.painted=!0,h(!0)):c=requestAnimationFrame(w)}}c=requestAnimationFrame(w)}).catch(function(){h(!1)})}function er(e){if(!e||!e.isConnected||e.closest('[hidden], [inert], [aria-hidden="true"]'))return!1;var r=e.getBoundingClientRect(),n=getComputedStyle(e);if(n.visibility!=="visible"||Number(n.opacity)===0)return!1;for(var t=e.parentElement;t;t=t.parentElement){var o=getComputedStyle(t);if(o.visibility!=="visible"||Number(o.opacity)===0)return!1}var s=Math.max(0,r.left),a=Math.min(innerWidth,r.right),c=Math.max(0,r.top),u=Math.min(innerHeight,r.bottom);return a<=s||u<=c?!1:[.2,.5,.8].some(function(d){return[.2,.5,.8].some(function(l){var g=document.elementFromPoint(s+(a-s)*d,c+(u-c)*l);return g&&e.contains(g)})})}function Wr(e){var r=i.get("clayStudioSurfaces")||{},n=Object.values(r).find(function(t){return t.painted&&t.target.surface===e.surface&&t.target.key===e.key&&t.target.revision===e.revision&&t.target.runtimeId===e.runtimeId&&t.target.sourceSessionOriginId===e.sourceSessionOriginId&&t.target.sourceSessionId===e.sourceSessionId&&t.target.sourceSlug===e.sourceSlug&&t.element.dataset.controlSurface===t.evidence.id&&t.valid()});return n&&n.element}function Hr(){window.addEventListener("message",function(r){if(!(r.origin!==location.origin||r.source!==window.parent||!r.data||r.data.type!=="clay-studio-receipt")){var n=r.data.message,t=Object.assign({},i.get("clayStudioRelays")||{}),o=n&&t[n.id];!o||o.evidence.token!==n.token||!ie(o.evidence,i.snap())||m()!==o.socket||o.socket.readyState!==1||Date.now()>o.evidence.deadline||(delete t[n.id],i.set({clayStudioRelays:t}),o.socket.send(JSON.stringify(n)))}});function e(){Object.values(i.get("clayStudioSurfaces")||{}).forEach(function(r){delete r.element.dataset.controlSurface,r.cancel&&r.cancel()}),i.set({clayStudioRelays:{},clayStudioForwarded:{},clayStudioSurfaces:{}})}document.addEventListener("contextual-ask-stopped",e,!0),document.addEventListener("click",function(r){r.target.closest("#generation-stop, #autonomous-run-stop, #send-btn.stop")&&e()},!0),i.subscribe(function(r,n){(!r.connected&&n.connected||r.currentSlug!==n.currentSlug||r.activeSessionId!==n.activeSessionId||r.myUserId!==n.myUserId)&&e()})}var se=null;function E(){se||(se=requestAnimationFrame(function(){se=null,lucide.createIcons()}))}function v(e,r){return r?'<span class="'+r+'"><i data-lucide="'+e+'"></i></span>':'<i data-lucide="'+e+'"></i>'}function ye(e){return!i.get("paneMode")||window.parent===window?!1:(window.parent.postMessage({type:"clay-pane-open-browser",paneBinding:Q(),url:e,projectSlug:i.get("currentSlug"),sessionId:String(i.get("activeSessionId"))},window.location.origin),!0)}function Jr(e,r){if(!e||e.origin!==window.location.origin||!r||!e.data||e.data.type!=="clay-pane-open-browser")return!1;var n=e.data,t=Object.assign({},i.snap()),o=Array.from(r.querySelectorAll(".split-pane-frame")).find(function(l){return l.contentWindow===e.source}),s=o&&o.clayPane?{slug:o.dataset.projectSlug,sessionId:o.dataset.sessionId}:o&&t.splitPanes&&t.splitPanes.panes&&t.splitPanes.panes.find(function(l){return String(l.slug)===o.dataset.projectSlug&&String(l.sessionId)===o.dataset.sessionId});if(!t.connected||!s||n.projectSlug!==t.currentSlug||n.projectSlug!==o.dataset.projectSlug||String(n.sessionId)!==o.dataset.sessionId)return!0;var a=new URL("/p/"+encodeURIComponent(s.slug)+"/?pane=1&session="+encodeURIComponent(s.sessionId),window.location.href).href;if(o.clayPane?!F(o,n):o.src!==a)return!0;var c=o.clayPane&&o.clayPane.identity().binding,u=o.contentDocument;function d(){var l=i.snap();return!l.connected||l.currentSlug!==t.currentSlug||l.myUserId!==t.myUserId||l.currentProjectOwnerId!==t.currentProjectOwnerId||l.projectSplitViewSocketGeneration!==t.projectSplitViewSocketGeneration||o.contentWindow!==e.source||o.contentDocument!==u||o.dataset.projectSlug!==n.projectSlug||String(o.dataset.sessionId)!==String(n.sessionId)||!Array.from(r.querySelectorAll(".split-pane-frame")).includes(o)?!1:c?!!o.clayPane&&F(o,n)&&o.clayPane.identity().binding===c:o.src===a&&!!(l.splitPanes&&l.splitPanes.panes.some(function(g){return String(g.slug)===s.slug&&String(g.sessionId)===String(s.sessionId)}))}return import("./chunk-7GZH3FZY.js").then(function(l){d()&&l.openSharedBrowserAt(n.url)}).catch(function(l){k(l.message||"Could not open the browser.","warn")}),!0}function z(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Z(e){if(typeof e!="string"||!e.startsWith("browser:")||e.length>8200)return null;var r=e.slice(8);if(!/^https?:\/\//i.test(r)||/[\u0000-\u0020]/.test(r))return null;try{var n=new URL(r);return n.username||n.password||!["http:","https:"].includes(n.protocol)?null:n.href}catch{return null}}function rr(e,r,n){var t=Z(e);if(!t)return null;var o=String(n||"").replace(/<[^>]*>/g,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").trim();return(!o||o===e||o===t)&&(o=new URL(t).host),'<button type="button" class="clay-browser-link clayos-record-link" data-browser-url="'+z(t)+'" data-browser-project="'+z(i.get("currentSlug")||"")+'" title="'+z("Open in Clay Browser \xB7 "+t)+'" aria-label="'+z("Open in Clay Browser: "+o)+'">'+v("globe")+"<span>Browser</span><small>"+z(o)+"</small></button>"}function Zr(e){!e||typeof document>"u"||(e.querySelectorAll("a[href]").forEach(function(r){if(!r.closest("pre, code, button")){var n=rr(r.getAttribute("href"),"",r.textContent);if(n){var t=document.createElement("template");t.innerHTML=n,r.replaceWith(t.content)}}}),ae(),E())}function ae(){i.get("browserLinksBound")||(i.set({browserLinksBound:!0}),document.addEventListener("click",function(e){var r=e.target.closest&&e.target.closest(".clay-browser-link");if(r){e.preventDefault(),e.stopPropagation();var n=Z("browser:"+r.dataset.browserUrl);if(!n){k("This browser link is invalid.","warn");return}if(r.dataset.browserProject&&r.dataset.browserProject!==i.get("currentSlug")){k("Open this link from its original project.","warn");return}ye(n)||import("./chunk-7GZH3FZY.js").then(function(t){t.openSharedBrowserAt(n)}).catch(function(t){k(t.message||"Could not open the browser.","warn")})}}))}function y(e){return he(String(e)).replace(/"/g,""").replace(/'/g,"'")}function C(){return i.get("sharedBrowserSettings")||{}}function B(e){i.set({sharedBrowserSettings:Object.assign({},C(),e)})}function L(){return document.getElementById("shared-browser-settings")}function T(e,r,n,t){return'<button type="button" data-settings-action="'+r+'" data-target="'+y(n||"")+'" data-label="'+y(t||n||"")+'">'+y(e)+"</button>"}function ce(e,r){var n=m();if(!n||n.readyState!==1){B({error:"Reconnect to manage browser data.",pending:!1}),q();return}var t=crypto.randomUUID();B({pending:!0,requestId:t,error:"",notice:""}),n.send(JSON.stringify({type:"shared_browser_settings",sessionId:i.get("activeSessionId"),requestId:t,operation:e,target:r})),q(),setTimeout(function(){C().requestId===t&&C().pending&&(B({pending:!1,error:"The request timed out. Refresh to check the saved state."}),q())},15e3)}function V(e){var r=!!C().open;B({open:!1,review:null}),q();var n=document.querySelector('[data-action="settings"]');n&&r&&e!==!1&&n.focus()}function Se(){return'<section id="shared-browser-settings" class="shared-browser-settings" aria-label="Browser settings" hidden></section>'}function ke(e){e.querySelector('[data-action="settings"]').onclick=function(){B({open:!0,page:"sites",data:null,review:null,filter:""}),ce("list"),L().querySelector('[data-settings-action="back"]').focus()},L().addEventListener("keydown",function(r){r.key==="Escape"&&(r.preventDefault(),r.stopPropagation(),V())}),L().addEventListener("input",function(r){r.target.matches("[data-settings-filter]")&&(B({filter:r.target.value}),Ie(),L().dataset.key=JSON.stringify([C(),i.get("connected")]))}),L().addEventListener("click",function(r){var n=r.target.closest("[data-settings-action]");if(!(!n||n.disabled)){var t=n.dataset.settingsAction;if(t==="back"){V();return}if(t==="sites"||t==="history"){B({page:t,filter:"",review:null,notice:"",error:""}),q();return}if(t==="refresh"){ce("list");return}if(t==="cancel"){B({review:null}),q(),L().querySelector('[data-settings-action="refresh"]').focus();return}if(t==="confirm"){var o=C().review;o&&ce(o.action,o.target);return}B({notice:"",error:"",review:{action:t,target:n.dataset.target,label:n.dataset.label||n.dataset.target}}),q(),L().querySelector('[data-settings-action="cancel"]').focus()}})}function Ie(){var e=L(),r=C();if(!(!e||!r.open)){var n=e.querySelector(".browser-settings-rows");if(n){var t=(r.filter||"").toLowerCase(),o=r.data||{sites:[],history:[]};r.page==="history"?n.innerHTML=o.history.filter(function(s){return s.url.toLowerCase().includes(t)}).map(function(s){return'<div class="browser-settings-row"><div><span class="browser-settings-url">'+y(s.url)+"</span><small>"+y(new Date(s.at).toLocaleString())+"</small></div>"+T("Remove","delete_history",s.id,s.url)+"</div>"}).join(""):n.innerHTML=o.sites.filter(function(s){return s.host.toLowerCase().includes(t)}).map(function(s){return"<details><summary>"+y(s.host)+"<small>"+s.cookies.length+(s.cookies.length===1?" cookie \xB7 ":" cookies \xB7 ")+s.origins.length+(s.origins.length===1?" storage origin":" storage origins")+'</small></summary><div class="browser-settings-row"><span>Cookies and site storage</span>'+T("Remove site data","delete_site",s.host)+"</div>"+s.origins.map(function(a){return'<p class="browser-settings-origin">'+y(a.origin)+"<small>"+a.localStorage+" localStorage entries \xB7 "+a.databases+" IndexedDB databases</small></p>"}).join("")+s.cookies.map(function(a){var c=a.domain+a.path+" \xB7 "+(a.expires===-1?"Session cookie":"Expires "+new Date(a.expires*1e3).toLocaleDateString())+(a.httpOnly?" \xB7 HttpOnly":"")+(a.secure?" \xB7 Secure":"")+(a.partitioned?" \xB7 Partitioned":"");return'<div class="browser-settings-row"><div><span>'+y(a.name)+"</span><small>"+y(c)+"</small></div>"+T("Remove cookie","delete_cookie",a.id,a.name+" \xB7 "+a.domain+a.path)+"</div>"}).join("")+"</details>"}).join(""),n.innerHTML||(n.innerHTML='<p class="browser-settings-muted">'+(r.pending&&!r.data?"Loading saved data\u2026":t?"No matching entries.":r.page==="history"?"No saved browsing history.":"No saved cookies or site data.")+"</p>"),n.querySelectorAll("button").forEach(function(s){s.disabled=!!r.pending||!i.get("connected")})}}}function q(){var e=L();if(e){var r=C(),n=e.closest(".shared-browser-panel"),t=i.get("sharedBrowser"),o=n.querySelector('[data-action="settings"]');if(o.hidden=!(t&&t.personalCookiesAvailable),o.disabled=!i.get("connected"),o.setAttribute("aria-expanded",String(!!r.open)),e.hidden=!r.open,n.classList.toggle("browser-settings-open",!!r.open),!!r.open){var s=JSON.stringify([r,i.get("connected")]);if(e.dataset.key!==s){e.dataset.key=s;var a=r.page||"sites";e.innerHTML='<div class="browser-settings-heading">'+T("Back to browser","back")+'<h3>Browser settings</h3></div><p class="browser-settings-muted">Personal \xB7 Shared across your Mates. Incognito tabs do not save data here.</p><nav aria-label="Browser settings sections">'+T("Cookies & site data","sites")+T("History","history")+'</nav><p class="browser-settings-muted">'+(a==="sites"?"Cookies, localStorage and IndexedDB are saved for your account. New personal tabs restore saved site storage. Removing data may sign you out. Removals also apply to open personal tabs. Sites may create new data afterwards.":"Your latest 500 page visits. Clearing this list leaves open tabs, their Back/Forward navigation and conversation activity unchanged.")+'</p><div class="browser-settings-tools"><input data-settings-filter aria-label="Filter saved browser data" placeholder="'+(a==="sites"?"Find a site":"Find a page")+'" value="'+y(r.filter||"")+'">'+T("Refresh","refresh")+T(a==="sites"?"Clear all site data":"Clear history",a==="sites"?"clear_data":"clear_history")+'</div><p class="browser-settings-feedback" role="status">'+y(r.error||(i.get("connected")?r.pending?"Updating\u2026":r.notice||"":"Disconnected. Reconnect and refresh to see current saved data."))+"</p>"+(r.review?'<div class="browser-settings-review" role="group" aria-label="Confirm removal"><strong>'+(r.review.action.includes("history")?"Remove browsing history?":"Remove saved site data?")+"</strong><p>"+(r.review.action.includes("history")?"This removes "+(r.review.action==="clear_history"?"all saved visits":"this saved visit")+" from your personal history.":r.review.action==="delete_cookie"?"This removes "+y(r.review.label)+" across your personal Mate browsers and may sign you out.":"This removes "+(r.review.action==="clear_data"?"all cookies and site storage":"cookies and storage for "+y(r.review.target))+" across your personal Mate browsers and may sign you out.")+"</p>"+T("Cancel","cancel")+T("Remove","confirm")+"</div>":"")+'<div class="browser-settings-rows"></div>',e.querySelector('[data-settings-action="'+a+'"]').setAttribute("aria-current","page"),e.querySelectorAll("button").forEach(function(c){c.disabled=c.dataset.settingsAction!=="back"&&(!!r.pending||!i.get("connected"))}),Ie()}}}}function xe(e){if(!e.requestId||e.requestId!==C().requestId)return!1;if(e.type==="shared_browser_settings"){var r=!!C().review;B({data:e.settings,pending:!1,review:null,error:"",notice:r?"Removed from your saved browser data.":""})}else if(e.type==="shared_browser_error")B({pending:!1,error:e.error});else return!1;return q(),C().open&&r&&L().querySelector('[data-settings-action="refresh"]').focus(),!0}function Be(e,r,n){var t=e.querySelector(".shared-browser-tabs"),o=i.get("sharedBrowsers")||[],s=i.get("sharedBrowser"),a=JSON.stringify([o.map(function(d){return[d.id,d.url,d.control,d.phase,d.incognito,d.personalCookiesAvailable]}),s&&s.id,i.get("connected")]);if(t.dataset.key!==a){t.dataset.key=a,t.replaceChildren(),o.forEach(function(d,l){var g=document.createElement("div");g.className="shared-browser-tab";var h=document.createElement("button");h.type="button",h.setAttribute("role","tab"),h.setAttribute("aria-selected",String(!!s&&s.id===d.id));var x="Tab "+(l+1);try{d.url&&(x=new URL(d.url).hostname)}catch{}var S=document.createElement("span");S.textContent=x+(d.personalCookiesAvailable&&d.incognito?" \xB7 Incognito":"");var f=document.createElement("small");f.textContent=d.phase==="ended"?"Ended":d.control==="agent"?"Shared":"You only",h.append(S,f),h.title=x+" \xB7 "+(d.incognito===!1?"Personal browser":"Incognito")+" \xB7 "+(d.phase==="ended"?"Ended":d.control==="agent"?"You and Clay can control this tab":"Only you can control this tab. Clay is paused."),h.onclick=function(){r(d.id)},h.onkeydown=function(p){var U=p.key==="ArrowRight"?(l+1)%o.length:p.key==="ArrowLeft"?(l+o.length-1)%o.length:p.key==="Home"?0:p.key==="End"?o.length-1:-1;U<0||(p.preventDefault(),r(o[U].id),t.querySelectorAll('[role="tab"]')[U].focus())};var w=document.createElement("button");w.type="button",w.textContent="\xD7",w.setAttribute("aria-label","Close browser tab "+(l+1)),w.disabled=!i.get("connected"),w.onclick=function(){n("close",{browserId:d.id})},g.append(h,w),t.appendChild(g)});var c=document.createElement("button");if(c.type="button",c.textContent="+",c.setAttribute("aria-label","New browser tab"),c.disabled=!i.get("connected"),c.title=s&&s.personalCookiesAvailable?"New tab \xB7 Personal browser":"New incognito tab",c.onclick=function(){n("open",{newTab:!0})},t.appendChild(c),s&&s.personalCookiesAvailable){var u=document.createElement("button");u.type="button",u.innerHTML=v("glasses"),u.setAttribute("aria-label","New incognito tab"),u.title="New incognito tab \xB7 Site data is not saved",u.disabled=!i.get("connected"),u.onclick=function(){n("open",{newTab:!0,incognito:!0})},t.appendChild(u),E()}}}var j={},Ce={terminal:"terminal-container",browser:"shared-browser-panel","file-viewer":"file-viewer","project-logs":"project-logs-panel",you:"you-panel",issues:"issues-panel",linear:"linear-panel","notes-browser":"notes-browser","scheduled-tasks":"scheduled-tasks-panel",debates:"debates-workbench","mcp-skills":"mcp-skills-workbench","mate-knowledge":"mate-knowledge-workbench",wireframe:"wireframe-panel"};function Oe(){var e=i.get("myUserId"),r=i.get("currentSlug");return import("./chunk-I57URYSL.js").then(function(n){return e!==i.get("myUserId")||r!==i.get("currentSlug")?!1:n.ensureWorkbenchLayoutPreference()}).catch(function(){return e!==i.get("myUserId")||r!==i.get("currentSlug")||i.set({workbenchLayoutPreference:Object.assign({},i.get("workbenchLayoutPreference")||{},{loading:!1,saving:!1,error:"Workbench layout could not be loaded. Try again."})}),!1})}function R(){return i.get("rightWorkbenchDockedOwners")||[]}function J(e){return i.get("rightWorkbenchOwner")===e||R().indexOf(e)!==-1}function de(e){var r=i.get("rightWorkbenchPanelRevisions")||{};return r[e]==null?i.get("rightWorkbenchRevision")||0:r[e]}function X(e,r,n){i.set({rightWorkbenchOwner:e,rightWorkbenchDockedOwners:r,rightWorkbenchPanelRevisions:n,rightWorkbenchRevision:(i.get("rightWorkbenchRevision")||0)+1})}function Ee(e,r){if(J(e)){var n=R().filter(function(o){return o!==e}),t=i.get("rightWorkbenchOwner");r&&n.push(e),X(r?t:e,n,i.get("rightWorkbenchPanelRevisions")||{}),!r&&t&&t!==e&&n.indexOf(t)===-1&&j[t]&&j[t]()}}function Le(){if(!(typeof document>"u")){var e=document.getElementById("main-panels");if(e){var r=R(),n=i.get("workbenchLayoutPreference")||{};e.dataset.workbenchMode=r.length?"docked":"overlay",e.dataset.workbenchDocks=String(r.length),Object.keys(Ce).forEach(function(t){var o=document.getElementById(Ce[t]);if(o){var s=r.indexOf(t)!==-1;if(o.dataset.workbenchPlacement=s?"docked":"overlay",o.dataset.workbenchActive=i.get("rightWorkbenchOwner")===t?"true":"false",!!J(t)){var a=o.querySelector(":scope > header, :scope > .file-viewer-header .file-viewer-tabbar, :scope > .terminal-header");if(a){var c=o.querySelector(".workbench-layout-toggle");if(!c){var u=a.querySelector('[class*="window-actions"], .terminal-header-actions, .shared-browser-window, :scope.mcp-skills-header > div')||a;c=document.createElement("button"),c.type="button",c.className="workbench-layout-toggle",c.addEventListener("click",function(){var l=i.get("workbenchLayoutPreference")||{};if(!l.ready||l.loading||l.saving){Oe();return}var g=i.get("myUserId"),h=i.get("currentSlug"),x=de(t),S=R().indexOf(t)!==-1;function f(){return c.isConnected&&J(t)&&g===i.get("myUserId")&&h===i.get("currentSlug")&&x===de(t)&&S===(R().indexOf(t)!==-1)}import("./chunk-I57URYSL.js").then(function(w){var p=i.get("workbenchLayoutPreference")||{};return!f()||p.mode!==l.mode||p.revision!==l.revision||p.loading||p.saving||!p.ready?!1:w.saveWorkbenchLayoutMode(S?"overlay":"docked")}).then(function(w){if(f()){var p=i.get("workbenchLayoutPreference")||{};w===!0&&p.ready&&p.mode===(S?"overlay":"docked")?Ee(t,!S):w===!1&&k(p.error||"Workbench layout could not be saved. Try again.","error")}}).catch(function(w){f()&&k(w.message||"Workbench layout could not be saved. Try again.","error")})});var d=u===a?a.querySelector("[data-knowledge-wide]"):u.firstElementChild;u.insertBefore(c,d||null)}c.dataset.mode!==(s?"docked":"overlay")&&(c.dataset.mode=s?"docked":"overlay",c.innerHTML=v(s?"layers-2":"panel-right"),E()),c.setAttribute("aria-label",s?"Float workbench over sessions":"Dock workbench beside sessions"),c.title=n.error||c.getAttribute("aria-label"),c.setAttribute("aria-pressed",s?"true":"false"),c.disabled=!!n.loading||!!n.saving,c.setAttribute("aria-busy",n.loading||n.saving?"true":"false")}}}})}}}function Te(e,r){!e||typeof r!="function"||(j[e]=r)}function ee(e){typeof document<"u"&&Oe();var r=i.get("rightWorkbenchOwner"),n=R().slice(),t=i.get("workbenchLayoutPreference")||{};!r&&!n.length&&t.ready&&t.mode==="docked"&&n.push(e);var o=n.indexOf(e)!==-1&&r&&n.indexOf(r)===-1?r:e,s=(i.get("rightWorkbenchRevision")||0)+1,a=Object.assign({},i.get("rightWorkbenchPanelRevisions")||{});return Object.keys(a).forEach(function(c){c!==o&&n.indexOf(c)===-1&&delete a[c]}),a[e]=s,X(o,n,a),Object.keys(j).forEach(function(c){if(!(c===e||c===o||n.indexOf(c)!==-1))try{j[c]()}catch{}}),typeof requestAnimationFrame=="function"&&requestAnimationFrame(Le),s}function ue(e){if(J(e)){var r=R().filter(function(t){return t!==e}),n=Object.assign({},i.get("rightWorkbenchPanelRevisions")||{});delete n[e],X(i.get("rightWorkbenchOwner")===e?r[r.length-1]||null:i.get("rightWorkbenchOwner"),r,n)}}function ut(e,r){return J(e)&&de(e)===r}function tr(){X(null,[],{}),Object.keys(j).forEach(function(e){try{j[e]()}catch{}})}i.subscribe(function(e,r){if(e.currentSlug!==r.currentSlug||e.myUserId!==r.myUserId){tr();return}var n=e.workbenchLayoutPreference||{},t=r.workbenchLayoutPreference||{};if(!t.ready&&n.ready&&n.mode==="docked"&&!R().length&&e.rightWorkbenchOwner){Ee(e.rightWorkbenchOwner,!0);return}(e.workbenchLayoutPreference!==r.workbenchLayoutPreference||e.rightWorkbenchOwner!==r.rightWorkbenchOwner||e.rightWorkbenchDockedOwners!==r.rightWorkbenchDockedOwners)&&Le()});function P(){var e=i.get("sharedBrowser");return e&&!e.handoff&&e.phase==="live"&&i.get("connected")}var qe=50,Pe=2e3;function D(e){i.set({sharedBrowserUi:Object.assign({},i.get("sharedBrowserUi"),e)})}function G(){var e=i.get("sharedBrowserUi")||{};clearTimeout(e.moveTimer),clearTimeout(e.wheelTimer),D({moveTimer:null,move:null,wheelTimer:null,wheelDelta:0,pointer:null,composing:!1})}function De(e,r){function n(a){var c=e.getBoundingClientRect(),u=Math.min(c.width/e.width,c.height/e.height),d=(a.clientX-c.left-(c.width-e.width*u)/2)/u,l=(a.clientY-c.top-(c.height-e.height*u)/2)/u;return{x:Math.max(0,Math.min(e.width-1,d)),y:Math.max(0,Math.min(e.height-1,l))}}function t(){var a=i.get("sharedBrowserUi")||{};clearTimeout(a.moveTimer);var c=a.move;D({move:null,moveTimer:null}),c&&P()&&I(Object.assign({kind:"move"},c))}function o(){var a=i.get("sharedBrowserUi")||{};clearTimeout(a.wheelTimer);var c=a.wheelDelta||0;if(!P()){D({wheelDelta:0,wheelTimer:null});return}var u=Math.max(-Pe,Math.min(Pe,c)),d=c-u;D({wheelDelta:d,wheelTimer:d?setTimeout(o,qe):null}),u&&I({kind:"wheel",deltaY:u})}e.addEventListener("pointermove",function(a){if(P()){var c=i.get("sharedBrowserUi")||{};D({move:n(a),moveTimer:c.moveTimer||setTimeout(t,40)})}}),e.addEventListener("pointerdown",function(a){!P()||a.button!==0||(a.preventDefault(),t(),o(),e.setPointerCapture(a.pointerId),D({pointer:a.pointerId}),r.focus({preventScroll:!0}),I(Object.assign({kind:"down"},n(a))))});function s(a){var c=i.get("sharedBrowserUi")||{};c.pointer===a.pointerId&&(t(),D({pointer:null}),P()&&I(Object.assign({kind:"up"},n(a))),e.hasPointerCapture(a.pointerId)&&e.releasePointerCapture(a.pointerId))}e.addEventListener("pointerup",s),e.addEventListener("pointercancel",s),e.addEventListener("lostpointercapture",s),e.addEventListener("wheel",function(a){if(P()){a.preventDefault();var c=i.get("sharedBrowserUi")||{};D({wheelDelta:(c.wheelDelta||0)+a.deltaY,wheelTimer:c.wheelTimer||setTimeout(o,qe)})}},{passive:!1}),e.addEventListener("focus",function(){P()&&r.focus({preventScroll:!0})}),r.addEventListener("compositionstart",function(){D({composing:!0})}),r.addEventListener("compositionend",function(){D({composing:!1}),P()&&r.value&&I({kind:"text",text:r.value}),r.value=""}),r.addEventListener("input",function(){(i.get("sharedBrowserUi")||{}).composing||(P()&&r.value&&I({kind:"text",text:r.value}),r.value="")}),r.addEventListener("keydown",function(a){if(!(!P()||a.isComposing)){var c=a.key;(a.ctrlKey||a.metaKey)&&c.toLowerCase()==="a"?c="ControlOrMeta+A":c==="Tab"&&a.shiftKey&&(c="Shift+Tab"),/^(Tab|Shift\+Tab|Enter|Backspace|Delete|Escape|ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Home|End|ControlOrMeta\+A)$/.test(c)&&(a.preventDefault(),I({kind:"key",key:c}))}})}function Me(){return'<div class="shared-browser-activity"><div class="shared-browser-caption-history" role="log" aria-live="off" aria-label="Browser caption history" tabindex="0"></div><button type="button" class="shared-browser-caption-latest" hidden>Back to live \u2193</button><span class="shared-browser-caption-announcement" role="status" aria-live="polite"></span></div>'}function le(e){i.set({sharedBrowserUi:Object.assign({},i.get("sharedBrowserUi"),e)})}function nr(e,r,n){var t=e.querySelector(".shared-browser-activity"),o=e.querySelector(".shared-browser-caption-history"),s=e.querySelector(".shared-browser-caption-latest");o.dataset.bound||(o.dataset.bound="true",o.addEventListener("scroll",function(){var f=o.scrollHeight-o.clientHeight-o.scrollTop<20;le({captionPinned:f}),t.dataset.reviewing=String(!f),s.hidden=f}),s.onclick=function(){o.scrollTop=o.scrollHeight,le({captionPinned:!0}),s.hidden=!0,t.dataset.reviewing="false"});var a=r&&r.activityHistory||[];t.hidden=!a.length;var c=a[a.length-1],u=r&&r.id+":"+a.length+":"+(c?c.id+":"+c.phase+":"+c.text:"empty"),d=i.get("sharedBrowserUi")||{};if(d.captionHistoryKey!==u){var l=d.captionBrowserId!==(r&&r.id),g=l||d.captionPinned!==!1,h=o.scrollTop;o.replaceChildren(),a.forEach(function(f,w){var p=document.createElement("div");p.className="shared-browser-caption-row",p.dataset.age=String(Math.min(a.length-w-1,3));var U=document.createElement("span");if(U.className="shared-browser-activity-text",U.textContent=f.text,p.appendChild(U),f.phase==="failed"||f.phase==="interrupted"){var pe=document.createElement("small");pe.textContent=f.phase==="failed"?"This step could not be completed.":"This step was interrupted.",p.appendChild(pe)}o.appendChild(p)}),le({captionHistoryKey:u,captionBrowserId:r&&r.id,captionPinned:g}),o.scrollTop=g?o.scrollHeight:h,s.hidden=g,t.dataset.reviewing=String(!g);var x=e.querySelector(".shared-browser-caption-announcement"),S=n&&c?c.text+(c.phase==="failed"?" This step could not be completed.":""):"";x.textContent!==S&&(x.textContent=S)}}function Ae(e,r,n){var t=r&&r.phase==="live"&&r.control==="agent"&&!r.handoff&&n;nr(e,r,t);var o=e.querySelector("canvas"),s=t&&r.pointer,a=e.querySelector(".shared-browser-pointer");if(a.hidden=!s||s.width!==o.width||s.height!==o.height,!a.hidden){a.style.left=100*s.x/o.width+"%",a.style.top=100*s.y/o.height+"%";var c=r.id+":"+r.epoch+":"+s.sequence;(i.get("sharedBrowserUi")||{}).pointerAnimationKey!==c&&(i.set({sharedBrowserUi:Object.assign({},i.get("sharedBrowserUi"),{pointerAnimationKey:c})}),s.clicked&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches&&a.querySelector("i").animate([{opacity:.8,transform:"scale(.3)"},{opacity:0,transform:"scale(1.8)"}],{duration:650}))}}var ge=["1280,800","1440,900","1024,768","800,600","375,667","390,844"];function ir(){return document.getElementById("shared-browser-resolution")}function Re(e){i.set({sharedBrowserUi:Object.assign({},i.get("sharedBrowserUi"),{viewportMenuOpen:e})});var r=ir();r&&(r.querySelector("[data-viewport-trigger]").setAttribute("aria-expanded",String(e)),r.querySelector('[role="menu"]').hidden=!e)}function M(){Re(!1)}function Ue(){return'<div id="shared-browser-resolution" class="shared-browser-resolution"><button type="button" data-viewport-trigger aria-label="Browser viewport" aria-haspopup="menu" aria-expanded="false" aria-controls="shared-browser-resolutions"><span>1280 \xD7 800</span>'+v("chevron-up")+'</button><div id="shared-browser-resolutions" class="shared-browser-resolution-menu" role="menu" aria-label="Browser resolutions" hidden></div></div>'}function je(e,r,n){var t=e.querySelector(".shared-browser-resolution"),o=t.querySelector("[data-viewport-trigger]");o.disabled=!n,(!n||!i.get("sharedBrowserOpen"))&&M();var s=r?r.width+","+r.height:"1280,800";o.querySelector("span").textContent=s.replace(","," \xD7 ");var a=t.querySelector('[role="menu"]');if(a.dataset.size!==s){a.dataset.size=s;var c=ge.includes(s)?ge:ge.concat([s]);a.replaceChildren(),c.forEach(function(u){var d=document.createElement("button");d.type="button",d.setAttribute("role","menuitemradio"),d.setAttribute("aria-checked",String(u===s)),d.dataset.size=u,d.tabIndex=-1,d.textContent=u.replace(","," \xD7 "),d.setAttribute("aria-label",d.textContent),a.appendChild(d)})}}function We(e){var r=e.querySelector(".shared-browser-resolution"),n=r.querySelector("[data-viewport-trigger]"),t=r.querySelector('[role="menu"]');function o(s){if(!n.disabled){Re(!0);var a=t.querySelectorAll("button"),c=t.querySelector('[aria-checked="true"]');(s?a[a.length-1]:c||a[0]).focus()}}n.onclick=function(){(i.get("sharedBrowserUi")||{}).viewportMenuOpen?M():o(!1)},n.onkeydown=function(s){(s.key==="ArrowDown"||s.key==="ArrowUp")&&(s.preventDefault(),o(s.key==="ArrowUp"))},t.onclick=function(s){var a=s.target.closest("[data-size]");if(!(!a||n.disabled)){var c=a.dataset.size.split(",");M(),n.focus(),I({kind:"resize",width:Number(c[0]),height:Number(c[1])})}},r.addEventListener("keydown",function(s){if(s.key==="Escape"){s.preventDefault(),s.stopPropagation(),M(),n.focus();return}if(s.key==="Tab"){M();return}if(!(s.target===n||!["ArrowDown","ArrowUp","Home","End"].includes(s.key))){s.preventDefault();var a=Array.from(t.querySelectorAll("button")),c=a.indexOf(document.activeElement);c=s.key==="Home"?0:s.key==="End"?a.length-1:(c+(s.key==="ArrowDown"?1:-1)+a.length)%a.length,a[c].focus()}}),document.addEventListener("pointerdown",function(s){r.contains(s.target)||M()}),r.addEventListener("focusout",function(s){r.contains(s.relatedTarget)||M()})}function H(){return window.matchMedia("(min-width: 1024px)").matches}function Ne(){var e=i.get("permissions");return H()&&!!i.get("currentSlug")&&!i.get("dmMode")&&(!e||e.terminal!==!1)}function Y(){return Ne()&&!!i.get("activeSessionId")}function _(){return document.getElementById("shared-browser-panel")}function A(e){i.set({sharedBrowserUi:Object.assign({},i.get("sharedBrowserUi"),e)})}function b(e,r){var n=m();if(!n||n.readyState!==1||!i.get("activeSessionId"))return!1;var t=i.get("sharedBrowser");return n.send(JSON.stringify(Object.assign({type:"shared_browser_"+e,sessionId:i.get("activeSessionId"),browserId:t&&t.id,epoch:t&&t.epoch},r||{}))),!0}function I(e){A({error:""}),b("input",{event:e})}function _e(){var e=_();if(!(!e||!i.get("sharedBrowserOpen"))){var r=e.querySelector(".shared-browser-viewport"),n=e.querySelector("canvas"),t=n.width===800&&n.height===600?"mac":n.width===1024&&n.height===768?"crt":n.width<n.height?"phone":"laptop";r.dataset.skin=t;var o=Math.min((r.clientWidth-96)/n.width,(r.clientHeight-140-e.querySelector(".shared-browser-caption").offsetHeight)/n.height,1);if(!(o<=0)){var s=e.querySelector(".shared-browser-monitor");s.style.width=Math.floor(n.width*o)+"px",s.style.height=Math.floor(n.height*o)+"px",e.querySelector(".shared-browser-monitor-label").textContent=n.width+" \xD7 "+n.height+" \xB7 "+Math.round(o*100)+"%"}}}function W(e,r,n){return'<button type="button" data-action="'+e+'" title="'+n+'" aria-label="'+n+'">'+v(r)+"</button>"}function fe(){if(!_()){var e=document.getElementById("main-panels");if(e){var r=document.createElement("section");r.id="shared-browser-panel",r.className="shared-browser-panel hidden",r.setAttribute("aria-label","Shared browser"),r.innerHTML='<header class="shared-browser-header"><span class="shared-browser-title">'+v("globe")+'Browser</span><span class="shared-browser-phase" role="status">Ready</span><div class="shared-browser-window">'+W("settings","settings-2","Browser settings")+W("wide","chevrons-left-right","Widen browser panel")+W("fullscreen","maximize-2","Toggle browser fullscreen")+W("hide","x","Hide browser panel")+'</div></header><div class="shared-browser-tabs" role="tablist" aria-label="Browser tabs"></div><form class="shared-browser-address">'+W("back","arrow-left","Back")+W("forward","arrow-right","Forward")+W("reload","rotate-cw","Reload")+'<input aria-label="Browser address" placeholder="Enter a URL" type="text" autocomplete="off" spellcheck="false"><button type="submit" aria-label="Open address">'+v("arrow-right")+"</button></form>"+Se()+'<div class="shared-browser-viewport"><div class="shared-browser-monitor"><div class="shared-browser-pointer-layer" aria-hidden="true"><div class="shared-browser-pointer" hidden><svg viewBox="0 0 24 28"><path d="M3 2 L3 22 L8 17 L12 26 L16 24 L12 15 L20 15 Z"/></svg><i></i></div></div><canvas width="1280" height="800" tabindex="0" aria-label="Shared browser page"></canvas><div class="shared-browser-empty">'+v("globe")+'<h3>A browser you can use with Clay</h3><p>Enter an address to browse together.<br>Localhost connects to the Clay host.</p><p class="shared-browser-private">Site data lasts only for this browser session.</p></div><textarea class="shared-browser-keyboard" aria-label="Type into shared browser" autocomplete="off" autocapitalize="off" spellcheck="false"></textarea><span class="shared-browser-monitor-brand" aria-hidden="true">Clay Studio</span><span class="shared-browser-monitor-detail" aria-hidden="true"></span><span class="shared-browser-monitor-stand" aria-hidden="true"></span></div><div class="shared-browser-caption"><span class="shared-browser-monitor-label"></span>'+Me()+'</div></div><p class="shared-browser-error hidden" role="status"></p><footer class="shared-browser-footer"><div class="shared-browser-control"><span class="shared-browser-control-status" role="status" aria-live="polite">You and Clay can control this browser</span><button type="button" data-action="control" aria-pressed="false"></button></div><div class="shared-browser-details"><span class="shared-browser-cookie-mode"></span>'+Ue()+'<button type="button" data-action="end">End browser</button></div></footer>',e.appendChild(r),r.querySelector('[data-action="hide"]').onclick=K,r.querySelector('[data-action="wide"]').onclick=function(){var t=!(i.get("sharedBrowserUi")||{}).wide;A({wide:t}),O()},r.querySelector('[data-action="fullscreen"]').onclick=function(){var t=!(i.get("sharedBrowserUi")||{}).fullscreen;A({fullscreen:t}),O()},["back","forward","reload"].forEach(function(t){r.querySelector('[data-action="'+t+'"]').onclick=function(){I({kind:t})}}),r.querySelector("form").onsubmit=function(t){t.preventDefault(),I({kind:"navigate",url:r.querySelector("form input").value})},r.querySelector('[data-action="control"]').onclick=function(){var t=i.get("sharedBrowser");t&&b("control",{control:t.control==="user"?"agent":"user"})},r.querySelector('[data-action="end"]').onclick=function(){var t=i.get("sharedBrowser");b(t&&t.phase==="ended"?"open":"end",t&&t.phase==="ended"?{incognito:t.incognito}:void 0)},We(r),ke(r);var n=new ResizeObserver(_e);n.observe(r.querySelector(".shared-browser-viewport")),De(r.querySelector("canvas"),r.querySelector("textarea")),E()}}}function re(){var e=i.get("sharedBrowser"),r=(i.get("sharedBrowsers")||[]).length,n=!!i.get("connected")&&!!i.get("activeSessionId"),t=i.get("connected")?i.get("activeSessionId")?e?"View browser":"Open browser":"Browser \xB7 Loading session\u2026":"Browser \xB7 Connecting\u2026";["shared-browser-btn","shared-browser-toggle-btn"].forEach(function(o){var s=document.getElementById(o);if(s){var a=o==="shared-browser-toggle-btn"&&n&&i.get("sharedBrowserOpen")?"Hide browser":t;if(o==="shared-browser-toggle-btn"){var c=s.querySelector(".shared-browser-count");c&&(c.textContent=String(r),c.classList.toggle("hidden",r===0)),r&&(a+=" \xB7 "+r+(r===1?" tab":" tabs"))}s.classList.toggle("hidden",!Ne()),s.title=n&&e?a+" \xB7 "+e.phase:a,s.setAttribute("aria-label",a),s.setAttribute("aria-expanded",String(!!i.get("sharedBrowserOpen"))),s.disabled=!n}})}function or(e,r,n){return n?r?e.handoff?"Switching control\u2026":e.control==="user"?"Only you can control this browser. Clay is paused.":e.activity&&e.activity.phase==="running"?"Clay is working. You can also use this browser":"You and Clay can control this browser":e&&e.phase==="starting"?"Starting\u2026":"Ended":"Disconnected. Status returns on reconnect."}function sr(e,r,n,t){var o=e.querySelector(".shared-browser-control-status"),s=or(r,n,t);o.textContent!==s&&(o.textContent=s);var a=e.querySelector('[data-action="control"]'),c=!!r&&r.control==="user",u=String(c);a.dataset.mode!==u&&(a.dataset.mode=u,a.innerHTML=v(c?"lock":"lock-open")+"<span>"+(c?"Resume shared control":"Pause Clay control")+"</span>",E()),a.title=c?"Let Clay act in this browser again. You keep control too.":"Make this browser exclusively yours until you resume shared control. You can use it either way.",a.setAttribute("aria-pressed",String(c))}function O(){re();var e=_();if(e){Be(e,ar,b);var r=i.get("sharedBrowser"),n=i.get("sharedBrowserUi")||{},t=i.get("connected"),o=r&&r.phase==="live",s=o&&!r.handoff&&t;e.classList.toggle("hidden",!i.get("sharedBrowserOpen")||!Y()),e.classList.toggle("shared-browser-wide",!!n.wide),e.classList.toggle("panel-fullscreen",!!n.fullscreen),e.querySelector('[data-action="wide"]').setAttribute("aria-pressed",n.wide?"true":"false"),e.querySelector('[data-action="fullscreen"]').setAttribute("aria-pressed",n.fullscreen?"true":"false"),e.querySelector(".shared-browser-phase").textContent=t?r?{starting:"Starting\u2026",live:"Live",ended:"Ended \xB7 Last frame"}[r.phase]:"Ready":"Disconnected",e.querySelector(".shared-browser-phase").dataset.live=o&&t?"true":"false",e.querySelector(".shared-browser-monitor").dataset.live=o&&t?"true":"false";var a=e.querySelector("form input");document.activeElement!==a&&(a.value=r?r.url:""),e.querySelectorAll("form input, form button").forEach(function(d){d.disabled=!s}),e.querySelector("textarea").disabled=!s,e.querySelector("canvas").style.cursor=s?"default":"not-allowed",sr(e,r,o,t),e.querySelector('[data-action="control"]').disabled=!o||!!r.handoff||!t,e.querySelector('[data-action="control"]').hidden=!o,e.querySelector('[data-action="end"]').disabled=!r||!t,e.querySelector('[data-action="end"]').textContent=r&&r.phase==="ended"?"New browser":"End browser";var c=r&&r.incognito===!1;e.querySelector(".shared-browser-cookie-mode").textContent=c?"Personal browser":"Incognito",e.querySelector(".shared-browser-cookie-mode").title=c?"Cookies and site storage are saved for your account across your Mates.":"Cookies and site storage are isolated and discarded when this tab ends.",e.querySelector(".shared-browser-private").textContent=c?"Your cookies and site storage are remembered across your Mates and browser restarts.":"Site data lasts only for this browser session.";var u=n.error||r&&r.error||"";e.querySelector(".shared-browser-error").textContent=u,e.querySelector(".shared-browser-error").classList.toggle("hidden",!u),e.querySelector(".shared-browser-empty").classList.toggle("hidden",!!(r&&r.url&&n.hasFrame)),je(e,r,s),q(),Ae(e,r,t),_e()}}function Fe(e){var r=i.get("sharedBrowser");if(i.set({sharedBrowser:e}),!r||!e||r.id!==e.id){G(),M(),A({hasFrame:!1,error:"",decoding:!1,captionHistoryKey:null});var n=_();n&&n.querySelector("canvas").getContext("2d").clearRect(0,0,1920,1200)}else r.epoch!==e.epoch&&G()}function ar(e){var r=(i.get("sharedBrowsers")||[]).find(function(n){return n.id===e});r&&(Fe(r),b("view",{visible:H()&&!document.hidden}),O())}function Pt(e){var r=Z("browser:"+e);if(!r)throw new Error("Enter a valid HTTP or HTTPS browser address.");if(!H())throw new Error("Clay Browser is available on desktop screens.");if(!Y())throw new Error("Browser access is unavailable in this conversation.");if(!i.get("connected"))throw new Error("Reconnect before opening this browser link.");fe(),V(!1),ee("browser"),i.set({sharedBrowserOpen:!0}),A({error:""}),b("open",{url:r}),O()}function He(){if(!(!Y()||!i.get("connected"))){fe(),ee("browser"),i.set({sharedBrowserOpen:!0});var e=i.get("sharedBrowser");e?b("view",{visible:!0}):b("open"),O()}}function K(){M(),V(),G(),i.get("sharedBrowserOpen")&&b("view",{visible:!1}),i.set({sharedBrowserOpen:!1}),ue("browser"),O()}function Dt(e){if(!e.type||e.type.indexOf("shared_browser_")!==0)return!1;if(String(e.sessionId)!==String(i.get("activeSessionId"))||xe(e))return!0;if(e.type==="shared_browser_state"){var r=i.get("sharedBrowser"),n=e.browsers||(e.browser?[e.browser]:[]);i.set({sharedBrowsers:n});var t=!e.focus&&r&&n.find(function(c){return c.id===r.id});t=t||e.browser||n[0]||null,Fe(t),e.present&&Y()&&(fe(),ee("browser"),i.set({sharedBrowserOpen:!0})),i.get("sharedBrowserOpen")&&t&&b("view",{visible:H()&&!document.hidden}),O()}else if(e.type==="shared_browser_error")A({error:e.error}),O();else if(e.type==="shared_browser_frame"){var o=i.get("sharedBrowser");if(!H()||!i.get("sharedBrowserOpen")||!o||o.id!==e.browserId||(i.get("sharedBrowserUi")||{}).decoding)return!0;var s=i.get("activeSessionId");A({decoding:!0});var a=new Image;a.onload=function(){var c=i.get("sharedBrowser");if(c&&c.id===e.browserId&&i.get("activeSessionId")===s&&_()){var u=_().querySelector("canvas");u.width=a.naturalWidth,u.height=a.naturalHeight,u.getContext("2d").drawImage(a,0,0),A({decoding:!1,hasFrame:!0}),O(),be(e,u,null,u)}},a.onerror=function(){i.get("activeSessionId")===s&&A({decoding:!1})},a.src="data:image/jpeg;base64,"+e.data}return!0}function Mt(){ae();var e=document.getElementById("shared-browser-btn");e&&(e.onclick=He);var r=document.getElementById("shared-browser-toggle-btn");r&&(r.onclick=function(){i.get("sharedBrowserOpen")?K():He()}),window.matchMedia("(min-width: 1024px)").addEventListener("change",function(){H()||K(),re()}),document.addEventListener("visibilitychange",function(){i.get("sharedBrowserOpen")&&b("view",{visible:!document.hidden&&H()})}),E(),re(),i.get("connected")&&b("state_request")}Te("browser",K);i.subscribe(function(e,r){e.currentSlug!==r.currentSlug||e.activeSessionId!==r.activeSessionId||e.myUserId!==r.myUserId?(G(),ue("browser"),i.set({sharedBrowser:null,sharedBrowsers:[],sharedBrowserOpen:!1,sharedBrowserUi:{},sharedBrowserSettings:{}}),e.connected&&b("state_request"),O()):e.connected!==r.connected?(e.connected&&b("state_request"),O()):(e.permissions!==r.permissions||e.dmMode!==r.dmMode)&&(Y()||K(),re())});export{k as a,cr as b,he as c,fr as d,Ve as e,pr as f,me as g,hr as h,wr as i,Je as j,Ge as k,yr as l,$ as m,Ke as n,Ye as o,F as p,Q as q,Sr as r,kr as s,$e as t,te as u,Br as v,Cr as w,Er as x,Ur as y,ve as z,jr as A,be as B,Wr as C,Hr as D,E,v as F,de as G,Te as H,ee as I,ue as J,ut as K,I as L,Pt as M,He as N,K as O,Dt as P,Mt as Q,Jr as R,rr as S,Zr as T};
|