@sema-agent/client-core 0.105.0 → 0.107.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 (152) hide show
  1. package/CHANGELOG.md +301 -0
  2. package/README.md +40 -21
  3. package/dist/adapt/arms.js +10 -1
  4. package/dist/adapter/activeRunSelfHeal.d.ts +21 -2
  5. package/dist/adapter/activeRunSelfHeal.js +129 -28
  6. package/dist/adapter/downstream/eventToSdkMessage.d.ts +0 -5
  7. package/dist/adapter/downstream/eventToSdkMessage.js +20 -19
  8. package/dist/adapter/downstream/terminalToSdkResult.js +2 -3
  9. package/dist/adapter/downstream/wiringManifestView.d.ts +1 -3
  10. package/dist/adapter/downstream/wiringManifestView.js +0 -1
  11. package/dist/adapter/runStream.js +3 -4
  12. package/dist/approvalReachWire.d.ts +1 -0
  13. package/dist/approvalReachWire.js +4 -1
  14. package/dist/approvalSeat.d.ts +21 -0
  15. package/dist/approvalSeat.js +73 -0
  16. package/dist/assistantInbox.d.ts +2 -0
  17. package/dist/assistantInbox.js +3 -0
  18. package/dist/checkpointRowVerdict.d.ts +29 -0
  19. package/dist/checkpointRowVerdict.js +98 -0
  20. package/dist/coreValuePorts.d.ts +12 -1
  21. package/dist/coreValuePorts.js +10 -0
  22. package/dist/decideFailureNote.js +3 -1
  23. package/dist/decideReceipt.d.ts +9 -0
  24. package/dist/decideReceipt.js +29 -1
  25. package/dist/declared/supportFloorDeclared.js +2 -2
  26. package/dist/deviceRebind.d.ts +7 -0
  27. package/dist/deviceRebind.js +39 -5
  28. package/dist/displayUntrusted.d.ts +5 -3
  29. package/dist/displayUntrusted.js +50 -41
  30. package/dist/engineAddress.d.ts +3 -0
  31. package/dist/engineAddress.js +25 -0
  32. package/dist/engineDirectory.js +9 -17
  33. package/dist/engineErrorCodes.d.ts +8 -0
  34. package/dist/engineErrorCodes.js +8 -0
  35. package/dist/engineNoticeCodes.d.ts +38 -3
  36. package/dist/engineNoticeCodes.js +167 -11
  37. package/dist/engineRowRef.js +1 -1
  38. package/dist/errorSupplementRoles.js +4 -1
  39. package/dist/eventLeg.d.ts +2 -2
  40. package/dist/eventLeg.js +2 -1
  41. package/dist/executionLaneCapability.js +3 -2
  42. package/dist/executionLaneWords.d.ts +1 -0
  43. package/dist/executionLaneWords.js +3 -0
  44. package/dist/fleet/fleetProjection.js +26 -5
  45. package/dist/generated/engineFactTables.d.ts +2 -1
  46. package/dist/generated/engineFactTables.js +3 -1
  47. package/dist/generated/engineNoticeTables.js +28 -7
  48. package/dist/generated/sdkFactTables.d.ts +3 -0
  49. package/dist/generated/sdkFactTables.js +15 -0
  50. package/dist/generated/settingsSchemaFns.d.ts +11 -0
  51. package/dist/generated/settingsSchemaFns.js +2 -1
  52. package/dist/generated/settingsSchemaSafetyMergeSpec.js +1 -1
  53. package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -1
  54. package/dist/generated/settingsSchemaSettingsSources.js +22 -2
  55. package/dist/hitl/approvalLiveFace.d.ts +17 -0
  56. package/dist/hitl/approvalLiveFace.js +35 -0
  57. package/dist/hitl/approvalQueueRow.d.ts +21 -0
  58. package/dist/hitl/approvalQueueRow.js +69 -0
  59. package/dist/hitl/approvalResolution.d.ts +5 -1
  60. package/dist/hitl/approvalResolution.js +18 -1
  61. package/dist/hitl/approvalsFeed.d.ts +5 -4
  62. package/dist/hitl/approvalsFeed.js +39 -6
  63. package/dist/hitl/askParkRowRouting.d.ts +4 -3
  64. package/dist/hitl/askParkRowRouting.js +27 -3
  65. package/dist/hitl/automaticAnswerVerdict.js +13 -10
  66. package/dist/hitl/crashConverged.d.ts +5 -1
  67. package/dist/hitl/decisionConflict.js +2 -1
  68. package/dist/hitl/decisionRefusal.js +1 -1
  69. package/dist/hitl/decisionSend.d.ts +3 -0
  70. package/dist/hitl/decisionSend.js +32 -6
  71. package/dist/hitl/frameRouter.js +4 -5
  72. package/dist/hitl/hitlBridge.d.ts +6 -2
  73. package/dist/hitl/hitlBridge.js +53 -7
  74. package/dist/hitl/livePendingAsk.d.ts +5 -0
  75. package/dist/hitl/livePendingAsk.js +10 -3
  76. package/dist/hitl/parkOwnership.js +4 -5
  77. package/dist/hitl/parkResolver.js +9 -5
  78. package/dist/hitl/parkRowBirthWait.d.ts +7 -0
  79. package/dist/hitl/parkRowBirthWait.js +1 -1
  80. package/dist/hitl/parkRowDelegation.d.ts +6 -0
  81. package/dist/hitl/parkRowDelegation.js +33 -0
  82. package/dist/hitl/persistedRulesWire.d.ts +15 -3
  83. package/dist/hitl/persistedRulesWire.js +102 -20
  84. package/dist/hitl/planReviewCard.d.ts +2 -0
  85. package/dist/hitl/planReviewCard.js +21 -0
  86. package/dist/hitl/planReviewWire.d.ts +2 -2
  87. package/dist/hitl/planReviewWire.js +105 -38
  88. package/dist/hitl/sessionAllowRoute.d.ts +7 -0
  89. package/dist/hitl/sessionAllowRoute.js +49 -0
  90. package/dist/hitl/sessionPolicyWire.d.ts +1 -7
  91. package/dist/hitl/sessionPolicyWire.js +3 -43
  92. package/dist/hitl/standingRows.js +10 -10
  93. package/dist/hitl/subagentSource.d.ts +1 -0
  94. package/dist/hitl/subagentSource.js +13 -0
  95. package/dist/hitl/toolApprovalWire.d.ts +3 -2
  96. package/dist/hitl/toolApprovalWire.js +100 -44
  97. package/dist/hostSettingsSource.d.ts +4 -1
  98. package/dist/hostSettingsSource.js +11 -6
  99. package/dist/hostTurnSettings.d.ts +4 -5
  100. package/dist/hostTurnSettings.js +80 -19
  101. package/dist/i18n/messages.en.d.ts +41 -12
  102. package/dist/i18n/messages.en.js +42 -13
  103. package/dist/i18n/messages.zh.js +45 -13
  104. package/dist/index.d.ts +22 -2
  105. package/dist/index.js +12 -2
  106. package/dist/injectionLaneNotice.js +2 -1
  107. package/dist/liveInitToolFace.js +0 -1
  108. package/dist/liveModelCatalog.d.ts +15 -0
  109. package/dist/liveModelCatalog.js +40 -0
  110. package/dist/mcpWireCaps.js +1 -1
  111. package/dist/modelCapabilityProbe.js +66 -33
  112. package/dist/noticePresentation.js +2 -0
  113. package/dist/ownKey.d.ts +0 -1
  114. package/dist/ownKey.js +0 -2
  115. package/dist/permissionsDeclaration.d.ts +2 -2
  116. package/dist/permissionsDeclaration.js +12 -14
  117. package/dist/projectSeed.d.ts +39 -0
  118. package/dist/projectSeed.js +80 -0
  119. package/dist/promptDelivery.js +1 -1
  120. package/dist/replayBody.d.ts +7 -6
  121. package/dist/replayBody.js +62 -7
  122. package/dist/request/taskRequest.js +3 -4
  123. package/dist/ruleCompileVerdict.d.ts +0 -2
  124. package/dist/ruleCompileVerdict.js +0 -31
  125. package/dist/ruleRefusalSentence.js +0 -3
  126. package/dist/runReattachPolicy.d.ts +3 -0
  127. package/dist/runReattachPolicy.js +15 -2
  128. package/dist/runTerminal.js +30 -8
  129. package/dist/sandboxWire.d.ts +0 -3
  130. package/dist/sandboxWire.js +0 -9
  131. package/dist/sdkWireTransit.d.ts +1 -1
  132. package/dist/seam.d.ts +14 -7
  133. package/dist/seam.js +12 -0
  134. package/dist/seatContract.d.ts +58 -7
  135. package/dist/seatContract.js +135 -4
  136. package/dist/serverSupportRange.d.ts +18 -0
  137. package/dist/serverSupportRange.js +25 -0
  138. package/dist/sessionEngine.d.ts +156 -0
  139. package/dist/sessionEngine.js +464 -0
  140. package/dist/sessionMap.d.ts +11 -1
  141. package/dist/sessionMap.js +35 -9
  142. package/dist/sessionMemorySync.d.ts +31 -0
  143. package/dist/sessionMemorySync.js +95 -0
  144. package/dist/sessionRowTag.d.ts +4 -0
  145. package/dist/sessionRowTag.js +18 -0
  146. package/dist/settingsLayerAdmission.d.ts +1 -0
  147. package/dist/settingsLayerAdmission.js +4 -1
  148. package/dist/toolResult.js +1 -1
  149. package/dist/wireRefusalCopy.d.ts +6 -1
  150. package/dist/wireRefusalCopy.js +9 -7
  151. package/docs/INTEGRATION-CLIENTS.md +1393 -18
  152. package/package.json +5 -5
