@sema-agent/client-core 0.110.0 → 0.112.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 (243) hide show
  1. package/CHANGELOG.md +244 -0
  2. package/README.md +59 -18
  3. package/dist/abortableSleep.d.ts +7 -0
  4. package/dist/abortableSleep.js +37 -0
  5. package/dist/adapt/arms.js +25 -4
  6. package/dist/adapt/toolCards.d.ts +3 -1
  7. package/dist/adapt/toolCards.js +4 -2
  8. package/dist/adapter/activeRunSelfHeal.d.ts +39 -0
  9. package/dist/adapter/activeRunSelfHeal.js +171 -3
  10. package/dist/adapter/downstream/eventToSdkMessage.js +10 -10
  11. package/dist/adapter/downstream/terminalToSdkResult.d.ts +2 -0
  12. package/dist/adapter/downstream/terminalToSdkResult.js +11 -0
  13. package/dist/adapter/runStream.d.ts +5 -0
  14. package/dist/adapter/runStream.js +15 -3
  15. package/dist/agentSession/engineSessionBackgroundStop.js +2 -2
  16. package/dist/attachmentRoute.d.ts +20 -0
  17. package/dist/attachmentRoute.js +39 -0
  18. package/dist/attachmentsWireCaps.js +1 -1
  19. package/dist/builtinOutputStyles.d.ts +12 -0
  20. package/dist/builtinOutputStyles.js +147 -0
  21. package/dist/checkpointRowVerdict.d.ts +3 -0
  22. package/dist/checkpointRowVerdict.js +14 -1
  23. package/dist/compactionStatus.d.ts +9 -0
  24. package/dist/compactionStatus.js +29 -5
  25. package/dist/consoleCaPin.d.ts +136 -0
  26. package/dist/consoleCaPin.js +827 -0
  27. package/dist/controlRouter.js +2 -1
  28. package/dist/coreValuePorts.d.ts +39 -1
  29. package/dist/coreValuePorts.js +10 -0
  30. package/dist/decideReceipt.d.ts +2 -1
  31. package/dist/deviceRebind.js +3 -3
  32. package/dist/displayUntrusted.d.ts +1 -0
  33. package/dist/displayUntrusted.js +6 -0
  34. package/dist/effectiveFacts.d.ts +9 -0
  35. package/dist/effectiveFacts.js +33 -0
  36. package/dist/engineAddress.d.ts +1 -0
  37. package/dist/engineAddress.js +4 -1
  38. package/dist/engineCredentialRelease.d.ts +54 -0
  39. package/dist/engineCredentialRelease.js +146 -0
  40. package/dist/engineErrorCodes.d.ts +1 -0
  41. package/dist/engineErrorCodes.js +1 -0
  42. package/dist/engineHealthProbeVerdict.d.ts +24 -0
  43. package/dist/engineHealthProbeVerdict.js +123 -0
  44. package/dist/engineNoticeCodes.js +5 -7
  45. package/dist/engineRepoint.d.ts +12 -5
  46. package/dist/engineRepoint.js +44 -19
  47. package/dist/engineRowRef.d.ts +3 -0
  48. package/dist/engineRowRef.js +11 -1
  49. package/dist/engineSwapCrossing.d.ts +57 -0
  50. package/dist/engineSwapCrossing.js +297 -0
  51. package/dist/engineUnavailable.d.ts +45 -0
  52. package/dist/engineUnavailable.js +496 -0
  53. package/dist/engineUrl.js +4 -2
  54. package/dist/eventLeg.js +3 -3
  55. package/dist/gateFailureCodes.js +2 -2
  56. package/dist/generated/sdkFactTables.d.ts +2 -1
  57. package/dist/generated/sdkFactTables.js +14 -0
  58. package/dist/generated/settingsSchemaFns.d.ts +1 -0
  59. package/dist/generated/settingsSchemaFns.js +3 -0
  60. package/dist/generated/settingsSchemaHooksClassifier.js +38 -9
  61. package/dist/generated/settingsSchemaTables.d.ts +56 -0
  62. package/dist/generated/settingsSchemaTables.js +19 -0
  63. package/dist/generated/settingsSchemaTypes.d.ts +23 -13
  64. package/dist/generated/settingsSchemaUrlShape.d.ts +1 -0
  65. package/dist/generated/settingsSchemaUrlShape.js +17 -0
  66. package/dist/hitl/approvalDelivery.d.ts +1 -0
  67. package/dist/hitl/approvalDelivery.js +1 -1
  68. package/dist/hitl/approvalResolution.d.ts +1 -1
  69. package/dist/hitl/approvalResolution.js +2 -1
  70. package/dist/hitl/askGateWire.js +5 -6
  71. package/dist/hitl/decisionRefusal.d.ts +6 -0
  72. package/dist/hitl/decisionRefusal.js +19 -10
  73. package/dist/hitl/decisionRefusalCarrier.d.ts +3 -0
  74. package/dist/hitl/decisionRefusalCarrier.js +348 -0
  75. package/dist/hitl/decisionSend.d.ts +7 -0
  76. package/dist/hitl/decisionSend.js +34 -12
  77. package/dist/hitl/editedApprovalAcceptance.js +1 -1
  78. package/dist/hitl/elicitationRefusal.d.ts +4 -0
  79. package/dist/hitl/elicitationRefusal.js +23 -0
  80. package/dist/hitl/frameRouter.d.ts +2 -2
  81. package/dist/hitl/frameRouter.js +8 -15
  82. package/dist/hitl/gateIdentity.d.ts +5 -0
  83. package/dist/hitl/gateIdentity.js +23 -0
  84. package/dist/hitl/hitlBridge.d.ts +6 -0
  85. package/dist/hitl/hitlBridge.js +10 -4
  86. package/dist/hitl/hitlHostSurface.d.ts +2 -1
  87. package/dist/hitl/hitlHostSurface.js +7 -2
  88. package/dist/hitl/localAllowRedemption.d.ts +70 -0
  89. package/dist/hitl/localAllowRedemption.js +276 -0
  90. package/dist/hitl/parkOwnership.js +2 -1
  91. package/dist/hitl/parkResolver.js +14 -4
  92. package/dist/hitl/persistedRulesWire.d.ts +16 -0
  93. package/dist/hitl/persistedRulesWire.js +70 -0
  94. package/dist/hitl/planReviewWire.d.ts +3 -0
  95. package/dist/hitl/planReviewWire.js +23 -6
  96. package/dist/hitl/policyDenyCause.d.ts +1 -1
  97. package/dist/hitl/policyDenyCause.js +1 -1
  98. package/dist/hitl/resumeRunningCard.d.ts +1 -0
  99. package/dist/hitl/resumeRunningCard.js +1 -0
  100. package/dist/hitl/screenCardCarriers.d.ts +15 -0
  101. package/dist/hitl/screenCardCarriers.js +41 -0
  102. package/dist/hitl/screenDecisionCards.d.ts +98 -0
  103. package/dist/hitl/screenDecisionCards.js +363 -0
  104. package/dist/hitl/sessionPolicyWire.js +2 -2
  105. package/dist/hitl/standingRows.d.ts +6 -2
  106. package/dist/hitl/standingRows.js +27 -2
  107. package/dist/hitl/toolApprovalWire.d.ts +30 -8
  108. package/dist/hitl/toolApprovalWire.js +264 -121
  109. package/dist/hooksReaderGenerations.js +1 -1
  110. package/dist/hooksWireCaps.js +3 -3
  111. package/dist/hostSettingNoticeArm.d.ts +3 -0
  112. package/dist/hostSettingNoticeArm.js +12 -0
  113. package/dist/hostTurnSettings.d.ts +3 -0
  114. package/dist/hostTurnSettings.js +38 -5
  115. package/dist/humanTurnRead.js +11 -1
  116. package/dist/i18n/messages.en.d.ts +292 -0
  117. package/dist/i18n/messages.en.js +298 -7
  118. package/dist/i18n/messages.zh.js +316 -6
  119. package/dist/i18n/translate.d.ts +3 -0
  120. package/dist/i18n/translate.js +78 -10
  121. package/dist/i18n/zh.d.ts +1 -0
  122. package/dist/i18n/zh.js +1 -0
  123. package/dist/index.d.ts +71 -20
  124. package/dist/index.js +44 -13
  125. package/dist/interactiveHalt.js +2 -1
  126. package/dist/interactiveInterrupt.js +20 -2
  127. package/dist/liveModelCatalog.d.ts +4 -0
  128. package/dist/liveModelCatalog.js +12 -3
  129. package/dist/localConfig/documents.d.ts +61 -0
  130. package/dist/localConfig/documents.js +51 -0
  131. package/dist/localConfig/kernel.d.ts +149 -0
  132. package/dist/localConfig/kernel.js +597 -0
  133. package/dist/localConfig/mcp/edit.d.ts +161 -0
  134. package/dist/localConfig/mcp/edit.js +846 -0
  135. package/dist/localConfig/mcp/servers.d.ts +165 -0
  136. package/dist/localConfig/mcp/servers.js +776 -0
  137. package/dist/localConfig/mcp/views.d.ts +170 -0
  138. package/dist/localConfig/mcp/views.js +429 -0
  139. package/dist/localConfig/modelPool.d.ts +262 -0
  140. package/dist/localConfig/modelPool.js +1489 -0
  141. package/dist/localConfig/modelPoolWords.d.ts +13 -0
  142. package/dist/localConfig/modelPoolWords.js +20 -0
  143. package/dist/localConfig/receiptShape.d.ts +7 -0
  144. package/dist/localConfig/receiptShape.js +135 -0
  145. package/dist/localConfig/settingsWrite.d.ts +127 -0
  146. package/dist/localConfig/settingsWrite.js +237 -0
  147. package/dist/localConfig/skills.d.ts +124 -0
  148. package/dist/localConfig/skills.js +397 -0
  149. package/dist/localConfig/skillsWords.d.ts +10 -0
  150. package/dist/localConfig/skillsWords.js +5 -0
  151. package/dist/localEngineSeatReading.d.ts +2 -2
  152. package/dist/localEngineSeatReading.js +5 -3
  153. package/dist/localEngineSpawn.d.ts +0 -7
  154. package/dist/localEngineSpawn.js +0 -92
  155. package/dist/localEngineStep.d.ts +2 -2
  156. package/dist/localEngineStep.js +2 -0
  157. package/dist/mcpProbeWire.js +2 -1
  158. package/dist/mcpReconnect.js +3 -3
  159. package/dist/mcpWireCaps.js +1 -1
  160. package/dist/memoryVerbsWire.js +3 -2
  161. package/dist/model/engineModelWords.d.ts +3 -0
  162. package/dist/model/engineModelWords.js +13 -0
  163. package/dist/model/onboardJudgement.d.ts +14 -4
  164. package/dist/model/onboardJudgement.js +91 -139
  165. package/dist/model/subagentModelWord.d.ts +21 -2
  166. package/dist/model/subagentModelWord.js +100 -29
  167. package/dist/modelCapabilityProbe.js +3 -40
  168. package/dist/modelConfigGapNotice.d.ts +20 -0
  169. package/dist/modelConfigGapNotice.js +102 -0
  170. package/dist/modsKernelIdentity.js +2 -47
  171. package/dist/notifications.d.ts +19 -0
  172. package/dist/notifications.js +114 -12
  173. package/dist/ownKey.d.ts +7 -0
  174. package/dist/ownKey.js +71 -8
  175. package/dist/pendingUserRow.d.ts +4 -0
  176. package/dist/pendingUserRow.js +16 -0
  177. package/dist/permissionsDeclaration.d.ts +3 -1
  178. package/dist/permissionsDeclaration.js +33 -9
  179. package/dist/planReviewCardFacts.d.ts +3 -0
  180. package/dist/planReviewCardFacts.js +52 -2
  181. package/dist/pluginHooksWire.d.ts +9 -1
  182. package/dist/pluginHooksWire.js +40 -6
  183. package/dist/printToolResultFrame.js +4 -2
  184. package/dist/promptBlockedCopy.js +12 -7
  185. package/dist/promptSuggestionBatch.d.ts +7 -0
  186. package/dist/promptSuggestionBatch.js +9 -0
  187. package/dist/promptSuggestionsTail.d.ts +39 -0
  188. package/dist/promptSuggestionsTail.js +116 -0
  189. package/dist/request/taskRequest.js +10 -6
  190. package/dist/requestCoordinate.d.ts +1 -0
  191. package/dist/requestCoordinate.js +13 -0
  192. package/dist/resumeRefusalCopy.d.ts +3 -1
  193. package/dist/resumeRefusalCopy.js +12 -4
  194. package/dist/rewindArchiveReading.js +4 -4
  195. package/dist/runCancelContext.d.ts +2 -1
  196. package/dist/runCancelContext.js +1 -0
  197. package/dist/runLedgerSnapshot.js +3 -3
  198. package/dist/runPermissionModeSwitch.js +3 -4
  199. package/dist/scenarioRefusal.js +11 -13
  200. package/dist/scenarioSkills.js +11 -6
  201. package/dist/seam.d.ts +16 -2
  202. package/dist/seam.js +10 -0
  203. package/dist/seatContract.d.ts +259 -9
  204. package/dist/seatContract.js +444 -15
  205. package/dist/sessionCostReading.d.ts +70 -0
  206. package/dist/sessionCostReading.js +150 -0
  207. package/dist/sessionHooksRoster.d.ts +4 -0
  208. package/dist/sessionHooksRoster.js +158 -0
  209. package/dist/sessionIdSegment.d.ts +1 -0
  210. package/dist/sessionIdSegment.js +4 -1
  211. package/dist/sessionMemoryErase.js +2 -1
  212. package/dist/sessionMemoryStatus.js +2 -2
  213. package/dist/sessionReadRedaction.d.ts +7 -0
  214. package/dist/sessionReadRedaction.js +26 -0
  215. package/dist/sessionSyncFileHistory.js +8 -9
  216. package/dist/settingsHooksSalvage.js +2 -1
  217. package/dist/sha256Bytes.d.ts +1 -0
  218. package/dist/sha256Bytes.js +46 -0
  219. package/dist/skillOverrideChain.d.ts +83 -0
  220. package/dist/skillOverrideChain.js +378 -0
  221. package/dist/skillsWireCaps.d.ts +3 -0
  222. package/dist/skillsWireCaps.js +16 -1
  223. package/dist/sseIdleTriage.js +2 -1
  224. package/dist/storeDurabilityWord.d.ts +15 -0
  225. package/dist/storeDurabilityWord.js +18 -0
  226. package/dist/storePostureCapability.d.ts +7 -3
  227. package/dist/storePostureCapability.js +69 -39
  228. package/dist/subagent/engineSubagentResume.js +2 -2
  229. package/dist/subagent/engineSubagentTail.js +2 -1
  230. package/dist/subagentContentStore.d.ts +11 -0
  231. package/dist/subagentContentStore.js +28 -2
  232. package/dist/toolResult.d.ts +1 -0
  233. package/dist/toolResult.js +2 -0
  234. package/dist/turnFailurePresentation.js +4 -10
  235. package/dist/userAttachmentEnvelope.d.ts +2 -1
  236. package/dist/userAttachmentEnvelope.js +10 -0
  237. package/dist/wireErrorTriage.js +2 -1
  238. package/dist/wireFailureShape.d.ts +4 -0
  239. package/dist/wireFailureShape.js +141 -19
  240. package/dist/wireRefusalCopy.d.ts +6 -5
  241. package/dist/wireRefusalCopy.js +49 -92
  242. package/docs/INTEGRATION-CLIENTS.md +2718 -17
  243. package/package.json +7 -3
