@sema-agent/client-core 0.109.0 → 0.110.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 (123) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +46 -22
  3. package/dist/adapt/arms.js +20 -7
  4. package/dist/adapter/downstream/eventToSdkMessage.js +11 -6
  5. package/dist/declared/supportFloorDeclared.js +1 -1
  6. package/dist/displayUntrusted.js +132 -14
  7. package/dist/engineErrorCodes.d.ts +3 -0
  8. package/dist/engineErrorCodes.js +3 -0
  9. package/dist/engineHealthFacts.d.ts +9 -0
  10. package/dist/engineHealthFacts.js +21 -1
  11. package/dist/engineInlineTaskStats.d.ts +4 -3
  12. package/dist/engineInlineTaskStats.js +18 -2
  13. package/dist/engineNoticeCodes.d.ts +10 -0
  14. package/dist/engineNoticeCodes.js +33 -1
  15. package/dist/engineRepoint.d.ts +140 -0
  16. package/dist/engineRepoint.js +285 -0
  17. package/dist/engineRowRef.js +2 -0
  18. package/dist/engineSessionMessages.d.ts +2 -1
  19. package/dist/engineSessionMessages.js +5 -0
  20. package/dist/errorSupplementRoles.js +2 -1
  21. package/dist/fleet/fleetProjection.js +3 -2
  22. package/dist/generated/engineFactTables.d.ts +2 -0
  23. package/dist/generated/engineFactTables.js +12 -0
  24. package/dist/generated/sdkFactTables.d.ts +1 -0
  25. package/dist/generated/sdkFactTables.js +4 -0
  26. package/dist/hitl/approvalAskers.d.ts +6 -0
  27. package/dist/hitl/approvalAskers.js +30 -0
  28. package/dist/hitl/approvalCardReasons.js +6 -3
  29. package/dist/hitl/approvalRequestFrameReading.d.ts +7 -0
  30. package/dist/hitl/approvalRequestFrameReading.js +11 -0
  31. package/dist/hitl/approvalResolution.d.ts +8 -1
  32. package/dist/hitl/approvalResolution.js +4 -0
  33. package/dist/hitl/askGateWire.js +0 -2
  34. package/dist/hitl/automaticAnswerVerdict.js +2 -2
  35. package/dist/hitl/decisionConflict.js +6 -3
  36. package/dist/hitl/decisionRefusal.js +1 -0
  37. package/dist/hitl/decisionSend.d.ts +3 -0
  38. package/dist/hitl/decisionSend.js +29 -11
  39. package/dist/hitl/editedApprovalAcceptance.d.ts +25 -0
  40. package/dist/hitl/editedApprovalAcceptance.js +26 -0
  41. package/dist/hitl/frameRouter.js +4 -18
  42. package/dist/hitl/gateLedger.d.ts +0 -4
  43. package/dist/hitl/gateLedger.js +0 -19
  44. package/dist/hitl/hitlBridge.d.ts +1 -0
  45. package/dist/hitl/hitlBridge.js +4 -4
  46. package/dist/hitl/hitlHostSurface.d.ts +1 -0
  47. package/dist/hitl/hitlHostSurface.js +7 -2
  48. package/dist/hitl/hostWithdrawal.d.ts +15 -0
  49. package/dist/hitl/hostWithdrawal.js +38 -0
  50. package/dist/hitl/parkResolver.js +25 -9
  51. package/dist/hitl/persistedRulesWire.js +2 -2
  52. package/dist/hitl/planReviewWire.js +14 -4
  53. package/dist/hitl/sessionPolicyWire.js +6 -4
  54. package/dist/hitl/standingRows.d.ts +1 -0
  55. package/dist/hitl/standingRows.js +15 -1
  56. package/dist/hitl/toolApprovalWire.d.ts +35 -8
  57. package/dist/hitl/toolApprovalWire.js +235 -33
  58. package/dist/hooksWireCaps.js +31 -1
  59. package/dist/hostTurnSettings.d.ts +10 -4
  60. package/dist/hostTurnSettings.js +112 -5
  61. package/dist/i18n/messages.en.d.ts +83 -0
  62. package/dist/i18n/messages.en.js +86 -2
  63. package/dist/i18n/messages.zh.js +96 -2
  64. package/dist/index.d.ts +21 -7
  65. package/dist/index.js +14 -4
  66. package/dist/inheritEnvCapability.js +2 -0
  67. package/dist/inputAuthor.d.ts +16 -0
  68. package/dist/inputAuthor.js +44 -0
  69. package/dist/interruptRefusalNote.d.ts +2 -0
  70. package/dist/interruptRefusalNote.js +17 -0
  71. package/dist/liveModelCatalog.d.ts +2 -0
  72. package/dist/liveModelCatalog.js +21 -7
  73. package/dist/liveQuestionStore.d.ts +4 -1
  74. package/dist/liveQuestionStore.js +12 -3
  75. package/dist/mcpEngineLeg.d.ts +3 -0
  76. package/dist/mcpEngineLeg.js +38 -1
  77. package/dist/mcpPanel.js +2 -0
  78. package/dist/mcpReconnect.d.ts +9 -1
  79. package/dist/mcpReconnect.js +121 -16
  80. package/dist/modelCapabilityProbe.js +4 -3
  81. package/dist/modsFace.d.ts +8 -1
  82. package/dist/modsFace.js +27 -0
  83. package/dist/notifications.d.ts +17 -6
  84. package/dist/notifications.js +67 -19
  85. package/dist/ownKey.d.ts +0 -5
  86. package/dist/ownKey.js +0 -7
  87. package/dist/peerFrames.d.ts +40 -2
  88. package/dist/peerFrames.js +158 -3
  89. package/dist/pluginHooksWire.d.ts +2 -1
  90. package/dist/pluginHooksWire.js +56 -1
  91. package/dist/replayBody.js +10 -2
  92. package/dist/request/taskRequest.d.ts +5 -0
  93. package/dist/request/taskRequest.js +138 -21
  94. package/dist/resumeRefusalCopy.d.ts +1 -3
  95. package/dist/resumeRefusalCopy.js +2 -1
  96. package/dist/retryStatus.d.ts +2 -2
  97. package/dist/retryStatus.js +2 -0
  98. package/dist/seam.d.ts +12 -1
  99. package/dist/seam.js +7 -1
  100. package/dist/seatContract.d.ts +86 -9
  101. package/dist/seatContract.js +196 -7
  102. package/dist/sessionBackground.js +2 -1
  103. package/dist/sessionBackgroundHandoff.js +2 -1
  104. package/dist/sessionEngine.d.ts +2 -0
  105. package/dist/sessionEngine.js +111 -0
  106. package/dist/sessionMemoryStatus.d.ts +2 -1
  107. package/dist/sessionSyncFileHistory.d.ts +4 -0
  108. package/dist/sessionSyncFileHistory.js +28 -0
  109. package/dist/sseIdleTriage.d.ts +13 -1
  110. package/dist/sseIdleTriage.js +24 -6
  111. package/dist/subagent/engineSubagentTail.js +6 -0
  112. package/dist/terminalStatuses.d.ts +1 -0
  113. package/dist/terminalStatuses.js +4 -1
  114. package/dist/turnFailurePresentation.js +9 -2
  115. package/dist/typePins.d.ts +11 -0
  116. package/dist/usageAnalytics.d.ts +17 -0
  117. package/dist/usageAnalytics.js +44 -2
  118. package/dist/wireFailureShape.d.ts +2 -5
  119. package/dist/wireFailureShape.js +10 -20
  120. package/dist/wireRefusalCopy.d.ts +10 -0
  121. package/dist/wireRefusalCopy.js +76 -0
  122. package/docs/INTEGRATION-CLIENTS.md +2126 -20
  123. package/package.json +3 -3
