@sema-agent/client-core 0.64.0 → 0.64.2
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 +95 -0
- package/README.md +6 -6
- package/dist/autoModeUnavailable.d.ts +18 -5
- package/dist/autoModeUnavailable.js +31 -7
- package/dist/classifierStatus.d.ts +3 -1
- package/dist/classifierStatus.js +3 -1
- package/dist/cloudConfigWireCaps.js +16 -0
- package/dist/hitl/toolApprovalWire.d.ts +82 -5
- package/dist/hitl/toolApprovalWire.js +112 -1
- package/dist/mcpWireCaps.d.ts +31 -0
- package/dist/mcpWireCaps.js +12 -0
- package/docs/INTEGRATION-CLIENTS.md +279 -16
- package/package.json +1 -1
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
|
|
16
16
|
## §0 版本锚与重扫纪律
|
|
17
17
|
|
|
18
|
-
### 0a. 版本锚(2026-09-
|
|
18
|
+
### 0a. 版本锚(2026-09-10)
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **0.64.1**(= npm 最新;`package.json` `version` 未动)。**工作树另有一批未发内容** = **0.64.2**(server 7.69.0 提货批的包侧**六件**:四件 additive —— `ApprovalCardRequest.classifierUnavailable` 两腿投影 / `mcpConfigToSpec` 透明键 `toolFaces` 透传 / `readDenialLimitFallback` 上公面 / durable park 行两位对偶;外加**一条行为面订正**(`classifierUnavailableOf` 不再吞未知成因词)与**一处同形存量族扫**(`cloudMcpToSpecs` 同样透传),详见 §29),进 `CHANGELOG.md` 的 `## 0.64.2(未发布)` 段;bump 与冻结账两阶段由发包批做,本内容批**不 bump** | `package.json` `version` |
|
|
23
23
|
| peer:wire 契约 | `@sema-agent/sdk` **>=8.4.0**(value-level,非 type-only;**0.60.0 抬版**,四条硬理由见 §24a 与 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 注;上一次是 0.59.0 的 `>=8.3.0`)。🔴 支持窗同批收到 **engine ≥7.64.0**:sdk 8.4.0 与 7.63.0 及以前的 wire **不同窗** | `package.json` `peerDependencies` |
|
|
24
24
|
| peer:会话词汇表 | `@sema-agent/agent-types` **>=0.2.0**(type-only,零运行时) | 同上 |
|
|
25
25
|
| runtime dep | `diff` ^9.0.0(**唯一**一条;portability 门按**等值**钉死) | `package.json` `dependencies` |
|
|
26
|
-
| 公开导出面 | **
|
|
26
|
+
| 公开导出面 | **919** 个运行期符号(+ 44 个测试钩;= 工作树当下的值 = **0.64.2 一件 additive、零删除**:`readDenialLimitFallback`(限额回落卡的窄读器上公面,壳侧同判据副本退役,详见 §29③);`0.64.0` 是 **918**,那批是件①+件② 十三件 additive、零删除:`CLASSIFIER_STATUS_STATES`/`classifierBreakerOf`/`classifierStatusOf`/`classifierStatusDetail`(分类器状态面,详见 §28②)/ `THINKING_FORMATS`/`THINKING_FORMAT_WIRE_TWINS`/`THINKING_DISABLE_PROBE_ORDER`/`MODEL_PROBE_VERDICTS`/`PROBE_PROMPT`/`PROBE_MAX_TOKENS`/`probeRequestBody`/`probeModelCapability`/`applyProbeToEntry`(模型思考能力探测,详见 §28①);`0.63.0` 是 **905**,那批是八件 additive、零删除:`projectServerGateKnobs`/`postureKnobSourceOf`/`postureSourceIsOperatorPinned`/`postureKnobDetail`/`POSTURE_SOURCE_WORDS`(S-178 三根 posture 旋钮读数,详见 §27b)/ `PERSISTED_RULE_BEHAVIORS`/`PERSISTED_RULE_BEHAVIOR_UNKNOWN`/`persistedRuleBehaviorOf`/`persistedRuleBehaviorLabel`/`revokeTargetFromPersistedRule`(三态规则身份,§27c)/ `engineIdentityOf`/`engineIdentityVerdict`/`engineIdentityChanged`/`engineIdentityChangedBy`/`ENGINE_IDENTITY_ANCHORS`(S-179 代际锚,§27d)/ `GATE_DENIED_BY_WORDS`/`gateDeniedByDetail`/`ASK_ORIGIN_WORDS`/`askOriginDetail`(门词汇 +2,§27e)/ `PERMISSION_RULE_ISSUE_CODES`/`RETIRED_PERMISSION_RULE_ISSUE_CODES`/`permissionRuleIssueDetail`(规则 lint 码表,§27f)/ `projectToolRoster`/`toolRosterNames`/`toolShimFromRoster`/`applyToolRosterDelta`(L-161 工具名册,§27g)/ `ENGINE_NOTICE_CODES`/`ENGINE_NOTICE_AUDIENCE`/`noticeAudienceOf`/`engineNoticeInCatalog`/`MCP_INJECTION_DROP_REASONS`/`readMcpInjectionDrop`(L-167 通告码册,§27h)/ `AUTO_MODE_UNAVAILABLE_CAUSES`/`AUTO_MODE_BREAKER_CAUSES`/`classifierUnavailableOf`/`classifierUnavailableDetail`(件⑧ 分类器不可用事实,§27h2);`0.62.0` 是 **869**,那批是五件 additive、**零删除**:`capForDisplay`(呈前消毒 + 封长的共用铸点,详见 §26⑦)/ `SEAT_SEND_MESSAGE_KEY_ORIGINS`(座位载荷逐键出身表,详见 §26③)/ `configureSubagentContentStore`+`subagentContentStoreConfig`+`SUBAGENT_CONTENT_STORE_DEFAULTS`(子代内容账本字节预算,测试钩 `__resetSubagentContentStoreConfigForTests` +1,详见 §26②);`0.61.0` 是 **864**,那批是三件 additive、**零删除**:`projectReadFacePosture`/`readFacePostureDetail`/`readFaceDisagreement`(S-167 READ 容纳面 operator 读器,详见 §25);`0.60.0` 是 **861**,那批是二十五件 additive、**零删除**:`readRunTerminal`/`runTerminalCode`/`runTerminalGateKind`/`runTerminalGateToolName`/`isReviewPark`/`REVIEW_PARK_GATE_KINDS` 六件终局因由读器 + `gateOutcomeOf`/`isDeniedGate`/`gateDeniedBy`/`gateApprover`/`isApprovalWindowExpiredGate`/`isDenialLimitAutoDeniedGate`/`isParkSlaExpiredGate`/`isHumanSettledGate` 八件门记录读器 + `projectWriteProtectionCapability`/`noteEngineCapsForWriteProtection`/`observedWriteProtection`/`forgetWriteProtectionReading`/`writeProtectionDoctorDetail`/`projectWriteProtectionPosture`/`writeProtectionPostureDetail` 七件写保护读面(测试钩 `__resetWriteProtectionReadingsForTests` +1)+ `readWireErrorCode` + 真机边界①的两件 `isGateParkedToolEnd`/`GATE_PARKED_ERROR_CODE` + 异源复审逼出的 `engineCapsGeneration`;`0.59.0` 是 **836**,那批是八件 additive:`RULE_OFFERS_ABSENCE_REASONS`/`DENIAL_LIMIT_KINDS` 两张闭词表再导出 + `engineCapValue` 能力位四态通用读口 + `projectSqlEngineCapability`/`observedSqlEngine`/`noteEngineCapsForSqlEngine`/`forgetSqlEngineReading`/`sqlEngineDoctorDetail` 五件 SQL 姿态读面(测试钩 `__resetSqlEngineReadingsForTests` +1);`0.58.0` 是 **828**,那批是三件 additive:`RULE_OFFER_MATCHES`/`RULE_OFFER_BATCH_MEMBER_KINDS`/`RULE_OFFER_UNCOVERED_REASONS` 三张闭词表再导出 + `RESUME_REFUSAL_CODES`/`RESUME_PLACEMENT_MISMATCH`/`resumeRefusalFromError`/`resumeRefusalContent` 四件文案铸点;`0.57.0` 是 **821**;`0.56.0`/`0.55.0` 是 **815**;已发 `0.54.0`(design/385 十件 additive 含 `AUTHORITY_ENVELOPE_TAGS`);`0.52.0` 是 **805**(L-69⑨ 两件);`0.51.0` 是 **803**;`0.50.0` 是 **800**(S-81 五件);`0.49.0` 是 **795**;`0.48.0` 是 **794**;npm `0.47.0` 是 **790**,`0.46.0` 是 **787**,`0.44.0` 是 **783**,`0.43.1`/`0.43.0` 是 **776**,`0.42.0` 是 **771**,`0.41.0` 是 **767**,`0.39.0` 是 **766**,`0.38.0` 是 **764**;`0.37.0` 是 **753**,见 `CHANGELOG.md`) | `scripts/public-export-baseline.json` 的 `count` / `testHookCount` —— **别手抄进别处,以该文件为准** |
|
|
27
27
|
| 常驻门 | 以 `scripts/gates-manifest.json` 的 `suites` 长度为准(**本档不抄这个数**) | `scripts/gates-manifest.json`;`npm test` 的名单等值门与它逐名对账 |
|
|
28
28
|
| 沿革档 | 0.29.0 起建 `CHANGELOG.md`;更早批次记账在 `src/index.ts` 文件头 + `docs/REFACTOR-LEDGER.md` | — |
|
|
29
29
|
|
|
@@ -111,7 +111,7 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
111
111
|
|
|
112
112
|
## §2 公共导出面地图(按域)
|
|
113
113
|
|
|
114
|
-
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**
|
|
114
|
+
> 全集真源 = `scripts/public-export-baseline.json` 的 `names`(**919** 项)。
|
|
115
115
|
> 本节**不逐名抄**,只给「域 → 承重导出 → 用途 → 实现锚」。承重导出 = 一个端为了让这个域干活
|
|
116
116
|
> **必须**直接调到的那几个符号;其余是它们的类型、变体与辅助位。
|
|
117
117
|
> 单一入口:`import { … } from '@sema-agent/client-core'`(`exports` 只有 `.` 一个;
|
|
@@ -135,18 +135,18 @@ SDK 核对「本包 import 的每个值级符号仍然导出」「`TaskStats.cos
|
|
|
135
135
|
`WorkflowsGateUnknownDenial` 四形**不在**基线里,`src/selfOrchestrationDenial.ts` 对基线贡献
|
|
136
136
|
**4** 项运行期导出(三个函数 + `SELF_ORCHESTRATION_RETRY_WITHOUT`)。
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
919 项的内部构成(帮助端估读表大小):**278** 项是 `SCREAMING_SNAKE` 常量数据表/词汇表
|
|
139
139
|
(矩阵、键集、env 名、锚串)而非可调用物;**5** 项是 PascalCase 运行期值
|
|
140
140
|
(`ControlRouter` / `ControlSafetyError` / `HitlBridge` / `HitlSafetyError` / `DecideTransportRetryExhaustedError`);
|
|
141
141
|
**41** 项是 `*For(sessionKey, …)` 的 per-session 变体(§6;其中 `engineNamespaceKeyFor` 是命名巧合 —— 参数是 baseUrl 不是 sessionKey,见域 14)。
|
|
142
142
|
|
|
143
|
-
### 2b. 域图(16 域,逐域计数之和 =
|
|
143
|
+
### 2b. 域图(16 域,逐域计数之和 = 919)
|
|
144
144
|
|
|
145
145
|
| # | 域 | 名数 | 承重导出 | 用途 | 实现锚 |
|
|
146
146
|
|---|---|---|---|---|---|
|
|
147
147
|
| 1 | **适配内核(下行主链)** | 39 | `adapt` · `createWireToCcAdapter` · `runStream` · `eventToSdkMessage` · `terminalToSdkResult` · `turnUsageToModelUsage` · `isRunStreamActive` · `ADAPTER_DIVERGENCES` · `readRunTerminal` / `runTerminalCode` / `runTerminalGateKind` / `runTerminalGateToolName` / `isReviewPark` / `REVIEW_PARK_GATE_KINDS`(0.60.0 / engine ≥7.64.0:一次 run **怎么结束的**唯一读器 —— 终局从八个平面键换成一条带标因由 `terminal`,四臂 + `unknown` 防御臂 + `plane` 两代字节标;🔴 不认识的终态词绝不折成成功、本包不提供「因由→五词 status」的兼容投影,详见 §24b)| 引擎 SSE `AgentEvent` → 端要渲的**双面输出**:transcript(`SDKMessage`)+ chrome(瞬态 `ChromeEvent`)。**本包存在的理由** | `src/adapt.ts`、`src/adapt/{arms,wireShapes,panelTasks}.ts`(经 `adapt.ts` 再导出)、`src/adapter/runStream.ts`、`src/adapter/downstream/*`、`src/adapter/types.ts`、`src/runTerminal.ts` |
|
|
148
148
|
| 2 | **seam 公共契约** | 2(其余为 type-only) | `CHROME_ARMS` · `deriveTranscriptId` | 公共词汇 + **id 确定性不变量**(同一条流重放 ⇒ 同一串 id)。`CHROME_ARMS` = 端「我要消费哪些 chrome 臂」的对照清单 | `src/seam.ts` |
|
|
149
|
-
| 3 | **HITL 决断卡链**(§4/§5 主战场) |
|
|
149
|
+
| 3 | **HITL 决断卡链**(§4/§5 主战场) | 166 | `makeHitlCanUseTool` · `HitlBridge` · `findPendingForTask` · `HitlSafetyError` · `bridgeAskUserQuestionGates` · `surfaceToolApprovalFrameAndRespond` / `surfaceFsApprovalAndDecide` · `readToolApprovalRespondAck` · `installApprovalCardPort(For)` · `installHitlHostSurface(For)` · `armPlanReviewApproval` · `reopenPlanReviewCard` · `decidePlanReview` · `startApprovalsFeed` · `pendingRowIsOwnedByThisSession` · `approvalCallKey`/`liveFrameCallKey`/`planReviewQuestionId` · `registerArmedGateFor`/`wasGateArmedFor`/`clearArmedGateFor` · `waitForGateArmed(For)`/`onGateArmed(For)`/`gateArmedWaitMs`(#244 F1 呈现回执事件源) · `planReviewArmedKey(For)`/`notePlanReviewAnswered(For)`/`notePlanReviewAnsweredIfDecisive(For)`(A-024.4 plan 呈现分代) · `toolEndOutputText` · `isAskTool` · `waitForParkRowBirth` · `classifyAskParkRows` / `askParkRowArm` / `classifyAskParkChainFailure` · `readDecisionNoteAudit` / `decisionNoteAuditLine` · `resumeRunningOptions` / `resumeChoiceFromLabels` · `persistedRulesLaneAvailable`/`persistedRulesGovernanceAvailable` · `classifyRulesFailure` · `listAllPersistedRules` · `classifySkippedReason` · `readRulePersistOutcome`(#244 F2:persist-ack 读口与 `readToolApprovalRespondAck` 合成一处) · `parseLocalAllowRule`(durable 腿本地落规则窄化骨架,谓词经 `LocalAllowRuleDeps` 注入) · `readToolApprovalRespondRefusal`(#225 件5,0.42.0:respond 抛错的结构化原文读口 —— 三位各自防御读、各自缺席不铸、**三位皆缺席时整只返 `undefined`**;原样交还零加工,UNTRUSTED-for-display)· `installEditedRuleTextPrechecker` / `hasEditedRuleTextPrechecker` / `precheckEditedRuleText`([5076] 转出口,0.42.0:core 5.57.0 `precheckEditedRuleText` 的**端口注入形** —— 类型面 + 注入口 + 诚实缺席读口。🔴 **不是** value 级 re-export,理由见 §7 缺口 **P-34**;未装 ⇒ 返 `undefined`,绝不编一个 `{ok:true}`)· `surfaceRuleArmNotSent` / `RULE_NOT_SENT_WARN_TEXT` + `surfaceRuleArmRejected` / `RULE_NOT_SENT_REJECTED_WARN_TEXT`(#334,0.43.0:人在卡上按下的「不再询问」被整条丢弃时的诚实告知——**两条刻意分开**:前者=**引擎能力位未确认**(换台引擎/等探测就好),后者=**这次选择没过包内表核/互斥核**(表外文本/坏下标/两臂同场,换引擎也不会变) —— 编辑臂 `respondFreeFormRules` 与批臂 `respondBatchRuleOffers` 两条同形存量共用一条,与 `surfaceRememberNotApplied` 同族纪律:决断照送、只是规则没存,静默丢掉用户明确意图 = 让人以为功能坏了)· `projectCrashConverged`(L-38,0.49.0:`/v1/approvals` additive 键 `crashConverged` 的分桶投影 —— 崩溃收敛的孤儿审批读面,**缺席 ≠ 空数组**、分桶恰一个合取、坏行丢弃并计数,详见 §12;同批把 `ApprovalsResourceLike.list()` 的返回位 additive 放宽成 `ApprovalsListEnvelope`,老形 `{pending}` 仍可赋值)· `readRuleOffers` / `readRuleOfferSupply`(L-103/[C228],0.57.0 additive 导出:「不再询问」候选两代 wire 键的窄读器**公面化** —— 此前只经卡端口出包,不走卡端口架构的宿主只能自己重铸一把,而它承载的是兑付安全判据(原始下标不前移/逐条丢坏/闭集 kind/两代取舍序),详见 §20)· `RULE_OFFERS_ABSENCE_REASONS` / `DENIAL_LIMIT_KINDS`(0.59.0 / sdk 8.3.0 提货:`ruleOffersAbsence` 三词与 `denialLimitFallback.limit` 二词的**运行期**闭词表再导出 —— 与 0.58.0 那三张同一条纪律:端拿它做判定别再手抄字面量。⚠️ **本包自己不拿这两张表做窄读判定**(两处都按开集透传,词表属主是 core、server 已按闭集拒过),再导出只是给端的 `switch` 一份可数的表,端仍必须带 `default` 臂,详见 §23a)· `DecideTransportRetryExhaustedError`(Inkglow-1085 P0a:decide 出站瞬断重试耗尽的 typed 判别 —— HitlBridge 内建单次退避重试,耗尽走重呈臂不判死 turn;端一般只消费行为,不需要 instanceof) · `gateOutcomeOf` / `isDeniedGate` / `gateDeniedBy` / `gateApprover` / `isApprovalWindowExpiredGate` / `isDenialLimitAutoDeniedGate` / `isParkSlaExpiredGate` / `isHumanSettledGate`(0.60.0 / engine ≥7.64.0:`tool_end.gate` 整条门记录的窄读器 + 判定谓词 —— 取代退役的四个正交词 `settledBy`/`resolution`/`autoDenied`/`approver`。🔴 **判定归包**:「是不是审批窗自己走完的拒绝」旧形上是端各自拼的两键合取,而三条窗词现在分得开、合并读回去等于把刚修好的判别力扔掉;⚠️ 公面型一律带 `View` 后缀 —— 本文件的 `GateOutcome`(决断腿结局)与 sdk 的 `GateOutcome`(引擎门记录)**同名不同义**,详见 §24c)· `isGateParkedToolEnd`(「这次调用没在这里结算」的**第二形**谓词:gate 缺席 + `errorCode:"gate.parked"`;端判这件事必须与 `isApprovalWindowExpiredGate` **两形合读**) · `readWireErrorCode`(B-037 候包件②:decide/取件失败上引擎 wire 机器码的单源读口,结构视图读不 `instanceof`;与本包铸的 `code` 是两个命名空间,详见 §24g)| suspended→decide→resume 环。🔴 **D-1 两元组 verbatim 回显**是字节级断言的安全不变量,端**不许重实现它的任何一段**。🔴 键空间边界(web [C1] d3 拦截):`gateIdentity` 四常量两函数只覆盖 HITL questionId/callKey 空间;seat 的 `TOOL_PERMISSION_REQUEST_ID_DOMAINS`(`plan:` 等)是另一键空间,**两者绝不合并**(合并=座位校验器静默拒全部 plan-review 卡) | `src/hitl/hitlBridge.ts`、`toolApprovalWire.ts`、`askGateWire.ts`、`planReviewWire.ts`、`hitlHostSurface.ts`、`gateIdentity.ts`、`armedGateRegistry.ts`、`parkOwnership.ts`、`parkResolver.ts`、`approvalsFeed.ts`、`frameRouter.ts`(**只挑名导出** `toolEndOutputText`/`ENGINE_ABORT_TOOL_RESULT`/`isAskTool`/`HITL_REJECT_MESSAGE`/`HITL_INTERRUPT_MESSAGE_FOR_TOOL_USE`)、`parkRowBirthWait.ts`、`approvalDecisionNoteAudit.ts`、`askParkRowRouting.ts`、`resumeRunningCard.ts`(#265 上收的判定层)、`persistedRulesWire.ts`、`localAllowRule.ts`(#244 F2 规则侧)、`crashConverged.ts`(L-38 崩溃收敛读面)、`src/gateOutcome.ts` |
|
|
150
150
|
| 4 | **子代 wire + 面板侧信道台账** | 87 | `tailEngineSubagent` · `installSubagentActivitySink` · `installSubagentTailMetaSink`(#280 件2:tail meta 帧发布口,`contentFrames` 判别位载体)· `stopEngineTask` + `classifyTaskStopConflict` · `fetchEngineSubagentReport` · `steerEngineSubagent`(0.32.0 未发布 #280 件A:additive 第三参 `childTaskId` —— 端有行上下文时**应当**传,传了就走「台账优先 / 缺席即诚实缺席 + `noteBgOwnerAbsence` 留痕」的 Q3 口径,与 tail·taskOutput·subagentOutput 三腿同姿势、与孪生 resume 腿共用同一个 `resolveOwnerRunId` 判据;**不传**则逐字维持旧行为=回落在飞 run)· `resumeSettledSubagent` + `resolveSubagentResumeContext` + `resolveOwnerRunId` + `classifySubagentResumeFailure` + `subagentResumeAvailable`(#242 批 2 A-028.7:resume 判定半场上收,与 steer 孪生同居;取址三态 = 台账有行用行值 / 指名了行但台账缺席则**诚实缺席绝不回落在飞 run** / 没指名行才回落。出路文案归端)· `recordSubagentOwnerFromProgress` + `getBgParentRunOwner`(A-028.6:「子代 → 宿主 run」**单表**,宿主 run 必须由持 stream-local 值的调用方显式传入,包内绝不从 `activeEngineRunId()` 推断)· `noteBgOwnerAbsence`(#242 批 3 [4000] Q3=B:tail/taskOutput·taskStop/subagentOutput 三腿台账缺席即诚实缺席**绝不回落在飞 run**,缺席 warn 留痕每 (腿,taskId) 一条)· `clearBgTerminalFacts`(#242 批 3 扫码修:复活=新周期,旧周期终态事实作废——fleetLedger 复活两腿按尾段清账,factsAccepted 方向核不再拿上周期终态当先例)· `auditRetainWithoutWake`([4000] Q5:引擎宣示 `subagentResume` + 本端在付 `retainSubagentSessions` + 端未实现 `wakeSubagent` ⇒ 响亮一条;`CLIENT_VERBS.wakeSubagent` 维持 fail-soft)· `subscribeSubagentContent` · `subscribeEngineAgentPanel` · `publishQuestionFrame` / `respondToQuestion` · `configureSubagentContentStore` / `subagentContentStoreConfig` / `SUBAGENT_CONTENT_STORE_DEFAULTS`(0.62.0:子代内容账本的**字节预算** —— 此前只有条数帽而单条无上限,一条 base64 工具结果就能让一个子代槽吃到十几 MB;越限从最早的内容开始丢并留一条可渲染的 `truncated` 记录,总帽淘汰整条最久未用的账本。配置面 fail-loud,详见 §26②)| 驱动与观测委派子代;经 module 级台账喂活体 agent/task 面板。全部**能力位 gate**(§5b) | `src/subagent/*.ts`、`src/subagentContentStore.ts`、`src/engineAgentPanelStore.ts`、`src/engineInlineTaskStats.ts`、`src/engineToolLabelStore.ts`、`src/liveQuestionStore.ts` |
|
|
151
151
|
| 5 | **fleet 投影** | 47 | `createFleetLedger` · `projectTasks` · `projectWorkflows` · `projectFleetAgentRows` · `readEngineActiveBgTasks` · `FLEET_TASK_VIEW_KEYS` · `escapeDisplayControlChars`(不可见字符可见化,行标签/描述消毒的共享底座)· `capForDisplay`(0.62.0:呈前**消毒 + 封长**的共用铸点 —— 先转义、后按转义结果封长,截点避开半截转义 token 与合法代理对;本包该族四处此前各写一份、其中三份顺序是反的,详见 §26⑦)· `wireCycleSeq` / `wireRetiredBy`(0.38.0 提货补投的 #261 §2 两位:代际号 = SendMessage 复活即 +1,**缺席 ≠ 第一代**;`retiredBy` 在场 = 这条终态是对账腿从 durable run 行投影出来的、**不是**发布方亲报 —— 幽灵行与正常收尾唯一的 wire 判据。两位都只在场才落键) | 老 `fleetClient` 那一刀的成品:**帧体归库、连接归端** —— 端持 SSE 连接,库做行投影 + 保留台账 | `src/fleet/fleetProjection.ts`、`src/fleet/fleetLedger.ts`、`src/fleetAgentPanelProjection.ts`、`src/fleetTaskDesc.ts` |
|
|
152
152
|
| 6 | **请求装配(上行唯一构造口)** | 8 | `buildTaskRequest` · `REQUEST_FIELD_MATRIX` · `unregisteredRequestKeys` · `applyLiveRequestDefaults` · `taskNotificationToPrintFrame` | 两条车道(`interactive`/`print`)出站请求的**唯一**构造器;`unregisteredRequestKeys` 是可执行门 —— 端偷带一个未登记键上 wire 就红 | `src/request/taskRequest.ts`、`src/request/printNotification.ts` |
|
|
@@ -3286,9 +3286,19 @@ requiresRealApproval:SDK 锚**仍无**此键 —— 锚补上了就该删这条
|
|
|
3286
3286
|
- `origin` / `ruleOffersAbsence` **按开集透传、包内零闭集校验** —— 词表属主是 core,server 侧已按闭集
|
|
3287
3287
|
拒过词表外的值,包再校一遍只会在 core 加员当天把一个**合法**值判没(与 `wiring_manifest.autoMode.reason`
|
|
3288
3288
|
的透传纪律逐字同规)。型面与运行期词表都在公面上,端写 `switch` **必须带 `default` 臂**;
|
|
3289
|
-
- `denialLimitFallback` 走**包内窄读器**(
|
|
3290
|
-
|
|
3289
|
+
- `denialLimitFallback` 走**包内窄读器**(四成员全必填;**缺一整只丢**与 server `readDenialLimitFallback`
|
|
3290
|
+
的 `.strict()` 同判据 —— 半只对象上的 `consecutive` 会被人当成真实次数读)。计数与窗按「有限非负数」
|
|
3291
3291
|
判(`0` 是合法读数,不折缺席),`limit` 按**开集**读(非空串即收)。
|
|
3292
|
+
⚠️ **与 server `.strict()` 不逐字等价的一格**(L-120③,test [6497] 两轨一致发现):对象上**多出的
|
|
3293
|
+
成员**包侧**剥后保留四键**,server 侧**整只拒收**。包比 server 宽一格,方向是「多键不误杀」——
|
|
3294
|
+
server 已在 wire 入口拒过多键形,包再拒一遍只会在 core 加键当天把合法帧判没;所以端不要把
|
|
3295
|
+
「包读出来了」当成「server 也会收」,两侧判据文档各自如实写。
|
|
3296
|
+
🆕 **0.64.2 起这只读器在公面上**:`readDenialLimitFallback(v: unknown): DenialLimitFallback | undefined`
|
|
3297
|
+
(`src/hitl/toolApprovalWire.ts`)。端消费**包内窄读产物**(`ApprovalCardRequest.denialLimitFallback`)时
|
|
3298
|
+
照旧不必判一遍;拿到**裸帧 / 裸行**时用它,而**不要**在端上再抄一份同判据的副本 —— 壳侧此前正有
|
|
3299
|
+
一份(`sema-cli/src/sema/askFrameNotes.ts`),那是第二个判官:上游哪天在四成员上加一位或改某一位的定义域,
|
|
3300
|
+
两份判据各漂各的,而屏上看到的是哪一份取决于素材走了哪条腿。⚠️ 导出的是**读器,不是许可** ——
|
|
3301
|
+
`autoDenyAfterMs` 仍然只许渲倒计时(窗的执行全在引擎),这一条不因它上了公面而松动。
|
|
3292
3302
|
|
|
3293
3303
|
### 23b. `Capabilities` 74→93 逐键复核 + 嵌套对象读口 + S-131 SQL 姿态读面上收
|
|
3294
3304
|
|
|
@@ -4625,6 +4635,24 @@ readMcpInjectionDrop(notice: unknown): McpInjectionDropFactsView | undefined
|
|
|
4625
4635
|
- 🔴 **单铸律**:上游对这条通告立了 `settlement.single_mint` —— 宿主只供事实,**core composes** 码字、
|
|
4626
4636
|
audience 行与句子。⇒ 本包**一句措辞都不抄**,转录**直接用引擎给的 `message`**。想要自己的措辞就
|
|
4627
4637
|
键在 `detail.reason` 上,**绝不**对 `message` 做等值匹配。
|
|
4638
|
+
- 🆕 **单铸律的第二条(0.64.2 补齐;core 7.11.2 / server ≥7.69.0 起入册)**:
|
|
4639
|
+
`delegation.ask_unresolvable` —— 一只 ask 走到**最终 deny 而没有任何人判过它**时的通告。
|
|
4640
|
+
core `dist/core/ask-unresolvable-notice.d.ts` 的 `@contract` 逐字:
|
|
4641
|
+
> `delegation.ask_unresolvable.single_mint` — the `delegation.ask_unresolvable` notice is composed
|
|
4642
|
+
> by CORE from the gate's deny-exit FACTS (session, tool, call id, the composed settlement, whether a park
|
|
4643
|
+
> lane existed) at the ONE exit both unavailable deny arms reach; no other site spells the code or the
|
|
4644
|
+
> sentence, and an empty session or tool name is refused at the mint with a `TypeError` rather than
|
|
4645
|
+
> shaped into a notice that would route nowhere.
|
|
4646
|
+
· **audience `user`**(同一份 d.ts 逐字:被拒的是用户自己的活,而补救是运维姿态,运维那半场走 sink);
|
|
4647
|
+
· `detail` 五格 `{sessionId, toolName, toolCallId, settlementKind, parkLaneExisted}`,其中
|
|
4648
|
+
`settlementKind` 恒 `"approver_unavailable"`(**作为事实携带,不在下游重新推导**),
|
|
4649
|
+
`toolCallId` 是与同一次 `tool_end.gate.settlement` 对账的**关联键**;
|
|
4650
|
+
· 🔴 **`parkLaneExisted` 是判别位,禁折叠**(上游发布记录 [6863] ③ 表逐字):`true` = park 车道**武装过**、
|
|
4651
|
+
它有过一次机会而没接;`false` = 压根没有 park 车道(常见形)。两者对用户的下一步不是同一句话,
|
|
4652
|
+
折成「反正没人批」就把「你的部署接了耐久审批但它没接住」这条运维事实抹掉了;
|
|
4653
|
+
· 与上面那条同律:**本包一句措辞都不抄**,转录直接用 `message`,分支键在 `detail` 上。
|
|
4654
|
+
· 🔴 **deny 本身比这条通告更老、且一字不改**:它是**披露面**补齐(此前只有模型读得到那句工具结果,
|
|
4655
|
+
看通告的人什么都看不见),**不是**一次裁决面变更 —— 端不许据它翻转、重试或补发任何决断。
|
|
4628
4656
|
|
|
4629
4657
|
---
|
|
4630
4658
|
|
|
@@ -4655,10 +4683,13 @@ classifierUnavailableDetail(cause: unknown): string
|
|
|
4655
4683
|
(这是 `classifierUnavailable.cause` 的值域);`AUTO_MODE_BREAKER_CAUSES` 答「**熔断闩为什么合上**」。
|
|
4656
4684
|
两集交于 `error`/`timeout`,各有一个独占成员 —— 合成一张表就把两条轴的差别扔了。
|
|
4657
4685
|
- 🔴 **`parse_error` 只在熔断轴上**:上游顶注逐字「`parse_error` stamps nothing」—— 分类器
|
|
4658
|
-
|
|
4659
|
-
|
|
4686
|
+
**跑了并且答了**,只是答在契约之外,那是**另一句话**。读器把**熔断轴独占**的词判**缺席**;
|
|
4687
|
+
把它读成一个「没跑成」的成因,就是替引擎编一件它明说没发生的事。
|
|
4660
4688
|
措辞表仍为它备了一句(给**渲熔断面**的消费端用同一个铸点),那一句逐字说的是「答在契约之外」。
|
|
4661
|
-
-
|
|
4689
|
+
- 🔴 **未知(表外)成因词照收**(**0.64.2 订正**,详见 §29e;修前判缺席):词表属主在 core,抄一份
|
|
4690
|
+
闭集只会在 core 加词那天把一个合法值判没 —— 读器只排除**熔断轴独占**的词
|
|
4691
|
+
(`AUTO_MODE_BREAKER_CAUSES` − `AUTO_MODE_UNAVAILABLE_CAUSES`,派生而非手抄)。
|
|
4692
|
+
- 未知词 / 坏值 ⇒ 一句**兜底**:仍告诉用户这只 ask 是分类器那条腿引出来的,但不冒充四句里的任何
|
|
4662
4693
|
一句,并原样带上那个词供运维追问上游。
|
|
4663
4694
|
|
|
4664
4695
|
**为什么是镜像**:这两张表与那一格在 sdk 8.8.0 与 agent-types 上**都还没有**(亲验两棵树全树零命中),
|
|
@@ -4723,9 +4754,9 @@ core 双向对账)。**候上游导出即整只退役改成从 sdk 取**。
|
|
|
4723
4754
|
| ④ | 门记录那一行:`gateDeniedByDetail(gateDeniedBy(g))`(九词);审批卡的出身行:`askOriginDetail(frame.origin)`(十一词)。壳侧同族自拼句子一律退役 | 同左 |
|
|
4724
4755
|
| ⑤ | `/permissions` 的规则报错行:`permissionRuleIssueDetail(issue.code, issue.message)`。🆕 0.63.1:表外码**整只**进那一句(不再封 60 字符),端的行渲染要给它留得下换行/截断的余地 —— 🔴 别在端上再截一刀,那等于把这次修的病搬到端里 | 同左 |
|
|
4725
4756
|
| ⑥ | `wiring_manifest` 帧到达时 `projectToolRoster(manifest)`;**在场**则自报面与工具卡 shim 走 `toolRosterNames()` / `toolShimFromRoster()`,**缺席**才回落 `liveInitToolFace` 三表。`tool_roster_delta` 帧走 `applyToolRosterDelta()`,`skew` 时**记一次偏斜并按快照重同步**(别拿 summary 算位置) | 同左 |
|
|
4726
|
-
| ⑦ | `engine_notice` 呈现闸改按 `engineNoticeInCatalog(code)`;投递面按 `noticeAudienceOf(code)` 分流(`user` 上屏 / `operator` 落运维面)
|
|
4757
|
+
| ⑦ | `engine_notice` 呈现闸改按 `engineNoticeInCatalog(code)`;投递面按 `noticeAudienceOf(code)` 分流(`user` 上屏 / `operator` 落运维面)。🆕 **0.64.2 补一条允许形**:**单人本机端**(cli 这类「起引擎的人 = 看屏的人」的部署形)可以**不做这次分流**,把 `operator` 受众的码**渲成通用行**并把 audience 读数落进诊断留痕 —— 前提是这条选择**登记在案**(壳侧顶注 `sema-cli/src/sema/engineNoticeCodes.ts` 与本行互引),而不是没读文档。理由:这一端没有第二块屏,分流的净效果是把一批**正文里就写着用户该敲哪个 env** 的治理事实整段静音,那比不分流更坏。🔴 允许的是**渲通用行**,不是**不登记**:码册内的码一个都不许悄悄消失;确实不渲的码要进端自己的**明拒表**(一条写下来的决定),好让「有意不渲」与「漏登记」在机器上可分辨。要真分流,先有第二块面(operator 面板 /诊断出口)再做,那是另一批。多用户 / 有独立运维面的端(web-admin 一类)**照旧按 audience 分流**。壳自己的 `CORE_ENGINE_NOTICE_CODES` / `PENDING_ENGINE_NOTICE_CODES` 两表**可以退役成一张「明拒表」**(本包这张是上游码册的机械镜像,壳只需保留它**刻意不渲**的那几个码)。🔴 `mcp.injection_dropped` 的转录**直接用 `message`**,别自拼 | 同左 |
|
|
4727
4758
|
|
|
4728
|
-
| ⑧ | 审批卡上「为什么问我」那一行:`classifierUnavailableDetail(classifierUnavailableOf(
|
|
4759
|
+
| ⑧ | 审批卡上「为什么问我」那一行:`classifierUnavailableDetail(classifierUnavailableOf(card)?.cause)`。🆕 **0.64.2 起不必再自己去拿裸帧**:这条事实由包投影到卡口 `ApprovalCardRequest.classifierUnavailable`,**两腿都投**(活卡帧腿 = `ToolApprovalFrame.classifierUnavailable`;durable park 行腿 = 行上的孪生位),**键路与 ask / park 行同形** ⇒ 上面那两只读器**直接吃卡入参**,端零改读法(详见 §29①)。🔴 这一格是**显示元数据**,别据它翻转任何裁决;缺席**不许**渲成「分类器跑成了」。⚠️ **两层都按开集**:包边界只判形(`cause` 非空串即收,与 server 唯一铸点同判据);`classifierUnavailableOf` 同样非空串即收,只排除**熔断轴独占**的词(`parse_error`)——未知词渲**兜底句**而不是整行消失(0.64.2 行为面订正,见 §29e)。⚠️ **本键有退役日期**:core 7.12.0 / server 7.70.0 起帧上这一格是**死键**(事实位随拒绝面走),包 0.65.0 改读那一面而**不删本键** —— 端这一格**照写不误**,那天它自然回落到缺席臂 | 同左 |
|
|
4729
4760
|
| ⑨ | `workflowMonitor` 的 agent 行:`DisplayStatus` 的 **`parked`** 是一条新臂,glyph/颜色映射与状态词是**穷尽形** —— 必须同批加一条 case,措辞按「waiting for approval」一类,🔴 **别复用 `running`**的字与色(那正是 0.63.0 的病)。`AgentState` 侧同理。合成格/phase 行拿到 `parked` 时同样别渲成在跑 | 同左 |
|
|
4730
4761
|
|
|
4731
4762
|
---
|
|
@@ -4816,7 +4847,7 @@ core 双向对账)。**候上游导出即整只退役改成从 sdk 取**。
|
|
|
4816
4847
|
| # | 件 | 面 | 破坏性 | 端要做什么 |
|
|
4817
4848
|
|---|---|---|---|---|
|
|
4818
4849
|
| ① | 模型思考能力探测(`src/modelCapabilityProbe.ts`) | 新 9 导出 | 无 | 模型目录页/向导加一个「探测」动作;**网络那半场端自己实现**并作为 `send` 注入 |
|
|
4819
|
-
| ② | auto 分类器状态面(`src/classifierStatus.ts` + `src/autoModeUnavailable.ts` 加员) | 新 4 导出 + wire additive 一键 | 无 | 诊断行 / 模型设置页 / 权限卡状态栏改接铸点;`breaker` 缺席 =
|
|
4850
|
+
| ② | auto 分类器状态面(`src/classifierStatus.ts` + `src/autoModeUnavailable.ts` 加员) | 新 4 导出 + wire additive 一键 | 无 | 诊断行 / 模型设置页 / 权限卡状态栏改接铸点;`breaker` 缺席 = 说不出(四成因同形,见 28c),别渲「没熔断过」 |
|
|
4820
4851
|
| ③ | `DecisionReason` +`read_only` 的 uplift 锚 | **零导出** | 无 | **端无事可做**;上游镜像到货时本包先红,那时才有铸点 |
|
|
4821
4852
|
| ④ | §27j 的 G-20 判据口径订正 | 文档 + 机读锚 | 无 | test 侧改判据;端零改 |
|
|
4822
4853
|
| ⑤ | devDep 抬 `@sema-agent/settings-schema ^1.10.0` + 落库前提门 | 门 | 无 | **端无事可做**(devDep,不进 peer、不出包) |
|
|
@@ -5020,7 +5051,7 @@ devDep core 那端(提货批抬版时先红)。**红的那一刻 = 该铸一句
|
|
|
5020
5051
|
| 件 | 壳(cli) | web-client | desktop |
|
|
5021
5052
|
|---|---|---|---|
|
|
5022
5053
|
| ① 探针 | 模型目录页/新增模型向导加一个「探测思考能力」动作:端实现 `send`(读自己那条凭证轨,**绝不**把 key 交进本包)→ `probeModelCapability(entry, send)` → 拿 `verdict` 渲结果 → 用户确认后 `applyProbeToEntry(entry, result)` 落库。`doctor` 的模型段可复用同一只结论渲一行。🔴 `inconclusive` 那一格**必须**渲成「这次没探到」而不是「不会思考」;`cannot_disable` 渲「会思考、当前关不掉;这个席位将按 low 档运行」(clay 裁),并读 `evidence.lowEffortAccepted` 决定那半句说不说得下去 | 模型设置页同左;`send` 走浏览器 `fetch`(注意 CORS 与代理由部署决定,失败照 `inconclusive` 渲) | 同 web-client;`send` 走主进程那条腿,渲染进程只拿结论 |
|
|
5023
|
-
| ② 状态面 | `doctor` 的 Permissions 段加**一行** `classifierStatusDetail(classifierStatusOf(autoMode, ask))`;`undefined` ⇒ **整行不渲**(不是渲「正常」)。权限卡的状态栏同一只铸点。🔴 `_sema_autoMode.breaker` 缺席 =
|
|
5054
|
+
| ② 状态面 | `doctor` 的 Permissions 段加**一行** `classifierStatusDetail(classifierStatusOf(autoMode, ask))`;`undefined` ⇒ **整行不渲**(不是渲「正常」)。权限卡的状态栏同一只铸点。🔴 `_sema_autoMode.breaker` 缺席 = **说不出**(老引擎 / 这会话没熔断过 / server 未投影 / 段坏形,四成因在 wire 上同形,28c 逐条),别渲「没熔断过」 | 模型设置页/权限卡同左 | 同左 |
|
|
5024
5055
|
| ③ uplift 锚 | 无 | 无 | 无 |
|
|
5025
5056
|
| ④ G-20 订正 | 无(test 侧改判据) | 无 | 无 |
|
|
5026
5057
|
| ⑤ 落库前提门 | 无 | 无 | 无 |
|
|
@@ -5105,3 +5136,235 @@ devDep core 那端(提货批抬版时先红)。**红的那一刻 = 该铸一句
|
|
|
5105
5136
|
| `scripts/run-integration-doc-freshness-test.mjs` | 本节新增坐标在盘 + 入库;§0a/§2/§2b 计数与基线等值;①c 表长登记 +4 |
|
|
5106
5137
|
|
|
5107
5138
|
---
|
|
5139
|
+
|
|
5140
|
+
## §29 🆕 0.64.2 内容批(server 7.69.0 提货的包侧六件:**四件 additive** + 一条行为面订正 + 一处同形存量族扫)
|
|
5141
|
+
|
|
5142
|
+
### 29a. 本节速览
|
|
5143
|
+
|
|
5144
|
+
| 件 | 一句话 | 端要做什么 |
|
|
5145
|
+
|---|---|---|
|
|
5146
|
+
| ① | `ApprovalCardRequest.classifierUnavailable` —— 「问你是因为分类器这次跑不了」的事实**两腿都到卡口** | 卡上那一行改读卡入参(§27i⑧;键路同形,读器不换) |
|
|
5147
|
+
| ② | `mcpConfigToSpec` 把 `.mcp.json` 的**解析透明键** `toolFaces` 原样过境(此前被逐键白名单剥掉) | 端**零改**;运维在 `.mcp.json` 上声明的 per-tool 面从此到得了引擎 |
|
|
5148
|
+
| ③ | `readDenialLimitFallback` 上公面 | 端自持的同判据副本可以整只退役 |
|
|
5149
|
+
| ④ | 🔴 **行为面订正**:`classifierUnavailableOf` 由「unavailable 闭集」改为「非空串即收 + 排除熔断轴独占词」 | 端**零改**;比本端新的引擎发的合法新成因词从此渲得出来(此前整段消失) |
|
|
5150
|
+
| ⑤ | 族扫:`cloudMcpToSpecs`(center 配置 → 请求面)同样透传 `toolFaces` | 端零改;用 center 下发配置的部署与本地 `.mcp.json` 同待遇 |
|
|
5151
|
+
| ⑥ | durable park 行 → 卡的**两位对偶**:`persistedRuleShadowed` ← 行 `riskDescriptor.shadowedRule`、`ruleOffersAbsence` ← 行同名键 | 端**零改**(落的是活卡腿同一个卡位);耐久路上「规则清不掉」的 ask 从此在卡面上说得出来 |
|
|
5152
|
+
|
|
5153
|
+
**共同形还是那一条**:上游已经把事实摆在 wire 上了,而**包边界这一格空转**([C170] / `hasBidiControls` /
|
|
5154
|
+
窗三键 / `model` 的同款第 N 例)—— ①②⑤⑥ 全是它。②⑤ 是它第一次长在**上行**(请求面)而不是下行;
|
|
5155
|
+
⑥ 是同一形在**载体名不同**这一格上的变体(帧上是顶层键、行上在 `riskDescriptor` 下,于是没人发现)。
|
|
5156
|
+
④ 是另一条形:**包在边界抄了一份上游的闭集词表**,于是上游加词那天把一个合法值判没(B-025 的同款)。
|
|
5157
|
+
|
|
5158
|
+
**出处**:①②③ 出自 1.0.106 提货批的任务书;④⑤ 由异源对抗复审 r1 逼出(逐条见各段);
|
|
5159
|
+
⑥ 是任务书追加件(cli B-058)。
|
|
5160
|
+
|
|
5161
|
+
---
|
|
5162
|
+
|
|
5163
|
+
### 29b. ① 「分类器这一轮跑不了」的事实到卡口(cli L-174②;server ≥7.69.0 / core 7.10.0 #616)
|
|
5164
|
+
|
|
5165
|
+
**病**:0.63.0 已经把读器(`classifierUnavailableOf` / `classifierUnavailableDetail`,§27h2)交给端了,
|
|
5166
|
+
而**包边界一个字节都没投影** —— 端要么去拿裸帧自己读(卡口拿不到帧),要么这一行根本渲不出来。
|
|
5167
|
+
|
|
5168
|
+
**投影两腿**(单源与双源在这里都不成立,是**双源合流**,`governanceForced` 同形):
|
|
5169
|
+
|
|
5170
|
+
| 腿 | 载体 | 上游直证 |
|
|
5171
|
+
|---|---|---|
|
|
5172
|
+
| 活卡帧 | `ToolApprovalFrame.classifierUnavailable` | engine 7.69.0 fixture `@sema-agent/server/dist/tool-approval.js:847` 条件 stamp;同包 `approval-card.js:240/244` 唯一铸点与窄读器;`tool-approval.d.ts:163` 声明键 |
|
|
5173
|
+
| durable park 行 | 行上的 `classifierUnavailable`(`PendingAction.tool_approval` 的孪生位) | core 7.11.2 `dist/core/checkpoint-store.d.ts` 逐字「the PARK twin of `AskRequest.classifierUnavailable`」 |
|
|
5174
|
+
|
|
5175
|
+
**端怎么接**(§27i⑧ 的展开):卡入参上的键路与 ask / park 行**同形**,所以
|
|
5176
|
+
|
|
5177
|
+
```ts
|
|
5178
|
+
const cause = classifierUnavailableOf(req)?.cause // req = ApprovalCardRequest
|
|
5179
|
+
if (cause !== undefined) renderLine(classifierUnavailableDetail(cause))
|
|
5180
|
+
```
|
|
5181
|
+
|
|
5182
|
+
**🔴 五条读法**
|
|
5183
|
+
|
|
5184
|
+
- **显示元数据,不是裁决位**:引擎在门上已经判完了;不参与、也不改变本次决断的任何字节。
|
|
5185
|
+
- **缺席不是断言**:缺席同时覆盖「分类器答上了」「这只 ask 没资格走分类器」「本部署没接分类器」三形
|
|
5186
|
+
(core d.ts 逐字 read presence, never absence)—— 禁渲成「分类器好着呢」。
|
|
5187
|
+
- **两层都按开集**(🔴 **0.64.2 订正,见 §29e**):包边界只判形(`cause` 非空串即收,与 server
|
|
5188
|
+
`readClassifierUnavailable` 同判据);`classifierUnavailableOf` 那一层**只多一条有出处的排除** ——
|
|
5189
|
+
熔断轴**独占**的词(今天 = `parse_error`,core 明说它不 stamp 到这一格)。词表属主在 core,任何一层
|
|
5190
|
+
抄一张闭集表都会在 core 加词那天把一个**合法**值判没,而丢的正是「这次不可用是新出现的那一类」
|
|
5191
|
+
这条信息。未知词的正解是**渲兜底句**(措辞铸点自带,原样带上那个词供运维追问上游),不是不渲。
|
|
5192
|
+
- **echo-only**:server 顶注逐字写明它不据这一键做任何裁决 —— 端据它自铸第二套熔断/回落判据 =
|
|
5193
|
+
同一语义面两个写者。本包同律,本批**不做熔断相关任何事**。
|
|
5194
|
+
- **`.strict()` 差一格**(与 `denialLimitFallback` 同一条,如实写):载体上**多出的成员**包侧剥后保留
|
|
5195
|
+
`cause`,server 侧整只拒收。包宽一格,方向是「多键不误杀」;端不要把「包读出来了」当成「server 也会收」。
|
|
5196
|
+
|
|
5197
|
+
**⚠️ 两条诚实边界(别把本节读成比它更强)**
|
|
5198
|
+
|
|
5199
|
+
1. **本键的退役日期已定**:上游发布记录 [6852] 的 server 落点表逐字「ask 帧 `classifierUnavailable` **死键**;
|
|
5200
|
+
事实位随 deny 载荷 … 三面投影(`tool_approval` 帧 / `card_json` / inbox 行)**退役**」⇒ **core 7.11.x 仍写、
|
|
5201
|
+
core 7.12.0 / server 7.70.0 起缺席**。本包 0.65.0 按 [6853] 的排期改从拒绝面渲,**码不删**(死键保留型)
|
|
5202
|
+
—— 缺席臂那天就是正解,退役一个 additive 键不该逼三端各改一次。端这一格照写不误。
|
|
5203
|
+
2. **durable 腿今天在引擎上恒零命中**:engine 7.69.0 的两只 checkpoint 店
|
|
5204
|
+
(`plugins/local-checkpoint-store.js` / `plugins/checkpoint-store-sql.js` 的 `listPending`)把
|
|
5205
|
+
`pendingAction` 扁平化到 `/v1/approvals` 行时**没有**带这一位(带它的是 `/v1/assistant/inbox`,那不是本腿
|
|
5206
|
+
吃的行);与 `governanceForced` 今天同一格。⇒ 包侧的承诺是**「行上有 ⇒ 卡上有」**,server 补投那天零改动
|
|
5207
|
+
生效 —— 这不是「已经接通了」。之所以照投而不像 `ruleEvidence` 那样诚实零投影:那一位在上游**根本没有
|
|
5208
|
+
耐久对偶**(读 `riskDescriptor.ruleEvidence` 是在猜一个载体名),而本位的对偶是上游**逐字声明**的。
|
|
5209
|
+
|
|
5210
|
+
---
|
|
5211
|
+
|
|
5212
|
+
### 29c. ② `.mcp.json` 的**解析透明键**过境(cli L-167①;包侧缺陷)
|
|
5213
|
+
|
|
5214
|
+
**病**:`mcpConfigToSpec`(`src/mcpWireCaps.ts`)是**逐键白名单重建**,而 settings-schema 1.9.0 给 mcp 段
|
|
5215
|
+
加的 `toolFaces` 是**解析透明键**(`z.unknown()`)—— 白名单没有这一行,于是运维在 `.mcp.json` 上声明的
|
|
5216
|
+
per-tool 面(写围栏与敏感路径策略读的 `pathTarget` 那一格)在**包边界**被静默剥掉,而两边看着都对:
|
|
5217
|
+
配置文件里写着,引擎那边只是「没有声明」。
|
|
5218
|
+
|
|
5219
|
+
**修法与它刻意不做的事**
|
|
5220
|
+
|
|
5221
|
+
- **按上游的透明键表逐名透传**,**不是**改成 `...c` 全展开:全展开会把用户配置里的任意键送上引擎请求面,
|
|
5222
|
+
既没人判形也没人负责。配置上的**未知键**照旧不上 wire —— 修的是丢键,不是把闸拆了。
|
|
5223
|
+
- 表的属主是 `@sema-agent/settings-schema` 的 `McpServerSpec`(zod shape 里 `z.unknown()` 的那些键)。
|
|
5224
|
+
**1.10.0 实装两员**:`source`(1.7.2)与 `toolFaces`(1.9.0)。
|
|
5225
|
+
- 🔴 **`source` 刻意不在这条腿上**:它是**部署面**的分组标签(`config.d/mcp.json` 与 `/effective.mcp` 的键,
|
|
5226
|
+
消费者是 server),而**请求面**的 `McpServerSpec`(sdk 8.8.0 `types.d.ts`)上根本没有这个键 ——
|
|
5227
|
+
往这里塞它是给 wire 加一个引擎不认的键,不是透传一件事实。这条**记账带退出条件**:哪天 sdk 的请求面
|
|
5228
|
+
声明了 `source`,记账的前提消失,门当天红。
|
|
5229
|
+
- 🔴 **坏形原样过境,不是包拒**:上游把这一格声明成解析透明的理由逐字是「这一域 all-or-nothing,任一字段
|
|
5230
|
+
解析拒都会让整套 mcp 服务器静默消失」。包在这里判一次形只有两种结局 —— 判严了就把运维声明的保护**静默**
|
|
5231
|
+
吞掉(比引擎响亮拒更坏),判松了就是白写一个会漂的第二判官。形的判决在引擎:JSON 形写坏或出现读器不认
|
|
5232
|
+
的键 ⇒ 整条 server 不进 + 请求腿 `mcp_injection_dropped{dropped:[name]}` 点名;形合而语义坏 ⇒ 拒**那一只**
|
|
5233
|
+
工具 + `config.tool_face_invalid` 通告(operator 面)。
|
|
5234
|
+
- 缺席 ⇒ **键不铸**(不折成 `{}`:「没声明」与「声明了个空覆盖层」不是一句话);过境是**同一个对象引用**
|
|
5235
|
+
(零拷贝零重建 —— 重建就等于在这里判了一次形)。
|
|
5236
|
+
|
|
5237
|
+
**端要做什么**:零改。两条 transport 臂(`stdio` / `http`)与整表腿 `mcpConfigsToSpecs` 都已过境。
|
|
5238
|
+
|
|
5239
|
+
---
|
|
5240
|
+
|
|
5241
|
+
### 29d. ③ `readDenialLimitFallback` 上公面(cli L-174③)
|
|
5242
|
+
|
|
5243
|
+
签名:`readDenialLimitFallback(v: unknown): DenialLimitFallback | undefined`(`src/hitl/toolApprovalWire.ts`)。
|
|
5244
|
+
判据本体与纪律见 §23a 末段(四成员全必填、计数与窗按有限非负数、`limit` 开集、与 server `.strict()` 差一格)。
|
|
5245
|
+
**用途**:让端自持的同判据副本整只退役(壳侧那份在 `sema-cli/src/sema/askFrameNotes.ts`)—— 第二个判官会在上游改形
|
|
5246
|
+
那天与包各漂各的。⚠️ 导出的是**读器,不是许可**:`autoDenyAfterMs` 仍然只许渲倒计时。
|
|
5247
|
+
|
|
5248
|
+
---
|
|
5249
|
+
|
|
5250
|
+
### 29e. 🔴 ④ 行为面订正:`classifierUnavailableOf` 不再把**未知成因词**吞成缺席
|
|
5251
|
+
|
|
5252
|
+
**这是本批唯一的行为面改动**(其余三件全 additive),由异源对抗复审 r1 [medium] 逼出来,复现可执行:
|
|
5253
|
+
|
|
5254
|
+
- **修前**:读器按 `AUTO_MODE_UNAVAILABLE_CAUSES` **闭集**收窄 ⇒ 一台比本端新的引擎发一个**合法的新
|
|
5255
|
+
成因词**时,`classifierUnavailableOf` 判缺席 ⇒ §27i⑧ 那一行**整段消失**;把同一张卡喂给
|
|
5256
|
+
`classifierStatusOf({armed:true}, card)` 还会答 **`available`** —— 一条真实的故障事实被渲成「一切正常」。
|
|
5257
|
+
- **自证**:`classifierUnavailableDetail` 早就为这一形备了兜底句(「a word newer than this client」),
|
|
5258
|
+
而在修前那句话**永远不可达** —— 一个永远走不到的兜底分支,本身就是判据写错了的证据。
|
|
5259
|
+
- **修后判据**:`cause` **非空串即收**,只排除**熔断轴独占**的词
|
|
5260
|
+
(`AUTO_MODE_BREAKER_CAUSES` − `AUTO_MODE_UNAVAILABLE_CAUSES`,今天 = `{parse_error}`)。
|
|
5261
|
+
🔴 排除集是**派生**的,不是手抄一个词:排除的理由是 core 逐字说过「`parse_error` stamps nothing」,
|
|
5262
|
+
这条理由天然属于「只在熔断轴上的那些词」,core 再加一个独占词时这里自动跟上。
|
|
5263
|
+
- **`parse_error` 的行为一字未变** ⇒ 0.63.0 起的黑盒判据 **G-19 照旧成立**;变的只是「表外词」那一格,
|
|
5264
|
+
而「表外」与「另一条轴上的词」本来就是两件事,修前把它们判成了同一件。
|
|
5265
|
+
- **端要做什么**:零改。未知词从此渲兜底句;端**不许**在自己那一侧再补一张闭集表(那等于把这次修的病
|
|
5266
|
+
搬进端里)。
|
|
5267
|
+
|
|
5268
|
+
---
|
|
5269
|
+
|
|
5270
|
+
### 29f. ⑤ 族扫:center 配置腿同样透传透明键
|
|
5271
|
+
|
|
5272
|
+
②的**同形存量第二处**:`cloudMcpToSpecs`(`src/cloudConfigWireCaps.ts`,center `/api/v1/effective` 的
|
|
5273
|
+
mcp 域 → 请求面 `McpServerSpec[]`)也是逐键白名单重建,同样把 `toolFaces` 剥掉。上游对这一位的成文是
|
|
5274
|
+
**「三条腿(请求 / config-center / 本地 config.d)同一条规则」**,只修本地那条 = 同形存量留一半:
|
|
5275
|
+
用 center 下发配置的部署,运维声明的 per-tool 面照样在包边界静默消失。⇒ 同批补齐,判据与本地腿逐字相同
|
|
5276
|
+
(原样过境、坏形不包拒、缺席不铸键、`source` 同样不在这条腿上)。
|
|
5277
|
+
|
|
5278
|
+
🔴 **两条腿刻意不共用一个转发函数**:跨文件共用要么给公面加一个没有外部消费者的名字、要么多一个叶子
|
|
5279
|
+
模块(闭包账 / 单例账各加一笔)。这里的「规则」只有一行(键在场 ⇒ 原样铸),真正会漂的是**哪些键算
|
|
5280
|
+
透明** —— 那张表的属主在上游,而门 G7 段是从**实装 schema** 取表、对**两条腿各对一次账**,任一条腿漏一个
|
|
5281
|
+
键当天红。⇒ 单一真源在上游 + 机械门,不是两份各自为政的判断。
|
|
5282
|
+
|
|
5283
|
+
---
|
|
5284
|
+
|
|
5285
|
+
### 29g. ⑥ durable park 行 → 卡的**两位对偶**(cli B-058 让位臂的输入)
|
|
5286
|
+
|
|
5287
|
+
**病**:`surfaceFsApprovalAndDecide` 的「行 → 卡」重铸此前只投 5 位,而这两位**行上今天就有**:
|
|
5288
|
+
|
|
5289
|
+
| 卡位(两条腿同一个) | 活卡帧腿的载体 | durable park 行的载体 | 直证 |
|
|
5290
|
+
|---|---|---|---|
|
|
5291
|
+
| `persistedRuleShadowed` | 帧**顶层** `persistedRuleShadowed` | 行 **`riskDescriptor.shadowedRule`** | engine 7.69.0 fixture `@sema-agent/server/dist/http/routes/approvals-assistant.js` 的 `redactPendingDisclosures`(`typeof rd.shadowedRule === "string" ? redactSecrets(rd.shadowedRule) : undefined`)+ `projectPendingForWire` 随行上 wire |
|
|
5292
|
+
| `ruleOffersAbsence` | 帧顶层同名键 | 行**同名**键 | 两只 checkpoint 店的 `listPending` 今天还没把它扁平化上来 ⇒ 本腿今天零命中,server 补投那天零改动生效 |
|
|
5293
|
+
|
|
5294
|
+
🔴 **`persistedRuleShadowed` 长期被漏掉的原因就是「键名不同」**:帧上是顶层键,行上在 `riskDescriptor` 下。
|
|
5295
|
+
这不是「猜载体名」的反例,恰恰相反 —— 本包的既有纪律是「不猜」(`ruleEvidence` 在这条腿上诚实零投影,
|
|
5296
|
+
就是因为上游没有对偶);这一位的载体名是**上游产物直证**的,所以该投而没投是缺陷,不是纪律。
|
|
5297
|
+
|
|
5298
|
+
🔴 **它不是一格「顺手补上的显示」,而是壳让位臂的输入**:活卡腿早就有它,durable 腿因为不投,一条
|
|
5299
|
+
**被记住的 allow 规则清不掉的 ask** 在耐久路上看起来就是一条普通 ask ⇒ 被自动 `decide approve`
|
|
5300
|
+
(cli B-058 离线真跑:default 车道 + `Bash(grep:*)` + 带 `shadowedRule` 的 park 行 ⇒ **零卡 + approve**)。
|
|
5301
|
+
包只保证这两位**到得了卡口**,让位判定归端。
|
|
5302
|
+
|
|
5303
|
+
**判据与活卡腿逐字同族**:`persistedRuleShadowed` **非空白串才 stamp**、stamp 的是**原文字节**
|
|
5304
|
+
(不 trim、不截、不改写;长度夹取归端);`ruleOffersAbsence` **非空串才 stamp、词表不校**(开集)。
|
|
5305
|
+
坏形 / 缺席 ⇒ **键不 stamp**(绝不折成空串 —— 一格空白的规则解释比没有解释更坏)。两位互不连坐。
|
|
5306
|
+
🔴 都是 **UNTRUSTED-for-display 且不是身份通道**(下游删除规则面不许拿 `persistedRuleShadowed` 当规则身份)。
|
|
5307
|
+
|
|
5308
|
+
---
|
|
5309
|
+
|
|
5310
|
+
### 29h. 🔴 三端换装清单(逐件坐标)
|
|
5311
|
+
|
|
5312
|
+
| 端 | 换装 |
|
|
5313
|
+
|---|---|
|
|
5314
|
+
| **cli**(1.0.106) | ① 审批卡「为什么问我」那一行改读 `classifierUnavailableOf(req)`(req = 卡入参),`classifierUnavailableDetail` 铸句;durable 腿同一行、同一只读器(L-174②)。③ `sema-cli/src/sema/askFrameNotes.ts` 的 `readDenialLimitFallback` 自持副本整只退役、改 import 包内那只(L-174③)。② 零改(包侧透传即生效),`.mcp.json` 带 `toolFaces` 的部署可直接验。⑦ `engine_notice` audience:壳这一端**登记在案地不分流**(§27i⑦ 的允许形),顶注与本档互引 |
|
|
5315
|
+
| **desktop** | ① 同 cli(卡面同一读法);③ 若自持副本同样退役;② 零改。⑦ 桌面端若有独立运维面,**按 audience 分流**(不适用 cli 那条允许形) |
|
|
5316
|
+
| **web-client / web-admin** | ① 同 cli;③ 同上;② 该端不消费 `.mcp.json` 请求腿 ⇒ 零改。⑦ 多用户端**照旧按 audience 分流**,`operator` 行不上用户屏 |
|
|
5317
|
+
| **三端共同(⑥)** | **零改**(落的是活卡腿同一个卡位);但耐久路上的**让位臂**从此有输入了 —— 端若在 durable 卡上有「记住的 allow 规则可以自动放行」这类臂,必须与活卡腿同样让位(cli B-058 的正位解) |
|
|
5318
|
+
| **三端共同(④⑤)** | ④ **零改**,但要知道行为变了:未知成因词从此渲**兜底句**而不是整行消失 —— 端若自己维护过一张成因闭集表(为了「只渲认得的词」),那张表现在是这次修的病的第二处,该退役。⑤ 零改;走 center 配置的部署与本地 `.mcp.json` 从此同待遇 |
|
|
5319
|
+
|
|
5320
|
+
---
|
|
5321
|
+
|
|
5322
|
+
### 29i. 黑盒判据(test 视角;wire 可观察,不引用内部实现)
|
|
5323
|
+
|
|
5324
|
+
- **G-33**:对一台 **≥7.69.0** 的 worker 武装 auto 模式,让分类器那条腿**超时**一次 —— 审批卡上出现一句
|
|
5325
|
+
点名「分类器这次跑不了(超时)」的话;**熔断**之后再来一只 ask —— 那一句**逐字不同**(点名闩已合上)。
|
|
5326
|
+
⚠️ **durable 那一半今天不可跑**(与 §29b 末条登记的供给缺口同源):engine 7.69.0 的 `listPending`
|
|
5327
|
+
还没把这一位扁平化到 `/v1/approvals` 行上 ⇒ 走 durable park 再恢复时,卡上**没有**那一行。
|
|
5328
|
+
server 补投之后这一半才成立(届时判据是「与活卡腿那句话逐字相同」——两条腿同一只读器)。
|
|
5329
|
+
- **G-34**:同一台 worker 上让分类器**正常**跑一轮 —— 卡上**不出现**那一族的任何一句(缺席 ≠「分类器好着呢」);
|
|
5330
|
+
把 worker 换成 **<7.69.0** 的旧引擎 —— 同样不出现,且**不报错**。
|
|
5331
|
+
- **G-35**(退役形前瞻):把 worker 换到 **≥7.70.0**(core 7.12.0)—— 帧上这一格恒缺席,客户端**照旧不崩、
|
|
5332
|
+
不渲那一句**,也**不**因此把任何裁决翻转。
|
|
5333
|
+
- **G-36**(④ 的判据):构造一个 `cause` 值为「这一端没见过的词」的 ask —— 卡上那一行**仍出现**、句子里
|
|
5334
|
+
**原样带着那个词**、与三句已知成因逐字不同;同一只 ask 上分类器状态那一面答的是「本轮不可用」而**不是**
|
|
5335
|
+
「可用」。把 `cause` 换成空串或非串 —— 那一行**不出现**(坏形降缺席)。
|
|
5336
|
+
🔴 反向:把 `cause` 换成 `parse_error` —— 那一行**仍不出现**(G-19 一字未变:那是熔断轴的词,
|
|
5337
|
+
引擎在这一格上根本不盖它)。
|
|
5338
|
+
- **G-41**(⑥ 的判据):让一次调用命中一条**这个人自己的**持久 allow 规则、而那条规则**清不掉**这只 ask,并让它走**耐久 park** 再取回 —— 卡上那一行(「你的规则仍在,只是这次被要求逐次确认」)**出现**;⚠️ 判据是**那一行出现且引的是同一条规则**,**不是**两条腿的文本逐字节相同 —— 两条腿的脱敏/规范化发生在**上游各自那一侧**(耐久那一份由 core 在 park mint 时铸、server 再脱敏一次),零宽字符一类的差别属于上游,包在这两条腿上都是**原文字节零加工**;🔴 且这次调用**不被自动放行**(修前:零卡 + 自动 approve)。把规则文本换成空串 —— 那一行**不出现**(不许渲成一格空白)。
|
|
5339
|
+
- **G-40**(⑤ 的判据):把同一份带 `toolFaces` 的 mcp 声明改从 **config-center** 下发(不走本地
|
|
5340
|
+
`.mcp.json`)—— 引擎侧**同样**认得这台 server 的 per-tool 面;写坏它 —— 引擎**同样**响亮丢掉整条
|
|
5341
|
+
server 并点名它。两条来源路径**行为逐字相同**。
|
|
5342
|
+
- **G-37**:在 `.mcp.json` 里给一台 server 声明 `toolFaces`(合法形,含 `pathTarget`)—— 引擎侧**认得这台
|
|
5343
|
+
server 的 per-tool 面**(该工具的路径目标策略生效);把 `toolFaces` 写坏(如 `renderHints.summaryParams`
|
|
5344
|
+
写成串)—— 引擎**响亮**地把**整条 server** 丢掉并在请求腿点名它(`mcp_injection_dropped`),而**不是**
|
|
5345
|
+
这台 server 照常挂载、声明悄悄消失。两者都要求客户端**没有**在包边界替引擎判过形。
|
|
5346
|
+
- **G-38**:同一份 `.mcp.json` 里给 server 写一个**引擎和 schema 都不认识的**顶层键 —— 它**不上** wire
|
|
5347
|
+
(请求面不带这个键),而 `toolFaces` 仍照常过境。
|
|
5348
|
+
- **G-39**:让一只 ask 走到**最终 deny 而没有任何人判过它** —— 通告面出现一条 `delegation.ask_unresolvable`,
|
|
5349
|
+
正文引擎自己给(客户端不自拼),`detail.parkLaneExisted` 在「部署接了耐久审批但它没接住」与「压根没有
|
|
5350
|
+
park 车道」两形上**取值不同**;同一次的 `tool_end.gate.settlement.kind` 是 `approver_unavailable`,
|
|
5351
|
+
且那次 deny 的字节与没有本通告的时代**逐字相同**(披露面补齐,不是裁决面变更)。
|
|
5352
|
+
|
|
5353
|
+
---
|
|
5354
|
+
|
|
5355
|
+
### 29j. 常驻门
|
|
5356
|
+
|
|
5357
|
+
| 门 | 守什么 |
|
|
5358
|
+
|---|---|
|
|
5359
|
+
| `scripts/run-hitl-gate-honesty-test.mjs` | 🆕 **F16 段**(件①活卡帧腿):三词正控 / 只交 `cause` 一格 / 开集(core 新词与 `parse_error` 在**过境层**照收)/ 多出成员剥后保留 / 七条坏形负控 / 老引擎与 core 7.12.0 死键形同判 / 与 `origin`·`denialLimitFallback` 三键并存互不吞并 / `parse_error` 过境层在场而显示层判缺席的反向对照 / 🆕 **端到端**(件④):新成因词一路到最终那句话与状态读数(`unavailable_this_round`,**不许**回落 `available`),带反向判别力自证 |
|
|
5360
|
+
| `scripts/run-durable-card-display-keys-test.mjs` | 🆕 **⑬ 段**(件⑥):行 `riskDescriptor.shadowedRule` → 卡位 `persistedRuleShadowed` 逐字在场(载体名不同、卡位相同)/ 原文字节不 trim 不截 / 七条坏形与缺席负控(绝不折空串)/ 🔴 **行顶层同名键(上游不存在的载体名)仍不长出这一位**(不自造载体名)/ `ruleOffersAbsence` 开集四词 + 四条负控 / 两位并存与「一位坏形不连坐另一位」;🆕 **⑫ 段**(件① durable 腿):同上判据 + **两腿同值反向对照**(同一个 cause 走两条腿,卡上逐字相同 =「一只读器吃两处」的可观察后果)+ 端到端(新词到最终那句话,已知词走专句的判别力自证);射程边界如实打印(证的是「行上有 ⇒ 卡上有」的包边界承诺,不是「引擎已经在发了」) |
|
|
5361
|
+
| `scripts/run-approval-frame-keys-test.mjs` | 🆕 `classifierUnavailable` 的 `AHEAD_OF_ANCHOR` 领先登记(带 `since` + `evidence`),两条退出条件由门自己执行:登记不许空转、sdk 锚一旦补上当场红逼删 |
|
|
5362
|
+
| `scripts/run-additive-key-passthrough-test.mjs` | 🆕 **G7 段**(件②⑤):判据是「settings-schema **实装 zod shape** 的透明键表 ⇄ **每一条腿**的账」逐名相等(**两条腿各对一次**:本地 `.mcp.json` 腿 + center 配置腿;上游加第三个透明键、或某条腿漏一个键,当天红);两条 transport 臂都过境且是**同一个对象引用**;**坏形原样过境不是包拒**;缺席不铸键;未知键仍不上 wire;`source` 的不透传是**带退出条件的记账** |
|
|
5363
|
+
| `scripts/run-auto-mode-unavailable-test.mjs` | 🆕 **B2b 段**(件④):未知成因词**照收**并走到措辞铸点的兜底句(修前那条路不可达)/ 排除集是**派生**的(两张镜像表的差集,今天恰 `{parse_error}`)/ 判别力自证:两集的**交**照旧读得出、`parse_error`(B2)一字未变 |
|
|
5364
|
+
| `scripts/run-public-surface-test.mjs` | 公面导出基线 **918 → 919**(件③) |
|
|
5365
|
+
| `scripts/run-client-core-typeshape-test.mjs` | `unknown` 出境棘轮 **312 → 314**,逐件写明理由(件③ 的读器入参 + 件② 的透明键 prop) |
|
|
5366
|
+
| `scripts/run-client-core-pure-test.mjs` | `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 两处计数 **27 → 28** |
|
|
5367
|
+
| `scripts/run-integration-doc-freshness-test.mjs` | 本节新增坐标在盘 + 入库;§0a/§2/§2b 计数与基线等值 |
|
|
5368
|
+
| `scripts/run-package-hygiene-test.mjs` | (既有门,本批真红过一次)出包面中性词表 —— 本批新写的 JSDoc 里对协作面的称呼被它当场判红,改成中性技术词后绿 |
|
|
5369
|
+
|
|
5370
|
+
---
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.64.
|
|
3
|
+
"version": "0.64.2",
|
|
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. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|