@sema-agent/server 1.314.0 → 1.316.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/approval-hmac.d.ts +17 -0
- package/dist/approval-hmac.js +27 -0
- package/dist/config-center/apply-effective.d.ts +22 -0
- package/dist/config-center/apply-effective.js +283 -0
- package/dist/config-center/http-client.d.ts +23 -0
- package/dist/config-center/http-client.js +109 -0
- package/dist/config-center/restart-signal.d.ts +12 -0
- package/dist/config-center/restart-signal.js +70 -0
- package/dist/config-center/skills-mcp.d.ts +13 -0
- package/dist/config-center/skills-mcp.js +113 -0
- package/dist/config-center/types.d.ts +143 -0
- package/dist/config-center/types.js +2 -0
- package/dist/fleet/fleet-bus.js +92 -83
- package/dist/hooks/hook-runner.js +18 -9
- package/dist/http/idempotency.d.ts +1 -0
- package/dist/http/idempotency.js +3 -0
- package/dist/http/principal-gate.d.ts +12 -0
- package/dist/http/principal-gate.js +52 -0
- package/dist/http/route-ctx.d.ts +67 -0
- package/dist/http/route-ctx.js +2 -0
- package/dist/http/routes/attachments.d.ts +4 -0
- package/dist/http/routes/attachments.js +106 -0
- package/dist/http/routes/capabilities.d.ts +4 -0
- package/dist/http/routes/capabilities.js +111 -0
- package/dist/http/routes/images.d.ts +20 -0
- package/dist/http/routes/images.js +572 -0
- package/dist/http/routes/memory-policy.d.ts +4 -0
- package/dist/http/routes/memory-policy.js +105 -0
- package/dist/http/routes/observability.d.ts +4 -0
- package/dist/http/routes/observability.js +63 -0
- package/dist/http/routes/session-sync.d.ts +36 -0
- package/dist/http/routes/session-sync.js +513 -0
- package/dist/http/routes/sessions-list.d.ts +4 -0
- package/dist/http/routes/sessions-list.js +117 -0
- package/dist/http/routes/sessions.d.ts +17 -0
- package/dist/http/routes/sessions.js +746 -0
- package/dist/http/send.d.ts +6 -0
- package/dist/http/send.js +19 -0
- package/dist/http/server.d.ts +101 -76
- package/dist/http/server.js +129 -2410
- package/dist/http/sse-log.d.ts +25 -0
- package/dist/http/sse-log.js +59 -0
- package/dist/http/workspace-content.d.ts +3 -0
- package/dist/http/workspace-content.js +20 -0
- package/dist/index.d.ts +1 -1
- package/dist/leader/leader.js +5 -2
- package/dist/leader/wire.js +169 -165
- package/dist/main.js +462 -451
- package/dist/plugins/approval-store-sql.d.ts +52 -0
- package/dist/plugins/approval-store-sql.js +119 -0
- package/dist/plugins/breaker-state-sql.d.ts +29 -0
- package/dist/plugins/breaker-state-sql.js +104 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +67 -0
- package/dist/plugins/checkpoint-store-sql.js +224 -0
- package/dist/plugins/file-snapshot-store-sql.d.ts +38 -0
- package/dist/plugins/file-snapshot-store-sql.js +210 -0
- package/dist/plugins/image-bake-store-sql.d.ts +53 -0
- package/dist/plugins/image-bake-store-sql.js +463 -0
- package/dist/plugins/image-index-sql.d.ts +33 -0
- package/dist/plugins/image-index-sql.js +328 -0
- package/dist/plugins/k8s-bg-scripts.d.ts +19 -0
- package/dist/plugins/k8s-bg-scripts.js +129 -0
- package/dist/plugins/k8s-exec-protocol.d.ts +20 -0
- package/dist/plugins/k8s-exec-protocol.js +87 -0
- package/dist/plugins/outcome-ledger-sql.d.ts +70 -0
- package/dist/plugins/outcome-ledger-sql.js +158 -0
- package/dist/plugins/pg-approval-store.d.ts +1 -27
- package/dist/plugins/pg-approval-store.js +1 -83
- package/dist/plugins/pg-breaker-state.d.ts +1 -19
- package/dist/plugins/pg-breaker-state.js +1 -88
- package/dist/plugins/pg-checkpoint-store.d.ts +1 -33
- package/dist/plugins/pg-checkpoint-store.js +1 -189
- package/dist/plugins/pg-cost-quota.js +3 -143
- package/dist/plugins/pg-file-snapshot-store.d.ts +1 -27
- package/dist/plugins/pg-file-snapshot-store.js +1 -190
- package/dist/plugins/pg-image-bake.d.ts +1 -40
- package/dist/plugins/pg-image-bake.js +1 -420
- package/dist/plugins/pg-image-index.d.ts +1 -21
- package/dist/plugins/pg-image-index.js +1 -217
- package/dist/plugins/pg-outcome-ledger.d.ts +2 -22
- package/dist/plugins/pg-outcome-ledger.js +1 -104
- package/dist/plugins/pg-rate-limiter.d.ts +2 -32
- package/dist/plugins/pg-rate-limiter.js +4 -147
- package/dist/plugins/pg-resume-anchor-store.d.ts +1 -13
- package/dist/plugins/pg-resume-anchor-store.js +1 -22
- package/dist/plugins/pg-run-store.d.ts +1 -75
- package/dist/plugins/pg-run-store.js +1 -287
- package/dist/plugins/pg-session-policy-store.d.ts +1 -11
- package/dist/plugins/pg-session-policy-store.js +1 -90
- package/dist/plugins/pg-tool-result-store.d.ts +1 -15
- package/dist/plugins/pg-tool-result-store.js +1 -52
- package/dist/plugins/pg-workflow-journal-store.d.ts +1 -20
- package/dist/plugins/pg-workflow-journal-store.js +1 -34
- package/dist/plugins/pg-workflow-run-store.d.ts +1 -55
- package/dist/plugins/pg-workflow-run-store.js +1 -220
- package/dist/plugins/remote-env-k8s.d.ts +5 -38
- package/dist/plugins/remote-env-k8s.js +7 -213
- package/dist/plugins/resume-anchor-store-sql.d.ts +23 -0
- package/dist/plugins/resume-anchor-store-sql.js +38 -0
- package/dist/plugins/run-store-sql.d.ts +89 -0
- package/dist/plugins/run-store-sql.js +397 -0
- package/dist/plugins/session-policy-store-sql.d.ts +22 -0
- package/dist/plugins/session-policy-store-sql.js +109 -0
- package/dist/plugins/sql-driver.d.ts +25 -0
- package/dist/plugins/sql-driver.js +59 -0
- package/dist/plugins/tidb-approval-store.d.ts +1 -39
- package/dist/plugins/tidb-approval-store.js +1 -71
- package/dist/plugins/tidb-breaker-state.d.ts +1 -17
- package/dist/plugins/tidb-breaker-state.js +1 -74
- package/dist/plugins/tidb-checkpoint-store.d.ts +1 -49
- package/dist/plugins/tidb-checkpoint-store.js +1 -191
- package/dist/plugins/tidb-file-snapshot-store.d.ts +1 -27
- package/dist/plugins/tidb-file-snapshot-store.js +1 -192
- package/dist/plugins/tidb-image-bake.d.ts +1 -38
- package/dist/plugins/tidb-image-bake.js +1 -348
- package/dist/plugins/tidb-image-index.d.ts +1 -19
- package/dist/plugins/tidb-image-index.js +1 -149
- package/dist/plugins/tidb-outcome-ledger.d.ts +1 -57
- package/dist/plugins/tidb-outcome-ledger.js +1 -97
- package/dist/plugins/tidb-resume-anchor-store.d.ts +1 -13
- package/dist/plugins/tidb-resume-anchor-store.js +1 -22
- package/dist/plugins/tidb-run-store.d.ts +1 -75
- package/dist/plugins/tidb-run-store.js +1 -306
- package/dist/plugins/tidb-session-policy-store.d.ts +1 -11
- package/dist/plugins/tidb-session-policy-store.js +1 -86
- package/dist/plugins/tidb-tool-result-store.d.ts +1 -13
- package/dist/plugins/tidb-tool-result-store.js +1 -38
- package/dist/plugins/tidb-workflow-journal-store.d.ts +1 -20
- package/dist/plugins/tidb-workflow-journal-store.js +1 -34
- package/dist/plugins/tidb-workflow-run-store.d.ts +1 -61
- package/dist/plugins/tidb-workflow-run-store.js +1 -231
- package/dist/plugins/tool-result-store-sql.d.ts +25 -0
- package/dist/plugins/tool-result-store-sql.js +69 -0
- package/dist/plugins/workflow-journal-store-sql.d.ts +30 -0
- package/dist/plugins/workflow-journal-store-sql.js +53 -0
- package/dist/plugins/workflow-run-store-sql.d.ts +85 -0
- package/dist/plugins/workflow-run-store-sql.js +299 -0
- package/dist/plugins/write-behind-counter.d.ts +14 -3
- package/dist/plugins/write-behind-counter.js +39 -12
- package/dist/principal-jwt.d.ts +44 -0
- package/dist/principal-jwt.js +95 -0
- package/dist/security.d.ts +2 -58
- package/dist/security.js +3 -118
- package/dist/sema-registry.d.ts +5 -200
- package/dist/sema-registry.js +4 -567
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { isUuidV7 } from "../../security.js";
|
|
2
|
+
import { sendJson } from "../send.js";
|
|
3
|
+
export async function handleSessionsList(req, res, url, ctx) {
|
|
4
|
+
const miss = { fell: false };
|
|
5
|
+
await handleSessionsListBody(req, res, url, ctx, miss);
|
|
6
|
+
return !miss.fell;
|
|
7
|
+
}
|
|
8
|
+
async function handleSessionsListBody(req, res, url, ctx, miss) {
|
|
9
|
+
const { deps } = ctx;
|
|
10
|
+
const { isFleetWide, sessionOwnerScope } = ctx.helpers;
|
|
11
|
+
if (req.method === "GET" && url === "/v1/sessions") {
|
|
12
|
+
const { fleetWide, gateOwner } = sessionOwnerScope(req);
|
|
13
|
+
if (!fleetWide && gateOwner === null) {
|
|
14
|
+
sendJson(res, 401, { error: "unauthorized" });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const lister = deps.sessionStorage?.listSessions?.bind(deps.sessionStorage) ?? deps.runStore?.listSessions?.bind(deps.runStore);
|
|
18
|
+
if (!lister) {
|
|
19
|
+
sendJson(res, 501, { error: "session list requires a durable session store (SESSION_BACKEND=tidb)" });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
await handleSessionList(res, lister, new URL(req.url ?? "", "http://x").searchParams, gateOwner);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (req.method === "GET" && url === "/v1/sendfile-links") {
|
|
26
|
+
const { fleetWide, gateOwner } = sessionOwnerScope(req);
|
|
27
|
+
if (!fleetWide && gateOwner === null) {
|
|
28
|
+
sendJson(res, 401, { error: "unauthorized" });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!deps.sendFileLedger) {
|
|
32
|
+
sendJson(res, 501, { error: "sendfile ledger requires a store backend (DB_BACKEND=tidb|pg|local) and the SendUserFile issuer configured" });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const query = new URL(req.url ?? "", "http://x").searchParams;
|
|
36
|
+
const limitRaw = query.get("limit");
|
|
37
|
+
if (limitRaw !== null && !(/^[0-9]+$/.test(limitRaw) && Number(limitRaw) >= 1 && Number(limitRaw) <= 100)) {
|
|
38
|
+
sendJson(res, 400, { error: "limit must be a decimal integer in 1..100" });
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const limit = limitRaw === null ? 50 : Number(limitRaw);
|
|
42
|
+
const beforeRaw = query.get("before");
|
|
43
|
+
if (beforeRaw !== null && !isUuidV7(beforeRaw)) {
|
|
44
|
+
sendJson(res, 400, { error: "before must be a uuidv7 link id (the `id`/`nextBefore` of a previous page)" });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const before = beforeRaw ?? undefined;
|
|
48
|
+
let scope;
|
|
49
|
+
if (gateOwner !== null) {
|
|
50
|
+
scope = gateOwner;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const scopeRaw = query.get("scope");
|
|
54
|
+
if (scopeRaw === null) {
|
|
55
|
+
scope = "_";
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const s = scopeRaw.trim();
|
|
59
|
+
if (s === "" || s.length > 190) {
|
|
60
|
+
sendJson(res, 400, { error: "scope must be a non-blank tenant principal of at most 190 characters (the sendfile_link.scope column width)" });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
scope = s;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const rows = await deps.sendFileLedger.listByScope(scope, limit + 1, before);
|
|
67
|
+
const hasMore = rows.length > limit;
|
|
68
|
+
const page = hasMore ? rows.slice(0, limit) : rows;
|
|
69
|
+
sendJson(res, 200, {
|
|
70
|
+
links: page.map((r) => ({
|
|
71
|
+
id: r.id,
|
|
72
|
+
filename: r.filename,
|
|
73
|
+
size: r.size,
|
|
74
|
+
ttlSec: r.ttlSec,
|
|
75
|
+
track: r.track,
|
|
76
|
+
bucket: r.bucket,
|
|
77
|
+
key: r.objectKey,
|
|
78
|
+
createdAt: new Date(r.createdAt).toISOString(),
|
|
79
|
+
...(r.taskId !== undefined ? { taskId: r.taskId } : {}),
|
|
80
|
+
...(r.sessionId !== undefined ? { sessionId: r.sessionId } : {}),
|
|
81
|
+
})),
|
|
82
|
+
...(hasMore ? { nextBefore: page[page.length - 1].id } : {}),
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
miss.fell = true;
|
|
87
|
+
}
|
|
88
|
+
function encodeSessionCursor(c) {
|
|
89
|
+
return Buffer.from(JSON.stringify(c)).toString("base64url");
|
|
90
|
+
}
|
|
91
|
+
function decodeSessionCursor(s) {
|
|
92
|
+
if (!s)
|
|
93
|
+
return undefined;
|
|
94
|
+
try {
|
|
95
|
+
const o = JSON.parse(Buffer.from(s, "base64url").toString());
|
|
96
|
+
return o.lastActivityAt && o.sessionId && !Number.isNaN(Date.parse(o.lastActivityAt))
|
|
97
|
+
? { lastActivityAt: o.lastActivityAt, sessionId: o.sessionId }
|
|
98
|
+
: undefined;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function handleSessionList(res, lister, query, forceOwner) {
|
|
105
|
+
const owner = forceOwner != null ? forceOwner : (query.get("owner") ?? undefined);
|
|
106
|
+
const limit = Math.min(100, Math.max(1, Number(query.get("limit") ?? 50) || 50));
|
|
107
|
+
const cursor = decodeSessionCursor(query.get("cursor"));
|
|
108
|
+
const qRaw = (query.get("q") ?? "").trim();
|
|
109
|
+
const q = qRaw ? qRaw.slice(0, 256) : undefined;
|
|
110
|
+
const rows = await lister({ ...(owner ? { owner } : {}), ...(cursor ? { cursor } : {}), limit: limit + 1, ...(q ? { q } : {}) });
|
|
111
|
+
const hasMore = rows.length > limit;
|
|
112
|
+
const page = hasMore ? rows.slice(0, limit) : rows;
|
|
113
|
+
const last = page[page.length - 1];
|
|
114
|
+
const nextCursor = hasMore && last ? encodeSessionCursor({ lastActivityAt: last.lastActivityAt, sessionId: last.sessionId }) : undefined;
|
|
115
|
+
sendJson(res, 200, { sessions: page, ...(nextCursor ? { nextCursor } : {}) });
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=sessions-list.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { RouteCtx } from "../route-ctx.js";
|
|
3
|
+
export interface SessionsLocal {
|
|
4
|
+
sseConnections: number;
|
|
5
|
+
sseOwnerLookups: number;
|
|
6
|
+
mcpStatusCache: Map<string, {
|
|
7
|
+
at: number;
|
|
8
|
+
panel: Promise<{
|
|
9
|
+
servers: unknown[];
|
|
10
|
+
asOf: string;
|
|
11
|
+
degraded?: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createSessionsLocal(): SessionsLocal;
|
|
16
|
+
export declare function handleSessions(req: IncomingMessage, res: ServerResponse, url: string, ctx: RouteCtx): Promise<boolean>;
|
|
17
|
+
//# sourceMappingURL=sessions.d.ts.map
|