@sema-agent/server 7.130.0 → 7.131.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/MIGRATION.md +87 -0
- package/README.md +8 -5
- package/README.zh-CN.md +6 -4
- package/USAGE.md +36 -8
- package/dist/audit.js +4 -1
- package/dist/bench/s1/live-deps.js +2 -0
- package/dist/boot/resolve-spec.js +38 -15
- package/dist/boot/stage-02-web-admin-pull.js +9 -1
- package/dist/boot/stage-10-http-server.js +6 -3
- package/dist/capabilities/builtin-tools.js +2 -1
- package/dist/capabilities/composite-members.d.ts +1 -0
- package/dist/capabilities/composite-members.js +1 -0
- package/dist/capabilities/hands-lane.js +2 -2
- package/dist/capabilities/host-tool-names.d.ts +17 -0
- package/dist/capabilities/host-tool-names.js +15 -0
- package/dist/capabilities/mcp-probe.js +3 -3
- package/dist/capabilities/repo-tools.js +4 -3
- package/dist/capabilities/scenarios.d.ts +8 -7
- package/dist/capabilities/scenarios.js +5 -4
- package/dist/capabilities/select-environment-tool.js +2 -1
- package/dist/capabilities/send-user-file-tool.d.ts +0 -1
- package/dist/capabilities/send-user-file-tool.js +2 -2
- package/dist/capabilities/tool-defer.js +2 -1
- package/dist/config-catalog.js +16 -5
- package/dist/config-invariants.js +2 -2
- package/dist/config-provider.js +2 -2
- package/dist/config-types.d.ts +6 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.js +18 -17
- package/dist/elicitation.d.ts +7 -0
- package/dist/elicitation.js +20 -5
- package/dist/hooks/hook-llm.js +2 -2
- package/dist/hooks/hook-runner.d.ts +54 -8
- package/dist/hooks/hook-runner.js +86 -16
- package/dist/http/admission.js +2 -2
- package/dist/http/approval-sweeps.js +2 -2
- package/dist/http/checkpoint-ctx.d.ts +12 -11
- package/dist/http/checkpoint-ctx.js +4 -4
- package/dist/http/dispatch.js +1 -1
- package/dist/http/resume-legs.js +6 -5
- package/dist/http/routes/approvals-assistant.js +1 -1
- package/dist/http/routes/capabilities.js +6 -16
- package/dist/http/routes/runs.js +6 -10
- package/dist/http/routes/sessions.js +22 -10
- package/dist/http/routes/tasks.js +16 -11
- package/dist/http/scenario-read-face.d.ts +14 -0
- package/dist/http/scenario-read-face.js +5 -0
- package/dist/http/send.d.ts +10 -0
- package/dist/http/send.js +6 -0
- package/dist/http/server.d.ts +16 -12
- package/dist/http/server.js +2 -2
- package/dist/http/stored-body-replay.d.ts +10 -3
- package/dist/http/stored-body-replay.js +27 -6
- package/dist/http/wire-types.d.ts +18 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/mcp-assertion-header.d.ts +2 -2
- package/dist/mcp-assertion-header.js +3 -3
- package/dist/model-entry-refusal.d.ts +1 -7
- package/dist/model-route-endpoint.d.ts +51 -11
- package/dist/model-route-endpoint.js +45 -23
- package/dist/model-route-gap.d.ts +5 -4
- package/dist/model-route-gap.js +1 -1
- package/dist/model-select.d.ts +58 -0
- package/dist/model-select.js +31 -0
- package/dist/namespaced-rule-name.d.ts +7 -4
- package/dist/namespaced-rule-name.js +4 -3
- package/dist/observability/fail-open.d.ts +11 -6
- package/dist/observability/fail-open.js +5 -1
- package/dist/plugins/local-session-store.js +2 -2
- package/dist/plugins/one-time-migrations.d.ts +10 -1
- package/dist/plugins/one-time-migrations.js +16 -1
- package/dist/question.d.ts +18 -9
- package/dist/question.js +21 -13
- package/dist/request-key-closure.d.ts +2 -2
- package/dist/request-key-closure.js +16 -9
- package/dist/rule-entry-list.d.ts +124 -17
- package/dist/rule-entry-list.js +140 -24
- package/dist/run-local.d.ts +3 -3
- package/dist/run-local.js +8 -7
- package/dist/runs.d.ts +42 -2
- package/dist/runs.js +45 -2
- package/dist/spec-fields.d.ts +8 -4
- package/dist/stored-request-hooks-m20.d.ts +23 -0
- package/dist/stored-request-hooks-m20.js +124 -0
- package/dist/stored-request-tool-axes-m19.d.ts +1 -1
- package/dist/task-mcp.d.ts +41 -77
- package/dist/task-mcp.js +143 -75
- package/dist/task-settings.d.ts +41 -5
- package/dist/task-settings.js +39 -25
- package/dist/trace/core-keyset-guard.d.ts +2 -2
- package/dist/trace/ledger-sink.d.ts +29 -0
- package/dist/trace/ledger-sink.js +11 -0
- package/dist/trace/project.d.ts +6 -0
- package/dist/trace/project.js +11 -0
- package/dist/trace/wire-projection-faces.d.ts +1 -1
- package/dist/trace/wire-projection-faces.js +1 -1
- package/dist/user-authored-text.d.ts +7 -0
- package/dist/user-authored-text.js +3 -0
- package/dist/web-admin-client/apply-effective.js +10 -5
- package/dist/web-admin-client/types.d.ts +1 -1
- package/package.json +2 -2
- package/scripts/drain-check-local.mjs +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { expandTiers, resolveTaskModel as coreResolveTaskModel } from "@sema-agent/core";
|
|
2
2
|
import { WEB_ADMIN_ENV, narrowAtMention, resolveActiveTiers, resolveCatalogDefaultModel } from "@sema-agent/settings-schema";
|
|
3
3
|
import { modelKeyPoison } from "../key-resolver.js";
|
|
4
|
-
import { readAtMention } from "../model-select.js";
|
|
4
|
+
import { buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
|
|
5
5
|
import { applyAutoCompactWindow, buildModelCostKey, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
|
|
6
6
|
import { buildModelCompat, readModelCompat } from "../model-compat.js";
|
|
7
7
|
import { buildModelHeadersKey } from "../model-entry-headers.js";
|
|
@@ -40,8 +40,7 @@ function toModel(m, envDefaults = {}, logger) {
|
|
|
40
40
|
provider: m.provider,
|
|
41
41
|
api: m.api,
|
|
42
42
|
baseUrl: m.baseUrl ?? "",
|
|
43
|
-
reasoning: m.reasoning
|
|
44
|
-
input: m.vision ? ["text", "image"] : ["text"],
|
|
43
|
+
...mintCapabilityKeys({ reasoning: m.reasoning, vision: m.vision }),
|
|
45
44
|
contextWindow: m.contextWindow ?? envDefaults.contextWindow ?? 262144,
|
|
46
45
|
maxTokens: m.maxTokens ?? envDefaults.maxTokens ?? 4096,
|
|
47
46
|
...(charsPerTokenOf(m.charsPerToken) !== undefined || envDefaults.charsPerToken !== undefined
|
|
@@ -115,6 +114,7 @@ export function applyEffective(config, eff, logger, opts) {
|
|
|
115
114
|
}
|
|
116
115
|
}
|
|
117
116
|
}
|
|
117
|
+
const servedBefore = servedModelTableLeg(config);
|
|
118
118
|
commitStaged(config, staged);
|
|
119
119
|
if (ordered)
|
|
120
120
|
appliedGeneration.set(config, gen);
|
|
@@ -138,6 +138,11 @@ export function applyEffective(config, eff, logger, opts) {
|
|
|
138
138
|
logger?.info("web_admin_limits", { version: staged.version, keys: staged.limits.changed });
|
|
139
139
|
if (mp)
|
|
140
140
|
logger?.info("web_admin_models", mp.infoLine);
|
|
141
|
+
if (servedBefore === "env") {
|
|
142
|
+
const notServed = buildEnvModelIdNotServedNotice(config);
|
|
143
|
+
if (notServed !== undefined)
|
|
144
|
+
logger?.warn(notServed.event, notServed.fields);
|
|
145
|
+
}
|
|
141
146
|
if (staged.approvalGate.next !== undefined)
|
|
142
147
|
logger?.info("web_admin_runtime", { version: staged.version, approvalRequire: staged.approvalGate.next });
|
|
143
148
|
if (Object.keys(staged.hot.infoLine).length > 0)
|
|
@@ -248,7 +253,7 @@ function stageModelPlane(config, eff, logger, sealedKeys) {
|
|
|
248
253
|
const modelApiKeyEnv = {};
|
|
249
254
|
const modelApiKeys = {};
|
|
250
255
|
const envModel = envDerivedModel(config);
|
|
251
|
-
const envDefaults = { maxTokens: envModel.maxTokens, contextWindow: envModel.contextWindow,
|
|
256
|
+
const envDefaults = { maxTokens: envModel.maxTokens, contextWindow: envModel.contextWindow, charsPerToken: envModel.charsPerToken, defaultThinking: envModel.defaultThinking, compat: envModel.compat };
|
|
252
257
|
for (const m of usable) {
|
|
253
258
|
if (m.baseUrl)
|
|
254
259
|
logger?.warn("web_admin_model_base_url", { model: m.name, baseUrl: buildDisplaySafeUrl(m.baseUrl), hint: "registry-directed gateway override — this model's key authenticates AGAINST THIS URL" });
|
|
@@ -343,7 +348,7 @@ function stageModelPlane(config, eff, logger, sealedKeys) {
|
|
|
343
348
|
const noDefault = crossInvariant("default-model-resolvable").check({ live: config, next: nextView });
|
|
344
349
|
if (noDefault !== undefined)
|
|
345
350
|
return refuse(DEFAULT_MODEL_MISSING_CODE, noDefault);
|
|
346
|
-
const endpoint = judgeModelRouteEndpoint(nextView);
|
|
351
|
+
const endpoint = judgeModelRouteEndpoint(nextView, "catalog");
|
|
347
352
|
if (endpoint !== undefined)
|
|
348
353
|
return refuse(endpoint.code, endpoint.reason);
|
|
349
354
|
const minted = crossInvariant("refused-names-not-minted").check({ live: config, next: nextView });
|
|
@@ -125,7 +125,7 @@ export interface CenterMcpServer {
|
|
|
125
125
|
* 与传输类型和地址无关(stdio 子进程可以是不可信包,loopback URL 可以是你自己的服务)——core 刻意
|
|
126
126
|
* 不按拓扑推断,本层同样不推断。它是**部署面**的键(core 顶注:与 `RunnerDeps` 接线同一权威平面),
|
|
127
127
|
* 所以它的家在 center 下发这条腿;请求腿那半场的门与结构性兑现见 `task-mcp.ts`
|
|
128
|
-
* 的 `
|
|
128
|
+
* 的 `assertRequestMcpEntries` 顶注。
|
|
129
129
|
*
|
|
130
130
|
* ✅ **两条腿已通**([ref],settings-schema 1.4.0 补键 + config-provider 映射行,2026-09-02;双绊线翻正销账)。
|
|
131
131
|
* 病史([ref]③ / [ref]③ / [ref],2026-08-31 双绊线实测更正 —— 本注更旧版那句
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.131.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",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@sema-agent/core": "7.51.2",
|
|
68
|
-
"@sema-agent/settings-schema": "
|
|
68
|
+
"@sema-agent/settings-schema": "13.0.1",
|
|
69
69
|
"e2b": "^2.28.0",
|
|
70
70
|
"libsodium-wrappers": "^0.8.4",
|
|
71
71
|
"mysql2": "^3.22.4",
|
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
* · `skill-deny-inert`(换钉 7.117.0 前,引擎 7.42 逐字读规则条目):pending 行所在会话的续跑上下文里,提交体顶层 `skills[]` 或某只子代的 `agents[].skills[]`
|
|
20
20
|
* 某只技能的 `disallowedTools` 有引擎读成空的条目(例:带首尾空白的 `"Bash "` —— 7.41 去白后是一条有效的拒,7.42 什么也不拒)—— 这样的行在 7.117.0 上续跑会被拒
|
|
21
21
|
* (行字节不动;出路 = 取消、改好条目重提,见随包 `MIGRATION.md` 7.117.0 节)。命中行点名是哪一层(`member=skills` / `member=agents.skills`)。
|
|
22
|
-
*
|
|
23
|
-
* `dist/rule-entry-list.js` 取 ——
|
|
22
|
+
* 判据**就是**服务提交与续跑两腿同经的那一只判官(`src/rule-entry-list.ts`:两腿经 `inertToolListEntryOf` 判全部工具名清单,它先调技能两层的取清单函数 `skillDenyInertEntryOf`,
|
|
23
|
+
* 后者调引擎包根的 `compileAllowList`),本脚本取的是技能两层那一只,经编译产物 `dist/rule-entry-list.js` 取 —— 不写第二份。7.131.0 起读成空即拒的清单扩到根 run 的 `allowTools` / `excludeTools` 与子代定义的 `allowTools` / `denyTools`,
|
|
24
|
+
* 本判据(窗在 7.117.0)与随包 SQL 孪生**仍只数技能两层**,不覆盖那几张清单(续跑时的 409 是它们的响亮道);
|
|
24
25
|
* · `workflow-park-holder`(换钉 7.118.0 前,引擎 7.44.0 起 workflow 子代卡交给哪条 run 只看记录 `parks[]` 条目上的持有者位 `parkedBy` / `generation`):
|
|
25
26
|
* pending 行的子会话被 workflow park 索引点名(`<数据根>/workflows/workflow-agent-sessions/index.jsonl`:一行 = 一条 workflow run 的整份指针集
|
|
26
27
|
* `{ runId, rows: [{ sessionId, runId, agentKey, scope }] }`,同一条 run 后写的一行整份覆盖先写的,空集 = 它不再点名任何子会话)= 一张待批的 workflow 子代卡。
|