@@ -0,0 +1,496 @@
1
+ import { appendOwnElement, readOwnDataValue } from './ownKey.js';
2
+ import { compareReleaseVersions } from './supportFloor.js';
3
+ import { LOCAL_ENGINE_SPAWN_ENV } from './localEngineSpawn.js';
4
+ import { SETTINGS_MODEL_PLANE_REFUSAL_CODES, SETTINGS_WEB_ADMIN_TOKEN_ENV } from './generated/settingsSchemaTables.js';
5
+ import { msg, renderMessage } from './i18n/translate.js';
6
+ import { healthProbeVerdictOf } from './engineHealthProbeVerdict.js';
7
+ export const ENGINE_UNAVAILABLE_REASONS = Object.freeze([
8
+ 'not_running',
9
+ 'not_answering',
10
+ 'address_refused',
11
+ 'version_refused',
12
+ 'model_setup',
13
+ 'credential_conflict',
14
+ 'credential_refused',
15
+ 'data_root_refused',
16
+ 'previous_not_stopped',
17
+ ]);
18
+ export const ENGINE_INSTALL_SHAPES = Object.freeze(['npm-global', 'managed', 'npm-local', 'dev', 'app', 'unknown']);
19
+ const SCHEMA_MISMATCH_CODE = 'config.schema_mismatch';
20
+ const WAYS_OUT_ANCHOR = /Ways out \(these three and no others\):/;
21
+ const MARKER_ROLE = /^the local engine high-water marker$/;
22
+ export const ENGINE_BOOT_REFUSAL_CODES = Object.freeze(Object.fromEntries([
23
+ ...SETTINGS_MODEL_PLANE_REFUSAL_CODES.map((c) => [c, 'model_setup']),
24
+ ['config.anthropic_credential_conflict', 'credential_conflict'],
25
+ ['config.center_credential_malformed', 'credential_refused'],
26
+ ['config.center_credential_user_session_multi_tenant', 'credential_refused'],
27
+ [SCHEMA_MISMATCH_CODE, 'data_root_refused'],
28
+ ]));
29
+ function isRecord(v) {
30
+ if (typeof v !== 'object' || v === null)
31
+ return false;
32
+ try {
33
+ return !Array.isArray(v);
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ function own(v, key) {
40
+ if (!isRecord(v))
41
+ return undefined;
42
+ try {
43
+ return readOwnDataValue(v, key);
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ }
49
+ function parseJsonLine(t) {
50
+ try {
51
+ return JSON.parse(t);
52
+ }
53
+ catch {
54
+ return undefined;
55
+ }
56
+ }
57
+ function deepFreeze(v) {
58
+ if (typeof v === 'object' && v !== null && !Object.isFrozen(v)) {
59
+ for (const k of Object.keys(v))
60
+ deepFreeze(v[k]);
61
+ Object.freeze(v);
62
+ }
63
+ return v;
64
+ }
65
+ function flat(s) {
66
+ return s.replace(/\s+/g, ' ').trim();
67
+ }
68
+ function stripEndStop(s) {
69
+ return s.replace(/[.。]+$/u, '');
70
+ }
71
+ const isRelease = (v) => compareReleaseVersions(v, v) !== undefined;
72
+ const CODE_TOKEN = '(config\\.[A-Za-z0-9_.-]*[A-Za-z0-9_])';
73
+ function refusalCodesIn(text) {
74
+ const out = [];
75
+ for (const m of text.matchAll(new RegExp(`\\[${CODE_TOKEN}\\]`, 'g')))
76
+ out.push({ at: m.index ?? 0, code: m[1] });
77
+ for (const m of text.matchAll(new RegExp(`(?:^|\\n)[ \\t]*(?:[A-Za-z]*Error(?: \\[[^\\]\\n]*\\])?:[ \\t]*)?${CODE_TOKEN}:`, 'g')))
78
+ out.push({ at: m.index ?? 0, code: m[1] });
79
+ out.sort((a, b) => a.at - b.at);
80
+ const seen = [];
81
+ for (const { code } of out)
82
+ if (!seen.includes(code))
83
+ seen.push(code);
84
+ return seen;
85
+ }
86
+ const BOOT_REFUSAL_MAX_CHARS = 800;
87
+ const BOOT_REFUSAL_MAX_HINTS = 2;
88
+ const BOOT_REFUSAL_MAX_FINDINGS = 8;
89
+ const CONFIG_CODE = /^config\.[A-Za-z0-9_.-]+$/;
90
+ function capSentence(s) {
91
+ const t = s.trim();
92
+ return t.length > BOOT_REFUSAL_MAX_CHARS ? `${t.slice(0, BOOT_REFUSAL_MAX_CHARS)}…` : t;
93
+ }
94
+ function dataRootReadingOf(text) {
95
+ if (!text.includes(SCHEMA_MISMATCH_CODE) || !WAYS_OUT_ANCHOR.test(text))
96
+ return undefined;
97
+ const lines = text.split(/\r?\n/);
98
+ const at = lines.findIndex((l) => l.includes(`${SCHEMA_MISMATCH_CODE}:`));
99
+ if (at < 0)
100
+ return undefined;
101
+ const first = lines[at];
102
+ const lead = first.lastIndexOf(`${SCHEMA_MISMATCH_CODE}: `);
103
+ const head = capSentence(lead >= 0 ? first.slice(lead) : first);
104
+ if (head.length === 0)
105
+ return undefined;
106
+ const findings = [];
107
+ let highWater;
108
+ let engineVersion;
109
+ let markerPath;
110
+ let newer = false;
111
+ let unreadable = false;
112
+ for (let i = at + 1; i < lines.length && findings.length < BOOT_REFUSAL_MAX_FINDINGS; i++) {
113
+ const l = lines[i];
114
+ if (WAYS_OUT_ANCHOR.test(l) || !/^\s+\S/.test(l))
115
+ break;
116
+ const f = capSentence(l);
117
+ findings.push(f);
118
+ const hw = /: engine high-water (\S+) — .*NEWER than this build \(([^()\s]+)\)/.exec(f);
119
+ if (hw !== null) {
120
+ newer = true;
121
+ if (isRelease(hw[1]))
122
+ highWater = hw[1];
123
+ if (isRelease(hw[2]))
124
+ engineVersion = hw[2];
125
+ const p = /^\S+ \(the local engine high-water marker\) at (.+?): engine high-water /.exec(f);
126
+ if (p !== null)
127
+ markerPath = p[1];
128
+ continue;
129
+ }
130
+ if (/: UNKNOWN field\(s\) .*NEWER than this build/.test(f)) {
131
+ newer = true;
132
+ continue;
133
+ }
134
+ const un = /^\S+ \(([^()]*)\) at (.+?): unreadable \([^()\s]+\)/.exec(f);
135
+ if (un !== null) {
136
+ unreadable = true;
137
+ if (MARKER_ROLE.test(un[1]))
138
+ markerPath = un[2];
139
+ }
140
+ }
141
+ return {
142
+ variant: newer ? 'newer_root' : unreadable ? 'unreadable' : 'unknown',
143
+ findings: [head, ...findings],
144
+ ...(highWater !== undefined ? { highWater } : {}),
145
+ ...(engineVersion !== undefined ? { engineVersion } : {}),
146
+ ...(markerPath !== undefined ? { markerPath } : {}),
147
+ };
148
+ }
149
+ function classifyRefusalText(text) {
150
+ for (const code of refusalCodesIn(text)) {
151
+ if (!Object.hasOwn(ENGINE_BOOT_REFUSAL_CODES, code))
152
+ continue;
153
+ const reason = ENGINE_BOOT_REFUSAL_CODES[code];
154
+ if (reason !== 'data_root_refused')
155
+ return { reason, code };
156
+ const dataRoot = dataRootReadingOf(text);
157
+ if (dataRoot !== undefined)
158
+ return { reason, code, dataRoot };
159
+ }
160
+ return undefined;
161
+ }
162
+ export function engineBootRefusalOf(lines, scrub) {
163
+ try {
164
+ const clean = (s) => {
165
+ try {
166
+ const out = scrub(s);
167
+ return typeof out === 'string' ? out : undefined;
168
+ }
169
+ catch {
170
+ return undefined;
171
+ }
172
+ };
173
+ const hints = [];
174
+ let code;
175
+ let hint;
176
+ let fatal;
177
+ let fatalClass;
178
+ let fatalCode;
179
+ let entryClass;
180
+ const list = Array.isArray(lines) ? [...lines] : [];
181
+ const plain = [];
182
+ for (const raw of list) {
183
+ if (typeof raw !== 'string')
184
+ continue;
185
+ const t0 = raw.trim();
186
+ if (!t0.startsWith('{')) {
187
+ plain.push(raw);
188
+ continue;
189
+ }
190
+ const line = clean(raw);
191
+ if (line === undefined)
192
+ continue;
193
+ const t = line.trim();
194
+ if (!t.startsWith('{'))
195
+ continue;
196
+ const o = parseJsonLine(t);
197
+ if (!isRecord(o))
198
+ continue;
199
+ const m = own(o, 'msg');
200
+ const err = own(o, 'err');
201
+ if (m === 'fatal' && typeof err === 'string' && err.trim() !== '') {
202
+ const full = clean(err);
203
+ const s = full === undefined ? undefined : full.replace(/^\s*Error:\s*/, '');
204
+ if (s !== undefined && s.trim() !== '') {
205
+ fatal = capSentence(s);
206
+ fatalClass = classifyRefusalText(s);
207
+ fatalCode = refusalCodesIn(s).find((x) => CONFIG_CODE.test(x));
208
+ }
209
+ continue;
210
+ }
211
+ const c = own(o, 'code');
212
+ const h = own(o, 'hint');
213
+ if (typeof c === 'string' && CONFIG_CODE.test(c) && typeof h === 'string' && h.trim() !== '') {
214
+ const model = own(o, 'model');
215
+ const who = typeof model === 'string' && model !== '' ? `"${model}": ` : '';
216
+ const s = clean(`${who}${h}`);
217
+ const cc = clean(c);
218
+ if (s === undefined || cc === undefined || !CONFIG_CODE.test(cc))
219
+ continue;
220
+ const sentence = capSentence(s);
221
+ code = cc;
222
+ const ch = clean(h);
223
+ hint = ch === undefined ? undefined : capSentence(ch);
224
+ if (Object.hasOwn(ENGINE_BOOT_REFUSAL_CODES, cc) && ENGINE_BOOT_REFUSAL_CODES[cc] !== 'data_root_refused')
225
+ entryClass = { reason: ENGINE_BOOT_REFUSAL_CODES[cc], code: cc };
226
+ if (hints.includes(sentence))
227
+ continue;
228
+ hints.push(sentence);
229
+ if (hints.length > BOOT_REFUSAL_MAX_HINTS)
230
+ hints.shift();
231
+ }
232
+ }
233
+ let text;
234
+ let cls = fatalClass ?? entryClass;
235
+ const parts = [...hints, ...(fatal !== undefined ? [fatal] : [])];
236
+ if (parts.length > 0)
237
+ text = parts.join('\n');
238
+ if (cls === undefined) {
239
+ let from = -1;
240
+ for (let i = plain.length - 1; i >= 0; i--)
241
+ if (plain[i].includes(SCHEMA_MISMATCH_CODE)) {
242
+ from = i;
243
+ break;
244
+ }
245
+ if (from >= 0) {
246
+ const block = clean(plain.slice(from).join('\n'));
247
+ const got = block === undefined ? undefined : classifyRefusalText(block);
248
+ if (block !== undefined && got !== undefined) {
249
+ cls = got;
250
+ if (text === undefined)
251
+ text = capSentence(block);
252
+ }
253
+ }
254
+ }
255
+ if (text === undefined)
256
+ return undefined;
257
+ if (code === undefined)
258
+ code = cls?.code ?? fatalCode;
259
+ const dr = cls?.dataRoot;
260
+ return deepFreeze({
261
+ ...(code !== undefined ? { code } : {}),
262
+ ...(hint !== undefined ? { hint } : {}),
263
+ text,
264
+ ...(cls !== undefined ? { reason: cls.reason, restartWouldHelp: false } : {}),
265
+ ...(dr !== undefined
266
+ ? {
267
+ variant: dr.variant,
268
+ findings: dr.findings,
269
+ ...(dr.highWater !== undefined ? { highWater: dr.highWater } : {}),
270
+ ...(dr.engineVersion !== undefined ? { engineVersion: dr.engineVersion } : {}),
271
+ ...(dr.markerPath !== undefined ? { markerPath: dr.markerPath } : {}),
272
+ waysOut: ['newer_build', 'separate_data_root', 'restore_backup', 'repair_access'],
273
+ }
274
+ : {}),
275
+ });
276
+ }
277
+ catch {
278
+ return undefined;
279
+ }
280
+ }
281
+ function againOf(retry, form) {
282
+ if (retry === 'command')
283
+ return msg('engine.unavailable.again.command');
284
+ return msg(form !== undefined && form.kind === 'embedded' && form.install === 'app' ? 'engine.unavailable.again.app' : 'engine.unavailable.again.session');
285
+ }
286
+ function configDirKey() {
287
+ for (const row of LOCAL_ENGINE_SPAWN_ENV)
288
+ if (row.value.kind === 'path' && row.value.slot === 'configHome' && !row.userOverridable)
289
+ return row.key;
290
+ return undefined;
291
+ }
292
+ function formOf(v) {
293
+ const kind = own(v, 'kind');
294
+ if (kind === 'deployment')
295
+ return { kind: 'deployment' };
296
+ if (kind !== 'embedded')
297
+ return undefined;
298
+ const install = own(v, 'install');
299
+ if (typeof install !== 'string' || !ENGINE_INSTALL_SHAPES.includes(install))
300
+ return undefined;
301
+ const dataDir = own(v, 'dataDir');
302
+ return { kind: 'embedded', install: install, ...(typeof dataDir === 'string' && dataDir.trim() !== '' ? { dataDir: flat(dataDir) } : {}) };
303
+ }
304
+ function dataRootWaysOut(form, highWater, retry) {
305
+ const again = againOf(retry, form);
306
+ if (form.kind === 'deployment') {
307
+ const who = highWater !== undefined ? msg('engine.bootRefusal.who.buildAtLeast', { version: highWater }) : msg('engine.bootRefusal.who.build');
308
+ return msg('engine.bootRefusal.waysOut', {
309
+ newer: msg('engine.bootRefusal.newer.deployment', { who }),
310
+ separate: msg('engine.bootRefusal.separate.deployment'),
311
+ restore: msg('engine.bootRefusal.restoreDeployment'),
312
+ repair: msg('engine.bootRefusal.repairDeployment'),
313
+ });
314
+ }
315
+ const app = form.install === 'app';
316
+ const who = app
317
+ ? highWater !== undefined ? msg('engine.bootRefusal.who.appAtLeast', { version: highWater }) : msg('engine.bootRefusal.who.app')
318
+ : highWater !== undefined ? msg('engine.bootRefusal.who.semaAtLeast', { version: highWater }) : msg('engine.bootRefusal.who.sema');
319
+ const newerKey = form.install === 'npm-global' || form.install === 'managed'
320
+ ? 'engine.bootRefusal.newer.update'
321
+ : form.install === 'npm-local'
322
+ ? 'engine.bootRefusal.newer.projectLocal'
323
+ : form.install === 'dev'
324
+ ? 'engine.bootRefusal.newer.devTree'
325
+ : app
326
+ ? 'engine.bootRefusal.newer.app'
327
+ : 'engine.bootRefusal.newer.unknown';
328
+ const key = configDirKey() ?? '';
329
+ return msg('engine.bootRefusal.waysOut', {
330
+ newer: msg(newerKey, { who, again }),
331
+ separate: msg(app ? 'engine.bootRefusal.separate.app' : 'engine.bootRefusal.separate.embedded', { key }),
332
+ restore: msg('engine.bootRefusal.restore', { folder: form.dataDir ?? msg('engine.bootRefusal.folder.default'), again }),
333
+ repair: msg('engine.bootRefusal.repair', { again }),
334
+ });
335
+ }
336
+ function armFix(reason, retry, facts, form) {
337
+ const again = againOf(retry, form);
338
+ switch (reason) {
339
+ case 'model_setup':
340
+ return msg('engine.unavailable.fix.modelSetup', { again });
341
+ case 'credential_conflict':
342
+ return msg('engine.unavailable.fix.credentialConflict', { again });
343
+ case 'credential_refused':
344
+ if (facts.code === 'config.center_credential_malformed')
345
+ return msg('engine.unavailable.fix.credentialMalformed', { again, tokenFile: SETTINGS_WEB_ADMIN_TOKEN_ENV.tokenFile });
346
+ if (facts.code === 'config.center_credential_user_session_multi_tenant') {
347
+ return msg('engine.unavailable.fix.credentialMultiTenant', { again, token: SETTINGS_WEB_ADMIN_TOKEN_ENV.token, tokenFile: SETTINGS_WEB_ADMIN_TOKEN_ENV.tokenFile });
348
+ }
349
+ return msg('engine.unavailable.fix.credential', { again });
350
+ case 'not_answering':
351
+ case 'previous_not_stopped': {
352
+ const wait = msg(reason === 'previous_not_stopped' ? 'engine.unavailable.wait.exit' : facts.answer === 'unanswered' ? 'engine.unavailable.wait.respond' : 'engine.unavailable.wait.healthy');
353
+ return facts.pid !== undefined ? msg('engine.unavailable.fix.waitPid', { wait, again, pid: facts.pid }) : msg('engine.unavailable.fix.wait', { wait, again });
354
+ }
355
+ case 'address_refused':
356
+ case 'version_refused':
357
+ return undefined;
358
+ default:
359
+ return msg('engine.unavailable.fix.diagnose', { retry: msg(retry === 'command' ? 'engine.unavailable.retry.command' : 'engine.unavailable.retry.session') });
360
+ }
361
+ }
362
+ function refusalView(r) {
363
+ const text = own(r, 'text');
364
+ const code = own(r, 'code');
365
+ const reason = own(r, 'reason');
366
+ const findingsRaw = own(r, 'findings');
367
+ let findings;
368
+ try {
369
+ if (Array.isArray(findingsRaw)) {
370
+ const fs = [];
371
+ const n = readOwnDataValue(findingsRaw, 'length');
372
+ for (let i = 0; typeof n === 'number' && i < n && i < BOOT_REFUSAL_MAX_FINDINGS + 1; i++) {
373
+ const f = readOwnDataValue(findingsRaw, String(i));
374
+ if (typeof f === 'string' && f.trim() !== '')
375
+ appendOwnElement(fs, f);
376
+ }
377
+ if (fs.length > 0)
378
+ findings = fs;
379
+ }
380
+ }
381
+ catch {
382
+ findings = undefined;
383
+ }
384
+ const hw = own(r, 'highWater');
385
+ const validReason = typeof reason === 'string' && Object.values(ENGINE_BOOT_REFUSAL_CODES).includes(reason) ? reason : undefined;
386
+ return {
387
+ ...(typeof text === 'string' && text.trim() !== '' ? { text } : {}),
388
+ ...(typeof code === 'string' && CONFIG_CODE.test(code) ? { code } : {}),
389
+ ...(validReason !== undefined ? { reason: validReason } : {}),
390
+ ...(findings !== undefined ? { findings } : {}),
391
+ ...(typeof hw === 'string' && isRelease(hw) ? { highWater: hw } : {}),
392
+ };
393
+ }
394
+ export function engineBootRefusalSentence(refusal, lang, form) {
395
+ try {
396
+ const r = refusalView(refusal);
397
+ if (r.text === undefined)
398
+ return undefined;
399
+ const f = formOf(form);
400
+ if (f !== undefined && r.reason !== undefined) {
401
+ if (r.reason === 'data_root_refused' && r.findings !== undefined) {
402
+ return renderMessage(msg('engine.bootRefusal.withWaysOut', { reason: flat(r.findings.join(' ')), waysOut: dataRootWaysOut(f, r.highWater, 'session') }), lang);
403
+ }
404
+ const fix = r.reason !== 'data_root_refused' ? armFix(r.reason, 'session', r.code !== undefined ? { code: r.code } : {}, f) : undefined;
405
+ if (fix !== undefined)
406
+ return renderMessage(msg('engine.bootRefusal.withFix', { reason: `${stripEndStop(r.text.trim())}.`, fix }), lang);
407
+ }
408
+ return renderMessage(msg('localEngine.bootRefusal', { reason: r.text }), lang);
409
+ }
410
+ catch {
411
+ return undefined;
412
+ }
413
+ }
414
+ const LANE_RETRY = Object.freeze({ interactive: 'session', print: 'command', utility: 'session' });
415
+ const HOST_CODE = /^[a-z][a-z0-9_]{0,63}$/;
416
+ export function engineUnavailableLine(facts, lane, lang) {
417
+ try {
418
+ if (typeof lane !== 'string' || !Object.hasOwn(LANE_RETRY, lane))
419
+ return undefined;
420
+ if (!isRecord(facts))
421
+ return undefined;
422
+ const retry = LANE_RETRY[lane];
423
+ const hostReasonRaw = own(facts, 'reason');
424
+ const hostReason = typeof hostReasonRaw === 'string' && ENGINE_UNAVAILABLE_REASONS.includes(hostReasonRaw) ? hostReasonRaw : undefined;
425
+ const codeRaw = own(facts, 'code');
426
+ const hostCode = typeof codeRaw === 'string' && HOST_CODE.test(codeRaw) ? codeRaw : undefined;
427
+ const detailRaw = own(facts, 'detail');
428
+ const hostDetail = typeof detailRaw === 'string' && detailRaw.trim() !== '' ? flat(detailRaw) : undefined;
429
+ const exitRaw = own(facts, 'engineExitCode');
430
+ const sigRaw = own(facts, 'engineSignal');
431
+ const pidRaw = own(facts, 'pid');
432
+ const pid = typeof pidRaw === 'number' && Number.isInteger(pidRaw) && pidRaw > 0 ? pidRaw : undefined;
433
+ const answer = healthProbeVerdictOf(own(facts, 'answer'))?.kind;
434
+ const refusal = refusalView(own(facts, 'refusal'));
435
+ const form = formOf(own(facts, 'form'));
436
+ const reason = refusal.reason ?? hostReason;
437
+ const tag = `reason=${hostCode ?? reason ?? 'unknown'} ` +
438
+ `engine_exit=${typeof exitRaw === 'number' && Number.isFinite(exitRaw) ? String(exitRaw) : 'none'} ` +
439
+ `engine_signal=${typeof sigRaw === 'string' && /^[A-Z][A-Z0-9]{0,15}$/.test(sigRaw) ? sigRaw : 'none'}`;
440
+ let detail;
441
+ let fix;
442
+ if (refusal.reason !== undefined && refusal.text !== undefined) {
443
+ if (refusal.reason === 'data_root_refused' && form !== undefined && refusal.findings !== undefined) {
444
+ detail = flat(refusal.findings.join(' '));
445
+ fix = dataRootWaysOut(form, refusal.highWater, retry);
446
+ }
447
+ else if (refusal.reason === 'data_root_refused') {
448
+ detail = flat(refusal.text);
449
+ fix = undefined;
450
+ }
451
+ else {
452
+ detail = flat(refusal.text);
453
+ fix = armFix(refusal.reason, retry, refusal.code !== undefined ? { code: refusal.code } : {}, form);
454
+ }
455
+ }
456
+ else if (reason === 'data_root_refused') {
457
+ detail = hostDetail;
458
+ fix = form !== undefined ? dataRootWaysOut(form, undefined, retry) : undefined;
459
+ }
460
+ else {
461
+ detail = hostDetail;
462
+ fix = armFix(reason, retry, { ...(hostCode !== undefined ? { code: hostCode } : {}), ...(pid !== undefined ? { pid } : {}), ...(answer !== undefined ? { answer } : {}) }, form);
463
+ }
464
+ const head = reason === undefined
465
+ ? msg('engine.unavailable.head.unknown')
466
+ : reason === 'not_answering'
467
+ ? msg(answer === 'unanswered' ? 'engine.unavailable.head.notAnswering' : 'engine.unavailable.head.noHealthyAnswer')
468
+ : reason === 'previous_not_stopped'
469
+ ? msg('engine.unavailable.head.drainStuck')
470
+ : reason === 'address_refused'
471
+ ? msg('engine.unavailable.head.addressRefused')
472
+ : reason === 'version_refused'
473
+ ? msg('engine.unavailable.head.versionRefused')
474
+ : reason === 'not_running' || (reason === 'model_setup' && refusal.reason === undefined)
475
+ ? msg('engine.unavailable.head.notRunning')
476
+ : msg('engine.unavailable.head.refused');
477
+ let ref;
478
+ if (reason === 'address_refused' || reason === 'version_refused') {
479
+ ref = detail !== undefined ? msg('engine.unavailable.lineRefusedUse', { tag, head, detail }) : msg('engine.unavailable.lineRefusedUseNoDetail', { tag, head });
480
+ }
481
+ else {
482
+ ref =
483
+ fix === undefined
484
+ ? detail !== undefined
485
+ ? msg('engine.unavailable.lineNoFix', { tag, head, detail })
486
+ : msg('engine.unavailable.lineBare', { tag, head })
487
+ : detail !== undefined
488
+ ? msg('engine.unavailable.line', { tag, head, detail: stripEndStop(detail), fix })
489
+ : msg('engine.unavailable.lineNoDetail', { tag, head, fix });
490
+ }
491
+ return flat(renderMessage(ref, lang));
492
+ }
493
+ catch {
494
+ return undefined;
495
+ }
496
+ }
package/dist/engineUrl.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { isLoopbackWireUrl } from './engineWireSdk.js';
2
+ import { SETTINGS_HTTP_URL_FLAWS, SETTINGS_STARTS_WITH_HTTP_SCHEME } from './generated/settingsSchemaFns.js';
2
3
  const SLASH = 47;
3
4
  function refusedBase(reason) {
4
5
  return Object.freeze({ ok: false, reason });
@@ -18,7 +19,7 @@ export function normalizeEngineBaseUrl(raw) {
18
19
  const trimmed = raw.trim();
19
20
  if (trimmed.length === 0)
20
21
  return refusedBase('empty');
21
- if (!/^https?:\/\//i.test(trimmed))
22
+ if (!SETTINGS_STARTS_WITH_HTTP_SCHEME(trimmed))
22
23
  return refusedBase('scheme');
23
24
  let parsed;
24
25
  try {
@@ -29,7 +30,8 @@ export function normalizeEngineBaseUrl(raw) {
29
30
  }
30
31
  if (parsed.username !== '' || parsed.password !== '')
31
32
  return refusedBase('userinfo');
32
- if (trimmed.includes('?') || trimmed.includes('#'))
33
+ const parts = SETTINGS_HTTP_URL_FLAWS(trimmed, ['query', 'fragment']);
34
+ if (parts.includes('query') || parts.includes('fragment'))
33
35
  return refusedBase('query_or_fragment');
34
36
  return Object.freeze({ ok: true, url: withoutTrailingSlashes(trimmed) });
35
37
  }
package/dist/eventLeg.js CHANGED
@@ -9,7 +9,6 @@ import { hostLog } from './host.js';
9
9
  import { guardedRead, readOwnDataNonEmptyString, readOwnDataValue } from './ownKey.js';
10
10
  import { settleEngineClosedApproval } from './hitl/approvalHolds.js';
11
11
  import { approvalCompleteParked } from './hitl/approvalCompleteParked.js';
12
- import { setBridgeRunHandleFallback } from './hitl/frameRouter.js';
13
12
  export const EVENT_LEG_KINDS = Object.freeze(['live', 'durable', 'continuation']);
14
13
  export const EVENT_LEG_TABLE = Object.freeze({
15
14
  live: Object.freeze({ stages: Object.freeze(['bindRun', 'stampOwner', 'hitlFrames', 'askBridge', 'idleTriage']), windowIsCurrent: true }),
@@ -249,7 +248,9 @@ export function composeEventLeg(source, leg, ports) {
249
248
  return;
250
249
  if (!isCurrentNow() || ports.signal?.aborted === true)
251
250
  return;
252
- callPort('askBridge.onBreak', () => port.call(hostBridge, event));
251
+ const legRun = lastBound?.taskId;
252
+ const named = event.runId === undefined && legRun !== undefined ? Object.freeze({ ...event, runId: legRun }) : event;
253
+ callPort('askBridge.onBreak', () => port.call(hostBridge, named));
253
254
  };
254
255
  const deps = hostView(hostBridge, {
255
256
  runsEvents: () => runsEvents,
@@ -259,7 +260,6 @@ export function composeEventLeg(source, leg, ports) {
259
260
  },
260
261
  onBreak: () => onBreak,
261
262
  });
262
- setBridgeRunHandleFallback(deps, () => lastBound?.taskId);
263
263
  inner = bridgeAskUserQuestionGates(inner, deps, { ...(ports.signal !== undefined ? { signal: ports.signal } : {}), ...(legRunId !== undefined ? { taskId: legRunId } : {}) });
264
264
  }
265
265
  const baseUrl = ports.idleTriage?.baseUrl;
@@ -1,8 +1,8 @@
1
- import { DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, PARKED_RESUME_STARTUP_FAILED, RESUME_POLICY_FOLD_CODE, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, isRefusedParkCode } from './engineErrorCodes.js';
1
+ import { CORRUPT_ROW_ERROR_CODE, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, PARKED_RESUME_STARTUP_FAILED, RESUME_POLICY_FOLD_CODE, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, isRefusedParkCode } from './engineErrorCodes.js';
2
2
  import { RESUME_REFUSAL_CODES } from './resumeRefusalCopy.js';
3
3
  export function isGateStandingErrorCode(code, retriable) {
4
4
  return (code === RESUME_POLICY_FOLD_CODE ||
5
- code === 'corrupt' ||
5
+ code === CORRUPT_ROW_ERROR_CODE ||
6
6
  (isRefusedParkCode(code) && retriable === true) ||
7
7
  (typeof code === 'string' && RESUME_REOPEN_CODES.includes(code) && retriable === true) ||
8
8
  code === DECIDE_WORKFLOW_PARKS_UNREADABLE ||
@@ -1,4 +1,4 @@
1
- export declare const SDK_ABORT_CAUSES: readonly ["client_disconnected", "ask_park_grace_exhausted", "cancel_verb"];
1
+ export declare const SDK_ABORT_CAUSES: readonly ["client_disconnected", "ask_park_grace_exhausted", "cancel_verb", "stall_verdict"];
2
2
  export declare const SDK_STATUS_DERIVED_COARSE_CODES: readonly ["request.rejected", "auth.unauthorized", "auth.forbidden", "not_found.resource", "request.payload_too_large", "request.unprocessable", "limit.rate_exceeded", "capability.unavailable", "internal.error"];
3
3
  export declare const SDK_DENY_REASON_ROUTING_FAILURE: "routing_failure_fail_closed";
4
4
  export declare const SDK_ASK_ROW_ENDING_CAUSES: readonly ["routing_failure_fail_closed", "run_cancelled", "run_exited", "batch_aborted", "batch_sibling_withdrawn", "batch_bound_elsewhere", "adhoc_leg_no_durable_domain", "orphan_ttl_exceeded", "crashed_before_park", "shutdown_before_park"];
@@ -10,4 +10,5 @@ export declare const SDK_PERMISSION_MODE_PERSIST_MISSES: readonly ["claim_releas
10
10
  export declare const SDK_DECIDE_BINDING_KEYS: readonly ["boundCallId", "boundInputHash"];
11
11
  export declare const SDK_APPROVAL_QUEUE_KINDS: readonly ["checkpoint", "peer_inbound"];
12
12
  export declare const SDK_SESSION_MEMORY_UNOBSERVED_REASONS: readonly ["no_settled_run", "run_result_missing", "run_result_unobserved", "memory_not_mounted", "no_leaf"];
13
+ export declare const SDK_NON_RETRYABLE_CODES: readonly ["corrupt_session", "config.tool_name_too_long", "config.tool_contract_too_long", "config.tool_roster_bound", "config.tool_schema_bound", "state.scenario_assignment_unknown", "corrupt", "internal.memory_control_plane_corrupt", "approvals.read_corrupt", "workflow.journal_incompatible", "internal.org_delivery_quota_unreadable"];
13
14
  export declare const SDK_STREAM_ENDED_REASONS: readonly ["empty_legs", "consecutive_failures"];
@@ -2,6 +2,7 @@ export const SDK_ABORT_CAUSES = Object.freeze([
2
2
  "client_disconnected",
3
3
  "ask_park_grace_exhausted",
4
4
  "cancel_verb",
5
+ "stall_verdict",
5
6
  ]);
6
7
  export const SDK_STATUS_DERIVED_COARSE_CODES = Object.freeze([
7
8
  "request.rejected",
@@ -63,6 +64,19 @@ export const SDK_SESSION_MEMORY_UNOBSERVED_REASONS = Object.freeze([
63
64
  "memory_not_mounted",
64
65
  "no_leaf",
65
66
  ]);
67
+ export const SDK_NON_RETRYABLE_CODES = Object.freeze([
68
+ "corrupt_session",
69
+ "config.tool_name_too_long",
70
+ "config.tool_contract_too_long",
71
+ "config.tool_roster_bound",
72
+ "config.tool_schema_bound",
73
+ "state.scenario_assignment_unknown",
74
+ "corrupt",
75
+ "internal.memory_control_plane_corrupt",
76
+ "approvals.read_corrupt",
77
+ "workflow.journal_incompatible",
78
+ "internal.org_delivery_quota_unreadable",
79
+ ]);
66
80
  export const SDK_STREAM_ENDED_REASONS = Object.freeze([
67
81
  "empty_legs",
68
82
  "consecutive_failures",
@@ -111,3 +111,4 @@ export declare const SETTINGS_RESOLVE_CATALOG_DEFAULT_MODEL: (models: {
111
111
  };
112
112
  };
113
113
  export declare const SETTINGS_DEFAULT_ROLE_TIER_LADDER: readonly ["pro", "flash", "lite"];
114
+ export declare const SETTINGS_HTTP_URL_FLAWS: (raw: string, forbid: readonly ("userinfo" | "query" | "fragment")[]) => readonly ("not-http-url" | "userinfo" | "query" | "fragment")[];
@@ -15,6 +15,7 @@ import { SETTINGS_LAYER_SOURCES_CLOSURE } from './settingsSchemaSettingsSources.
15
15
  import { SETTINGS_ACTIVE_TIERS_CLOSURE } from './settingsSchemaActiveTiers.js';
16
16
  import { SETTINGS_TIER_WORDS_CLOSURE } from './settingsSchemaTierWords.js';
17
17
  import { SETTINGS_DEFAULT_MODEL_CLOSURE } from './settingsSchemaDefaultModel.js';
18
+ import { SETTINGS_URL_SHAPE_CLOSURE } from './settingsSchemaUrlShape.js';
18
19
  export const SETTINGS_AT_MENTION_MODES = Object.freeze([
19
20
  "all",
20
21
  "none",
@@ -198,3 +199,5 @@ export const SETTINGS_TIER_LADDER_FROM = SETTINGS_TIER_WORDS.tierLadderFrom;
198
199
  const SETTINGS_DEFAULT_MODEL = SETTINGS_DEFAULT_MODEL_CLOSURE(SETTINGS_RESOLVE_ACTIVE_TIERS, SETTINGS_TIER_LADDER_FROM);
199
200
  export const SETTINGS_RESOLVE_CATALOG_DEFAULT_MODEL = SETTINGS_DEFAULT_MODEL.resolveCatalogDefaultModel;
200
201
  export const SETTINGS_DEFAULT_ROLE_TIER_LADDER = SETTINGS_DEFAULT_MODEL.DEFAULT_ROLE_TIER_LADDER;
202
+ const SETTINGS_URL_SHAPE = SETTINGS_URL_SHAPE_CLOSURE(SETTINGS_IS_HIERARCHICAL_URL);
203
+ export const SETTINGS_HTTP_URL_FLAWS = SETTINGS_URL_SHAPE.httpUrlFlaws;