@sema-agent/client-core 0.112.1 → 0.113.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 (178) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +36 -23
  3. package/dist/adapt/arms.js +7 -1
  4. package/dist/adapt/textStream.d.ts +2 -0
  5. package/dist/adapt/textStream.js +27 -1
  6. package/dist/adapter/activeRunSelfHeal.d.ts +7 -5
  7. package/dist/adapter/activeRunSelfHeal.js +38 -66
  8. package/dist/adapter/downstream/eventToSdkMessage.js +4 -0
  9. package/dist/adapter/downstream/terminalToSdkResult.d.ts +8 -0
  10. package/dist/adapter/downstream/terminalToSdkResult.js +36 -1
  11. package/dist/adapter/runStream.d.ts +2 -12
  12. package/dist/adapter/runStream.js +46 -19
  13. package/dist/agentSession/engineAgentRegistryRead.js +2 -1
  14. package/dist/agentSession/engineSessionBackgroundStop.js +2 -2
  15. package/dist/attachmentOutcome.d.ts +35 -0
  16. package/dist/attachmentOutcome.js +192 -0
  17. package/dist/attachmentPathPlan.d.ts +67 -0
  18. package/dist/attachmentPathPlan.js +203 -0
  19. package/dist/attachmentRoute.d.ts +9 -1
  20. package/dist/attachmentRoute.js +23 -2
  21. package/dist/declared/supportFloorDeclared.d.ts +1 -1
  22. package/dist/declared/supportFloorDeclared.js +1 -0
  23. package/dist/deviceRebind.js +2 -3
  24. package/dist/displayUntrusted.js +126 -19
  25. package/dist/engineAddress.d.ts +1 -1
  26. package/dist/engineAddress.js +9 -6
  27. package/dist/engineErrorCodes.d.ts +3 -0
  28. package/dist/engineErrorCodes.js +4 -0
  29. package/dist/engineNoticeCodes.d.ts +34 -4
  30. package/dist/engineNoticeCodes.js +133 -6
  31. package/dist/engineUnavailable.d.ts +4 -2
  32. package/dist/engineUnavailable.js +99 -17
  33. package/dist/fleet/fleetLedger.d.ts +9 -3
  34. package/dist/fleet/fleetLedger.js +112 -16
  35. package/dist/fleet/fleetProjection.d.ts +5 -0
  36. package/dist/fleet/fleetProjection.js +9 -1
  37. package/dist/gateVocabulary.d.ts +7 -0
  38. package/dist/gateVocabulary.js +40 -14
  39. package/dist/generated/engineFactTables.d.ts +4 -2
  40. package/dist/generated/engineFactTables.js +198 -2
  41. package/dist/generated/engineNoticeTables.js +56 -8
  42. package/dist/generated/settingsSchemaFns.d.ts +7 -0
  43. package/dist/generated/settingsSchemaFns.js +11 -0
  44. package/dist/generated/settingsSchemaHash.d.ts +1 -0
  45. package/dist/generated/settingsSchemaHash.js +58 -0
  46. package/dist/generated/settingsSchemaOwnKeyRead.js +6 -1
  47. package/dist/generated/settingsSchemaTables.d.ts +3 -2
  48. package/dist/generated/settingsSchemaTables.js +14 -0
  49. package/dist/generated/settingsSchemaTightenVerdict.d.ts +1 -0
  50. package/dist/generated/settingsSchemaTightenVerdict.js +125 -0
  51. package/dist/headlessPermissionModeWire.d.ts +7 -2
  52. package/dist/headlessPermissionModeWire.js +77 -8
  53. package/dist/hitl/approvalDecisionDoor.d.ts +24 -0
  54. package/dist/hitl/approvalDecisionDoor.js +77 -0
  55. package/dist/hitl/approvalDelivery.d.ts +6 -0
  56. package/dist/hitl/approvalDelivery.js +57 -7
  57. package/dist/hitl/approvalResolution.d.ts +6 -3
  58. package/dist/hitl/approvalResolution.js +24 -2
  59. package/dist/hitl/approvalsFeed.js +1 -1
  60. package/dist/hitl/automaticAnswerVerdict.d.ts +1 -1
  61. package/dist/hitl/decisionSend.d.ts +7 -4
  62. package/dist/hitl/decisionSend.js +90 -41
  63. package/dist/hitl/frameRouter.d.ts +3 -3
  64. package/dist/hitl/frameRouter.js +5 -0
  65. package/dist/hitl/hitlHostSurface.d.ts +3 -2
  66. package/dist/hitl/hitlHostSurface.js +5 -3
  67. package/dist/hitl/legacyApprovalShapes.d.ts +142 -0
  68. package/dist/hitl/legacyApprovalShapes.js +1 -0
  69. package/dist/hitl/livePendingAsk.d.ts +4 -4
  70. package/dist/hitl/livePendingAsk.js +5 -3
  71. package/dist/hitl/parkResolver.js +1 -1
  72. package/dist/hitl/persistedRulesWire.js +2 -2
  73. package/dist/hitl/planReviewCard.d.ts +2 -1
  74. package/dist/hitl/planReviewCard.js +64 -1
  75. package/dist/hitl/planReviewWire.d.ts +30 -0
  76. package/dist/hitl/planReviewWire.js +204 -65
  77. package/dist/hitl/sessionPolicyWire.js +16 -7
  78. package/dist/hitl/subagentSource.d.ts +1 -0
  79. package/dist/hitl/subagentSource.js +11 -0
  80. package/dist/hitl/toolApprovalWire.d.ts +34 -10
  81. package/dist/hitl/toolApprovalWire.js +182 -33
  82. package/dist/hookMatcherVerdict.d.ts +2 -1
  83. package/dist/hookMatcherVerdict.js +3 -2
  84. package/dist/hooksReaderGenerations.d.ts +8 -0
  85. package/dist/hooksReaderGenerations.js +49 -0
  86. package/dist/hooksWireCaps.js +43 -18
  87. package/dist/hostSettingsSource.d.ts +1 -1
  88. package/dist/hostSettingsSource.js +2 -2
  89. package/dist/hostTurnSettings.d.ts +2 -2
  90. package/dist/hostTurnSettings.js +87 -47
  91. package/dist/humanTurn.d.ts +2 -1
  92. package/dist/humanTurn.js +44 -13
  93. package/dist/humanTurnRead.d.ts +7 -0
  94. package/dist/humanTurnRead.js +23 -14
  95. package/dist/humanTurnSentences.js +3 -0
  96. package/dist/i18n/messages.en.d.ts +91 -5
  97. package/dist/i18n/messages.en.js +98 -12
  98. package/dist/i18n/messages.zh.js +108 -15
  99. package/dist/index.d.ts +29 -15
  100. package/dist/index.js +17 -9
  101. package/dist/liveModelCatalog.js +1 -0
  102. package/dist/liveQuestionStore.d.ts +2 -0
  103. package/dist/liveQuestionStore.js +7 -2
  104. package/dist/localConfig/kernel.d.ts +2 -1
  105. package/dist/localConfig/kernel.js +12 -18
  106. package/dist/localConfig/mcp/edit.js +25 -27
  107. package/dist/localConfig/mcp/servers.js +5 -8
  108. package/dist/localConfig/modelPool.d.ts +6 -1
  109. package/dist/localConfig/modelPool.js +104 -27
  110. package/dist/localConfig/modelPoolWords.d.ts +2 -0
  111. package/dist/localConfig/modelPoolWords.js +1 -0
  112. package/dist/localConfig/settingsWrite.js +1 -14
  113. package/dist/localConfig/skills.js +9 -16
  114. package/dist/localEngineSpawn.d.ts +29 -1
  115. package/dist/localEngineSpawn.js +62 -1
  116. package/dist/mcpLiveness.d.ts +1 -1
  117. package/dist/mcpProbeWire.js +2 -2
  118. package/dist/mcpReconnect.js +2 -2
  119. package/dist/model/catalogLoader.js +3 -17
  120. package/dist/model/onboardJudgement.d.ts +8 -0
  121. package/dist/model/onboardJudgement.js +8 -3
  122. package/dist/model/onboardSteps.d.ts +19 -0
  123. package/dist/model/onboardSteps.js +76 -0
  124. package/dist/notifications.js +6 -0
  125. package/dist/ownKey.d.ts +4 -0
  126. package/dist/ownKey.js +61 -0
  127. package/dist/pathShape.d.ts +14 -0
  128. package/dist/pathShape.js +44 -0
  129. package/dist/planReviewCardFacts.d.ts +3 -0
  130. package/dist/planReviewCardFacts.js +20 -3
  131. package/dist/pluginHooksWire.d.ts +20 -8
  132. package/dist/pluginHooksWire.js +204 -86
  133. package/dist/prepareRefusal.d.ts +2 -0
  134. package/dist/prepareRefusal.js +11 -1
  135. package/dist/request/taskRequest.js +3 -1
  136. package/dist/resultFrameKeys.d.ts +1 -0
  137. package/dist/resultFrameKeys.js +3 -0
  138. package/dist/resumeRefusalCopy.js +3 -1
  139. package/dist/retryStatus.d.ts +11 -1
  140. package/dist/retryStatus.js +15 -4
  141. package/dist/runTerminal.d.ts +1 -0
  142. package/dist/runTerminal.js +15 -1
  143. package/dist/sdkWireTransit.d.ts +1 -1
  144. package/dist/seatContract.d.ts +12 -3
  145. package/dist/seatContract.js +24 -13
  146. package/dist/sessionEngine.js +1 -1
  147. package/dist/sessionHooksRoster.js +8 -6
  148. package/dist/sessionIdSegment.d.ts +0 -1
  149. package/dist/sessionIdSegment.js +1 -3
  150. package/dist/sessionMemoryErase.js +2 -2
  151. package/dist/sessionMemoryStatus.js +2 -1
  152. package/dist/sessionOccupant.d.ts +29 -0
  153. package/dist/sessionOccupant.js +78 -0
  154. package/dist/settingsHooksSalvage.d.ts +4 -1
  155. package/dist/settingsHooksSalvage.js +22 -9
  156. package/dist/skillOverrideChain.d.ts +3 -0
  157. package/dist/skillOverrideChain.js +31 -4
  158. package/dist/skillsWireCaps.d.ts +16 -2
  159. package/dist/skillsWireCaps.js +47 -20
  160. package/dist/subagent/agentStateDetail.js +32 -8
  161. package/dist/subagent/engineCompactWire.js +48 -36
  162. package/dist/subagent/engineDelegatedPrompt.d.ts +3 -2
  163. package/dist/subagent/engineDelegatedPrompt.js +65 -28
  164. package/dist/subagentEditOutcomes.d.ts +9 -0
  165. package/dist/subagentEditOutcomes.js +43 -0
  166. package/dist/supportFloor.d.ts +2 -1
  167. package/dist/supportFloor.js +1 -1
  168. package/dist/toolResult.js +4 -2
  169. package/dist/toolRoster.d.ts +1 -0
  170. package/dist/toolRoster.js +1 -0
  171. package/dist/usageAnalytics.js +2 -1
  172. package/dist/userAttachmentEnvelope.d.ts +11 -0
  173. package/dist/userAttachmentEnvelope.js +7 -2
  174. package/dist/userAttachmentSeat.d.ts +7 -1
  175. package/dist/userAttachmentSeat.js +44 -7
  176. package/dist/wiringInstructionsAttribution.js +8 -2
  177. package/docs/INTEGRATION-CLIENTS.md +1588 -16
  178. package/package.json +5 -5