@@ -3,20 +3,21 @@ import { displayUntrusted } from './displayUntrusted.js';
3
3
  import { CORE_ENGINE_NOTICE_CODES, CORE_MCP_INJECTION_DROP_REASONS, CORE_NOTICE_AUDIENCE, CORE_USER_INPUT_UNDRAINED_FAMILIES, } from './generated/engineNoticeTables.js';
4
4
  import { CORE_APPROVAL_REMEDY_KINDS, CORE_ASK_UNRESOLVABLE_CAUSES, CORE_DURABLE_MANDATE_SOURCES, CORE_PERMISSION_MODE_FOLD_REASONS, } from './generated/engineFactTables.js';
5
5
  import { msg, renderMessage } from './i18n/translate.js';
6
- import { readOwnDataValue } from './ownKey.js';
6
+ import { ownDataField, readOwnDataValue } from './ownKey.js';
7
7
  export const ENGINE_NOTICE_CODES = CORE_ENGINE_NOTICE_CODES;
8
8
  const CATALOG = new Set(ENGINE_NOTICE_CODES);
9
9
  function audienceRow(table, code) {
10
10
  return Object.hasOwn(table, code) ? table[code] : undefined;
11
11
  }
12
+ const LEGACY_NOTICE_AUDIENCE = Object.freeze({ 'context.image_removed': 'user', 'session.records_skipped': 'user' });
12
13
  export function engineNoticeInCatalog(code) {
13
- return typeof code === 'string' && CATALOG.has(code);
14
+ return typeof code === 'string' && (CATALOG.has(code) || Object.hasOwn(LEGACY_NOTICE_AUDIENCE, code));
14
15
  }
15
16
  export const ENGINE_NOTICE_AUDIENCE = CORE_NOTICE_AUDIENCE;
16
17
  export function noticeAudienceOf(code) {
17
18
  if (typeof code !== 'string')
18
19
  return 'operator';
19
- return audienceRow(ENGINE_NOTICE_AUDIENCE, code) ?? 'operator';
20
+ return audienceRow(ENGINE_NOTICE_AUDIENCE, code) ?? audienceRow(LEGACY_NOTICE_AUDIENCE, code) ?? 'operator';
20
21
  }
21
22
  export const MCP_INJECTION_DROP_REASONS = CORE_MCP_INJECTION_DROP_REASONS;
22
23
  const DROP_REASONS = new Set(MCP_INJECTION_DROP_REASONS);
@@ -536,6 +537,15 @@ function optionalOwnSeat(o, key) {
536
537
  return undefined;
537
538
  }
538
539
  }
