@sema-agent/server 1.229.0 → 1.230.0
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/dist/http/server.d.ts +4 -0
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +216 -8
- package/dist/http/server.js.map +1 -1
- package/dist/main.js +15 -0
- package/dist/main.js.map +1 -1
- package/dist/plugins/caching-session-store.d.ts +4 -0
- package/dist/plugins/caching-session-store.d.ts.map +1 -1
- package/dist/plugins/caching-session-store.js +3 -0
- package/dist/plugins/caching-session-store.js.map +1 -1
- package/dist/plugins/local-session-store.d.ts +4 -0
- package/dist/plugins/local-session-store.d.ts.map +1 -1
- package/dist/plugins/local-session-store.js +9 -0
- package/dist/plugins/local-session-store.js.map +1 -1
- package/dist/plugins/pg-session-storage.d.ts +4 -0
- package/dist/plugins/pg-session-storage.d.ts.map +1 -1
- package/dist/plugins/pg-session-storage.js +6 -0
- package/dist/plugins/pg-session-storage.js.map +1 -1
- package/dist/plugins/tidb-session-store.d.ts +4 -0
- package/dist/plugins/tidb-session-store.d.ts.map +1 -1
- package/dist/plugins/tidb-session-store.js +6 -0
- package/dist/plugins/tidb-session-store.js.map +1 -1
- package/dist/security.d.ts +4 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js.map +1 -1
- package/dist/session-watch.d.ts +27 -0
- package/dist/session-watch.d.ts.map +1 -0
- package/dist/session-watch.js +134 -0
- package/dist/session-watch.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export function posIntEnv(raw, fallback, max = 3_600_000) {
|
|
2
|
+
if (raw === undefined || raw === "")
|
|
3
|
+
return fallback;
|
|
4
|
+
const n = Number(raw);
|
|
5
|
+
return Number.isInteger(n) && n > 0 && n <= max ? n : fallback;
|
|
6
|
+
}
|
|
7
|
+
export class SessionWatchRegistry {
|
|
8
|
+
getHead;
|
|
9
|
+
entries = new Map();
|
|
10
|
+
hotMs;
|
|
11
|
+
warmMs;
|
|
12
|
+
hotWindowMs;
|
|
13
|
+
maxWatched;
|
|
14
|
+
constructor(getHead, opts) {
|
|
15
|
+
this.getHead = getHead;
|
|
16
|
+
this.hotMs = opts?.hotMs ?? 200;
|
|
17
|
+
this.warmMs = opts?.warmMs ?? 2000;
|
|
18
|
+
this.hotWindowMs = opts?.hotWindowMs ?? 60_000;
|
|
19
|
+
this.maxWatched = opts?.maxWatchedSessions ?? 512;
|
|
20
|
+
}
|
|
21
|
+
watchedCount() {
|
|
22
|
+
return this.entries.size;
|
|
23
|
+
}
|
|
24
|
+
subscribe(sessionId, owner, onHead, onEnd) {
|
|
25
|
+
let e = this.entries.get(sessionId);
|
|
26
|
+
if (e && e.owner !== owner) {
|
|
27
|
+
this.dropSession(sessionId);
|
|
28
|
+
e = undefined;
|
|
29
|
+
}
|
|
30
|
+
if (!e) {
|
|
31
|
+
if (this.entries.size >= this.maxWatched)
|
|
32
|
+
return undefined;
|
|
33
|
+
e = { subs: new Set(), ends: new Map(), owner, last: undefined, rev: 0, lastChangeAt: 0, probing: false };
|
|
34
|
+
this.entries.set(sessionId, e);
|
|
35
|
+
this.arm(sessionId, e, this.hotMs);
|
|
36
|
+
}
|
|
37
|
+
e.subs.add(onHead);
|
|
38
|
+
e.ends.set(onHead, onEnd);
|
|
39
|
+
if (e.last !== undefined) {
|
|
40
|
+
try {
|
|
41
|
+
onHead(e.last);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return () => {
|
|
47
|
+
const cur = this.entries.get(sessionId);
|
|
48
|
+
if (cur !== e)
|
|
49
|
+
return;
|
|
50
|
+
e.subs.delete(onHead);
|
|
51
|
+
e.ends.delete(onHead);
|
|
52
|
+
if (e.subs.size === 0) {
|
|
53
|
+
if (e.timer)
|
|
54
|
+
clearTimeout(e.timer);
|
|
55
|
+
this.entries.delete(sessionId);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
dropSession(sessionId) {
|
|
60
|
+
const e = this.entries.get(sessionId);
|
|
61
|
+
if (!e)
|
|
62
|
+
return;
|
|
63
|
+
if (e.timer)
|
|
64
|
+
clearTimeout(e.timer);
|
|
65
|
+
this.entries.delete(sessionId);
|
|
66
|
+
for (const end of e.ends.values()) {
|
|
67
|
+
try {
|
|
68
|
+
end?.();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
notifyLocal(sessionId, leafId, owner) {
|
|
75
|
+
const e = this.entries.get(sessionId);
|
|
76
|
+
if (!e)
|
|
77
|
+
return;
|
|
78
|
+
if (owner !== undefined && owner !== e.owner) {
|
|
79
|
+
this.dropSession(sessionId);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (e.last === leafId)
|
|
83
|
+
return;
|
|
84
|
+
this.applyAdvance(e, leafId);
|
|
85
|
+
}
|
|
86
|
+
arm(sessionId, e, delayMs) {
|
|
87
|
+
e.timer = setTimeout(() => void this.probe(sessionId, e), delayMs);
|
|
88
|
+
e.timer.unref?.();
|
|
89
|
+
}
|
|
90
|
+
async probe(sessionId, e) {
|
|
91
|
+
if (this.entries.get(sessionId) !== e)
|
|
92
|
+
return;
|
|
93
|
+
if (!e.probing) {
|
|
94
|
+
e.probing = true;
|
|
95
|
+
const revAtStart = e.rev;
|
|
96
|
+
try {
|
|
97
|
+
const head = await this.getHead(sessionId);
|
|
98
|
+
if (this.entries.get(sessionId) !== e)
|
|
99
|
+
return;
|
|
100
|
+
if (head.owner === undefined || head.owner !== e.owner) {
|
|
101
|
+
this.dropSession(sessionId);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const leafId = head.leafId ?? null;
|
|
105
|
+
if (e.rev === revAtStart && leafId !== e.last)
|
|
106
|
+
this.applyAdvance(e, leafId);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
e.probing = false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (this.entries.get(sessionId) !== e)
|
|
115
|
+
return;
|
|
116
|
+
const hot = e.lastChangeAt !== 0 && Date.now() - e.lastChangeAt < this.hotWindowMs;
|
|
117
|
+
this.arm(sessionId, e, hot ? this.hotMs : this.warmMs);
|
|
118
|
+
}
|
|
119
|
+
applyAdvance(e, leafId) {
|
|
120
|
+
const wasKnown = e.last !== undefined;
|
|
121
|
+
e.last = leafId;
|
|
122
|
+
e.rev++;
|
|
123
|
+
if (wasKnown)
|
|
124
|
+
e.lastChangeAt = Date.now();
|
|
125
|
+
for (const fn of e.subs) {
|
|
126
|
+
try {
|
|
127
|
+
fn(leafId);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=session-watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-watch.js","sourceRoot":"","sources":["../src/session-watch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.230.0",
|
|
4
4
|
"description": "Sema Server — the server/API implementation layer for Sema, wiring core, registry, model providers, and cloud agent execution. Built on @sema-agent/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"build:binary:run-local:darwin-arm64": "bun build --compile --target=bun-darwin-arm64 src/run-local.ts --outfile dist/run-local-darwin-arm64"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@sema-agent/core": "^1.
|
|
49
|
+
"@sema-agent/core": "^1.330.0",
|
|
50
50
|
"@sema-agent/registry-core": "^0.10.16",
|
|
51
51
|
"e2b": "^2.28.0",
|
|
52
52
|
"libsodium-wrappers": "^0.8.4",
|