@sema-agent/client-core 0.78.1 → 0.79.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/CHANGELOG.md +45 -0
- package/README.md +23 -18
- package/dist/adapt/arms.js +7 -0
- package/dist/adapt/textStream.d.ts +1 -0
- package/dist/adapt/textStream.js +10 -0
- package/dist/adapt/toolCards.d.ts +1 -0
- package/dist/adapt/toolCards.js +2 -0
- package/dist/adapter/downstream/eventToSdkMessage.js +4 -0
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +9 -1
- package/dist/adapter/downstream/terminalToSdkResult.js +29 -3
- package/dist/adapter/runStream.js +60 -3
- package/dist/agentSession/contract.d.ts +2 -1
- package/dist/engineNoticeCodes.js +2 -0
- package/dist/gateVocabulary.d.ts +6 -0
- package/dist/gateVocabulary.js +21 -0
- package/dist/hitl/askGateWire.d.ts +3 -0
- package/dist/hitl/askGateWire.js +2 -0
- package/dist/hitl/frameRouter.d.ts +1 -0
- package/dist/hitl/frameRouter.js +39 -8
- package/dist/hitl/gateLedger.d.ts +9 -4
- package/dist/hitl/gateLedger.js +29 -5
- package/dist/hitl/parkResolver.js +6 -1
- package/dist/hitl/persistedRulesWire.d.ts +12 -1
- package/dist/hitl/persistedRulesWire.js +20 -5
- package/dist/hitl/toolApprovalWire.d.ts +15 -1
- package/dist/hitl/toolApprovalWire.js +45 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/mcpLiveness.js +3 -0
- package/dist/mcpProbeCapability.d.ts +18 -0
- package/dist/mcpProbeCapability.js +55 -0
- package/dist/mcpProbeWire.d.ts +51 -0
- package/dist/mcpProbeWire.js +217 -0
- package/dist/printToolResultFrame.d.ts +1 -0
- package/dist/printToolResultFrame.js +2 -0
- package/dist/request/taskRequest.d.ts +20 -1
- package/dist/request/taskRequest.js +198 -52
- package/dist/sdkWireTransit.d.ts +2 -1
- package/dist/sdkWireTransit.js +1 -0
- package/dist/toolResult.d.ts +15 -1
- package/dist/toolResult.js +61 -4
- package/dist/wireFailureShape.d.ts +1 -0
- package/dist/wireFailureShape.js +44 -10
- package/docs/INTEGRATION-CLIENTS.md +178 -14
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -49,6 +49,51 @@
|
|
|
49
49
|
> 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
|
|
50
50
|
> commit 漏转在发布前就红,不再靠人记。
|
|
51
51
|
|
|
52
|
+
## 0.79.0(2026-09-21)
|
|
53
|
+
|
|
54
|
+
> 主题:**server 7.93.0 过境批 —— 写口回执第六臂 + 无 run 可读的 MCP 状态面 + 审批卡「清不掉」那一位 + 请求装配第三车道与四个 wire 键归包**(🔴 **minor**:peer sdk 地板 `>=11.0.1` → **`>=11.2.1`**;型面 BREAKING:`writePersistedRule` 结局联合 +1 臂 `unverified`、`RulesFailure` +2 kind、拒因表 +1 词、`RequestLane` +1 词、`RequestFieldSpec` 新增必填列;行为面 BREAKING:无人值守车道从此带 `model`;deny 收口帧按归因分两串;模型轮结束划 assistant 消息界;公面运行期导出 1154 → **1184**;wire 新键进车道表:`approverPosture` / `maxTokens` / `outputRetries`;审批帧新键 `mandated`)。🔴 **不可发组合**:server 7.93.0 + client-core < 0.79.0(`stillLive: "unknown"` 第六臂 / `mcpProbe` 读口)。**成文改口段见接入文档 §85 85y,按表态制点名三端。**
|
|
55
|
+
|
|
56
|
+
### 🔴 BREAKING(型面 / 行为面)
|
|
57
|
+
|
|
58
|
+
- **peer `@sema-agent/sdk` 地板 `>=11.0.1` → `>=11.2.1`**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第二支 `stillLive: Exclude<RemovalLiveness, "yes">`(`unknown` 可达)、`APIError.extra`、行上 `liveness?: McpServerLiveness`;11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚)。本包按 11.2.1 编译,消费端实装随 server 7.93.0 换钉,11.0.1 失去物料见证。四处同批 + `run-sdk-floor-test.mjs` FLOOR + 负控锚。devDep core `~7.26.0`。
|
|
59
|
+
- **`writePersistedRule` 结局联合 +1 臂 `{ status: 'unverified', wrote, rev, message }`**(CC-124;server ≥7.93.0 写后读回失败 ⇒ 200 `{status, rev, stillLive:"unknown"}` 无 `rule`,旧形 500):写**落了**(`rev` 真)而引擎读回时**没取到活性** —— 规则活性未被观察,不是「不在」也不是「说不清写没写」。🔴 不要盲重试(可能正站着,也可能刚被撤);处置 = `listAllPersistedRules` 看现状。0.78.x 上这一形落 `unknown / malformed_result` —— **成文改口**。带 `rule` 的 `unknown` 仍是两个判别位打架 ⇒ `malformed_result`。
|
|
60
|
+
- **`RulesFailure` +2 kind / 拒因表 +1 词**(CC-124;503 体 `committed` 判别位,经 `APIError.extra` 读):写腿 `state.rule_write_failed` + `committed:"no"` ⇒ kind `write-not-committed` ⇒ `refused / not_committed`(可重发);`"unknown"` / 表外词 / 缺席 ⇒ `write-indeterminate` ⇒ `unknown / indeterminate`(禁盲重试)。撤销腿 `state.rule_remove_failed` + `"unknown"` / 表外词 ⇒ kind `remove-indeterminate`(禁盲重试,列举对账);`"no"` / 缺席(≤7.92.x)⇒ `retryable` 照旧。错误对象各格**独立**受保护快照:抛错的 `extra` getter 不抹掉已读到的出处码;`committed` 三态 `no` / `unknown` / `unreadable`(键在场却不是两词、或 `extra` / 该键读不出 ⇒ 保守侧 `unreadable`;缺席才是老服务可重发)。
|
|
61
|
+
- **请求装配:无人值守车道从此带 `model`**([7868] 一):车道表 `model` 行此前只在交互车道有座,无人值守车道传的模型名**静默丢**(引擎用部署缺省、退出码 0)。本版三条车道都有座(不受 live 门),坏模型名会像交互态一样拿到上游的 400 点名。钉着「无人值守不带 `model`」的判据会红 —— 那是判据过期。
|
|
62
|
+
- **`RequestLane` +1 词 `'utility'` + `RequestFieldSpec.whyUtilityLane` 必填**(CC-123):第三条车道 = 宿主自己的一次性 side-channel 提交(独立会话 id / 零工具面 / 小预算 / 显式模型)。🔴 本车道**必须**带字面 `excludeAllTools: true`,否则构造期 `TypeError` —— 这条车道一整片「无座」的理由都压在零工具面上,前提不成立时产出的请求会比无人值守车道同一份输入**更宽**(用户已解析的 deny 面在这条车道上无座)。车道表 43 行逐行定座(有座 16),新导出 `REQUEST_LANES`(冻结清单)。`AgentSessionConfig.lane` 改为从闭集派生的写法,值集不变。
|
|
63
|
+
- **deny 收口帧不再对每一次拒绝都盖同一句**(CC-125):决断对象 `ApprovalCardDenyDecision` 加 `settledBy?: 'human' | 'policy'`(值域是上游 `ApprovalSettledBy` 在这个位置上的可达子集;只认自有数据属性,原型链 / 取值器 / 表外词一律当缺席)。`policy` ⇒ 收口帧 `output` = 新冻结常量 `HITL_POLICY_DENY_MESSAGE`(非交互拒绝句)+ 换行 + 宿主自己的拒因(有则带);`human` / 缺席 ⇒ 与 0.78.2 **逐字节相同**。此前无论是人按了 No、权限规则拒的、还是本车道根本没有审批口,收口帧都写「用户不想继续」—— 而那条车道上没有人被问过。live 帧腿与 durable park 腿同律。按「凡 deny 必见 REJECT 句」写的判据要分成两向。
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
|
|
67
|
+
- **无 run 可读的逐台 MCP 状态面**(CC-74;server ≥7.93.0):`capabilities.mcpProbe` 四态读面(第十二只能力位读器:`projectMcpProbeCapability` / `noteEngineCapsForMcpProbe` / `observedMcpProbe` / `forgetMcpProbeReading` / `mcpProbeAvailable` / `mcpProbeDoctorDetail`)+ 两只调用口 `readMcpCapabilities(facade, …)`(读本部署自己的申报)/ `probeMcpServers(facade, { specs, … })`(探调用方自带的申报)。在场位由**引擎版本**承担:键缺席 = 老引擎(那条路径回带码的 404),读 `not_reported`,不折否;`false` = 引擎明说的否,**不推因由**;非布尔 ⇒ 畸形删格。`mcpProbeAvailable` 只答「这次调用要不要上 wire」:明确的否才零请求,两种「读不出」照发。单一失败判官 `classifyMcpProbeFailure` **出处先于状态码**:无码的 4xx / 501 / 503 一律 `no_verdict`;十二条码各一臂(身份三码里有一个不在 `auth.` 族);带码 5xx 与认不得的带码 4xx 只说「读不出」;429 / 503 带等待秒数、缺席不铸 0。200 体的行与流式腿 / 会话面板回放腿走**同一只窄化器**;本面按**下标**与申报表配对:丢过行 ⇒ 整只读不出(不是半张表),行数 ≠ 申报数 ⇒ `index_misaligned`,`servers: []` 与「非空全坏」分开。`probedAt` / `ttlSec` 原样过境(本包不铸新鲜度判词);自带序列化(`toJSON`)的名单响亮拒、零请求;零重试。
|
|
68
|
+
- **审批卡「清不掉」那一位**(CC-110;core 7.26.0 / server 7.93.0 / sdk 11.2.1):`ToolApprovalFrame.mandated?: true` 进 interface 与运行期键镜像(29 → 30),活卡帧腿只认严格 `true` 条件 stamp 到 `ApprovalCardRequest.mandated?: true`;判据口 `approvalIsMandated(card)` —— 两条腿一个真源(帧位 ∨ 寄存行的 `ruleOffersAbsence === "mandated"`),🔴 端**别直接读位**(寄存行没有这一位);措辞铸点 `mandatedApprovalDetail()`(零参数;句中不指人去写规则 —— 门是强制的,写了也消不掉)。寄存行腿与 `livePending` 行视图**刻意零新键**(上游行形无此位,不自铸第二个源)。`mandated` ≠ `requiresRealApproval`:前者说「没有规则能清掉这一问」,后者才是「要人不要配置」。
|
|
69
|
+
- **`approverPosture` 车道行**(CC-116;sdk 11.2.1 `TaskRequest.approverPosture?: "bypass"`):交互 + 无人值守两条车道,live 门后;单成员闭集,坏值构造期 `TypeError` 只报形状;型取自 sdk + 编译期双向钉;新导出 `APPROVER_POSTURE_BYPASS` + `approverPostureDeclarationField(declared)`。🔴 它**不授权任何东西**:声明的唯一条件是宿主确实自己自动答这个 run 的审批卡;与 `permissionMode` 各自原样过境、**互不派生**。
|
|
70
|
+
- **`maxTokens` / `outputRetries` 两座**(CC-123):各与孪生(`maxCostUsd` / `outputSchema`)**座位集逐字相同**(无人值守 + utility,live 门后);有限正整数,坏值 `TypeError`(上游对坏值是安静按「没给」处理,不是 4xx);不预夹上游的 [1,10] 与部署上限。入参先按**数据属性**整体快照、再按既有读序取值器 —— 任何一位上的取值器都吞不掉别的位的数据属性(此前只按读序保护一个方向);键集 / 描述符读不出的代理入参响亮拒,不当缺席。
|
|
71
|
+
- **两只纯函数**(CC-118):`taskRequestOmissionCauseDetail(cause)`(回执四个成因词各一句人话,表外词兜底并原样带词)/ `parseMaxCostUsd(text)`(五词判别联合 `not_text` / `empty` / `not_a_number` / `not_finite` / `not_positive`;形判据刻意窄于 `Number()`:`1e3` / `0x10` / `.5` 一类写法在「到底要多少钱」上有歧义,宁可当场被看见)。
|
|
72
|
+
- **`memory.project_scope_absent`**(CC-122;core 7.26.0 第 68 枚通告码):进 `ENGINE_NOTICE_CODES` 镜像(顺序同源,operator 面)。
|
|
73
|
+
- **拒绝的机读事实,不用再从文案反推**(CC-125):被拒收口帧与两个转录出口(转录卡 / 无人值守车道的 `user` 信封)带 `_sema_denial_kind`(分类词,在消息信封顶层、不进 `tool_result` block;值域 = 上游转录记录键 `toolDenialKind` 的真词表 `CC_TOOL_DENIAL_KINDS` 七词镜像,`human` ⇒ `user-rejected`、`policy` ⇒ `permission-rule`、缺席 ⇒ 整键不铸);终帧 `_sema_permission_denials[]` 行带 `deniedBy`(sdk `DeniedBy` 十词闭集,按调用 id 从同一条流的门记录 join,来源位 `_sema_denied_by_source: 'tool_end'`)与两个载体同名同值的 `toolDenialKind`;终帧 `_sema_zero_output_denied: true`(present-iff:sema 载体拒绝行非空 ∧ 本流零成功工具收口(在去重之前观测)∧ 本流从流首帧看起;任一不成立 ⇒ 整键缺席,绝不铸 `false`);同一调用 id 的两只收口帧归因互相矛盾 ⇒ 两格都不 join(不按到达序任选)。新导出:`HITL_POLICY_DENY_MESSAGE` / `APPROVAL_DENY_SETTLED_BY_WORDS` / `readApprovalDenySettledBy` / `SEMA_DENIAL_KIND_KEY` / `CC_TOOL_DENIAL_KINDS` / `isCcToolDenialKind` / `isCcToolDenialKindADenial` / `isGateDeniedByWord`。`settledBy` 今天不上 wire(上游 respond 入参尚无这一位),本版只决定宿主面那一戳。
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
|
|
77
|
+
- **`displayBody` 对委派结果全文不生效**(CC-127;[7885] 一.4:后台任务详情面把整份给模型看的报告脚手架逐字摆给人看):判据此前是「整串两端就是围栏」,而引擎铸委派结果全文时围栏只是其中**一段**(之前有帧头 + 若干字段行 + 结果段标签行,之后有尾注句 / 可选的内部标识行 / 用量块)。现在读口可在**报告框架内部**定位那一段,并把围栏之外的字节逐字交在新的可选 `frame` 键里(`before` / `after` / `section`;`before + 摘出的那一段 + after` 逐字节 === 入参)。三支上游形各有读法:结果围栏 ⇒ 正文 = 委派方写的那段话;「被打断前最后一段文本」⇒ 同上并报 `partial_findings`;引擎的「没有文本结果」哨兵 ⇒ 正文空串并报 `no_text_result`。🔴 **体内定位只在调用方显式声明来源时才走**(`displayBody(text, 'delegation_report')`;新导出型 `DisplayBodyOrigin` 两成员闭集 / `DelegationReportFrame`;坏值 / 缺席一律落回通用读法):锚只能认文本形状、认不出来源,默认打开会把一段**长得像**报告的普通文本的真正文当框架藏掉 ⇒ `displayBody(text)` 与 0.78.1 逐字节同答,既有调用点一个字不改;要让这一版到用户屏上,端需加那一个词。三处结构行**各自必须在全文里只出现一次**,任一处出现两次(委派方文本里照抄了其中一行 / 任务描述里带了一整份报告样例 / 两份报告首尾相接)⇒ 歧义,拒绝并交回入参逐字 —— 锚不唯一时挑哪一个都可能把别人写的话当成委派方说的话。成文改口:0.78.1 的读口只对整串就是围栏的结果生效,「详情面已经不会出现围栏」这类说法作废。
|
|
78
|
+
- **模型轮结束现在划 assistant 消息界**(CC-126;[7880] 一):一个 turn 的回答分成两段而两段之间没有工具调用(中途插话或注入的系统条目都会造出这一形)时,此前两段被提交进**同一条**转录行(上一句的句尾直接接下一句的句首),终答比较器拿到的是这份拼接、比的却是引擎的**最后一条**消息 ⇒ 对一个完全正常的回答报「最终答案与上面流出的文本不一致」。现在轮末帧那一拍提交挂着的散文并开始新消息:每段各自一行,比较回到「一条 assistant 消息对一条 assistant 消息」。缺账轮同样划界(「这一轮结束了」与「这一轮花了多少」是两件事,只有前者决定边界);属于子流的轮末帧不给 leader 划界。真分岔仍照发同一条披露,消失的只是假的那一条。轮末同时关掉段权威替换窗口(下一轮的 `text_end` 不再指认上一轮的行 —— 截断形下上一轮那条行保留;工具卡边界上那一形仍是 0.68.1 起的已知限 KL-30),只带后台子代标记(`bgAgentId`)的轮末帧在折叠点也判为子流、不给 leader 划界。已知限:引擎违约的轮末帧整帧不投影 ⇒ 那一轮不划界。
|
|
79
|
+
|
|
80
|
+
### Changed(判据 / 门)
|
|
81
|
+
|
|
82
|
+
- MCP 活性读口(CC-36)的**词表与在场判据改锚到 sdk 型面**:sdk 11.2.0 起 `WiringManifestMcpEntry.liveness?: McpServerLiveness` 在型,门的上游见证臂如约翻红 ⇒ 三枚编译期钉(本表 ⊆ 型面三词 / 型面三词 ⊆ 本表 / 行型声明这一格);读法仍是结构读,行为零变。
|
|
83
|
+
- 审批帧键对账:`mandated` 曾按领先登记先追 server(sdk 11.2.0 的锚尚无此键),换钉 11.2.1 当天按退出条件删登记,回到逐元素相等;形腿加一道由 AST **反算**的名册(每接口「可选 ∧ 类型恰是字面 `true`」的成员逐元素比,放宽即掉出名册);闭词表腿按**引用相等**钉「再导出的就是上游那一个数组对象」。
|
|
84
|
+
- 写门 `run-persisted-rule-write-test.mjs` → 380;新门 `run-mcp-probe-face-test.mjs` 147;请求装配回执门 → 417;`run-engine-vocab-floor-test.mjs` G3-c 锚同时认 core 7.26.0 的读形;`run-engine-notice-catalog-test.mjs` 码册六十八;登记物:公面 1154 → 1184、测试钩 56 → 57、门 120 → 123。
|
|
85
|
+
|
|
86
|
+
## 0.78.2(2026-09-21)
|
|
87
|
+
|
|
88
|
+
> 主题:**门的棘轮登记数字单真源**(patch;`src/` 零改动、型面零变、行为零变、公面 1154 不变;出包面只动 README「Guards」表一行)—— CC-79 第一期(RH-5 Phase A):五只门的十一格棘轮数字与它们的沿革账搬进一份登记物,门只读不抄,负控改篡改登记物,下调通道让松量显形;顺手收掉两格存量松量;非流式接线回执门补最小非零边界格。
|
|
89
|
+
|
|
90
|
+
### Gates
|
|
91
|
+
|
|
92
|
+
- **棘轮登记数字单真源**(CC-79 第一期):此前五只门各自把上限写成源码常量(`unknownExport: 393` 一类),抬一格要改两个文件(门 + 负控套的锚串),漏改就报「锚缺席」;松量掉在上限之下时静默。现在每一格只住在一份登记物里(`scripts/registry.json`,不出包),每格带一条逐次改数的账(`from` / `to` / `when` / `why`,从原注释逐字搬入,共 218 条 + 11 条历史账链空档登记);门经共用读口取数,读不出 / 不是有限非负整数 ⇒ 报工具故障不给判词;账尾与当前值不等 ⇒ 红(双向);账只许追加,历史账链必须相接;实测低于上限时打印一行 `RATCHET-SLACK <格> measured=<n> ceiling=<m>`(不红,让松量在输出里显形)。新门 `run-registry-test.mjs`(68:物料自洽 / 五只门源码零棘轮字面量 / 账四格齐全与末条 == 当前值 / 全链相接 + 空档登记制 / 只许追加 / 二十余枚正控);负控套 typeshape 那枚改篡改登记物(锚 = 键名,数字自读再减一,抬棘轮不再牵动负控),新增一枚「登记物一格改成非整数 ⇒ 读它的门必须响亮说话」。
|
|
93
|
+
- **两格存量松量收掉**(下调通道首跑抓到):`failloud.exemptedCeiling` 36 → 35、`exportLiveness.maxRows` 78 → 75,各追一条账。
|
|
94
|
+
- `run-submit-wiring-manifest-test.mjs` +1(S4c:`tools.count === 1` 是真读数 1,与零工具 / 缺席三形互异 —— 消费端「`count === 0` 才交付」的判据若写成 `> 1` 两套仍绿,最小非零边界要单独钉;三端同钉)。
|
|
95
|
+
- 登记物:`gates-manifest.json` 119 → 120、README「Guards」表 120 行、负控文档「自动化」表 22 行 = 负控套 `CASES` 22;公面基线不动。
|
|
96
|
+
|
|
52
97
|
## 0.78.1(2026-09-21)
|
|
53
98
|
|
|
54
99
|
> 主题:**两辆并行车收货 + 三张跟进票**(patch;公面运行期导出 1143 → **1154**;wire 零新键;peer 地板不动 `>=11.0.1`;一处既有导出的行为收紧 + 三处措辞改口)—— 工具结果正文人类面读口 `displayBody` 与围栏解析配对收紧(CC-113)· MCP 面板 / 活性两处「没报」措辞分句(CC-115)· 记忆治理面五动词调用口(CC-97 b)· 非流式提交回执的起手接线回执读口 `readSubmitWiringManifest`(CC-121)· 三份失败判官的抛出物读取收口成一只永不抛的快照 helper(CC-119)。**成文改口段见 §83 83y。**
|