540
+ const UNREADABLE = Symbol('unreadable');
541
+ function ownSeatOrUnreadable(o, key) {
542
+ try {
543
+ return ownSeat(o, key);
544
+ }
545
+ catch {
546
+ return UNREADABLE;
547
+ }
548
+ }
539
549
  function readToolTurnRepairedOf(notice) {
540
550
  if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
541
551
  return undefined;
@@ -716,7 +726,10 @@ function readUserInputUndrainedOf(notice) {
716
726
  const taskId = nonEmpty(optionalOwnSeat(o, 'taskId'));
717
727
  const sessionId = nonEmpty(optionalOwnSeat(o, 'sessionId'));
718
728
  const runId = nonEmpty(optionalOwnSeat(o, 'runId'));
719
- const childSessionId = nonEmpty(optionalOwnSeat(o, 'childSessionId'));
729
+ const childSeat = ownSeatOrUnreadable(o, 'childSessionId');
730
+ const childSessionId = nonEmpty(childSeat);
731
+ const childSeatProven = childSeat === undefined || childSessionId !== undefined;
732
+ const inputIds = childSeatProven ? exactInputIdList(optionalOwnSeat(o, 'inputIds'), count) : undefined;
720
733
  return {
721
734
  kind,
722
735
  count,
@@ -725,8 +738,96 @@ function readUserInputUndrainedOf(notice) {
725
738
  ...(sessionId !== undefined ? { sessionId } : {}),
726
739
  ...(runId !== undefined ? { runId } : {}),
727
740
  ...(childSessionId !== undefined ? { childSessionId } : {}),
741
+ ...(inputIds !== undefined ? { inputIds } : {}),
728
742
  };
729
743
  }
744
+ function exactInputIdList(v, count) {
745
+ try {
746
+ if (!Array.isArray(v) || ownDataField(v, 'length') !== count)
747
+ return undefined;
748
+ const out = [];
749
+ const seen = new Set();
750
+ for (let i = 0; i < count; i++) {
751
+ const d = Object.getOwnPropertyDescriptor(v, i);
752
+ const id = d !== undefined && Object.hasOwn(d, 'value') ? d.value : undefined;
753
+ if (typeof id !== 'string' || id.length === 0 || seen.has(id))
754
+ return undefined;
755
+ seen.add(id);
756
+ out.push(id);
757
+ }
758
+ return Object.freeze(out);
759
+ }
760
+ catch {
761
+ return undefined;
762
+ }
763
+ }
764
+ function strictSeat(o, key) {
765
+ try {
766
+ return ownDataField(o, key);
767
+ }
768
+ catch {
769
+ return UNREADABLE;
770
+ }
771
+ }
772
+ function ledgerIdSet(ledger, key) {
773
+ const list = strictSeat(ledger, key);
774
+ if (list === undefined)
775
+ return new Set();
776
+ try {
777
+ if (!Array.isArray(list))
778
+ return UNREADABLE;
779
+ const out = new Set();
780
+ for (const k of Object.getOwnPropertyNames(list)) {
781
+ if (k === 'length' || String(Number(k) >>> 0) !== k || Number(k) === 4294967295)
782
+ continue;
783
+ const id = strictSeat(list, k);
784
+ if (id === UNREADABLE)
785
+ return UNREADABLE;
786
+ if (typeof id === 'string' && id.length > 0)
787
+ out.add(id);
788
+ }
789
+ return out;
790
+ }
791
+ catch {
792
+ return UNREADABLE;
793
+ }
794
+ }
795
+ export function undrainedInputsVerdict(facts, ledger) {
796
+ if (facts === null || typeof facts !== 'object')
797
+ return undefined;
798
+ try {
799
+ if (Array.isArray(facts))
800
+ return undefined;
801
+ }
802
+ catch {
803
+ return undefined;
804
+ }
805
+ const count = positiveInt(strictSeat(facts, 'count'));
806
+ if (count === undefined)
807
+ return undefined;
808
+ const nothing = Object.freeze({ redeliver: Object.freeze([]), askUser: Object.freeze([]), unattributed: count });
809
+ if (strictSeat(facts, 'cause') !== 'leg_end' || strictSeat(facts, 'childSessionId') !== undefined)
810
+ return nothing;
811
+ const ids = exactInputIdList(strictSeat(facts, 'inputIds'), count);
812
+ if (ids === undefined)
813
+ return nothing;
814
+ if (ledger !== null && ledger !== undefined && typeof ledger !== 'object')
815
+ return nothing;
816
+ const l = ledger ?? {};
817
+ const handed = ledgerIdSet(l, 'handed');
818
+ const redelivered = ledgerIdSet(l, 'redelivered');
819
+ if (handed === UNREADABLE || redelivered === UNREADABLE)
820
+ return nothing;
821
+ const redeliver = [];
822
+ const askUser = [];
823
+ for (const id of ids) {
824
+ if (redelivered.has(id))
825
+ askUser.push(id);
826
+ else if (handed.has(id))
827
+ redeliver.push(id);
828
+ }
829
+ return Object.freeze({ redeliver: Object.freeze(redeliver), askUser: Object.freeze(askUser), unattributed: count - redeliver.length - askUser.length });
830
+ }
730
831
  const messagesPhrase = (n, noun) => `${n} ${noun}${n === 1 ? '' : 's'}`;
731
832
  const verbBe = (n) => (n === 1 ? 'was' : 'were');
732
833
  const itThem = (n) => (n === 1 ? 'it' : 'them');
@@ -897,25 +998,37 @@ function readStreamEndIgnoredOf(notice) {
897
998
  return undefined;
898
999
  return { statement, word, frames, sessionId, runId };
899
1000
  }
900
- export function readContextImageRemoved(notice) {
901
- return guardedRead(notice, readContextImageRemovedOf);
1001
+ export function readContextMediaRemoved(notice) {
1002
+ return guardedRead(notice, readContextMediaRemovedOf);
902
1003
  }
903
- function readContextImageRemovedOf(notice) {
1004
+ function readContextMediaRemovedOf(notice) {
904
1005
  if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
905
1006
  return undefined;
906
1007
  const n = notice;
907
- if (ownSeat(n, 'code') !== 'context.image_removed')
1008
+ const code = ownSeat(n, 'code');
1009
+ if (code !== 'context.media_removed' && code !== 'context.image_removed')
908
1010
  return undefined;
909
1011
  const d = ownSeat(n, 'detail');
910
1012
  if (typeof d !== 'object' || d === null || Array.isArray(d))
911
1013
  return undefined;
912
1014
  const o = d;
1015
+ const count = (v) => typeof v === 'number' && Number.isSafeInteger(v) && v >= 0;
1016
+ if (code === 'context.image_removed') {
1017
+ const legacyImages = ownSeat(o, 'images');
1018
+ const legacySessionId = nonEmpty(ownSeat(o, 'sessionId'));
1019
+ const legacyRunId = nonEmpty(ownSeat(o, 'runId'));
1020
+ if (!count(legacyImages) || legacyImages < 1 || legacySessionId === undefined || legacyRunId === undefined)
1021
+ return undefined;
1022
+ return { reason: 'rejected_by_provider', images: legacyImages, documents: 0, sessionId: legacySessionId, runId: legacyRunId };
1023
+ }
1024
+ const reason = nonEmpty(ownSeat(o, 'reason'));
913
1025
  const images = ownSeat(o, 'images');
1026
+ const documents = ownSeat(o, 'documents');
914
1027
  const sessionId = nonEmpty(ownSeat(o, 'sessionId'));
915
1028
  const runId = nonEmpty(ownSeat(o, 'runId'));
916
- if (typeof images !== 'number' || !Number.isSafeInteger(images) || images < 1 || sessionId === undefined || runId === undefined)
1029
+ if (reason === undefined || !count(images) || !count(documents) || images + documents < 1 || sessionId === undefined || runId === undefined)
917
1030
  return undefined;
918
- return { images, sessionId, runId };
1031
+ return { reason, images, documents, sessionId, runId };
919
1032
  }
920
1033
  export function readMcpAuthorizationRequired(notice) {
921
1034
  return guardedRead(notice, readMcpAuthorizationRequiredOf);
@@ -939,6 +1052,47 @@ function readMcpAuthorizationRequiredOf(notice) {
939
1052
  const authorizeUrl = nonEmpty(optionalOwnSeat(o, 'authorizeUrl'));
940
1053
  return { server, reason, ...(authorizeUrl !== undefined ? { authorizeUrl } : {}), sessionId, runId };
941
1054
  }
1055
+ export function readSessionLineageRerooted(notice) {
1056
+ return guardedRead(notice, readSessionLineageRerootedOf);
1057
+ }
1058
+ function readSessionLineageRerootedOf(notice) {
1059
+ if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
1060
+ return undefined;
1061
+ const n = notice;
1062
+ if (ownSeat(n, 'code') !== 'session.lineage_rerooted')
1063
+ return undefined;
1064
+ const d = ownSeat(n, 'detail');
1065
+ if (typeof d !== 'object' || d === null || Array.isArray(d))
1066
+ return undefined;
1067
+ const o = d;
1068
+ const brk = ownSeat(o, 'break');
1069
+ if (brk !== true && brk !== false)
1070
+ return undefined;
1071
+ const sessionId = nonEmpty(ownSeat(o, 'sessionId'));
1072
+ const runId = nonEmpty(ownSeat(o, 'runId'));
1073
+ if (sessionId === undefined || runId === undefined)
1074
+ return undefined;
1075
+ const leafRaw = ownSeat(o, 'leaf');
1076
+ const common = {
1077
+ recordsDropped: countReading(optionalOwnSeat(o, 'recordsDropped')),
1078
+ recordsTotal: countReading(optionalOwnSeat(o, 'recordsTotal')),
1079
+ entriesOnPath: countReading(optionalOwnSeat(o, 'entriesOnPath')),
1080
+ sessionId,
1081
+ runId,
1082
+ };
1083
+ if (brk === false) {
1084
+ const leaf = leafRaw === null ? null : nonEmpty(leafRaw);
1085
+ if (leaf === undefined)
1086
+ return undefined;
1087
+ return { break: false, leaf, ...common };
1088
+ }
1089
+ const leaf = nonEmpty(leafRaw);
1090
+ const missingParentId = nonEmpty(ownSeat(o, 'missingParentId'));
1091
+ const rootedAt = nonEmpty(ownSeat(o, 'rootedAt'));
1092
+ if (leaf === undefined || missingParentId === undefined || rootedAt === undefined)
1093
+ return undefined;
1094
+ return { break: true, leaf, missingParentId, rootedAt, entriesCut: countReading(optionalOwnSeat(o, 'entriesCut')), ...common };
1095
+ }
942
1096
  export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
943
1097
  'mcp.injection_dropped': readMcpInjectionDrop,
944
1098
  'delegation.ask_unresolvable': readAskUnresolvable,
@@ -963,8 +1117,10 @@ export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
963
1117
  'task.turn_interrupted': readTurnInterrupted,
964
1118
  'route.finish_reason_unknown': readFinishReasonUnknown,
965
1119
  'route.stream_end_ignored': readStreamEndIgnored,
966
- 'context.image_removed': readContextImageRemoved,
967
1120
  'mcp.authorization_required': readMcpAuthorizationRequired,
1121
+ 'context.media_removed': readContextMediaRemoved,
1122
+ 'context.image_removed': readContextMediaRemoved,
1123
+ 'session.lineage_rerooted': readSessionLineageRerooted,
968
1124
  });
969
1125
  const _factReaderTablePin = true;
970
1126
  void _factReaderTablePin;
@@ -74,7 +74,7 @@ export function mintEngineRowRef(eventId, bound) {
74
74
  export function terminalRunIdOf(ev) {
75
75
  if (ev.type !== 'done')
76
76
  return undefined;
77
- const v = (doneResultView(ev.result).engine ?? ev.result)?.runId;
77
+ const v = doneResultView(ev.result).body?.runId;
78
78
  return typeof v === 'string' && v.length > 0 ? v : undefined;
79
79
  }
80
80
  export const TRANSCRIPT_ROW_SIDECAR_KEYS = Object.freeze([
@@ -4,7 +4,8 @@ import { resumeRefusalContent, resumeContextUnavailableContent, requireExistingS
4
4
  import { resumeReopenContent } from './hitl/suspendedReopen.js';
5
5
  import { idempotencyPayloadMismatchContent } from './engineErrorCodes.js';
6
6
  import { inheritEnvRefusalContent } from './inheritEnvWire.js';
7
- import { usageWindowExhaustedContent, fleetLeaseUnavailableContent, settingsPermissionBucketRefusalContent, fieldLimitRefusalContent, autonomyLaneRefusalContent, unsupportedRuleRefusalContent, admissionWallRefusalContent, hostPostureRefusalContent, toolDeclarationRefusalContent, } from './wireRefusalCopy.js';
7
+ import { projectSeedRefusalContent } from './projectSeed.js';
8
+ import { usageWindowExhaustedContent, fleetLeaseUnavailableContent, settingsPermissionBucketRefusalContent, fieldLimitRefusalContent, autonomyLaneRefusalContent, sessionArchiveStampedContent, unsupportedRuleRefusalContent, admissionWallRefusalContent, hostPostureRefusalContent, toolDeclarationRefusalContent, } from './wireRefusalCopy.js';
8
9
  const ROLE_BY_READER = new Map([
9
10
  [corruptSessionContent, 'replacement'],
10
11
  [corruptStoredRowContent, 'replacement'],
@@ -18,8 +19,10 @@ const ROLE_BY_READER = new Map([
18
19
  [settingsPermissionBucketRefusalContent, 'replacement'],
19
20
  [fieldLimitRefusalContent, 'replacement'],
20
21
  [autonomyLaneRefusalContent, 'replacement'],
22
+ [sessionArchiveStampedContent, 'replacement'],
21
23
  [idempotencyPayloadMismatchContent, 'replacement'],
22
24
  [unsupportedRuleRefusalContent, 'replacement'],
25
+ [projectSeedRefusalContent, 'replacement'],
23
26
  [admissionWallRefusalContent, 'supplement'],
24
27
  [hostPostureRefusalContent, 'supplement'],
25
28
  [toolDeclarationRefusalContent, 'supplement'],
@@ -2,7 +2,7 @@ import type { AgentEvent } from '@sema-agent/sdk';
2
2
  import type { EngineBoundRun } from './engineRowRef.js';
3
3
  import { type AskGateWireDeps } from './hitl/askGateWire.js';
4
4
  import { type ActiveRunBusySignal } from './adapter/runStream.js';
5
- import type { ApprovalRequestChromeEvent, ApprovalRevokeChromeEvent } from './seam.js';
5
+ import type { ApprovalCompleteChromeEvent, ApprovalRequestChromeEvent, ApprovalRevokeChromeEvent } from './seam.js';
6
6
  export declare const EVENT_LEG_KINDS: readonly ["live", "durable", "continuation"];
7
7
  export type EventLegKind = (typeof EVENT_LEG_KINDS)[number];
8
8
  export type EventLegStage = 'bindRun' | 'stampOwner' | 'hitlFrames' | 'askBridge' | 'idleTriage';
@@ -71,7 +71,7 @@ export interface ApprovalFrameContext {
71
71
  readonly receivedAtMs: number;
72
72
  readonly streamEnded: AbortSignal;
73
73
  }
74
- export declare function approvalFrameContextOf(arm: ApprovalRequestChromeEvent | ApprovalRevokeChromeEvent): ApprovalFrameContext | undefined;
74
+ export declare function approvalFrameContextOf(arm: ApprovalRequestChromeEvent | ApprovalCompleteChromeEvent | ApprovalRevokeChromeEvent): ApprovalFrameContext | undefined;
75
75
  export interface EventLegPorts {
76
76
  readonly run?: EventLegRunPorts;
77
77
  readonly owner?: EventLegOwnerPorts;
package/dist/eventLeg.js CHANGED
@@ -3,6 +3,7 @@ import { bridgeAskUserQuestionGates } from './hitl/askGateWire.js';
3
3
  import { diagnoseSseIdleTear } from './sseIdleTriage.js';
4
4
  import { recordSubagentOwnerFromProgress } from './subagentContentStore.js';
5
5
  import { activeRunBusySignal } from './adapter/runStream.js';
6
+ import { frameProvesDelivery } from './promptDelivery.js';
6
7
  import { faultText, invokeHostCallbackIsolated } from './hostCallbackGuard.js';
7
8
  import { hostLog } from './host.js';
8
9
  import { guardedRead, readOwnDataNonEmptyString, readOwnDataValue } from './ownKey.js';
@@ -180,7 +181,7 @@ export function composeEventLeg(source, leg, ports) {
180
181
  if (taskId === undefined && streamKind === 'live')
181
182
  taskId = readHeaderRunId();
182
183
  const refusal = streamKind === 'live' && !runEvidence && inDomain('bindRun', ev.type) ? refusalOf(ev, taskId) : undefined;
183
- if (!inDomain('bindRun', ev.type))
184
+ if (frameProvesDelivery(ev))
184
185
  runEvidence = true;
185
186
  if (refusal !== undefined) {
186
187
  if (runPorts !== undefined && typeof runPorts.onRefused === 'function' && isCurrentNow())
@@ -2,6 +2,7 @@ import { capForDisplay } from './fleetTaskDesc.js';
2
2
  import { engineWireTargetBaseUrl } from './engineWireTarget.js';
3
3
  import { createEngineCapReader, unreadableReadingDetail } from './engineCapReader.js';
4
4
  import { ownDataField } from './ownKey.js';
5
+ import { executionLaneWordIsNone } from './executionLaneWords.js';
5
6
  export function projectExecutionLaneCapability(caps) {
6
7
  try {
7
8
  if (caps === null || typeof caps !== 'object')
@@ -100,8 +101,8 @@ export function executionLaneDoctorDetail(reading) {
100
101
  if (reading.view.toolsOnThisHost) {
101
102
  return `execution lane ${lane} — tools run on the engine host (same filesystem), so skills that have a directory of their own can carry a baseDir`;
102
103
  }
103
- if (reading.view.provider === 'in-process') {
104
- return 'no execution lane on this deployment (in-process) — the engine has no machine of its own for running tools here, so its built-in file and shell tools are not mounted and skill baseDir is never sent; whether a given run had tools is answered by its tool roster';
104
+ if (executionLaneWordIsNone(reading.view.provider)) {
105
+ return `no execution lane on this deployment (${lane}) — the engine has no machine of its own for running tools here, so its built-in file and shell tools are not mounted and skill baseDir is never sent; whether a given run had tools is answered by its tool roster`;
105
106
  }
106
107
  return `execution lane ${lane} — tools run on a different machine than the engine, so skill baseDir is never sent on this deployment`;
107
108
  }
@@ -0,0 +1 @@
1
+ export declare function executionLaneWordIsNone(provider: string): boolean;
@@ -0,0 +1,3 @@
1
+ export function executionLaneWordIsNone(provider) {
2
+ return provider === 'none' || provider === 'in-process';
3
+ }
@@ -3,7 +3,8 @@ import { rowIdTail } from '../workflow.js';
3
3
  import { cycleSeqValue } from '../cycleOrder.js';
4
4
  import { frozenSet } from '../frozenSet.js';
5
5
  import { guardedRead, readOwnDataValue } from '../ownKey.js';
6
- import { CORE_RESERVED_AGENT_NAMES } from '../generated/engineFactTables.js';
6
+ import { CORE_RESERVED_AGENT_NAMES, CORE_WORKFLOW_AGENT_PARKED_ERROR_CODE } from '../generated/engineFactTables.js';
7
+ import { runParkedOf as coreRunParkedOf } from '../coreValuePorts.js';
7
8
  export function coerceTaskStatus(s) {
8
9
  if (s === 'parked')
9
10
  return 'awaiting approval';
@@ -31,9 +32,9 @@ export function coerceWorkflowStatus(s) {
31
32
  }
32
33
  export function workflowRunDisplayStatusOf(run) {
33
34
  const status = runField(run, 'status');
34
- if (runField(run, 'parked') === true)
35
+ if (parkedWindowOf(run, status))
35
36
  return 'awaiting approval';
36
- if (status === 'failed' && runField(run, 'errorCode') === WORKFLOW_AGENT_PARKED_ERROR_CODE)
37
+ if (status === 'failed' && runField(run, 'errorCode') === CORE_WORKFLOW_AGENT_PARKED_ERROR_CODE)
37
38
  return 'awaiting approval';
38
39
  switch (status) {
39
40
  case 'completed':
@@ -52,7 +53,27 @@ export function workflowRunDisplayStatusOf(run) {
52
53
  return 'idle';
53
54
  }
54
55
  }
55
- const WORKFLOW_AGENT_PARKED_ERROR_CODE = 'workflow.agent_parked';
56
+ function parkedWindowOf(run, status) {
57
+ if (runField(run, 'parked') === true)
58
+ return true;
59
+ if (guardedRead(() => (typeof run === 'object' && run !== null ? !Object.hasOwn(run, 'parked') : undefined)) !== true)
60
+ return false;
61
+ const agents = runField(run, 'agents');
62
+ if (typeof status !== 'string' || guardedRead(() => Array.isArray(agents)) !== true)
63
+ return false;
64
+ return guardedRead(() => {
65
+ const rows = [];
66
+ const list = agents;
67
+ for (const k of Object.keys(list)) {
68
+ if (!/^(?:0|[1-9]\d*)$/.test(k))
69
+ continue;
70
+ const a = readOwnDataValue(list, k);
71
+ const st = typeof a === 'object' && a !== null ? runField(a, 'status') : undefined;
72
+ rows.push({ status: typeof st === 'string' ? st : '' });
73
+ }
74
+ return coreRunParkedOf({ status, agents: rows });
75
+ }) === true;
76
+ }
56
77
  function runField(run, key) {
57
78
  return guardedRead(() => typeof run === 'object' && run !== null && !Array.isArray(run) ? readOwnDataValue(run, key) : undefined);
58
79
  }
@@ -362,7 +383,7 @@ export const FLEET_WORKFLOW_ROW_KEYS_NOT_PROJECTED = {
362
383
  errorCode: {
363
384
  kind: 'by-design',
364
385
  owner: 'client-core 0.103.0 提货',
365
- reason: '折进 status:只有停驻终态码 workflow.agent_parked 改显示状态(awaiting approval,停驻不是失败),读法唯一处 workflowRunDisplayStatusOf;' +
386
+ reason: '折进 status:只有引擎的停驻终态码(值取自引擎包根导出,经生成表读)改显示状态(awaiting approval,停驻不是失败),读法唯一处 workflowRunDisplayStatusOf;' +
366
387
  '0.95.0 CC-388 把它从视图退出时服务端还不铸,现在铸了也不回到视图 —— run 级别的其它码走 workflow 读面。',
367
388
  },
368
389
  parked: {
@@ -48,7 +48,7 @@ export declare const CORE_TASK_NOTIFICATION_TERMINAL_STATUSES: readonly ["comple
48
48
  export declare const CORE_RESUME_STARTUP_CAUSES: readonly ["environment", "session_gone", "transcript_corrupt", "tool_unavailable", "configuration", "decision_rejected"];
49
49
  export declare const CORE_BUILTIN_SUBAGENT_TYPES: readonly ["Explore", "Plan", "fork", "general-purpose"];
50
50
  export declare const CORE_RULE_OFFERS_ABSENCES: readonly ["mandated", "allow_outranked", "ask_rule_matched", "lane_cannot_speak"];
51
- export declare const CORE_TOOL_APPROVAL_CARDS: readonly ["file-edit", "file-write", "notebook-edit", "shell", "fetch", "skill", "workflow", "plan", "question", "generic"];
51
+ export declare const CORE_TOOL_APPROVAL_CARDS: readonly ["file-edit", "file-write", "notebook-edit", "shell", "fetch", "skill", "workflow", "plan", "question", "generic", "computer-access", "computer-control"];
52
52
  export declare const CORE_MCP_FAILURE_KINDS: readonly ["connect_refused", "connection_failed", "connection_closed", "unauthorized", "http_status", "not_mcp_response", "spawn_failed", "timeout", "protocol", "invalid_config", "credential_unavailable", "host_refused", "unknown"];
53
53
  export declare const CORE_MCP_AUTHORIZATION_REASONS: readonly ["rejected", "scope", "none"];
54
54
  export declare const CORE_PERSISTED_RULE_MATCHES: readonly ["exact", "prefix", "wildcard", "pattern", "subpath", "path", "name", "name_prefix", "host", "subdomain", "tool"];
@@ -72,3 +72,4 @@ export declare const CORE_USER_ATTACHMENT_SEAT: CoreUserAttachmentSeat;
72
72
  export declare const CORE_USER_ATTACHMENTS_MAX: number;
73
73
  export declare const CORE_USER_ATTACHMENT_LABEL_MAX: number;
74
74
  export declare const CORE_PRESENT_PLAN_TOOL_NAME: "ExitPlanMode";
75
+ export declare const CORE_WORKFLOW_AGENT_PARKED_ERROR_CODE: "workflow.agent_parked";
@@ -76,7 +76,6 @@ export const CORE_ENGINE_CARD_TYPES = Object.freeze([
76
76
  "repo-map",
77
77
  "artifact",
78
78
  "worktree",
79
- "task-output",
80
79
  "task-stop",
81
80
  "monitor-start",
82
81
  "send-message",
@@ -366,6 +365,8 @@ export const CORE_TOOL_APPROVAL_CARDS = Object.freeze([
366
365
  "plan",
367
366
  "question",
368
367
  "generic",
368
+ "computer-access",
369
+ "computer-control",
369
370
  ]);
370
371
  export const CORE_MCP_FAILURE_KINDS = Object.freeze([
371
372
  "connect_refused",
@@ -464,3 +465,4 @@ export const CORE_USER_ATTACHMENT_SEAT = Object.freeze({
464
465
  export const CORE_USER_ATTACHMENTS_MAX = 20;
465
466
  export const CORE_USER_ATTACHMENT_LABEL_MAX = 4096;
466
467
  export const CORE_PRESENT_PLAN_TOOL_NAME = "ExitPlanMode";
468
+ export const CORE_WORKFLOW_AGENT_PARKED_ERROR_CODE = "workflow.agent_parked";
@@ -18,6 +18,7 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
18
18
  "config.path_view_unresolved",
19
19
  "config.execution_env_capability_invalid",
20
20
  "config.read_deny_floor_unkept",
21
+ "config.read_floor_confinement_unavailable",
21
22
  "config.tool_card_undeclared",
22
23
  "config.tool_face_undeclared",
23
24
  "config.tool_face_invalid",
@@ -50,6 +51,7 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
50
51
  "checkpoint.execution_outcome_unrecorded",
51
52
  "delegation.transcript_integrity",
52
53
  "delegation.ask_unresolvable",
54
+ "delegation.resume_lane_missing",
53
55
  "mcp.injection_dropped",
54
56
  "mcp.revocation_probe_failed",
55
57
  "mcp.server_redialed",
@@ -59,6 +61,8 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
59
61
  "workflow.agent_option_ignored",
60
62
  "memory.session_polluted",
61
63
  "memory.harvest_quarantined",
64
+ "memory.harvest_refused",
65
+ "memory.harvest_conflict",
62
66
  "memory.delegation_static_mark_waived",
63
67
  "memory.content_class_declared",
64
68
  "memory.hold_opened",
@@ -86,7 +90,8 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
86
90
  "model.capability_downgraded",
87
91
  "model.role_defaulted",
88
92
  "context.tool_turn_repaired",
89
- "context.image_removed",
93
+ "context.media_removed",
94
+ "context.tool_schema_removed",
90
95
  "task.user_steer_undrained",
91
96
  "task.user_followup_undrained",
92
97
  "steering.parked_input_blocked",
@@ -104,8 +109,10 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
104
109
  "tool_result.offload_put_failed",
105
110
  "tool_result.media_refused",
106
111
  "config.image_processor_unavailable",
112
+ "fs.staging_file_left",
113
+ "fs.staging_file_swept",
114
+ "session.lineage_rerooted",
107
115
  "instructions.source_changed",
108
- "session.records_skipped",
109
116
  "memory.layer_locked_legacy",
110
117
  "server.model_unreachable",
111
118
  "permission.entry_mode_clamped",
@@ -130,6 +137,7 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
130
137
  "config.path_view_unresolved": "operator",
131
138
  "config.execution_env_capability_invalid": "operator",
132
139
  "config.read_deny_floor_unkept": "operator",
140
+ "config.read_floor_confinement_unavailable": "operator",
133
141
  "config.tool_card_undeclared": "operator",
134
142
  "config.tool_face_undeclared": "operator",
135
143
  "config.tool_face_invalid": "operator",
@@ -155,13 +163,14 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
155
163
  "peer.idle_subscription": "user",
156
164
  "classifier.denial_limit": "user",
157
165
  "classifier.fallback": "operator",
158
- "classifier.seat_rate_limited": "operator",
166
+ "classifier.seat_rate_limited": "user",
159
167
  "classifier.role_defaulted": "operator",
160
168
  "classifier.contract_broken": "operator",
161
169
  "classifier.unavailable": "user",
162
170
  "checkpoint.execution_outcome_unrecorded": "operator",
163
171
  "delegation.transcript_integrity": "operator",
164
172
  "delegation.ask_unresolvable": "user",
173
+ "delegation.resume_lane_missing": "operator",
165
174
  "mcp.injection_dropped": "user",
166
175
  "mcp.revocation_probe_failed": "operator",
167
176
  "mcp.server_redialed": "operator",
@@ -171,6 +180,8 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
171
180
  "workflow.agent_option_ignored": "operator",
172
181
  "memory.session_polluted": "user",
173
182
  "memory.harvest_quarantined": "user",
183
+ "memory.harvest_refused": "user",
184
+ "memory.harvest_conflict": "user",
174
185
  "memory.delegation_static_mark_waived": "user",
175
186
  "memory.content_class_declared": "operator",
176
187
  "memory.hold_opened": "user",
@@ -198,7 +209,8 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
198
209
  "model.capability_downgraded": "user",
199
210
  "model.role_defaulted": "operator",
200
211
  "context.tool_turn_repaired": "operator",
201
- "context.image_removed": "user",
212
+ "context.media_removed": "user",
213
+ "context.tool_schema_removed": "user",
202
214
  "task.user_steer_undrained": "user",
203
215
  "task.user_followup_undrained": "user",
204
216
  "steering.parked_input_blocked": "user",
@@ -216,8 +228,10 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
216
228
  "tool_result.offload_put_failed": "operator",
217
229
  "tool_result.media_refused": "operator",
218
230
  "config.image_processor_unavailable": "operator",
231
+ "fs.staging_file_left": "operator",
232
+ "fs.staging_file_swept": "operator",
233
+ "session.lineage_rerooted": "user",
219
234
  "instructions.source_changed": "user",
220
- "session.records_skipped": "user",
221
235
  "memory.layer_locked_legacy": "operator",
222
236
  "server.model_unreachable": "user",
223
237
  "permission.entry_mode_clamped": "user",
@@ -248,6 +262,7 @@ export const CORE_NOTICE_MINTER = Object.freeze({
248
262
  "config.path_view_unresolved": "engine",
249
263
  "config.execution_env_capability_invalid": "engine",
250
264
  "config.read_deny_floor_unkept": "engine",
265
+ "config.read_floor_confinement_unavailable": "engine",
251
266
  "config.tool_card_undeclared": "engine",
252
267
  "config.tool_face_undeclared": "engine",
253
268
  "config.tool_face_invalid": "engine",
@@ -280,6 +295,7 @@ export const CORE_NOTICE_MINTER = Object.freeze({
280
295
  "checkpoint.execution_outcome_unrecorded": "engine",
281
296
  "delegation.transcript_integrity": "engine",
282
297
  "delegation.ask_unresolvable": "engine",
298
+ "delegation.resume_lane_missing": "engine",
283
299
  "mcp.injection_dropped": "engine",
284
300
  "mcp.revocation_probe_failed": "engine",
285
301
  "mcp.server_redialed": "engine",
@@ -289,6 +305,8 @@ export const CORE_NOTICE_MINTER = Object.freeze({
289
305
  "workflow.agent_option_ignored": "engine",
290
306
  "memory.session_polluted": "engine",
291
307
  "memory.harvest_quarantined": "engine",
308
+ "memory.harvest_refused": "engine",
309
+ "memory.harvest_conflict": "engine",
292
310
  "memory.delegation_static_mark_waived": "engine",
293
311
  "memory.content_class_declared": "engine",
294
312
  "memory.hold_opened": "engine",
@@ -316,7 +334,8 @@ export const CORE_NOTICE_MINTER = Object.freeze({
316
334
  "model.capability_downgraded": "engine",
317
335
  "model.role_defaulted": "engine",
318
336
  "context.tool_turn_repaired": "engine",
319
- "context.image_removed": "engine",
337
+ "context.media_removed": "engine",
338
+ "context.tool_schema_removed": "engine",
320
339
  "task.user_steer_undrained": "engine",
321
340
  "task.user_followup_undrained": "engine",
322
341
  "steering.parked_input_blocked": "engine",
@@ -334,8 +353,10 @@ export const CORE_NOTICE_MINTER = Object.freeze({
334
353
  "tool_result.offload_put_failed": "engine",
335
354
  "tool_result.media_refused": "engine",
336
355
  "config.image_processor_unavailable": "engine",
356
+ "fs.staging_file_left": "engine",
357
+ "fs.staging_file_swept": "engine",
358
+ "session.lineage_rerooted": "engine",
337
359
  "instructions.source_changed": "server",
338
- "session.records_skipped": "server",
339
360
  "memory.layer_locked_legacy": "server",
340
361
  "server.model_unreachable": "server",
341
362
  "permission.entry_mode_clamped": "server",
@@ -7,3 +7,6 @@ export declare const SDK_APPROVAL_DECIDE_GATE_KINDS: readonly ["human", "irrever
7
7
  export declare const SDK_PLAN_REVIEW_GATE_KINDS: readonly ["plan_review"];
8
8
  export declare const SDK_PERMISSION_MODE_ADMISSION_FOLDS: readonly ["entry_floor", "disable_auto_mode"];
9
9
  export declare const SDK_PERMISSION_MODE_PERSIST_MISSES: readonly ["claim_released", "context_absent", "store_failed"];
10
+ export declare const SDK_DECIDE_BINDING_KEYS: readonly ["boundCallId", "boundInputHash"];
11
+ export declare const SDK_APPROVAL_QUEUE_KINDS: readonly ["checkpoint", "peer_inbound"];
12
+ export declare const SDK_SESSION_MEMORY_UNOBSERVED_REASONS: readonly ["no_settled_run", "run_result_missing", "run_result_unobserved", "memory_not_mounted", "no_leaf"];
@@ -48,3 +48,18 @@ export const SDK_PERMISSION_MODE_PERSIST_MISSES = Object.freeze([
48
48
  "context_absent",
49
49
  "store_failed",
50
50
  ]);
51
+ export const SDK_DECIDE_BINDING_KEYS = Object.freeze([
52
+ "boundCallId",
53
+ "boundInputHash",
54
+ ]);
55
+ export const SDK_APPROVAL_QUEUE_KINDS = Object.freeze([
56
+ "checkpoint",
57
+ "peer_inbound",
58
+ ]);
59
+ export const SDK_SESSION_MEMORY_UNOBSERVED_REASONS = Object.freeze([
60
+ "no_settled_run",
61
+ "run_result_missing",
62
+ "run_result_unobserved",
63
+ "memory_not_mounted",
64
+ "no_leaf",
65
+ ]);
@@ -51,6 +51,17 @@ export declare const SETTINGS_IS_AT_LEAST: (layer: string, minTrust: string) =>
51
51
  export declare const SETTINGS_MEMBER_ADMISSION: (category: string, member: string) => object;
52
52
  export declare const SETTINGS_SAFETY_MERGE_SPEC: object;
53
53
  export declare const SETTINGS_LAYER_ADMISSION: (source: string, workspace: string, category: string, member?: string) => string;
54
+ export declare const SETTINGS_BUILD_LAYER_PARTS_UNREAD_NOTICE: (input: {
55
+ readonly source: string;
56
+ readonly workspace: string;
57
+ readonly file: string;
58
+ readonly parts: readonly string[];
59
+ }) => {
60
+ readonly code: string;
61
+ readonly source: string;
62
+ readonly parts: readonly string[];
63
+ readonly line: string;
64
+ } | undefined;
54
65
  export declare const SETTINGS_RESOLVE_ACTIVE_TIERS: (models: {
55
66
  readonly tierGroups?: readonly {
56
67
  readonly name: string;
@@ -182,8 +182,9 @@ const SETTINGS_SAFETY_MERGE = SETTINGS_SAFETY_MERGE_CLOSURE(SETTINGS_MIN_TRUST_W
182
182
  export const SETTINGS_IS_AT_LEAST = SETTINGS_SAFETY_MERGE.isAtLeast;
183
183
  export const SETTINGS_MEMBER_ADMISSION = SETTINGS_SAFETY_MERGE.memberAdmission;
184
184
  export const SETTINGS_SAFETY_MERGE_SPEC = SETTINGS_SAFETY_MERGE.SAFETY_MERGE_SPEC;
185
- const SETTINGS_LAYER_SOURCES = SETTINGS_LAYER_SOURCES_CLOSURE(SETTINGS_SAFETY_MERGE_SPEC, SETTINGS_IS_AT_LEAST, SETTINGS_MEMBER_ADMISSION);
185
+ const SETTINGS_LAYER_SOURCES = SETTINGS_LAYER_SOURCES_CLOSURE(SETTINGS_SAFETY_MERGE_SPEC, SETTINGS_IS_AT_LEAST, SETTINGS_MEMBER_ADMISSION, SETTINGS_ECHO_CALLER_TEXT, SETTINGS_STRIP_CONTROL_AND_BIDI);
186
186
  export const SETTINGS_LAYER_ADMISSION = SETTINGS_LAYER_SOURCES.layerAdmission;
187
+ export const SETTINGS_BUILD_LAYER_PARTS_UNREAD_NOTICE = SETTINGS_LAYER_SOURCES.buildLayerPartsUnreadNotice;
187
188
  const SETTINGS_ACTIVE_TIERS = SETTINGS_ACTIVE_TIERS_CLOSURE();
188
189
  export const SETTINGS_RESOLVE_ACTIVE_TIERS = SETTINGS_ACTIVE_TIERS.resolveActiveTiers;
189
190
  const SETTINGS_TIER_WORDS = SETTINGS_TIER_WORDS_CLOSURE();