@sema-agent/server 7.12.0 → 7.13.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.
Files changed (51) hide show
  1. package/USAGE.md +30 -2
  2. package/dist/adoption/plan.d.ts +38 -4
  3. package/dist/adoption/plan.js +72 -0
  4. package/dist/adoption/quiesce.d.ts +70 -0
  5. package/dist/adoption/quiesce.js +148 -0
  6. package/dist/adoption/runner.js +63 -5
  7. package/dist/adoption/sql.d.ts +15 -0
  8. package/dist/adoption/sql.js +18 -0
  9. package/dist/adoption/wire.d.ts +7 -1
  10. package/dist/adoption/wire.js +6 -0
  11. package/dist/approval-card.d.ts +5 -0
  12. package/dist/approval-card.js +22 -0
  13. package/dist/boot/permission-rules-audit.js +29 -1
  14. package/dist/boot/reapers.d.ts +15 -0
  15. package/dist/boot/reapers.js +101 -44
  16. package/dist/boot/runner-deps.d.ts +16 -2
  17. package/dist/boot/runner-deps.js +5 -4
  18. package/dist/config-types.d.ts +14 -2
  19. package/dist/http/active-run-conflict.d.ts +33 -8
  20. package/dist/http/active-run-conflict.js +37 -2
  21. package/dist/http/routes/adoption.js +25 -2
  22. package/dist/http/routes/approvals-assistant.js +33 -3
  23. package/dist/http/routes/capabilities.js +25 -1
  24. package/dist/http/routes/images.js +18 -0
  25. package/dist/http/routes/runs.js +21 -5
  26. package/dist/http/routes/tasks.js +18 -6
  27. package/dist/http/server.d.ts +26 -8
  28. package/dist/http/server.js +102 -16
  29. package/dist/main.js +46 -6
  30. package/dist/observability/fail-open.d.ts +4 -0
  31. package/dist/observability/fail-open.js +4 -0
  32. package/dist/plugins/adoption-log-sql.d.ts +40 -0
  33. package/dist/plugins/adoption-log-sql.js +69 -2
  34. package/dist/plugins/file-run-store.d.ts +85 -1
  35. package/dist/plugins/file-run-store.js +450 -17
  36. package/dist/plugins/permission-rule-store-sql.d.ts +45 -0
  37. package/dist/plugins/permission-rule-store-sql.js +60 -2
  38. package/dist/plugins/shared-memory-store-sql.d.ts +23 -9
  39. package/dist/plugins/shared-memory-store-sql.js +55 -18
  40. package/dist/plugins/sql-driver.d.ts +19 -0
  41. package/dist/plugins/sql-driver.js +12 -0
  42. package/dist/plugins/store-backend.js +24 -1
  43. package/dist/rules-consent.d.ts +33 -4
  44. package/dist/rules-consent.js +43 -2
  45. package/dist/run-local.js +6 -2
  46. package/dist/runtime-governance.d.ts +33 -0
  47. package/dist/runtime-governance.js +32 -0
  48. package/dist/tool-approval.d.ts +32 -0
  49. package/dist/tool-approval.js +20 -0
  50. package/dist/trace/core-keyset-guard.d.ts +1 -1
  51. package/package.json +3 -3
