@sema-agent/client-core 0.43.0 → 0.43.1

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 CHANGED
@@ -28,6 +28,29 @@
28
28
  > 不许悄悄漂:豁免登记的 `releasedAt` 与 `FROZEN` 账上 0.36.0 那一行逐字相等;本段(点名版本号
29
29
  > `0.36.0` + 关键字「勘误」)必须还在这份头注里 —— 删掉本段而不同批把门侧豁免一起处理,门当场红。
30
30
 
31
+ ## 0.43.1(2026-08-25)
32
+
33
+ **批面**:`readCcImportRedeemCounts` —— cc-import redeem 200 体的兑付计数**双代归一读口**
34
+ (server 7.46 未声明 BREAKING #2 的消费半场;姊妹案=0.43.0 的 `ruleOffers`)。
35
+
36
+ ### 背景(server ≥7.46.0 未声明换形)
37
+
38
+ server 7.46 把 `POST /v1/rules/cc-import/redeem` 的 200 体从三桶形
39
+ `{ result: { persisted[], deduped[], skippedAtRedeem[], rev } }` 换成判别联合形
40
+ `{ result: { members[], rev } }`(member 带 `status: "persisted" | "deduped"`;refused 不再上
41
+ 200 体 —— server 侧折进 404/503)。CHANGELOG 零声明,npm 最新 SDK 7.2.0 `rules.d.ts` 仍是旧形
42
+ (engine 7.46.0 fixture dist 直证 `rules-consent.js` / `http/routes/rules.js`)。旧读法
43
+ `result.persisted.length` 在 7.46 上恒 undefined ⇒ 导入计数恒 0、成功 banner 永不渲。
44
+
45
+ ### 端要改的一处
46
+
47
+ 兑付计数一律走 `readCcImportRedeemCounts(redeemed.result)`:
48
+ - 新形 `members[]` 在场恒按新键读(全 0 也**绝不回落**旧键;与 0.43.0 窄读器同款纪律);
49
+ - 旧形(≤7.45)`persisted[]/deduped[]` 桶兜底;
50
+ - 两形都缺 ⇒ `null`(诚实缺席 —— 渲 unknown,绝不渲 0/成功)。
51
+
52
+ **测试**:rules-side 门 G7 六断言(新形/空批/新键恒赢/旧形/双缺/未知 status 开集)。
53
+
31
54
  ## 0.43.0(2026-08-25)
32
55
 
33
56
  > 🔴 **两阶段协议提醒(发包批的义务,见本档头注)**:本段发布前须由发包批做**阶段一** ——
package/README.md CHANGED
@@ -35,7 +35,7 @@ Renamed from **`@sema-agent/wire-cc-adapter`** (0.1.x, deprecated — see *Migra
35
35
 
36
36
  ## Scope
37
37
 
38
- **Version:** 0.43.0
38
+ **Version:** 0.43.1
39
39
 
40
40
  - **Today** — the adapter seam, the whole `adapt()` pipeline (all 14 A-layer arms plus the
41
41
  B/D/E tool-card layers), the notification/caps/model families, the adapter kernel (stream driver
@@ -56,6 +56,21 @@ export declare function persistedRulesLaneAvailable(baseUrl: string | undefined)
56
56
  * 只查前者会在「7.11.0 且规则店在」的 worker 上渲出一个恒 404 的治理入口。
57
57
  */
58
58
  export declare function persistedRulesGovernanceAvailable(baseUrl: string | undefined): boolean;
59
+ /** {@link readCcImportRedeemCounts} 的判决体:200 体上真读出来的落库/去重计数。 */
60
+ export interface CcImportRedeemCounts {
61
+ persisted: number;
62
+ deduped: number;
63
+ }
64
+ /**
65
+ * cc-import redeem 200 体的兑付计数**双代归一读口**(server 7.46 未声明 BREAKING 的消费半场):
66
+ * · **新形**(server 7.46+):`result.members[]` 判别联合,member.status ∈ {'persisted','deduped'}
67
+ * (refused 不上 200 体 —— server 侧折进 404/503,见头注「404 禁按成因分支」);
68
+ * · **旧形**(≤7.45;SDK 7.2.0 `rules.d.ts` 仍此形):`result.persisted[]` / `result.deduped[]` 桶。
69
+ * · 纪律与 0.43.0 ruleOffers 窄读器同款:**新键(members)在场就按新键读** —— 即使全 0 也绝不
70
+ * 回落旧键;两形都缺 ⇒ `null`(诚实缺席,调用方渲 unknown,绝不渲 0/成功)。
71
+ * 入参吃 200 体的 `result` 字段(`unknown`:SDK 声明形已与真 wire 脱节,边界必须结构窄化)。
72
+ */
73
+ export declare function readCcImportRedeemCounts(result: unknown): CcImportRedeemCounts | null;
59
74
  /**
60
75
  * 规则口失败的**处置分类**(不是成因分类)。SDK 的 typed 错误族按 `status` + `errorCode` 读,
61
76
  * 结构读法(不 instanceof)—— 注入面可能是假件,bundling 下 instanceof 也不该是承重判据。
@@ -15,6 +15,37 @@ export function persistedRulesLaneAvailable(baseUrl) {
15
15
  export function persistedRulesGovernanceAvailable(baseUrl) {
16
16
  return engineCapTrue(baseUrl, 'permissionRulesRevoke') && engineCapTrue(baseUrl, 'permissionRules');
17
17
  }
18
+ /**
19
+ * cc-import redeem 200 体的兑付计数**双代归一读口**(server 7.46 未声明 BREAKING 的消费半场):
20
+ * · **新形**(server 7.46+):`result.members[]` 判别联合,member.status ∈ {'persisted','deduped'}
21
+ * (refused 不上 200 体 —— server 侧折进 404/503,见头注「404 禁按成因分支」);
22
+ * · **旧形**(≤7.45;SDK 7.2.0 `rules.d.ts` 仍此形):`result.persisted[]` / `result.deduped[]` 桶。
23
+ * · 纪律与 0.43.0 ruleOffers 窄读器同款:**新键(members)在场就按新键读** —— 即使全 0 也绝不
24
+ * 回落旧键;两形都缺 ⇒ `null`(诚实缺席,调用方渲 unknown,绝不渲 0/成功)。
25
+ * 入参吃 200 体的 `result` 字段(`unknown`:SDK 声明形已与真 wire 脱节,边界必须结构窄化)。
26
+ */
27
+ export function readCcImportRedeemCounts(result) {
28
+ const o = (result ?? {});
29
+ if (Array.isArray(o.members)) {
30
+ let persisted = 0;
31
+ let deduped = 0;
32
+ for (const m of o.members) {
33
+ const status = m?.status;
34
+ if (status === 'persisted')
35
+ persisted += 1;
36
+ else if (status === 'deduped')
37
+ deduped += 1;
38
+ }
39
+ return { persisted, deduped };
40
+ }
41
+ if (Array.isArray(o.persisted) || Array.isArray(o.deduped)) {
42
+ return {
43
+ persisted: Array.isArray(o.persisted) ? o.persisted.length : 0,
44
+ deduped: Array.isArray(o.deduped) ? o.deduped.length : 0,
45
+ };
46
+ }
47
+ return null;
48
+ }
18
49
  function errShape(e) {
19
50
  const o = (e ?? {});
20
51
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/client-core",
3
- "version": "0.43.0",
3
+ "version": "0.43.1",
4
4
  "description": "Client-side session runtime shared by every sema human client (TUI / web / desktop): sema wire frames (AgentEvent) -> CC session vocabulary (SDKMessage) with dual-plane output (transcript/chrome), deterministic transcript ids, lane discipline as a type, and the notification/dedup ledgers. Every CC-skin shape is collected here so the wire itself stays neutral. Blackboard [1832] design axioms; [1651]/[1652]/[1653] signed seam design. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
5
5
  "license": "MIT",
6
6
  "type": "module",