package/dist/seam.d.ts CHANGED
@@ -9,6 +9,7 @@ import type { PlanReviewCardFacts } from './planReviewCardFacts.js';
9
9
  import type { ToolKillCause } from './toolResult.js';
10
10
  import type { HumanInputAttachmentView } from './ownKey.js';
11
11
  import type { SubagentAliasScope } from './subagentContentStore.js';
12
+ import type { SessionBoxNoticeFacts } from './peerFrames.js';
12
13
  import type { TaskNotificationFields } from './notifications.js';
13
14
  export interface AbortSignalLike {
14
15
  readonly aborted: boolean;
@@ -166,7 +167,7 @@ export type ChromeEvent = {
166
167
  } | ({
167
168
  kind: 'run_cost_reconciled';
168
169
  laneProof: LaneProof;
169
- } & RunCostReconcile) | HumanInputChromeEvent | MessageCommittedChromeEvent | EngineNoticeChromeEvent | TextSegmentEndChromeEvent | ThinkingSegmentEndChromeEvent | ToolDisclosureChromeEvent | ToolProgressChromeEvent | ToolRosterDeltaChromeEvent | ContextUsageChromeEvent | CompactionOutcomeChromeEvent | CompactionStartedChromeEvent | SubagentStartedChromeEvent | PromptAssembledChromeEvent | MemorySavedChromeEvent | WiringManifestChromeEvent | ResultTextDivergedChromeEvent | ResultReplayedChromeEvent | ToolParkedChromeEvent | SubagentAliasChromeEvent | ApprovalRequestChromeEvent | ApprovalRevokeChromeEvent | ApprovalCompleteChromeEvent | SessionTitledChromeEvent | {
170
+ } & RunCostReconcile) | HumanInputChromeEvent | MessageCommittedChromeEvent | EngineNoticeChromeEvent | TextSegmentEndChromeEvent | ThinkingSegmentEndChromeEvent | ToolDisclosureChromeEvent | ToolProgressChromeEvent | ToolRosterDeltaChromeEvent | ContextUsageChromeEvent | CompactionOutcomeChromeEvent | CompactionStartedChromeEvent | SubagentStartedChromeEvent | PromptAssembledChromeEvent | MemorySavedChromeEvent | WiringManifestChromeEvent | ResultTextDivergedChromeEvent | ResultReplayedChromeEvent | ToolParkedChromeEvent | SubagentAliasChromeEvent | SessionBoxNoticeChromeEvent | ApprovalRequestChromeEvent | ApprovalRevokeChromeEvent | ApprovalCompleteChromeEvent | SessionTitledChromeEvent | {
170
171
  kind: 'suspended_reopened';
171
172
  laneProof: LaneProof;
172
173
  reopen: Extract<SuspendedReopenReading, {
@@ -356,6 +357,13 @@ export interface SubagentAliasChromeEvent {
356
357
  scope: SubagentAliasScope;
357
358
  seq?: number;
358
359
  }
360
+ export type SessionBoxNoticeChromeEvent = SessionBoxNoticeChromeEnvelope & SessionBoxNoticeFacts;
361
+ export interface SessionBoxNoticeChromeEnvelope {
362
+ kind: 'session_box_notice';
363
+ laneProof: LaneProof;
364
+ text: string;
365
+ rowUuid: string;
366
+ }
359
367
  export interface EngineNoticeChromeEvent {
360
368
  kind: 'engine_notice';
361
369
  laneProof: LaneProof;
@@ -386,7 +394,10 @@ export interface HumanInputChromeEvent {
386
394
  eventId?: string;
387
395
  attachments?: HumanInputAttachmentView[];
388
396
  author?: string;
397
+ authorUnreadable?: true;
389
398
  extension?: string;
399
+ runOrigin?: string;
400
+ runOriginUnreadable?: true;
390
401
  }
391
402
  export type { HumanInputAttachmentView, HumanInputAttachmentDeclinedByView } from './ownKey.js';
392
403
  export interface MessageCommittedChromeEvent {
package/dist/seam.js CHANGED
@@ -146,6 +146,12 @@ const CHROME_ARM_TABLE = {
146
146
  '子代详情的实时输出才按子代任务 id 读得到(子代内容帧只带卡 id)。🔴 座位宿主零逻辑:本臂在座位词表里,按词表转发的宿主自动转发;适配层与渲染层同进程的端(浏览器 lane)适配层已登记,什么都不用做;' +
147
147
  '`scope: content` 只写内容归账那一半、`full` 两半都写(含续发目标),别把两者混着登;`full` 臂的 `seq`(帧自带代际号,可缺席)是续发目标「现卡」的顺序证据,交 `noteSeatSubagentAlias` 即可,别自己按到达序排;适配层每次登记都发(tick 逐条各一只),去重在登记口:同对重复收到答 ignored、无副作用;认不得的 `scope` 词整条不登记(读口答 undefined),别猜。',
148
148
  },
149
+ session_box_notice: {
150
+ required: false,
151
+ duty: '可选:会话箱通告 —— `noticeKind: inbox`(收件箱一行:pending / delivered 必有,urgent / resupplied 缺席 = 引擎没说,不渲 0)/ `delivery`(投递回执)/ `idle`(对端空闲)。' +
152
+ '渲 `text`(数据面英文)或按界面语言调 `sessionBoxNoticeSentence(本臂, lang)`;🔴 同一条通告有两个载体(转录行 + 本臂),接本臂的宿主按 `rowUuid` 把那一行摘掉、只渲一个;' +
153
+ '`state` 是开集机读位,别回显、别按它猜句子;typed 正体缺席时本臂整个不发(不铸状态词)。',
154
+ },
149
155
  result_text_diverged: {
150
156
  required: false,
151
157
  duty: '可选:终帧正文与已上屏正文**互相都不是对方前缀**时的诚实披露。🔴 处置是把这一拍的转录行**改口**' +
@@ -157,7 +163,7 @@ const CHROME_ARM_TABLE = {
157
163
  required: true,
158
164
  duty: '用 sdk isApprovalRequestFrameV1 窄化 frame 才取 card/askId/窗三键;窄不下来 ⇒ 呈通用卡(安全元数据 + 人工 approve/deny),' +
159
165
  '🔴 永不 auto-deny;开卡前调 claimApprovalCard(身份, { signal }):joined / aborted ⇒ 不开卡,held ⇒ 开卡且每条出口恰调一次 hold.release(settled?)' +
160
- '(去重判定归包 —— legacy 帧那一路的持有与结局在进程级持有表 / 已结表里,宿主不自持 legacy 已收口集);流上下文经 approvalFrameContextOf(这只 chrome 事件) 查,查不到不开卡;' +
166
+ '(去重判定归包 —— 同一只审批的活卡 / 停驻行 / 另一条宿主路的持有与结局在进程级持有表 / 已结表里,宿主不自持已收口集;服务端 7.133.0 起一条腿一个帧族,不再有先旧族帧、后本帧的并发);流上下文经 approvalFrameContextOf(这只 chrome 事件) 查,查不到不开卡;' +
161
167
  '🔴 账本重放的历史帧只用于时间线渲染,卡集的全量对账基准是开流 preamble(它带的 expiresInMs 是铸帧时刻的旧值);' +
162
168
  'card 的 message/args 是模型/工具产文,只渲染永不回喂模型',
163
169
  },
@@ -3,7 +3,9 @@ import type { PermissionMode } from "./permissionWireCaps.js";
3
3
  import type { ChromeArmKind, LaneProof } from "./seam.js";
4
4
  import type { SeatTurnFailure } from "./turnFailurePresentation.js";
5
5
  import type { QuestionAnswer } from "./liveQuestionStore.js";
6
- import type { ToolApprovalDelegation } from "./hitl/toolApprovalWire.js";
6
+ import type { ApprovalInputSource, ToolApprovalDelegation } from "./hitl/toolApprovalWire.js";
7
+ import type { ApprovalRequestedBy } from "./hitl/approvalAskers.js";
8
+ import type { ApprovalRequestFrameUnreadableWhy } from "./hitl/approvalRequestFrameReading.js";
7
9
  import type { ApprovalMandateWord } from "./gateVocabulary.js";
8
10
  import type { ModelApiWord } from "./model/providerPresets.js";
9
11
  import type { LiveModelCatalog } from "./liveModelCatalog.js";
@@ -12,12 +14,14 @@ import { type ProbeVerdictWord } from "./modelCapabilityProbe.js";
12
14
  import type { SubagentContentEvent } from "./subagentContentStore.js";
13
15
  import type { DeviceEnrollTokenOutcome, DeviceListOutcome, DeviceRebindOutcome, DeviceRevokeOutcome, DeviceSessionBindingOutcome, DeviceTransport, DeviceUnarmed, DeviceUnreadable } from "./deviceRebind.js";
14
16
  import type { McpPanelView } from "./mcpPanel.js";
17
+ import type { WiringManifestModView } from "./adapter/downstream/eventToSdkMessage.js";
15
18
  import type { McpToolToggleKey } from "./mcpToolToggles.js";
16
19
  import { type ThinkingLatchEvent, type ThinkingLatchRowWord } from "./thinkingLatchWords.js";
17
20
  import type { SessionRowPatchFields, SessionRowUnreadable } from "./sessionRowTag.js";
18
21
  import { type SessionEngineKind, type SessionEngineView } from "./sessionEngine.js";
19
22
  import type { ParkedUnresumableRow } from "./hitl/parkedUnresumable.js";
20
23
  import { type EngineSwapCard } from "./localEngineSwapCard.js";
24
+ import type { ToolPermissionSettledElsewhere } from "./hitl/approvalResolution.js";
21
25
  export interface SeatValidationFailure {
22
26
  reason: string;
23
27
  field?: string;
@@ -87,6 +91,12 @@ export interface ToolPermissionRequest {
87
91
  askClass?: string;
88
92
  classes?: readonly string[];
89
93
  sessionRow?: true;
94
+ probeReason?: string;
95
+ probeCause?: object;
96
+ feedbackCapable?: true;
97
+ requestedBy?: ApprovalRequestedBy;
98
+ frameReading?: ApprovalRequestFrameUnreadableWhy;
99
+ inputSource?: ApprovalInputSource;
90
100
  }
91
101
  declare const SEAT_EVENT_TYPE_TUPLE: readonly ["start", "close", "session_updated", "message", "stream_event", "chrome_event", "error", "tool_permission_resolved", "subagent_content"];
92
102
  export type SeatEventType = (typeof SEAT_EVENT_TYPE_TUPLE)[number];
@@ -110,6 +120,7 @@ declare const CHROME_ARM_SEAT_ROUTE: {
110
120
  readonly compaction_outcome: "seat";
111
121
  readonly engine_notice: "seat";
112
122
  readonly subagent_alias: "seat";
123
+ readonly session_box_notice: "seat";
113
124
  readonly workflow_notification_enqueue: "host";
114
125
  readonly plan_review_park: "host";
115
126
  readonly approval_request: "host";
@@ -205,7 +216,7 @@ export type SeatStreamReading = {
205
216
  };
206
217
  export declare function seatStreamDeltaMessage(event: SeatStreamDeltaSource, ids: SeatStreamDeltaIds): SeatStreamEventMessage | undefined;
207
218
  export declare function readSeatStreamDelta(message: object): SeatStreamReading;
208
- export declare const SEAT_CAPABILITY_NAMES: readonly ["pickFolder", "rewind", "recents", "patchSession", "devices", "engineTarget", "onboard", "mcpToolToggles", "thinkingLatch", "computerUseSwitch", "engineModeDefaultOnly", "seatActions"];
219
+ export declare const SEAT_CAPABILITY_NAMES: readonly ["pickFolder", "rewind", "recents", "patchSession", "devices", "engineTarget", "onboard", "mcpToolToggles", "thinkingLatch", "computerUseSwitch", "engineModeDefaultOnly", "seatActions", "notificationLevels", "modsView"];
209
220
  export type SeatCapabilityName = (typeof SEAT_CAPABILITY_NAMES)[number];
210
221
  export interface SeatCapabilitiesState {
211
222
  pickFolder?: boolean;
@@ -220,6 +231,8 @@ export interface SeatCapabilitiesState {
220
231
  computerUseSwitch?: boolean;
221
232
  engineModeDefaultOnly?: boolean;
222
233
  seatActions?: boolean;
234
+ notificationLevels?: boolean;
235
+ modsView?: boolean;
223
236
  }
224
237
  export type SeatCapabilityReading = {
225
238
  readonly kind: "reported";
@@ -285,6 +298,9 @@ export declare const SEAT_TURN_SETTINGS_ORIGINS: Readonly<{
285
298
  outputStyle: Readonly<{
286
299
  hostSupplied: "settings.outputStyle";
287
300
  }>;
301
+ env: Readonly<{
302
+ hostSupplied: "settings.env";
303
+ }>;
288
304
  }>;
289
305
  export interface SeatRewindIntent {
290
306
  mode: RewindMode;
@@ -348,6 +364,7 @@ export interface ToolPermissionDecision {
348
364
  answer?: QuestionAnswer;
349
365
  updatedInput?: unknown;
350
366
  remember?: "session";
367
+ feedback?: string;
351
368
  }
352
369
  export interface EipcStoreClient<T> {
353
370
  getState(): Promise<T>;
@@ -383,6 +400,9 @@ export interface StopAck {
383
400
  export interface OkAck {
384
401
  ok: boolean;
385
402
  }
403
+ export interface ToolPermissionAck extends OkAck {
404
+ settledElsewhere?: ToolPermissionSettledElsewhere;
405
+ }
386
406
  export interface SessionsState {
387
407
  sessions: LocalSessionRecord[];
388
408
  }
@@ -515,7 +535,7 @@ export type SelfUpgradeOutcome = (typeof SELF_UPGRADE_OUTCOMES)[number];
515
535
  export interface EngineTargetLocal {
516
536
  lastBootError?: string;
517
537
  mcp?: SeatLocalMcpReading;
518
- lifecycle?: LocalEngineSeatReading;
538
+ lifecycle: LocalEngineSeatReading;
519
539
  }
520
540
  export interface EngineTargetState {
521
541
  mode: "local" | "cloud";
@@ -646,6 +666,9 @@ export interface OnboardProvidersResult {
646
666
  }
647
667
  export declare const checkOnboardEntryRequest: (v: unknown) => SeatValidation;
648
668
  export declare const checkOnboardApplyRequest: (v: unknown) => SeatValidation;
669
+ export interface SessionModsView {
670
+ readonly rows: readonly WiringManifestModView[];
671
+ }
649
672
  export declare const checkMcpToolToggleKey: (v: unknown) => SeatValidation;
650
673
  export interface McpToolTogglesResult {
651
674
  off: McpToolToggleKey[];
@@ -686,6 +709,33 @@ export type SetComputerUsePlan = {
686
709
  readonly reason: Exclude<ComputerUseRefusalReason, "write-failed">;
687
710
  };
688
711
  export declare function planSetComputerUse(request: {} | null | undefined, lockedByEnv: boolean): SetComputerUsePlan;
712
+ export declare const NOTIFICATION_LEVEL_TYPES: readonly ["permission", "question", "idle"];
713
+ export type NotificationLevelType = (typeof NOTIFICATION_LEVEL_TYPES)[number];
714
+ export declare const NOTIFICATION_LEVELS: readonly ["off", "badge", "banner"];
715
+ export type NotificationLevel = (typeof NOTIFICATION_LEVELS)[number];
716
+ export declare const NOTIFICATION_LEVEL_REFUSAL_REASONS: readonly ["invalid-request", "unsupported-level", "write-failed"];
717
+ export type NotificationLevelRefusalReason = (typeof NOTIFICATION_LEVEL_REFUSAL_REASONS)[number];
718
+ export interface NotificationLevelsState {
719
+ levels: Record<NotificationLevelType, NotificationLevel>;
720
+ supported: NotificationLevel[];
721
+ }
722
+ export type SetNotificationLevelResult = {
723
+ ok: true;
724
+ state: NotificationLevelsState;
725
+ } | {
726
+ ok: false;
727
+ reason: NotificationLevelRefusalReason;
728
+ state: NotificationLevelsState;
729
+ };
730
+ export type SetNotificationLevelPlan = {
731
+ readonly kind: "apply";
732
+ readonly type: NotificationLevelType;
733
+ readonly level: NotificationLevel;
734
+ } | {
735
+ readonly kind: "refused";
736
+ readonly reason: Exclude<NotificationLevelRefusalReason, "write-failed">;
737
+ };
738
+ export declare function planSetNotificationLevel(type: {} | null | undefined, level: {} | null | undefined, supported: readonly NotificationLevel[]): SetNotificationLevelPlan;
689
739
  export declare const SEAT_ACTION_NAMES: readonly ["new-project", "prefill-composer"];
690
740
  export type SeatActionName = (typeof SEAT_ACTION_NAMES)[number];
691
741
  export type SeatAction = {
@@ -717,7 +767,7 @@ export interface LocalSessionsApi {
717
767
  sendMessage(req: SendMessageRequest): Promise<SendMessageAck>;
718
768
  interrupt(req: SessionScopedRequest): Promise<InterruptAck>;
719
769
  stop(req: SessionScopedRequest): Promise<StopAck>;
720
- respondToToolPermission(req: ToolPermissionDecision): Promise<OkAck>;
770
+ respondToToolPermission(req: ToolPermissionDecision): Promise<ToolPermissionAck>;
721
771
  cancelQueuedMessage(sessionId: string, userMessageUuid: string): Promise<boolean>;
722
772
  reorderQueuedMessage(sessionId: string, userMessageUuid: string, targetUserMessageUuid: string): Promise<boolean>;
723
773
  promoteQueuedMessage(sessionId: string, userMessageUuid: string): Promise<boolean>;
@@ -754,7 +804,10 @@ export interface LocalSessionsApi {
754
804
  setThinkingLatch(req: SetThinkingLatchRequest): Promise<OkAck>;
755
805
  getComputerUse(): Promise<ComputerUseState>;
756
806
  setComputerUse(req: SetComputerUseRequest): Promise<SetComputerUseResult>;
807
+ getNotificationLevels(): Promise<NotificationLevelsState>;
808
+ setNotificationLevel(type: NotificationLevelType, level: NotificationLevel): Promise<SetNotificationLevelResult>;
757
809
  claimSeatActions(req: SeatActionsClaim): Promise<OkAck>;
810
+ readSessionMods(sessionId: string): Promise<SessionModsView | DeviceUnreadable | DeviceUnarmed>;
758
811
  onEvent(cb: (ev: LocalSessionEvent) => void): () => void;
759
812
  onToolPermissionRequest(cb: (req: ToolPermissionRequest) => void): () => void;
760
813
  onSeatAction(cb: (action: SeatAction) => void): () => void;
@@ -803,12 +856,13 @@ export declare function isSetThinkingLatchRequest(v: unknown): v is SetThinkingL
803
856
  export declare const checkStartSessionOptions: (v: unknown) => SeatValidation;
804
857
  export declare const checkSeatResourceScope: (v: unknown) => SeatValidation;
805
858
  export declare function isSendMessageAck(v: unknown): v is SendMessageAck;
859
+ export declare function readToolPermissionSettledElsewhere(ack: object | null | undefined): ToolPermissionSettledElsewhere | undefined;
806
860
  export declare const LOCAL_SESSIONS_SPEC: EipcServiceSpec;
807
- export declare const SEAT_METHOD_NAMES: readonly ["start", "sendMessage", "interrupt", "stop", "respondToToolPermission", "cancelQueuedMessage", "reorderQueuedMessage", "promoteQueuedMessage", "setFocusedSession", "setModel", "getTranscript", "searchSessions", "uploadAttachment", "listModels", "applyModelConfig", "pickFolder", "listRecentFolders", "noteRecentFolder", "patchSession", "listDevices", "readSessionBinding", "rebindSession", "issueEnrollToken", "revokeDevice", "setEngineMode", "startCloudLogin", "cancelCloudLogin", "connectCloudEngine", "configureCloudEngine", "clearCloudEngine", "answerEngineSwap", "beginSelfUpgrade", "listOnboardProviders", "probeOnboardEntry", "applyOnboardEntry", "readSessionMcpPanel", "listMcpToolToggles", "setMcpToolToggle", "setThinkingLatch", "getComputerUse", "setComputerUse", "claimSeatActions", "onEvent", "onToolPermissionRequest", "onSeatAction"];
861
+ export declare const SEAT_METHOD_NAMES: readonly ["start", "sendMessage", "interrupt", "stop", "respondToToolPermission", "cancelQueuedMessage", "reorderQueuedMessage", "promoteQueuedMessage", "setFocusedSession", "setModel", "getTranscript", "searchSessions", "uploadAttachment", "listModels", "applyModelConfig", "pickFolder", "listRecentFolders", "noteRecentFolder", "patchSession", "listDevices", "readSessionBinding", "rebindSession", "issueEnrollToken", "revokeDevice", "setEngineMode", "startCloudLogin", "cancelCloudLogin", "connectCloudEngine", "configureCloudEngine", "clearCloudEngine", "answerEngineSwap", "beginSelfUpgrade", "listOnboardProviders", "probeOnboardEntry", "applyOnboardEntry", "readSessionMcpPanel", "listMcpToolToggles", "setMcpToolToggle", "setThinkingLatch", "getComputerUse", "setComputerUse", "getNotificationLevels", "setNotificationLevel", "claimSeatActions", "readSessionMods", "onEvent", "onToolPermissionRequest", "onSeatAction"];
808
862
  export declare const SEAT_STORE_PROPS: readonly ["sessionsStateStore", "focusedSessionStateStore", "settingsStateStore", "seatCapabilitiesStateStore", "engineTargetStateStore"];
809
863
  export declare const SEAT_EVENT_METHOD_NAMES: readonly ["onEvent", "onToolPermissionRequest", "onSeatAction"];
810
864
  export declare const LOCAL_SESSION_EVENT_KEYS: readonly ["type", "sessionId", "message", "error", "errorCategory", "code", "session", "userMessageUuid", "requestId", "outcome", "parked", "chrome", "_sema_turnFailure", "subagentContent"];
811
- export declare const TOOL_PERMISSION_REQUEST_KEYS: readonly ["requestId", "sessionId", "toolName", "toolCallId", "input", "message", "toctouBinding", "createdAtMs", "governanceForced", "delegation", "mandated", "mandate", "origin", "ruleOffersAbsence", "askClass", "classes", "sessionRow"];
865
+ export declare const TOOL_PERMISSION_REQUEST_KEYS: readonly ["requestId", "sessionId", "toolName", "toolCallId", "input", "message", "toctouBinding", "createdAtMs", "governanceForced", "delegation", "mandated", "mandate", "origin", "ruleOffersAbsence", "askClass", "classes", "sessionRow", "probeReason", "probeCause", "feedbackCapable", "requestedBy", "frameReading", "inputSource"];
812
866
  export declare const LOCAL_SESSION_RECORD_KEYS: readonly ["sessionId", "engineSessionId", "model", "title", "cwd", "isRunning", "createdAt", "lastActivityAt", "queuedMessages", "parked", "pinned", "rowTag", "unreadable", "thinkingLatch", "engine", "executionLane", "parkedUnresumable"];
813
867
  export declare const SEND_MESSAGE_REQUEST_KEYS: readonly ["sessionId", "text", "model", "userMessageUuid", "permissionMode", "attachmentIds", "reasoningEffort", "retainBackgroundProcesses", "forwardSubagentEvents", "retainSubagentSessions", "settings", "scenario", "rewind"];
814
868
  export declare const SEAT_SEND_MESSAGE_KEY_ORIGINS: {
@@ -853,7 +907,7 @@ export declare const SEAT_SEND_MESSAGE_KEY_ORIGINS: {
853
907
  readonly taskRequestKeys: readonly ["resumeAt", "resumeAtMode", "restoreFiles", "rewindFilesTo"];
854
908
  };
855
909
  };
856
- export declare const TOOL_PERMISSION_DECISION_KEYS: readonly ["sessionId", "requestId", "decision", "answer", "updatedInput", "remember"];
910
+ export declare const TOOL_PERMISSION_DECISION_KEYS: readonly ["sessionId", "requestId", "decision", "answer", "updatedInput", "remember", "feedback"];
857
911
  export declare const START_SESSION_OPTION_KEYS: readonly ["model", "title", "cwd", "excludeTools", "engine"];
858
912
  export declare const SEAT_VALIDATOR_KEY_COVERAGE: {
859
913
  readonly LocalSessionRecord: {
@@ -893,9 +947,27 @@ export declare const SEAT_VALIDATOR_KEY_COVERAGE: {
893
947
  }, {
894
948
  readonly key: "sessionRow";
895
949
  readonly why: "放宽方向的展示位(CC-699),判官在过境口 toolPermissionRequestAskBits(card, requestId):卡上「本会话放行」判官 standingRowsOf 的会话行同一前提 ∧ 本请求 requestId 的域带得走(live: / durable:),严格 true 才上座、永不铸 false;座位门不设第二判官,理由同 mandated(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。消费端 `=== true` 才渲「本会话放行」,其余(缺席 / 坏形)一律不渲 —— 缺席是闭合失败,不是「没说就照渲」。不经过境口自铸座位请求的宿主拿不到这一位,座位卡就不给那一档。";
950
+ }, {
951
+ readonly key: "feedbackCapable";
952
+ readonly why: "放宽方向的展示位(CC-585),判官在过境口 toolPermissionRequestAskBits(card, requestId):卡判官 answerCarriage(card) 答 model(卡带耐久待决行腿的正向事实 parkRow)∧ 本请求 requestId 的域恰是 durable:(只有 /decide 收放行反馈位),严格 true 才上座、永不铸 false;座位门不设第二判官,理由同 sessionRow(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。消费端 `=== true` 才渲「Yes + 告诉 agent 下一步」那一格输入,其余(缺席 / 坏形)一律不渲 —— 缺席是闭合失败。不经过境口自铸座位请求的宿主拿不到这一位,座位卡就不给那一格。";
896
953
  }, {
897
954
  readonly key: "ruleOffersAbsence";
898
955
  readonly why: "喂强制判据口 approvalIsMandated 的位(CC-203;寄存行那条腿的强制只以缺席词 mandated 表达),按开集读(非空串原文字节、词表不校);权威窄读在卡口与过境口,座位门不设第二判官,理由同 mandated。坏形读成缺席 ⇒ 这一路不判强制(放宽方向:寄存行上的强制就丢了;另两路 mandated / mandate 照判);表外串只是不等于 mandated。不经过境口自铸座位请求的宿主要自己按同一把窄读。";
956
+ }, {
957
+ readonly key: "probeReason";
958
+ readonly why: "展示位(CC-1316),权威窄读在过境口 toolPermissionRequestAskBits,与「为什么问」那一句的读口 askProbeReasonDetail 同一个读点(自有数据属性、取值器不执行;串且去两端空白后非空才在场,原文字节);座位门不设第二判官,理由同 mandated(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。坏形读成缺席 ⇒ 卡上不显示这一句,不改决断;缺席不是「没有原因」。不经过境口自铸座位请求的宿主要自己按同一把窄读。";
959
+ }, {
960
+ readonly key: "probeCause";
961
+ readonly why: "展示位(CC-1316),与 probeReason 同一对、同一个读点;载体层判(自有数据属性、非 null 非数组对象)才在场,同一引用原样搬运,内部成员不校(成员的窄读归 askProbeReasonDetail / probeCauseRowsOf);座位门不设第二判官,理由同 probeReason。坏形读成缺席 ⇒ 不显示因由行,不改决断。两位按键隔离:一位读不出不连坐另一位。";
962
+ }, {
963
+ readonly key: "requestedBy";
964
+ readonly why: "展示位(CC-1341),权威窄读在过境口 toolPermissionRequestAskBits,读点是卡口的唯一载体级读口 approvalRequestedByOf(载体顶层的自有数据属性、取值器不执行;kind 恰 extension 且 name 非空串才在场,出冻结的新铸副本);原始耐久待决行不读(上游不在行上铸这一位);座位门不设第二判官,理由同 mandated(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。坏形读成缺席 ⇒ 卡上不显示发起者行,不改决断;缺席不是「模型发起」。不经过境口自铸座位请求的宿主要自己按同一把窄读。";
965
+ }, {
966
+ readonly key: "frameReading";
967
+ readonly why: "展示位(CC-1345),权威窄读在过境口 toolPermissionRequestAskBits,读点是包内唯一读口 cardPayloadReadingOf(卡上 cardPayloadUnreadable 严格 true ∧ cardPayloadUnreadableWhy 是判因闭集三词之一才在场;卡面通用卡第一行按因选句同读它);座位门不设第二判官,理由同 mandated(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。表外词 / 游离判因词 / 判因未知读成缺席 ⇒ 卡上回落不分因的原句,不改决断;缺席不是「帧读得出」。不经过境口自铸座位请求的宿主要自己按同一把窄读。";
968
+ }, {
969
+ readonly key: "inputSource";
970
+ readonly why: "展示位(CC-1366),权威窄读在过境口 toolPermissionRequestAskBits,读点是包内唯一窄读 approvalInputSourceOf(载体顶层的自有数据属性、取值器不执行;闭集 record / stream 两词精确字节才在场);来源位本身只有一个铸点(卡入参读法的读数 → 位),过境口只抄卡上已铸的位、不拿 input 重判来源,原始帧 / 原始耐久待决行直交恒缺席;座位门不设第二判官,理由同 mandated(为一个展示位拒掉整条 request = 把安全 ask 丢给引擎 TTL deny)。表外词 / 近义词 / 非串读成缺席 ⇒ 壳按来源不明处置,不改决断;缺席不是 record。不经过境口自铸座位请求的宿主要自己按同一把窄读。";
899
971
  }];
900
972
  };
901
973
  readonly LocalSessionEvent: {
@@ -992,6 +1064,11 @@ export declare const SEAT_VALIDATOR_KEY_COVERAGE: {
992
1064
  readonly validated: readonly ["ok"];
993
1065
  readonly unchecked: readonly [];
994
1066
  };
1067
+ readonly ToolPermissionAck: {
1068
+ readonly check: (v: unknown) => SeatValidation;
1069
+ readonly validated: readonly ["ok", "settledElsewhere"];
1070
+ readonly unchecked: readonly [];
1071
+ };
995
1072
  readonly GetTranscriptResult: {
996
1073
  readonly check: (v: unknown) => SeatValidation;
997
1074
  readonly validated: readonly ["sessionId", "messages"];
@@ -1019,7 +1096,7 @@ export declare const SEAT_VALIDATOR_KEY_COVERAGE: {
1019
1096
  };
1020
1097
  readonly SeatCapabilitiesState: {
1021
1098
  readonly check: (v: unknown) => SeatValidation;
1022
- readonly validated: readonly ["pickFolder", "rewind", "recents", "patchSession", "devices", "engineTarget", "onboard", "mcpToolToggles", "thinkingLatch", "computerUseSwitch", "engineModeDefaultOnly", "seatActions"];
1099
+ readonly validated: readonly ["pickFolder", "rewind", "recents", "patchSession", "devices", "engineTarget", "onboard", "mcpToolToggles", "thinkingLatch", "computerUseSwitch", "engineModeDefaultOnly", "seatActions", "notificationLevels", "modsView"];
1023
1100
  readonly unchecked: readonly [];
1024
1101
  };
1025
1102
  readonly RecentFoldersResult: {
@@ -1059,7 +1136,7 @@ export declare const SEAT_VALIDATOR_KEY_COVERAGE: {
1059
1136
  };
1060
1137
  };
1061
1138
  export declare const SEAT_VALIDATOR_COVERAGE_EXEMPT: readonly [...{
1062
- label: "DeviceListOutcome" | "DeviceSessionBindingOutcome" | "DeviceRebindOutcome" | "DeviceEnrollTokenOutcome" | "DeviceRevokeOutcome" | "SeatDeviceRebindRequest" | "SeatDeviceRevokeRequest" | "EngineTargetState" | "EngineTargetResult" | "CloudLoginStart" | "CloudLoginCancelAck" | "CloudConnectResult" | "CloudLoginRequest" | "CloudEngineConnectRequest" | "CloudEngineConfigureRequest" | "OnboardProvidersResult" | "OnboardProbeResult" | "OnboardApplyResult" | "OnboardEntryRequest" | "OnboardApplyRequest" | "McpToolTogglesResult" | "McpToolToggleKey" | "ComputerUseState" | "SetComputerUseResult" | "SetComputerUseRequest" | "SeatAction" | "EngineSwapAnswerOutcome" | "SelfUpgradeOutcome";
1139
+ label: "DeviceListOutcome" | "DeviceSessionBindingOutcome" | "DeviceRebindOutcome" | "DeviceEnrollTokenOutcome" | "DeviceRevokeOutcome" | "SeatDeviceRebindRequest" | "SeatDeviceRevokeRequest" | "EngineTargetState" | "EngineTargetResult" | "CloudLoginStart" | "CloudLoginCancelAck" | "CloudConnectResult" | "CloudLoginRequest" | "CloudEngineConnectRequest" | "CloudEngineConfigureRequest" | "OnboardProvidersResult" | "OnboardProbeResult" | "OnboardApplyResult" | "OnboardEntryRequest" | "OnboardApplyRequest" | "McpToolTogglesResult" | "McpToolToggleKey" | "ComputerUseState" | "SetComputerUseResult" | "SetComputerUseRequest" | "NotificationLevelsState" | "SetNotificationLevelResult" | "SeatAction" | "EngineSwapAnswerOutcome" | "SelfUpgradeOutcome" | "SessionModsResult";
1063
1140
  check: (v: unknown) => SeatValidation;
1064
1141
  why: string;
1065
1142
  }[], {