@@ -814,6 +814,15 @@ export class ToolApprovalCoordinator {
814
814
  // [2942]/[2943]:治理来源标(additive,只在为真时在场——缺席绝不编 false,见字段顶注)。
815
815
  // 值来自上方那一次**非消费式** peek(同一 toolCallId 的重播/failover 再入必须拿到同一份判定)。
816
816
  ...(governanceForced ? { governanceForced: true } : {}),
817
+ // #144(core 5.25.0):被越级的持久规则原文。**逐字透传 core 的判定**(是不是"命中但清不掉"由引擎
818
+ // 的消音谓词裁,server 不重判);内容族 ⇒ `redactSecrets` 后上帧,空串不铸键(见字段顶注)。
819
+ // 🔴 **脱敏后当场截到卡的上限**(codex 对抗复审 R2-[medium],验真后修):`redactSecrets` 会**变长**
820
+ // (一条 `password=…` 换成更长的遮蔽标记),于是一条 ≤512 的规则脱敏后可能超 512 ——而卡面
821
+ // (`buildApprovalCard` 的 `clip`)会截、活卡帧不截 ⇒ **同一个 approvalId 的两族帧带着两份不同的文本**
822
+ // (live 长的、`card_json`/呈卡/重放短的)。修法是「先脱敏再截,一次算定」,两面从此同源同值。
823
+ ...(typeof req.persistedRuleShadowed === "string" && req.persistedRuleShadowed !== ""
824
+ ? { persistedRuleShadowed: redactSecrets(req.persistedRuleShadowed).slice(0, MAX_RULE_TEXT_CHARS) }
825
+ : {}),
817
826
  // #154 车二:候选逐字透传(条件见 `ruleLaneMaterial` 上方注)。
818
827
  ...(ruleLaneMaterial !== undefined ? { ruleSuggestions: ruleLaneMaterial.suggestions } : {}),
819
828
  ...(bounded.omitted ? { argsOmitted: true } : { args: bounded.args }),
@@ -978,6 +987,17 @@ export class ToolApprovalCoordinator {
978
987
  frame.governanceForced = true;
979
988
  else
980
989
  delete frame.governanceForced;
990
+ // 🔴 #209 件4:`persistedRuleShadowed` 同归「行 = 真源」的 F2 家族,姿势与上一行**逐字同形**。
991
+ // 它比 `governanceForced` 更需要这一步:那个键的本地判据(进程内标记表)在重入时恒空,而本键的
992
+ // 本地判据是 **core 交来的 `req`** —— 幂等命中一条既有行时,这一次的 `req` 是**新一腿**的 ask 请求,
993
+ // 它带的规则命中判定可能与落库那一刻**不同**(规则在两腿之间被撤销 / 新加了一条命中的规则)。
994
+ // 两族帧若各读各的,同一个 `approvalId` 会带着互相矛盾的规则解释上 wire(旧帧说"你的规则被越级"、
995
+ // 呈卡帧说"没有规则",或反向)。采信行 —— 人看到的解释必须是**这张卡落库那一刻**的那一份。
996
+ // 缺席也要**如实同步**(删键,不是留着本地这一腿的真值)。
997
+ if (typeof cardForFrame.persistedRuleShadowed === "string")
998
+ frame.persistedRuleShadowed = cardForFrame.persistedRuleShadowed;
999
+ else
1000
+ delete frame.persistedRuleShadowed;
981
1001
  // 🔴 #204 件7(codex 对抗复审 R1-中,验真后修):行说这是治理门 ⇒ **规则车道当场撤回**。
982
1002
  // 上面那行只同步了帧上的出处键;素材、两族帧上的候选、以及回决侧第二道门的输入都还是按**本地**
983
1003
  // 表算的,而本地表在 failover / 重启后恒空。不撤就正是本件要防的形:一张卡同时带着
@@ -26,7 +26,7 @@ type BgNotifExcluded = "kind" | "sessionScoped" | "owner" | "scope" | "descripti
26
26
  type _GuardBgNotif = AssertAllKeysHandled<Exclude<keyof BackgroundChildEvent, BgNotifProjected | BgNotifExcluded>>;
27
27
  type RosterProjected = "name" | "agentId" | "sessionId" | "toolUseId" | "owner" | "scope" | "sessionScoped" | "rootSessionId" | "model" | "modelFallback" | "createdAt";
28
28
  type _GuardRoster = AssertAllKeysHandled<Exclude<keyof RosterEntry, RosterProjected>>;
29
- type AskProjected = "toolName" | "toolCallId" | "args" | "message" | "sourceTaskId" | "fromSubagent" | "sourceAgentName" | "delegation" | "ruleSuggestions";
29
+ type AskProjected = "toolName" | "toolCallId" | "args" | "message" | "sourceTaskId" | "fromSubagent" | "sourceAgentName" | "delegation" | "ruleSuggestions" | "persistedRuleShadowed";
30
30
  type AskExcluded = "preview" | "principal" | "requiresRealApproval" | "riskAxes" | "boundInputHash";
31
31
  type _GuardAsk = AssertAllKeysHandled<Exclude<keyof AskRequest, AskProjected | AskExcluded>>;
32
32
  type TaskEventHandled = "text_delta" | "reasoning_delta" | "tool_start" | "tool_end" | "turn_end" | "compacted" | "diagnostics" | "message_committed" | "status" | "task_notification" | "task_progress" | "steering_injected" | "workspace_changed" | "done" | "context_usage" | "compaction_outcome" | "human_input" | "wiring_manifest";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/server",
3
- "version": "7.12.0",
3
+ "version": "7.13.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",
@@ -54,7 +54,7 @@
54
54
  "build:binary:run-local:darwin-arm64": "bun build --compile --target=bun-darwin-arm64 src/run-local.ts --outfile dist/run-local-darwin-arm64"
55
55
  },
56
56
  "dependencies": {
57
- "@sema-agent/core": "^5.23.0",
57
+ "@sema-agent/core": "^5.25.0",
58
58
  "@sema-agent/registry-core": "^0.16.0",
59
59
  "e2b": "^2.28.0",
60
60
  "libsodium-wrappers": "^0.8.4",
@@ -69,7 +69,7 @@
69
69
  "sharp": "^0.35.3"
70
70
  },
71
71
  "devDependencies": {
72
- "@sema-agent/sdk": "^6.13.0",
72
+ "@sema-agent/sdk": "^6.14.0",
73
73
  "@types/libsodium-wrappers": "^0.7.14",
74
74
  "@types/node": "22.10.2",
75
75
  "@types/pg": "^8.20.0",