clay-server 4.7.1-beta.4 → 4.8.0-beta.1
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/bin/login-browser-open.js +7 -0
- package/lib/project-vendor-login.js +52 -18
- package/lib/project.js +3 -0
- package/lib/public/app.js +1 -0
- package/lib/public/css/vendor-login-browser.css +63 -0
- package/lib/public/modules/app-messages.js +5 -0
- package/lib/public/modules/app-notifications.js +1 -1
- package/lib/public/modules/vendor-login-browser.js +243 -0
- package/lib/public/modules/vendor-login.js +23 -4
- package/lib/public/style.css +1 -0
- package/lib/terminal.js +4 -0
- package/lib/vendor-login-browser-flow.js +46 -0
- package/lib/vendor-login-browser-passkeys.js +27 -0
- package/lib/vendor-login-browser-worker.js +149 -0
- package/lib/vendor-login-browser.js +162 -0
- package/lib/ws-schema.js +4 -0
- package/lib/yoke/adapters/codex.js +55 -8
- package/lib/yoke/codex-idle-recovery.js +52 -0
- package/package.json +2 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Retire retained inputs only after every query is verified idle. The adapter
|
|
2
|
+
// holds admission closed while this runs; existing handles may still receive
|
|
3
|
+
// messages, so their input revisions must be checked again after each probe.
|
|
4
|
+
function checkAbort(queryOpts) {
|
|
5
|
+
var signal = queryOpts.abortController && queryOpts.abortController.signal;
|
|
6
|
+
if (signal && signal.aborted) {
|
|
7
|
+
var error = new Error("Query cancelled");
|
|
8
|
+
error.name = "AbortError";
|
|
9
|
+
throw error;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function terminalsAreIdle(result) {
|
|
14
|
+
if (!result || result.nextCursor) return false;
|
|
15
|
+
var terminals = Array.isArray(result) ? result
|
|
16
|
+
: result.data || result.terminals || result.backgroundTerminals || result.items;
|
|
17
|
+
if (!Array.isArray(terminals)) return false;
|
|
18
|
+
return terminals.every(function(terminal) {
|
|
19
|
+
var status = String(terminal && (terminal.status || terminal.state) || "").toLowerCase();
|
|
20
|
+
return /^(exited|terminated|completed|failed)$/.test(status);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function retireIdleQueries(entries, server, checkCurrent) {
|
|
25
|
+
checkCurrent();
|
|
26
|
+
var candidates = [];
|
|
27
|
+
for (var i = 0; i < entries.length; i++) {
|
|
28
|
+
var handle = entries[i].handle;
|
|
29
|
+
var snapshot = handle && handle.getIdleRecoverySnapshot && handle.getIdleRecoverySnapshot();
|
|
30
|
+
if (!snapshot) return false;
|
|
31
|
+
candidates.push({ handle: handle, snapshot: snapshot });
|
|
32
|
+
}
|
|
33
|
+
var safe = await Promise.all(candidates.map(function(candidate) {
|
|
34
|
+
return server.send("thread/backgroundTerminals/list", {
|
|
35
|
+
threadId: candidate.snapshot.threadId,
|
|
36
|
+
}, 5000).then(terminalsAreIdle, function() { return false; });
|
|
37
|
+
}));
|
|
38
|
+
checkCurrent();
|
|
39
|
+
for (var ci = 0; ci < candidates.length; ci++) {
|
|
40
|
+
var current = candidates[ci].handle.getIdleRecoverySnapshot();
|
|
41
|
+
if (!safe[ci] || !current || current.revision !== candidates[ci].snapshot.revision) return false;
|
|
42
|
+
}
|
|
43
|
+
// No awaits between validation and closing every input. A new send either
|
|
44
|
+
// already invalidated its snapshot or sees a closed input and resumes anew.
|
|
45
|
+
var finished = candidates.map(function(candidate) {
|
|
46
|
+
return candidate.handle.retireIdleForRecovery();
|
|
47
|
+
});
|
|
48
|
+
await Promise.all(finished);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = { retireIdleQueries: retireIdleQueries, checkAbort: checkAbort };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clay-server",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.8.0-beta.1",
|
|
4
4
|
"description": "Self-hosted team workspace for Claude Code and Codex. Multi-user, browser-based, with persistent AI mates.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"clay-server": "./bin/cli.js"
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"@seald-io/nedb": "^4.1.2",
|
|
54
54
|
"imapflow": "^1.7.8",
|
|
55
55
|
"nodemailer": "^9.1.1",
|
|
56
|
+
"playwright": "1.63.0",
|
|
56
57
|
"qrcode-terminal": "^0.12.0",
|
|
57
58
|
"web-push": "^3.6.7",
|
|
58
59
|
"ws": "^8.18.0"
|