@@ -5198,7 +5198,27 @@ function pairModeOf(o, face) {
5198
5198
  return 'off';
5199
5199
  return o.escapeBackslashes === true ? 'on' : o.escapeBackslashes === 'auto' ? 'auto' : 'off';
5200
5200
  }
5201
- function renderUntrusted(text, opts, ledger, queryByShape = false, wholeAddress = false) {
5201
+ function scanWithLead(text, o, trace, lead) {
5202
+ if (lead === '')
5203
+ return scanAndMask(text, o, trace);
5204
+ const r = scanAndMask(`${lead}${text}`, o, trace);
5205
+ if (!r.text.startsWith(lead))
5206
+ return trace ? { text: REDACTED_SECRET, origin: new Int32Array(REDACTED_SECRET.length).fill(-1) } : { text: REDACTED_SECRET };
5207
+ const mid = r.text.slice(lead.length);
5208
+ const second = scanAndMask(mid, o, trace);
5209
+ if (!trace)
5210
+ return { text: second.text };
5211
+ if (second.text === text && mid === text)
5212
+ return { text };
5213
+ const origin = new Int32Array(second.text.length);
5214
+ for (let k = 0; k < second.text.length; k++) {
5215
+ const m = second.origin === undefined ? k : (second.origin[k] ?? -1);
5216
+ const s = m < 0 ? -1 : r.origin === undefined ? lead.length + m : (r.origin[lead.length + m] ?? -1);
5217
+ origin[k] = s >= lead.length ? s - lead.length : -1;
5218
+ }
5219
+ return { text: second.text, origin };
5220
+ }
5221
+ function renderUntrusted(text, opts, ledger, queryByShape = false, wholeAddress = false, lead = '') {
5202
5222
  const input = displayInputText(text);
5203
5223
  const o = opts ?? {};
5204
5224
  const face = publicFace(o);
@@ -5207,7 +5227,7 @@ function renderUntrusted(text, opts, ledger, queryByShape = false, wholeAddress
5207
5227
  const book = ledger ?? (mode !== 'off' ? { cps: [], lens: [] } : null);
5208
5228
  if (book === null) {
5209
5229
  return runDisplaySteps(input, {
5210
- wash: (s) => scanAndMask(s, scan, false).text,
5230
+ wash: (s) => scanWithLead(s, scan, false, lead).text,
5211
5231
  paint: (s) => applyDisplayFace(s, face),
5212
5232
  cap: (s) => capDisplay(s, o.max, face.mark),
5213
5233
  text: (s) => s,
@@ -5216,7 +5236,7 @@ function renderUntrusted(text, opts, ledger, queryByShape = false, wholeAddress
5216
5236
  let paired = mode === 'on';
5217
5237
  const out = runDisplaySteps({ text: input, ids: new Int32Array(input.length).fill(-1) }, {
5218
5238
  wash: (t) => {
5219
- const r = scanAndMask(t.text, scan, true);
5239
+ const r = scanWithLead(t.text, scan, true, lead);
5220
5240
  return r.text === t.text ? t : { text: r.text, ids: carryIds(t.ids, r.origin) };
5221
5241
  },
5222
5242
  paint: (t) => faceTracked(t, face, book),
@@ -5485,8 +5505,10 @@ export function queryCarriesCredential(query) {
5485
5505
  return scanAndMask(probe, UPLOAD_SCAN_OPTIONS, false).text !== probe;
5486
5506
  }
5487
5507
  export function displayConfiguredUrl(url, opts = {}) {
5488
- const reading = typeof url === 'string' ? configuredAddressReading(url) : null;
5489
- const out = renderUntrusted(reading === null ? url : reading.withheld ? REDACTED_SECRET : reading.text, opts, null, 'relaxed', true);
5508
+ const reading = typeof url === 'string' ? configuredAddressReading(url, true) : null;
5509
+ const out = reading === null || reading.withheld
5510
+ ? renderUntrusted(reading === null ? url : REDACTED_SECRET, opts, null, 'relaxed', true)
5511
+ : renderUntrusted(reading.text, opts, null, reading.everyQueryValue ? false : 'relaxed', true, reading.lead);
5490
5512
  return typeof out === 'string' ? out : out.tracked.text;
5491
5513
  }
5492
5514
  function parserViewOf(url) {
@@ -5795,6 +5817,8 @@ function coversHidden(from, to, image) {
5795
5817
  return true;
5796
5818
  }
5797
5819
  const CONFIGURED_ADDRESS_WITHHELD = Object.freeze({ withheld: true });
5820
+ const readAsIs = (text) => ({ withheld: false, text, lead: '', everyQueryValue: false, masked: false });
5821
+ const BORROWED_SCHEME = 'https://';
5798
5822
  function rebuiltKeepsRuns(url, rebuilt, hidden) {
5799
5823
  const [fwdA, fwdB] = rebuilt.toRebuilt;
5800
5824
  for (let i = 0; i < url.length;) {
@@ -5819,7 +5843,7 @@ function rebuiltKeepsRuns(url, rebuilt, hidden) {
5819
5843
  function readingOf(url, rebuilt, n1) {
5820
5844
  if (!n1) {
5821
5845
  const hidden = hiddenUnits(url, 'strict');
5822
- return hidden !== null && rebuiltKeepsRuns(url, rebuilt, hidden) ? { withheld: false, text: rebuilt.text } : CONFIGURED_ADDRESS_WITHHELD;
5846
+ return hidden !== null && rebuiltKeepsRuns(url, rebuilt, hidden) ? readAsIs(rebuilt.text) : CONFIGURED_ADDRESS_WITHHELD;
5823
5847
  }
5824
5848
  let original = true;
5825
5849
  let viaRebuilt = true;
@@ -5831,40 +5855,123 @@ function readingOf(url, rebuilt, n1) {
5831
5855
  original &&= coversHidden(hiddenRebuilt, hiddenOriginal, rebuilt.toOriginal);
5832
5856
  viaRebuilt &&= coversHidden(hiddenOriginal, hiddenRebuilt, rebuilt.toRebuilt);
5833
5857
  }
5834
- return original ? { withheld: false, text: url } : viaRebuilt ? { withheld: false, text: rebuilt.text } : CONFIGURED_ADDRESS_WITHHELD;
5858
+ return original ? readAsIs(url) : viaRebuilt ? readAsIs(rebuilt.text) : CONFIGURED_ADDRESS_WITHHELD;
5835
5859
  }
5836
- function configuredAddressReading(url) {
5860
+ function configuredAddressReading(url, address) {
5837
5861
  const view = parserViewOf(url);
5838
- if (userinfoBoundaryAmbiguous(view))
5862
+ if (userinfoBoundaryAmbiguous(view) || slashUserinfoBoundaryAmbiguous(view))
5839
5863
  return CONFIGURED_ADDRESS_WITHHELD;
5864
+ const extra = extraSlashUserinfoSpan(view);
5865
+ if (extra !== null)
5866
+ return maskedUserinfoReading(view, extra[0], extra[1], address);
5840
5867
  if (!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(view))
5841
- return { withheld: false, text: url };
5868
+ return schemelessAddressReading(url, view, address);
5842
5869
  if (/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(view)) {
5843
5870
  const n1 = authorityHasBackslash(view) ? rebuiltAddress(url) : null;
5844
- return n1 === null ? { withheld: false, text: url } : readingOf(url, restoreAtoms(url, n1), true);
5871
+ return n1 === null ? readAsIs(url) : readingOf(url, restoreAtoms(url, n1), true);
5845
5872
  }
5846
5873
  const rebuilt = rebuiltAddress(url);
5847
5874
  if (rebuilt !== null)
5848
5875
  return readingOf(url, rebuilt, false);
5849
- if (/^(?:https?|wss?|ftp):/i.test(view) && /[@?#]/.test(view) && !schemelessUserinfoLeads(view))
5850
- return CONFIGURED_ADDRESS_WITHHELD;
5851
- return { withheld: false, text: url };
5876
+ if (/^(?:https?|wss?|ftp):/i.test(view) && /[@?#]/.test(view)) {
5877
+ const at = schemelessUserinfoEnd(view, false);
5878
+ return at > 0 ? maskedUserinfoReading(view, 0, at, address) : CONFIGURED_ADDRESS_WITHHELD;
5879
+ }
5880
+ return schemelessAddressReading(url, view, address);
5881
+ }
5882
+ function authorityStartOf(view) {
5883
+ const special = /^(?:https?|wss?|ftp):\/\/\/*/i.exec(view);
5884
+ if (special !== null)
5885
+ return special[0].length;
5886
+ if (/^(?:https?|wss?|ftp):/i.test(view))
5887
+ return -1;
5888
+ return /^(?:[A-Za-z][A-Za-z0-9+.-]*:)*?[A-Za-z][A-Za-z0-9+.-]*:\/\//.exec(view)?.[0].length ?? 0;
5889
+ }
5890
+ function authorityEndOf(view, from) {
5891
+ let end = from;
5892
+ while (end < view.length && !'/\\?#'.includes(view.charAt(end)))
5893
+ end++;
5894
+ return end;
5852
5895
  }
5853
- function schemelessUserinfoLeads(view) {
5896
+ function slashUserinfoBoundaryAmbiguous(view) {
5897
+ const from = authorityStartOf(view);
5898
+ if (from < 0)
5899
+ return false;
5900
+ const end = authorityEndOf(view, from);
5901
+ const authority = view.slice(from, end);
5902
+ const extra = /^(?:https?|wss?|ftp):\/\/\//i.test(view);
5903
+ if (authority.includes('@') || authority.startsWith('[') || (view.charAt(end) !== '/' && !(extra && view.charAt(end) === '\\')))
5904
+ return false;
5905
+ const colon = authority.indexOf(':');
5906
+ if (colon === -1 || /^[0-9]*$/.test(authority.slice(colon + 1)))
5907
+ return false;
5908
+ let stop = end;
5909
+ while (stop < view.length && view.charAt(stop) !== '?' && view.charAt(stop) !== '#')
5910
+ stop++;
5911
+ return view.slice(end, stop).includes('@');
5912
+ }
5913
+ function extraSlashUserinfoSpan(view) {
5914
+ if (!/^(?:https?|wss?|ftp):\/\/\//i.test(view))
5915
+ return null;
5916
+ const from = authorityStartOf(view);
5917
+ const authority = view.slice(from, authorityEndOf(view, from));
5918
+ const at = authority.lastIndexOf('@');
5919
+ return at > 0 && authority.slice(0, at) !== REDACTED_USERINFO ? [from, from + at] : null;
5920
+ }
5921
+ function maskedUserinfoReading(view, from, at, address) {
5922
+ const inner = configuredAddressReading(`${view.slice(0, from)}${REDACTED_USERINFO}${view.slice(at)}`, address);
5923
+ if (inner.withheld)
5924
+ return inner;
5925
+ return { ...inner, masked: inner.masked || view.slice(from, at) !== REDACTED_USERINFO };
5926
+ }
5927
+ const SCHEMELESS_EMPTY_PASSWORD = /^[A-Za-z0-9._~%+-]*:@/;
5928
+ const SCHEMELESS_EMPTY_HOST = /^[A-Za-z0-9._~%+-]*:[^\s/]*?@(?=[/\\?#]|$)/;
5929
+ const ADDRESS_USERNAME = /^(?:[A-Za-z0-9._~%+-]+@)+/;
5930
+ const SCHEMELESS_HOST_LEAD = /^(?:\[[0-9A-Fa-f:.]+\]|[A-Za-z0-9-]+(?:[.][A-Za-z0-9-]+)*[.]?)(?::[0-9]+)?(?=[/?#;]|$)/;
5931
+ function schemelessUserinfoEnd(view, bareForms = true) {
5932
+ if (!view.includes('@'))
5933
+ return -1;
5854
5934
  const V = buildScanView(view, WASH_OPTIONS);
5855
5935
  const S = separatedSurface(view, V);
5856
5936
  const out = [];
5857
5937
  userinfoCandidates(S, out, true);
5858
- return out.some((c) => c.kind === 'userinfo' && S.rawStart(c.a) === 0);
5938
+ let end = -1;
5939
+ for (const c of out) {
5940
+ if (c.kind !== 'userinfo' || S.rawStart(c.a) !== 0)
5941
+ continue;
5942
+ const at = S.rawStart(c.b);
5943
+ if (view.charAt(at) === '@')
5944
+ end = Math.max(end, at);
5945
+ }
5946
+ if (end !== -1 || !bareForms)
5947
+ return end;
5948
+ const a = SCHEMELESS_EMPTY_PASSWORD.exec(view);
5949
+ const b = SCHEMELESS_EMPTY_HOST.exec(view);
5950
+ return Math.max(a === null ? -1 : a[0].length - 1, b === null ? -1 : b[0].length - 1);
5951
+ }
5952
+ function schemelessAddressReading(url, view, address) {
5953
+ if (view.startsWith(`${REDACTED_USERINFO}@`))
5954
+ return { withheld: false, text: view, lead: BORROWED_SCHEME, everyQueryValue: true, masked: false };
5955
+ const at = schemelessUserinfoEnd(view);
5956
+ if (at > 0)
5957
+ return maskedUserinfoReading(view, 0, at, address);
5958
+ const named = address ? ADDRESS_USERNAME.exec(view) : null;
5959
+ if (named !== null)
5960
+ return maskedUserinfoReading(view, 0, named[0].length - 1, address);
5961
+ const host = SCHEMELESS_HOST_LEAD.exec(view);
5962
+ if (host !== null && /[.\]]|^localhost(?::|$)/i.test(host[0]) && /[?#;]/.test(view.slice(host[0].length)) && !isRelativeRequestAt(view, 0)) {
5963
+ return { withheld: false, text: view, lead: BORROWED_SCHEME, everyQueryValue: false, masked: false };
5964
+ }
5965
+ return readAsIs(url);
5859
5966
  }
5860
5967
  export function configuredValueCarriesCredential(value) {
5861
5968
  if (typeof value !== 'string' || value.length === 0)
5862
5969
  return false;
5863
- const reading = configuredAddressReading(value);
5864
- if (reading.withheld)
5970
+ const reading = configuredAddressReading(value, false);
5971
+ if (reading.withheld || reading.masked)
5865
5972
  return true;
5866
5973
  const text = reading.text;
5867
- const r = scanAndMask(text, scanOptionsOf({}, publicFace({}), 'strict', true), true);
5974
+ const r = scanWithLead(text, scanOptionsOf({}, publicFace({}), reading.everyQueryValue ? false : 'strict', true), true, reading.lead);
5868
5975
  const origin = r.origin;
5869
5976
  if (r.text === text || origin === undefined)
5870
5977
  return false;
@@ -1,4 +1,4 @@
1
1
  export declare function hasUnsafeAddressCharacter(s: string): boolean;
2
2
  export declare function tupleOriginUrlOf(raw: string): URL | undefined;
3
- export declare function carriesNoCredentialSlots(u: URL): boolean;
3
+ export declare function carriesNoCredentialSlots(raw: string): boolean;
4
4
  export declare function isCenterRelativePath(path: string): boolean;
@@ -1,3 +1,5 @@
1
+ import { SETTINGS_HTTP_URL_FLAWS, SETTINGS_IS_HIERARCHICAL_URL } from './generated/settingsSchemaFns.js';
2
+ import { pathShapeOf } from './pathShape.js';
1
3
  export function hasUnsafeAddressCharacter(s) {
2
4
  return /[\s\u0000-\u001f\u007f-\u009f\\]/u.test(s);
3
5
  }
@@ -10,8 +12,11 @@ export function tupleOriginUrlOf(raw) {
10
12
  return undefined;
11
13
  }
12
14
  }
13
- export function carriesNoCredentialSlots(u) {
14
- return u.username === '' && u.password === '' && u.search === '' && u.hash === '';
15
+ const CREDENTIAL_SLOTS = Object.freeze(['userinfo', 'query', 'fragment']);
16
+ export function carriesNoCredentialSlots(raw) {
17
+ if (!SETTINGS_IS_HIERARCHICAL_URL(raw))
18
+ return false;
19
+ return SETTINGS_HTTP_URL_FLAWS(raw, CREDENTIAL_SLOTS).every((flaw) => flaw === 'not-http-url');
15
20
  }
16
21
  export function isCenterRelativePath(path) {
17
22
  if (path.length === 0 || path.charCodeAt(0) !== 0x2f)
@@ -21,8 +26,6 @@ export function isCenterRelativePath(path) {
21
26
  return false;
22
27
  if (hasUnsafeAddressCharacter(path) || path.includes('?') || path.includes('#'))
23
28
  return false;
24
- return path.split('/').every((segment) => {
25
- const decoded = segment.replace(/%2e/gi, '.');
26
- return decoded !== '.' && decoded !== '..';
27
- });
29
+ const shape = pathShapeOf(path.replace(/%2e/gi, '.'));
30
+ return shape !== undefined && !shape.hasDotSegment;
28
31
  }
@@ -108,6 +108,8 @@ export declare const RESUME_COMPOSITION_MISMATCH = "resume.composition_mismatch"
108
108
  export declare const RESUME_PARENT_CONSTRAINT_MISSING = "resume.parent_constraint_missing";
109
109
  export declare const RESUME_PARENT_CONSTRAINT_MISMATCH = "resume.parent_constraint_mismatch";
110
110
  export declare const RESUME_CONSTRAINT_UNPROJECTABLE = "resume.constraint_unprojectable";
111
+ export declare const RESUME_ISOLATION_SCOPE_MISMATCH = "resume.isolation_scope_mismatch";
112
+ export declare const RESUME_AGENT_DEFINITION_MISMATCH = "resume.agent_definition_mismatch";
111
113
  export declare const RESUME_CONTEXT_UNAVAILABLE = "conflict.resume_context_unavailable";
112
114
  export declare const RESUME_RETRY_LATER_CODES: readonly string[];
113
115
  export declare const RESUME_ENV_FAILED = "resume.env_failed";
@@ -143,6 +145,7 @@ export declare function isDecideAlreadyResolvedCode(code: string | null | undefi
143
145
  export declare const ASK_GONE = "gone.ask";
144
146
  export declare const ASK_GONE_PARKED = "gone.ask_parked";
145
147
  export declare const ASK_NOT_FOUND = "not_found.ask";
148
+ export declare const ROUTE_NOT_FOUND = "not_found.route";
146
149
  export declare const ASK_IDEMPOTENCY_CONFLICT = "conflict.ask_idempotency";
147
150
  export declare const ASK_PARKING_RETRY = "parking.ask_retry";
148
151
  export declare const ASK_DECISION_LANE_DISABLED = "feature.approval_ask_disabled";
@@ -186,6 +186,8 @@ export const RESUME_COMPOSITION_MISMATCH = 'resume.composition_mismatch';
186
186
  export const RESUME_PARENT_CONSTRAINT_MISSING = 'resume.parent_constraint_missing';
187
187
  export const RESUME_PARENT_CONSTRAINT_MISMATCH = 'resume.parent_constraint_mismatch';
188
188
  export const RESUME_CONSTRAINT_UNPROJECTABLE = 'resume.constraint_unprojectable';
189
+ export const RESUME_ISOLATION_SCOPE_MISMATCH = 'resume.isolation_scope_mismatch';
190
+ export const RESUME_AGENT_DEFINITION_MISMATCH = 'resume.agent_definition_mismatch';
189
191
  export const RESUME_CONTEXT_UNAVAILABLE = 'conflict.resume_context_unavailable';
190
192
  export const RESUME_RETRY_LATER_CODES = Object.freeze([
191
193
  RESUME_USAGE_WINDOW_EXHAUSTED,
@@ -250,6 +252,7 @@ export function isDecideAlreadyResolvedCode(code) {
250
252
  export const ASK_GONE = 'gone.ask';
251
253
  export const ASK_GONE_PARKED = 'gone.ask_parked';
252
254
  export const ASK_NOT_FOUND = 'not_found.ask';
255
+ export const ROUTE_NOT_FOUND = 'not_found.route';
253
256
  export const ASK_IDEMPOTENCY_CONFLICT = 'conflict.ask_idempotency';
254
257
  export const ASK_PARKING_RETRY = 'parking.ask_retry';
255
258
  export const ASK_DECISION_LANE_DISABLED = 'feature.approval_ask_disabled';
@@ -336,3 +339,4 @@ export function engineStopReasonToCc(stopReason) {
336
339
  const row = ENGINE_STOP_REASON_TO_CC[stopReason];
337
340
  return typeof row === 'string' || row === null ? row : undefined;
338
341
  }
342
+ void true;
@@ -231,8 +231,10 @@ export interface UndrainedInputsVerdict {
231
231
  export declare function undrainedInputsVerdict(facts: Pick<UserInputUndrainedFactsView, 'count' | 'cause' | 'inputIds' | 'childSessionId'> | null | undefined, ledger: UndrainedInputsLedger | null | undefined): UndrainedInputsVerdict | undefined;
232
232
  export declare function userInputUndrainedNotice(facts: Pick<UserInputUndrainedFactsView, 'kind' | 'count' | 'cause' | 'childSessionId' | 'inputKind'>, lang?: UiLanguage): string | undefined;
233
233
  export interface TurnInterruptedFactsView {
234
- lane: 'input_now' | 'user_halt' | 'unrecognized';
234
+ lane: 'input_now' | 'user_halt' | 'extension_abort' | 'unrecognized';
235
235
  inputId?: string;
236
+ extension?: string;
237
+ turn?: number;
236
238
  cause?: string;
237
239
  sessionId?: string;
238
240
  runId?: string;
@@ -240,8 +242,8 @@ export interface TurnInterruptedFactsView {
240
242
  actorId?: string;
241
243
  }
242
244
  export declare function readTurnInterrupted(notice: unknown): TurnInterruptedFactsView | undefined;
243
- export declare function turnInterruptedNotice(facts: Pick<TurnInterruptedFactsView, 'lane'>): string | undefined;
244
- export type SteerCutVerdict = 'this_input' | 'other_input' | 'user_halt' | 'unattributed' | 'not_a_cut';
245
+ export declare function turnInterruptedNotice(facts: Pick<TurnInterruptedFactsView, 'lane' | 'extension'>, lang?: UiLanguage): string | undefined;
246
+ export type SteerCutVerdict = 'this_input' | 'other_input' | 'user_halt' | 'extension_abort' | 'unattributed' | 'not_a_cut';
245
247
  export declare function steerCutVerdict(notice: unknown, messageId: string | undefined): SteerCutVerdict;
246
248
  export type FinishReasonUnknownFactsView = FinishReasonUnknownDetail;
247
249
  export declare function readFinishReasonUnknown(notice: unknown): FinishReasonUnknownFactsView | undefined;
@@ -263,7 +265,7 @@ export interface ContextMediaRemovedFactsView {
263
265
  export declare function readContextMediaRemoved(notice: {} | null | undefined): ContextMediaRemovedFactsView | undefined;
264
266
  export interface McpAuthorizationRequiredFactsView {
265
267
  server: string;
266
- reason: string;
268
+ reason?: string;
267
269
  authorizeUrl?: string;
268
270
  sessionId: string;
269
271
  runId: string;
@@ -412,6 +414,31 @@ export interface ModelCapabilityDowngradedFactsView {
412
414
  runId: string;
413
415
  }
414
416
  export declare function readModelCapabilityDowngraded(notice: {} | null | undefined): ModelCapabilityDowngradedFactsView | undefined;
417
+ export interface RewindBoundaryUnrecordedFactsView {
418
+ sessionId: string;
419
+ entryId: string;
420
+ cause: string;
421
+ }
422
+ export declare function readRewindBoundaryUnrecorded(notice: {} | null | undefined): RewindBoundaryUnrecordedFactsView | undefined;
423
+ export interface InheritEnvDeclaredLateFactsView {
424
+ index: number;
425
+ name: string;
426
+ }
427
+ export declare function readInheritEnvDeclaredLate(notice: {} | null | undefined): InheritEnvDeclaredLateFactsView | undefined;
428
+ export interface ModsStopEndedFactsView {
429
+ event: string;
430
+ seat: string;
431
+ sessionId: string;
432
+ runId: string;
433
+ registration?: string;
434
+ reason?: string;
435
+ sourceSessionId?: string;
436
+ agentId?: string;
437
+ }
438
+ export declare function readModsStopEnded(notice: {} | null | undefined): ModsStopEndedFactsView | undefined;
439
+ export declare function rewindBoundaryUnrecordedSentence(facts: Pick<RewindBoundaryUnrecordedFactsView, 'sessionId' | 'entryId' | 'cause'>, lang?: UiLanguage): string | undefined;
440
+ export declare function inheritEnvDeclaredLateSentence(facts: Pick<InheritEnvDeclaredLateFactsView, 'index' | 'name'>, lang?: UiLanguage): string | undefined;
441
+ export declare function modsStopEndedSentence(facts: Pick<ModsStopEndedFactsView, 'event' | 'seat' | 'sessionId' | 'runId' | 'registration' | 'reason'>, lang?: UiLanguage): string | undefined;
415
442
  export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
416
443
  readonly 'mcp.injection_dropped': typeof readMcpInjectionDrop;
417
444
  readonly 'delegation.ask_unresolvable': typeof readAskUnresolvable;
@@ -454,6 +481,9 @@ export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
454
481
  readonly 'steering.parked_input_blocked': typeof readSteeringParkedInputBlocked;
455
482
  readonly 'delegation.delivery_discarded': typeof readDeliveryDiscarded;
456
483
  readonly 'model.capability_downgraded': typeof readModelCapabilityDowngraded;
484
+ readonly 'rewind.boundary_unrecorded': typeof readRewindBoundaryUnrecorded;
485
+ readonly 'config.inherit_env_declared_late': typeof readInheritEnvDeclaredLate;
486
+ readonly 'mods.stop_ended': typeof readModsStopEnded;
457
487
  }>;
458
488
  type FactReaderTable = typeof ENGINE_NOTICE_FACT_READERS;
459
489
  export type EngineNoticeFactsCode = keyof FactReaderTable;
@@ -10,7 +10,11 @@ const CATALOG = new Set(ENGINE_NOTICE_CODES);
10
10
  function audienceRow(table, code) {
11
11
  return Object.hasOwn(table, code) ? table[code] : undefined;
12
12
  }
13
- const LEGACY_NOTICE_AUDIENCE = Object.freeze({ 'context.image_removed': 'user', 'session.records_skipped': 'user' });
13
+ const LEGACY_NOTICE_AUDIENCE = Object.freeze({
14
+ 'context.image_removed': 'user',
15
+ 'session.records_skipped': 'user',
16
+ 'instructions.source_changed': 'user',
17
+ });
14
18
  export function engineNoticeInCatalog(code) {
15
19
  return typeof code === 'string' && (CATALOG.has(code) || Object.hasOwn(LEGACY_NOTICE_AUDIENCE, code));
16
20
  }
@@ -969,7 +973,15 @@ function readTurnInterruptedOf(notice) {
969
973
  const causeRaw = ownSeat(o, 'cause');
970
974
  const cause = nonEmpty(causeRaw);
971
975
  const inputId = nonEmpty(ownSeat(o, 'inputId'));
972
- const lane = causeRaw === undefined && inputId !== undefined ? 'input_now' : cause === 'user_halt' ? 'user_halt' : 'unrecognized';
976
+ const lane = causeRaw === undefined && inputId !== undefined
977
+ ? 'input_now'
978
+ : cause === 'user_halt'
979
+ ? 'user_halt'
980
+ : cause === 'extension_abort'
981
+ ? 'extension_abort'
982
+ : 'unrecognized';
983
+ const extension = lane === 'extension_abort' ? nonEmpty(optionalOwnSeat(o, 'extension')) : undefined;
984
+ const turn = lane === 'extension_abort' ? positiveInt(optionalOwnSeat(o, 'turn')) : undefined;
973
985
  const sessionId = nonEmpty(optionalOwnSeat(o, 'sessionId'));
974
986
  const runId = nonEmpty(optionalOwnSeat(o, 'runId'));
975
987
  const taskId = nonEmpty(optionalOwnSeat(o, 'taskId'));
@@ -977,6 +989,8 @@ function readTurnInterruptedOf(notice) {
977
989
  return {
978
990
  lane,
979
991
  ...(lane === 'input_now' && inputId !== undefined ? { inputId } : {}),
992
+ ...(extension !== undefined ? { extension } : {}),
993
+ ...(turn !== undefined ? { turn } : {}),
980
994
  ...(cause !== undefined ? { cause } : {}),
981
995
  ...(sessionId !== undefined ? { sessionId } : {}),
982
996
  ...(runId !== undefined ? { runId } : {}),
@@ -989,11 +1003,17 @@ const TURN_INTERRUPTED_SENTENCE = Object.freeze({
989
1003
  user_halt: 'You stopped the run — the running turn was cut, and tool calls that had already finished keep their results.',
990
1004
  unrecognized: 'A running turn was cut for a reason this version does not recognise — tool calls that had already finished keep their results.',
991
1005
  });
992
- export function turnInterruptedNotice(facts) {
1006
+ export function turnInterruptedNotice(facts, lang) {
993
1007
  try {
994
1008
  if (facts === null || typeof facts !== 'object' || Array.isArray(facts) || !Object.hasOwn(facts, 'lane'))
995
1009
  return undefined;
996
1010
  const lane = facts.lane;
1011
+ if (lane === 'extension_abort') {
1012
+ const shown = shownName(viewOptStr(facts, 'extension'));
1013
+ return shown !== undefined
1014
+ ? renderMessage(msg('notice.turnInterrupted.extensionAbortNamed', { extension: shown }), lang)
1015
+ : renderMessage(msg('notice.turnInterrupted.extensionAbort'), lang);
1016
+ }
997
1017
  return typeof lane === 'string' && Object.hasOwn(TURN_INTERRUPTED_SENTENCE, lane)
998
1018
  ? TURN_INTERRUPTED_SENTENCE[lane]
999
1019
  : undefined;
@@ -1019,6 +1039,8 @@ export function steerCutVerdict(notice, messageId) {
1019
1039
  return 'unattributed';
1020
1040
  if (facts.lane === 'user_halt')
1021
1041
  return 'user_halt';
1042
+ if (facts.lane === 'extension_abort')
1043
+ return 'extension_abort';
1022
1044
  if (typeof messageId !== 'string' || messageId.length === 0 || facts.inputId === undefined)
1023
1045
  return 'unattributed';
1024
1046
  return facts.inputId === messageId ? 'this_input' : 'other_input';
@@ -1111,13 +1133,13 @@ function readMcpAuthorizationRequiredOf(notice) {
1111
1133
  return undefined;
1112
1134
  const o = d;
1113
1135
  const server = nonEmpty(ownSeat(o, 'server'));
1114
- const reason = nonEmpty(ownSeat(o, 'reason'));
1115
1136
  const sessionId = nonEmpty(ownSeat(o, 'sessionId'));
1116
1137
  const runId = nonEmpty(ownSeat(o, 'runId'));
1117
- if (server === undefined || reason === undefined || sessionId === undefined || runId === undefined)
1138
+ if (server === undefined || sessionId === undefined || runId === undefined)
1118
1139
  return undefined;
1140
+ const reason = nonEmpty(optionalOwnSeat(o, 'reason'));
1119
1141
  const authorizeUrl = nonEmpty(optionalOwnSeat(o, 'authorizeUrl'));
1120
- return { server, reason, ...(authorizeUrl !== undefined ? { authorizeUrl } : {}), sessionId, runId };
1142
+ return { server, ...(reason !== undefined ? { reason } : {}), ...(authorizeUrl !== undefined ? { authorizeUrl } : {}), sessionId, runId };
1121
1143
  }
1122
1144
  export function readSessionLineageRerooted(notice) {
1123
1145
  return guardedRead(notice, readSessionLineageRerootedOf);
@@ -1746,6 +1768,108 @@ export function readModelCapabilityDowngraded(notice) {
1746
1768
  return { model, capability, status, sessionId, runId };
1747
1769
  });
1748
1770
  }
1771
+ const REWIND_BOUNDARY_TIMEOUT_CAUSE = 'aborted';
1772
+ export function readRewindBoundaryUnrecorded(notice) {
1773
+ return guardedRead(notice, (n) => {
1774
+ const o = userCodeDetail(n, 'rewind.boundary_unrecorded');
1775
+ if (o === undefined)
1776
+ return undefined;
1777
+ const sessionId = dataStr(o, 'sessionId');
1778
+ const entryId = dataStr(o, 'entryId');
1779
+ const cause = dataStr(o, 'cause');
1780
+ if (sessionId === undefined || entryId === undefined || cause === undefined)
1781
+ return undefined;
1782
+ return { sessionId, entryId, cause };
1783
+ });
1784
+ }
1785
+ export function readInheritEnvDeclaredLate(notice) {
1786
+ return guardedRead(notice, (n) => {
1787
+ const o = userCodeDetail(n, 'config.inherit_env_declared_late');
1788
+ if (o === undefined)
1789
+ return undefined;
1790
+ const index = dataCount(o, 'index');
1791
+ const name = dataStr(o, 'name');
1792
+ if (index === undefined || name === undefined)
1793
+ return undefined;
1794
+ return { index, name };
1795
+ });
1796
+ }
1797
+ export function readModsStopEnded(notice) {
1798
+ return guardedRead(notice, (n) => {
1799
+ const o = userCodeDetail(n, 'mods.stop_ended');
1800
+ if (o === undefined)
1801
+ return undefined;
1802
+ const event = dataStr(o, 'event');
1803
+ const seat = dataStr(o, 'seat');
1804
+ const sessionId = dataStr(o, 'sessionId');
1805
+ const runId = dataStr(o, 'runId');
1806
+ if (event === undefined || seat === undefined || sessionId === undefined || runId === undefined)
1807
+ return undefined;
1808
+ const registration = optDataStr(o, 'registration');
1809
+ const reason = optDataStr(o, 'reason');
1810
+ const sourceSessionId = optDataStr(o, 'sourceSessionId');
1811
+ const agentId = optDataStr(o, 'agentId');
1812
+ return {
1813
+ event,
1814
+ seat,
1815
+ sessionId,
1816
+ runId,
1817
+ ...(registration !== undefined ? { registration } : {}),
1818
+ ...(reason !== undefined ? { reason } : {}),
1819
+ ...(sourceSessionId !== undefined ? { sourceSessionId } : {}),
1820
+ ...(agentId !== undefined ? { agentId } : {}),
1821
+ };
1822
+ });
1823
+ }
1824
+ export function rewindBoundaryUnrecordedSentence(facts, lang) {
1825
+ try {
1826
+ if (viewStr(facts, 'sessionId') === undefined || viewStr(facts, 'entryId') === undefined)
1827
+ return undefined;
1828
+ const cause = viewStr(facts, 'cause');
1829
+ if (cause === undefined)
1830
+ return undefined;
1831
+ const lead = cause === REWIND_BOUNDARY_TIMEOUT_CAUSE ? 'notice.rewind.boundaryUnrecorded.timedOut' : 'notice.rewind.boundaryUnrecorded.notSaved';
1832
+ return joinSentences([renderMessage(msg(lead), lang), renderMessage(msg('notice.rewind.boundaryUnrecorded.tail'), lang)], lang);
1833
+ }
1834
+ catch {
1835
+ return undefined;
1836
+ }
1837
+ }
1838
+ export function inheritEnvDeclaredLateSentence(facts, lang) {
1839
+ try {
1840
+ const index = viewCount(facts, 'index');
1841
+ const name = shownName(viewStr(facts, 'name'));
1842
+ if (index === undefined || name === undefined)
1843
+ return undefined;
1844
+ return renderMessage(msg('notice.inheritEnv.declaredLate', { name, index }), lang);
1845
+ }
1846
+ catch {
1847
+ return undefined;
1848
+ }
1849
+ }
1850
+ function stopEndedPointKey(event) {
1851
+ return event === 'classic.Stop' ? 'notice.mods.stopEnded.point.run' : event === 'classic.SubagentStop' ? 'notice.mods.stopEnded.point.agent' : 'notice.mods.stopEnded.point.other';
1852
+ }
1853
+ export function modsStopEndedSentence(facts, lang) {
1854
+ try {
1855
+ const event = viewStr(facts, 'event');
1856
+ if (event === undefined || viewStr(facts, 'seat') === undefined || viewStr(facts, 'sessionId') === undefined || viewStr(facts, 'runId') === undefined)
1857
+ return undefined;
1858
+ const registration = shownName(viewOptStr(facts, 'registration'));
1859
+ const reason = shownText(viewOptStr(facts, 'reason'), 200);
1860
+ const point = msg(stopEndedPointKey(event));
1861
+ return joinSentences([
1862
+ registration !== undefined
1863
+ ? renderMessage(msg('notice.mods.stopEnded.lead.named', { registration, point }), lang)
1864
+ : renderMessage(msg('notice.mods.stopEnded.lead.anon', { point }), lang),
1865
+ reason !== undefined ? renderMessage(msg('notice.mods.stopEnded.reason', { reason }), lang) : undefined,
1866
+ renderMessage(msg('notice.mods.stopEnded.tail'), lang),
1867
+ ], lang);
1868
+ }
1869
+ catch {
1870
+ return undefined;
1871
+ }
1872
+ }
1749
1873
  export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
1750
1874
  'mcp.injection_dropped': readMcpInjectionDrop,
1751
1875
  'delegation.ask_unresolvable': readAskUnresolvable,
@@ -1788,6 +1912,9 @@ export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
1788
1912
  'steering.parked_input_blocked': readSteeringParkedInputBlocked,
1789
1913
  'delegation.delivery_discarded': readDeliveryDiscarded,
1790
1914
  'model.capability_downgraded': readModelCapabilityDowngraded,
1915
+ 'rewind.boundary_unrecorded': readRewindBoundaryUnrecorded,
1916
+ 'config.inherit_env_declared_late': readInheritEnvDeclaredLate,
1917
+ 'mods.stop_ended': readModsStopEnded,
1791
1918
  });
1792
1919
  const _factReaderTablePin = true;
1793
1920
  void _factReaderTablePin;
@@ -13,8 +13,8 @@ export type EngineBootRefusalForm = {
13
13
  } | {
14
14
  readonly kind: 'deployment';
15
15
  };
16
- export type EngineDataRootVariant = 'newer_root' | 'unreadable' | 'unknown';
17
- export type EngineBootWayOut = 'newer_build' | 'separate_data_root' | 'restore_backup' | 'repair_access';
16
+ export type EngineDataRootVariant = 'newer_root' | 'unreadable' | 'skipped_migration' | 'unknown';
17
+ export type EngineBootWayOut = 'newer_build' | 'separate_data_root' | 'restore_backup' | 'repair_access' | 'start_migration_release';
18
18
  export declare const ENGINE_BOOT_REFUSAL_CODES: Readonly<Record<string, EngineBootRefusalReason>>;
19
19
  export interface LocalEngineBootRefusal {
20
20
  readonly code?: string;
@@ -28,6 +28,8 @@ export interface LocalEngineBootRefusal {
28
28
  readonly engineVersion?: string;
29
29
  readonly markerPath?: string;
30
30
  readonly waysOut?: readonly EngineBootWayOut[];
31
+ readonly migrationRelease?: string;
32
+ readonly waysOutUnrecognized?: true;
31
33
  }
32
34
  export declare function engineBootRefusalOf(lines: readonly string[], scrub: (s: string) => string): LocalEngineBootRefusal | undefined;
33
35
  export declare function engineBootRefusalSentence(refusal: LocalEngineBootRefusal, lang?: UiLanguage, form?: EngineBootRefusalForm): string | undefined;