@sema-agent/server 1.312.0 → 1.314.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/auth-bridge.d.ts +3 -2
- package/dist/bench/s1/live-deps.js +2 -2
- package/dist/budget.d.ts +4 -76
- package/dist/budget.js +4 -83
- package/dist/capabilities/sandbox-file-send.d.ts +2 -1
- package/dist/config-types.d.ts +1 -1
- package/dist/elicitation.d.ts +5 -3
- package/dist/elicitation.js +3 -2
- package/dist/fleet/fleet-bus.d.ts +1 -0
- package/dist/fleet/fleet-bus.js +1 -0
- package/dist/fleet-lease.d.ts +1 -1
- package/dist/fleet-lease.js +1 -1
- package/dist/hooks/hook-llm.d.ts +5 -4
- package/dist/hooks/hook-runner.d.ts +1 -1
- package/dist/hooks/hook-runner.js +1 -1
- package/dist/http/server.js +67 -85
- package/dist/key-resolver.d.ts +1 -1
- package/dist/key-resolver.js +1 -1
- package/dist/leader/grader-env-factory.d.ts +1 -1
- package/dist/leader/grader-env-factory.js +2 -2
- package/dist/leader/wire.d.ts +1 -1
- package/dist/leader/wire.js +1 -1
- package/dist/main.js +26 -26
- package/dist/memory-scope.d.ts +18 -0
- package/dist/memory-scope.js +38 -0
- package/dist/observability/cost-taxonomy.d.ts +34 -0
- package/dist/observability/cost-taxonomy.js +26 -0
- package/dist/observability/prompt-manifest.d.ts +75 -0
- package/dist/observability/prompt-manifest.js +82 -0
- package/dist/plugins/mailbox-store-sql.d.ts +2 -2
- package/dist/plugins/mailbox-store-sql.js +8 -4
- package/dist/plugins/web-search.d.ts +4 -3
- package/dist/question.d.ts +2 -1
- package/dist/question.js +3 -2
- package/dist/run-local.js +2 -2
- package/dist/runtime-caps-resolver.d.ts +7 -7
- package/dist/runtime-caps-resolver.js +3 -3
- package/dist/security.d.ts +2 -16
- package/dist/security.js +3 -37
- package/dist/tool-approval.d.ts +2 -1
- package/dist/tool-approval.js +3 -2
- package/dist/trace/core-keyset-guard.d.ts +2 -2
- package/dist/trace/project.d.ts +1 -0
- package/dist/trace/project.js +1 -0
- package/package.json +2 -2
package/dist/security.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createHash, createHmac, createPublicKey, timingSafeEqual, verify as cryptoVerify } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import { uuidv7, FileMemoryEngineBackend, resolveMemoryEngineRoot, deriveControlPlaneDir, formatUserScope, formatProjScope } from "@sema-agent/core";
|
|
2
|
+
import { uuidv7 } from "@sema-agent/core";
|
|
4
3
|
import { PROJECT_ID_REGEX } from "@sema-agent/registry-core";
|
|
5
4
|
export { parseApprovalHmacKeys, parsePrincipalJwks } from "./auth-keys.js";
|
|
5
|
+
import { memoryScopeFor } from "./memory-scope.js";
|
|
6
6
|
const UUIDV7_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
|
|
7
7
|
export function isUuidV7(s) {
|
|
8
8
|
return UUIDV7_RE.test(s);
|
|
@@ -128,41 +128,7 @@ export function verifiedPrincipal(req, config) {
|
|
|
128
128
|
assertPrincipalShape(sub);
|
|
129
129
|
return sub;
|
|
130
130
|
}
|
|
131
|
-
export
|
|
132
|
-
if (config.requirePrincipal === true) {
|
|
133
|
-
if (config.memoryEngineBackend === "pg" || config.memoryEngineBackend === "tidb") {
|
|
134
|
-
if (!principal)
|
|
135
|
-
return undefined;
|
|
136
|
-
return projectId ? formatProjScope(principal, projectId) : formatUserScope(principal);
|
|
137
|
-
}
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
return config.memoryScope;
|
|
141
|
-
}
|
|
142
|
-
export function memoryEngineRemoteLanePosture(config) {
|
|
143
|
-
const lane = config.remoteExec?.provider;
|
|
144
|
-
if (lane === undefined || lane === "host")
|
|
145
|
-
return undefined;
|
|
146
|
-
return { lane, posture: config.memoryEngineRemoteLaneAllowed === true ? "forced" : "dark" };
|
|
147
|
-
}
|
|
148
|
-
export function memoryEngineBackendFor(config, fallbackRoot) {
|
|
149
|
-
if (config.requirePrincipal === true || !config.memoryEngineEnabled)
|
|
150
|
-
return undefined;
|
|
151
|
-
if (memoryEngineRemoteLanePosture(config)?.posture === "dark")
|
|
152
|
-
return undefined;
|
|
153
|
-
const root = resolveMemoryEngineRoot(config.memoryEngineDir ?? fallbackRoot);
|
|
154
|
-
const dir = join(root, "memory");
|
|
155
|
-
return { backend: new FileMemoryEngineBackend(dir, { controlDir: deriveControlPlaneDir(root, dir) }), root };
|
|
156
|
-
}
|
|
157
|
-
export function memorySpecForRequest(scope, memoryWrite, defaultScopes) {
|
|
158
|
-
if (!scope)
|
|
159
|
-
return undefined;
|
|
160
|
-
const isV2 = (k) => k.startsWith("user:") || k.startsWith("org:") || k.startsWith("proj:") || k.startsWith("userproj:");
|
|
161
|
-
const extras = (defaultScopes ?? []).filter((s, i, arr) => typeof s === "string" && s.length > 0 && s !== scope && arr.indexOf(s) === i);
|
|
162
|
-
const layered = extras.length > 0 ? { scopes: [scope, ...extras], writeScope: scope } : {};
|
|
163
|
-
const v2 = isV2(scope) || extras.some(isV2) ? { scopeContract: "v2" } : {};
|
|
164
|
-
return memoryWrite === false ? { scope, ...layered, writeScope: null, ...v2 } : { scope, ...layered, ...v2 };
|
|
165
|
-
}
|
|
131
|
+
export { memoryScopeFor, memoryEngineRemoteLanePosture, memoryEngineBackendFor, memorySpecForRequest } from "./memory-scope.js";
|
|
166
132
|
export function approvalHmacMessage(env) {
|
|
167
133
|
return JSON.stringify([env.sessionId, env.boundCallId ?? null, env.boundInputHash ?? null, env.decision, env.reason ?? null]);
|
|
168
134
|
}
|
package/dist/tool-approval.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface ToolApprovalRunContext {
|
|
|
20
20
|
abortSignal?: AbortSignal;
|
|
21
21
|
}
|
|
22
22
|
export type ToolApprovalDecision = "allow" | "allow_session" | "deny";
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function parseToolApprovalResponse(body: unknown): {
|
|
24
24
|
ok: true;
|
|
25
25
|
value: ToolApprovalDecision;
|
|
26
26
|
updatedInput?: unknown;
|
|
@@ -28,6 +28,7 @@ export declare function parseToolApprovalDecision(body: unknown): {
|
|
|
28
28
|
ok: false;
|
|
29
29
|
error: string;
|
|
30
30
|
};
|
|
31
|
+
export declare const parseToolApprovalDecision: typeof parseToolApprovalResponse;
|
|
31
32
|
export declare class ToolApprovalCoordinator {
|
|
32
33
|
private readonly als;
|
|
33
34
|
private readonly pending;
|
package/dist/tool-approval.js
CHANGED
|
@@ -12,7 +12,7 @@ function sessionAllowCategory(toolName) {
|
|
|
12
12
|
function sessionAllowKey(owner, sessionId, category) {
|
|
13
13
|
return JSON.stringify([owner, sessionId, category]);
|
|
14
14
|
}
|
|
15
|
-
export function
|
|
15
|
+
export function parseToolApprovalResponse(body) {
|
|
16
16
|
if (body === null || typeof body !== "object" || Array.isArray(body))
|
|
17
17
|
return { ok: false, error: "body must be an object" };
|
|
18
18
|
const d = body.decision;
|
|
@@ -22,6 +22,7 @@ export function parseToolApprovalDecision(body) {
|
|
|
22
22
|
}
|
|
23
23
|
return { ok: false, error: 'decision must be one of "allow" | "allow_session" | "deny"' };
|
|
24
24
|
}
|
|
25
|
+
export const parseToolApprovalDecision = parseToolApprovalResponse;
|
|
25
26
|
function isChildAsk(req) {
|
|
26
27
|
return req.fromSubagent === true;
|
|
27
28
|
}
|
|
@@ -208,7 +209,7 @@ export class ToolApprovalCoordinator {
|
|
|
208
209
|
return settled.allowed;
|
|
209
210
|
}
|
|
210
211
|
respond(id, principal, body) {
|
|
211
|
-
const parsed =
|
|
212
|
+
const parsed = parseToolApprovalResponse(body);
|
|
212
213
|
if (!parsed.ok)
|
|
213
214
|
return { status: 400, body: { error: parsed.error } };
|
|
214
215
|
const entry = this.pending.get(id);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { TaskNotificationPayload, BackgroundChildEvent, RosterEntry, AskRequest, TaskEvent } from "@sema-agent/core";
|
|
2
2
|
type AssertAllKeysHandled<T extends never> = T;
|
|
3
|
-
type NotificationProjected = "task_id" | "task_type" | "toolUseId" | "status" | "summary" | "result" | "output_file" | "usage" | "sessionId" | "seq" | "lines" | "stoppedBy" | "source" | "exitCode" | "partial" | "diagnostics" | "recentSteps" | "editedFiles" | "resumable";
|
|
3
|
+
type NotificationProjected = "task_id" | "task_type" | "toolUseId" | "status" | "summary" | "result" | "output_file" | "usage" | "sessionId" | "seq" | "lines" | "stoppedBy" | "source" | "exitCode" | "partial" | "diagnostics" | "recentSteps" | "editedFiles" | "resumable" | "completionId";
|
|
4
4
|
type _GuardNotification = AssertAllKeysHandled<Exclude<keyof TaskNotificationPayload, NotificationProjected>>;
|
|
5
|
-
type BgNotifProjected = "taskId" | "sessionId" | "seq" | "status" | "summary" | "stoppedBy" | "resumable" | "recentSteps" | "editedFiles" | "usage" | "transcriptId" | "rootSessionId" | "parentTaskId" | "parentToolCallId";
|
|
5
|
+
type BgNotifProjected = "taskId" | "sessionId" | "seq" | "status" | "summary" | "stoppedBy" | "resumable" | "recentSteps" | "editedFiles" | "usage" | "transcriptId" | "rootSessionId" | "parentTaskId" | "parentToolCallId" | "completionId";
|
|
6
6
|
type BgNotifExcluded = "kind" | "sessionScoped" | "owner" | "scope" | "description" | "agentType" | "name" | "currentAction" | "currentTool" | "parentSessionId" | "startedAt" | "workflowRunId" | "progressTaskId" | "progressParentTaskId";
|
|
7
7
|
type _GuardBgNotif = AssertAllKeysHandled<Exclude<keyof BackgroundChildEvent, BgNotifProjected | BgNotifExcluded>>;
|
|
8
8
|
type RosterProjected = "name" | "agentId" | "sessionId" | "toolUseId" | "owner" | "scope" | "sessionScoped" | "rootSessionId" | "model" | "createdAt";
|
package/dist/trace/project.d.ts
CHANGED
package/dist/trace/project.js
CHANGED
|
@@ -92,6 +92,7 @@ export function taskNotificationEventData(ev) {
|
|
|
92
92
|
...(n.seq !== undefined ? { seq: n.seq } : {}),
|
|
93
93
|
...(n.lines !== undefined ? { lines: n.lines.map((l) => redactSecrets(l)) } : {}),
|
|
94
94
|
...(n.stoppedBy !== undefined ? { stoppedBy: n.stoppedBy } : {}),
|
|
95
|
+
...(n.completionId !== undefined ? { completionId: n.completionId } : {}),
|
|
95
96
|
...(n.source !== undefined ? { source: redactSecrets(n.source) } : {}),
|
|
96
97
|
...(n.exitCode !== undefined ? { exitCode: n.exitCode } : {}),
|
|
97
98
|
...(n.partial !== undefined ? { partial: n.partial } : {}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.314.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",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"build:binary:run-local:darwin-arm64": "bun build --compile --target=bun-darwin-arm64 src/run-local.ts --outfile dist/run-local-darwin-arm64"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@sema-agent/core": "^1.
|
|
54
|
+
"@sema-agent/core": "^1.452.0",
|
|
55
55
|
"@sema-agent/registry-core": "^0.10.21",
|
|
56
56
|
"e2b": "^2.28.0",
|
|
57
57
|
"libsodium-wrappers": "^0.8.4",
|