@sema-agent/client-core 0.106.0 → 0.108.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.
- package/CHANGELOG.md +199 -0
- package/README.md +35 -26
- package/dist/adapter/activeRunSelfHeal.d.ts +10 -0
- package/dist/adapter/activeRunSelfHeal.js +68 -23
- package/dist/checkpointRowVerdict.d.ts +11 -0
- package/dist/checkpointRowVerdict.js +35 -0
- package/dist/cloudConfigWireCaps.d.ts +10 -0
- package/dist/cloudConfigWireCaps.js +33 -0
- package/dist/coreValuePorts.d.ts +17 -1
- package/dist/coreValuePorts.js +5 -0
- package/dist/decideReceipt.js +2 -1
- package/dist/displayUntrusted.d.ts +5 -3
- package/dist/displayUntrusted.js +50 -41
- package/dist/engineErrorCodes.d.ts +5 -0
- package/dist/engineErrorCodes.js +5 -0
- package/dist/engineNoticeCodes.d.ts +31 -1
- package/dist/engineNoticeCodes.js +182 -9
- package/dist/engineTargetSeat.js +1 -0
- package/dist/errorSupplementRoles.js +4 -1
- package/dist/eventLeg.js +1 -1
- package/dist/executionLaneCapability.js +3 -2
- package/dist/executionLaneWords.d.ts +1 -0
- package/dist/executionLaneWords.js +4 -0
- package/dist/gateOutcome.d.ts +10 -1
- package/dist/gateOutcome.js +48 -1
- package/dist/generated/engineFactTables.d.ts +1 -0
- package/dist/generated/engineFactTables.js +5 -0
- package/dist/generated/engineNoticeTables.js +12 -3
- package/dist/generated/settingsSchemaFns.d.ts +4 -2
- package/dist/generated/settingsSchemaFns.js +9 -3
- package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -1
- package/dist/generated/settingsSchemaMcpRequestEntry.js +9 -18
- package/dist/generated/settingsSchemaReservedMemberName.d.ts +1 -0
- package/dist/generated/settingsSchemaReservedMemberName.js +7 -0
- package/dist/generated/settingsSchemaTables.d.ts +2 -0
- package/dist/generated/settingsSchemaTables.js +10 -0
- package/dist/generated/settingsSchemaWireName.d.ts +1 -0
- package/dist/generated/settingsSchemaWireName.js +8 -0
- package/dist/headlessReconnectWire.js +12 -7
- package/dist/hitl/approvalAskers.d.ts +13 -0
- package/dist/hitl/approvalAskers.js +79 -0
- package/dist/hitl/approvalResolution.d.ts +8 -1
- package/dist/hitl/approvalResolution.js +37 -2
- package/dist/hitl/approvalsFeed.js +5 -13
- package/dist/hitl/askParkRowRouting.js +17 -1
- package/dist/hitl/decisionRefusal.d.ts +1 -0
- package/dist/hitl/decisionRefusal.js +5 -2
- package/dist/hitl/decisionSend.d.ts +2 -0
- package/dist/hitl/decisionSend.js +22 -12
- package/dist/hitl/frameRouter.d.ts +3 -2
- package/dist/hitl/frameRouter.js +28 -6
- package/dist/hitl/gateLedger.d.ts +2 -0
- package/dist/hitl/gateLedger.js +3 -1
- package/dist/hitl/hitlBridge.d.ts +5 -1
- package/dist/hitl/hitlBridge.js +26 -2
- package/dist/hitl/livePendingAsk.js +4 -2
- package/dist/hitl/parkOwnership.js +4 -5
- package/dist/hitl/parkResolver.js +34 -21
- package/dist/hitl/parkRowBirthWait.d.ts +9 -0
- package/dist/hitl/parkRowBirthWait.js +8 -1
- package/dist/hitl/parkRowDelegation.d.ts +6 -0
- package/dist/hitl/parkRowDelegation.js +33 -0
- package/dist/hitl/persistedRulesWire.d.ts +19 -3
- package/dist/hitl/persistedRulesWire.js +118 -20
- package/dist/hitl/planReviewWire.js +16 -18
- package/dist/hitl/policyDenyCause.d.ts +3 -0
- package/dist/hitl/policyDenyCause.js +16 -0
- package/dist/hitl/sessionAllowRoute.d.ts +5 -0
- package/dist/hitl/sessionAllowRoute.js +42 -0
- package/dist/hitl/sessionPolicyDeliverable.js +1 -1
- package/dist/hitl/standingRows.js +10 -10
- package/dist/hitl/toolApprovalWire.d.ts +8 -2
- package/dist/hitl/toolApprovalWire.js +44 -11
- package/dist/hooksReaderGenerations.d.ts +1 -0
- package/dist/hooksReaderGenerations.js +12 -0
- package/dist/hooksWireCaps.js +8 -4
- package/dist/i18n/messages.en.d.ts +43 -0
- package/dist/i18n/messages.en.js +47 -4
- package/dist/i18n/messages.zh.js +53 -4
- package/dist/index.d.ts +7 -1
- package/dist/index.js +5 -1
- package/dist/injectionLaneNotice.js +2 -1
- package/dist/liveModelCatalog.d.ts +4 -2
- package/dist/liveModelCatalog.js +164 -26
- package/dist/model/catalogDefault.d.ts +25 -0
- package/dist/model/catalogDefault.js +44 -0
- package/dist/noticePresentation.js +2 -0
- package/dist/permissionWireCaps.d.ts +1 -0
- package/dist/permissionWireCaps.js +11 -0
- package/dist/pluginHooksWire.d.ts +5 -3
- package/dist/pluginHooksWire.js +116 -7
- package/dist/queuedDelivery.d.ts +1 -0
- package/dist/queuedDelivery.js +12 -0
- package/dist/resultFrameKeys.js +4 -2
- package/dist/resumeRefusalCopy.js +15 -8
- package/dist/runPermissionModeSwitch.d.ts +2 -1
- package/dist/runPermissionModeSwitch.js +16 -6
- package/dist/sdkWireTransit.d.ts +1 -1
- package/dist/seatContract.d.ts +64 -10
- package/dist/seatContract.js +167 -12
- package/dist/sessionEngine.d.ts +2 -1
- package/dist/sessionEngine.js +5 -0
- package/dist/settingsHooksSalvage.d.ts +5 -0
- package/dist/settingsHooksSalvage.js +54 -0
- package/dist/subagentContentStore.js +1 -1
- package/dist/supportFloor.js +2 -0
- package/dist/taskNotificationAdmission.d.ts +19 -0
- package/dist/taskNotificationAdmission.js +84 -0
- package/dist/toolResult.js +2 -1
- package/dist/webSearchWireCaps.js +9 -4
- package/dist/wireRefusalCopy.d.ts +7 -1
- package/dist/wireRefusalCopy.js +7 -1
- package/docs/INTEGRATION-CLIENTS.md +1189 -18
- package/package.json +5 -5
|
@@ -3,6 +3,7 @@ import type { ActiveRunBusySignal } from './runStream.js';
|
|
|
3
3
|
import type { RejectedSubmissionOrigin } from '../request/submissionIdentity.js';
|
|
4
4
|
import type { PlanReviewReopenTrigger } from '../hitl/planReviewWire.js';
|
|
5
5
|
import { type AskParkAutoReopenBlock } from '../hitl/askParkAutoReopenBlock.js';
|
|
6
|
+
import { type CheckpointRowVerdictReading } from '../checkpointRowVerdict.js';
|
|
6
7
|
import { atMostOnceFailureClass } from '../atMostOnce.js';
|
|
7
8
|
export declare const PLAN_REVIEW_GATE_KIND = "plan_review";
|
|
8
9
|
export type DurableDecideLeg = 'approval' | 'plan_review' | 'other_gate' | 'unreadable';
|
|
@@ -44,6 +45,10 @@ export type ReopenCardVerdict = {
|
|
|
44
45
|
_sema_errorCode?: string;
|
|
45
46
|
_sema_reopenRefusal?: PlanReviewReopenRefusal;
|
|
46
47
|
_sema_policyBlocked?: AskParkAutoReopenBlock;
|
|
48
|
+
_sema_rowVerdict?: Exclude<CheckpointRowVerdictReading, {
|
|
49
|
+
readonly kind: 'ok';
|
|
50
|
+
}>;
|
|
51
|
+
_sema_rowDeadline?: number | null;
|
|
47
52
|
} | {
|
|
48
53
|
reopened: true;
|
|
49
54
|
firstSight: boolean;
|
|
@@ -147,6 +152,10 @@ export type SelfHealOutcome = {
|
|
|
147
152
|
noPresentationSurface?: true;
|
|
148
153
|
errorCode?: string;
|
|
149
154
|
policyBlocked?: AskParkAutoReopenBlock;
|
|
155
|
+
rowVerdict?: Exclude<CheckpointRowVerdictReading, {
|
|
156
|
+
readonly kind: 'ok';
|
|
157
|
+
}>;
|
|
158
|
+
rowDeadline?: 'armed' | 'none';
|
|
150
159
|
} | {
|
|
151
160
|
kind: 'ask-decided-without-card';
|
|
152
161
|
taskId: string;
|
|
@@ -162,6 +171,7 @@ export type SelfHealOutcome = {
|
|
|
162
171
|
delivery: string | null;
|
|
163
172
|
status: string | null;
|
|
164
173
|
reopened: ReopenCardVerdict | null;
|
|
174
|
+
messageId?: string;
|
|
165
175
|
} | {
|
|
166
176
|
kind: 'running-steer-failed';
|
|
167
177
|
taskId: string;
|
|
@@ -5,7 +5,8 @@ import { registeredPlanReviewCardFacts } from '../planReviewCardFacts.js';
|
|
|
5
5
|
import { DEFAULT_SESSION_KEY } from '../sessionSlot.js';
|
|
6
6
|
import { ASK_PARK_AUTO_REOPEN_BLOCKS, askParkAutoReopenBlockedContent } from '../hitl/askParkAutoReopenBlock.js';
|
|
7
7
|
import { corruptStoredRowContent, corruptStoredRowWhere, effectiveWireErrorCode } from '../wireErrorTriage.js';
|
|
8
|
-
import { readThrownStatusSlot } from '../wireFailureShape.js';
|
|
8
|
+
import { readThrownStatusSlot, slotReadOf } from '../wireFailureShape.js';
|
|
9
|
+
import { checkpointDeadlineStateOf, checkpointRowBarOf, checkpointRowBarSentence, rowBarWayOutContent } from '../checkpointRowVerdict.js';
|
|
9
10
|
import { guardedRead, readOwnDataNonEmptyString, readOwnDataValue } from '../ownKey.js';
|
|
10
11
|
import { steerBodyOf, UNOBSERVED_STEER_PRIORITY } from '../controlRouter.js';
|
|
11
12
|
import { atMostOnceFailureClass } from '../atMostOnce.js';
|
|
@@ -145,6 +146,12 @@ function injectedCarrierVerdict(items, busyTaskId) {
|
|
|
145
146
|
return null;
|
|
146
147
|
return allNameBusyRun && present === length ? 'redundant' : 'deferred';
|
|
147
148
|
}
|
|
149
|
+
function injectedCarrierVerdictOf(deps, busyTaskId) {
|
|
150
|
+
return deps?.submissionOrigin === 'injected' ? injectedCarrierVerdict(guardedRead(() => deps?.injectedCarriers), busyTaskId) : null;
|
|
151
|
+
}
|
|
152
|
+
function runSettledOutcome(carrierVerdict, settled) {
|
|
153
|
+
return carrierVerdict === 'redundant' ? { kind: 'injected-redundant', taskId: settled.taskId } : settled;
|
|
154
|
+
}
|
|
148
155
|
function sessionOpts(deps) {
|
|
149
156
|
const sessionId = deps?.sessionId;
|
|
150
157
|
return typeof sessionId === 'string' && sessionId.length > 0 ? { session: sessionId } : {};
|
|
@@ -207,6 +214,8 @@ const REOPEN_VERDICT_KEYS = [
|
|
|
207
214
|
'_sema_errorCode',
|
|
208
215
|
'_sema_reopenRefusal',
|
|
209
216
|
'_sema_policyBlocked',
|
|
217
|
+
'_sema_rowVerdict',
|
|
218
|
+
'_sema_rowDeadline',
|
|
210
219
|
];
|
|
211
220
|
function snapshotReopenVerdict(raw) {
|
|
212
221
|
if (raw === null || raw === undefined)
|
|
@@ -320,6 +329,30 @@ function reopenPolicyBlockedOf(verdict) {
|
|
|
320
329
|
return undefined;
|
|
321
330
|
}
|
|
322
331
|
}
|
|
332
|
+
function reopenRowVerdictOf(verdict) {
|
|
333
|
+
try {
|
|
334
|
+
if (verdict.reopened !== false)
|
|
335
|
+
return undefined;
|
|
336
|
+
return checkpointRowBarOf({ rowVerdict: verdict._sema_rowVerdict });
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
function reopenRowDeadlineStateOf(verdict) {
|
|
343
|
+
try {
|
|
344
|
+
if (verdict.reopened !== false)
|
|
345
|
+
return undefined;
|
|
346
|
+
const slot = slotReadOf(verdict, '_sema_rowDeadline');
|
|
347
|
+
if (slot.presence !== 'present')
|
|
348
|
+
return undefined;
|
|
349
|
+
const state = checkpointDeadlineStateOf({ deadline: slot.value });
|
|
350
|
+
return state === 'unknown' ? undefined : state;
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
323
356
|
function reopenRefusalOf(verdict) {
|
|
324
357
|
try {
|
|
325
358
|
if (verdict.reopened !== false)
|
|
@@ -583,6 +616,7 @@ export async function attemptActiveRunSelfHeal(signal, runs, deps) {
|
|
|
583
616
|
detail: 'the engine did not name the run that holds this session',
|
|
584
617
|
};
|
|
585
618
|
}
|
|
619
|
+
const carrierVerdict = injectedCarrierVerdictOf(deps, taskId);
|
|
586
620
|
const gateKind = signal.pendingGate?.kind ?? null;
|
|
587
621
|
const gateLeg = durableDecideLegOf({ gateKind });
|
|
588
622
|
const pendingCp = signal.pendingGate?.checkpointId;
|
|
@@ -590,7 +624,7 @@ export async function attemptActiveRunSelfHeal(signal, runs, deps) {
|
|
|
590
624
|
if (gateLeg === 'plan_review')
|
|
591
625
|
return planReviewArm(taskId, signal, deps, sameTaskCp);
|
|
592
626
|
if (gateLeg === 'approval')
|
|
593
|
-
return askParkArm(taskId, signal, runs, deps);
|
|
627
|
+
return askParkArm(taskId, signal, runs, carrierVerdict, deps);
|
|
594
628
|
let status = signal.activeTaskStatus;
|
|
595
629
|
const statusFresh = status === null;
|
|
596
630
|
if (status === null) {
|
|
@@ -610,16 +644,16 @@ export async function attemptActiveRunSelfHeal(signal, runs, deps) {
|
|
|
610
644
|
return { kind: 'state-unknown', taskId, detail: 'the engine reported no status for that run' };
|
|
611
645
|
}
|
|
612
646
|
if (isSdkRunTerminal(status))
|
|
613
|
-
return { kind: 'running-settled', taskId, status };
|
|
647
|
+
return runSettledOutcome(carrierVerdict, { kind: 'running-settled', taskId, status });
|
|
614
648
|
const triageGate = signal.pendingGate && !statusFresh ? { pendingGateKind: signal.pendingGate.kind ?? null } : {};
|
|
615
649
|
if (gateKind !== null)
|
|
616
650
|
return { kind: 'not-parked', taskId, status, ...triageGate };
|
|
617
651
|
if (PLAN_REVIEW_STATES.includes(status))
|
|
618
652
|
return planReviewArm(taskId, signal, deps);
|
|
619
653
|
if (ASK_PARK_STATES.includes(status))
|
|
620
|
-
return askParkArm(taskId, signal, runs, deps);
|
|
654
|
+
return askParkArm(taskId, signal, runs, carrierVerdict, deps);
|
|
621
655
|
if (RUNNING_STATES.includes(status)) {
|
|
622
|
-
return runningChoiceArm(taskId, status, signal, signal.activeTaskStatus !== null, runs, deps);
|
|
656
|
+
return runningChoiceArm(taskId, status, signal, signal.activeTaskStatus !== null, runs, carrierVerdict, deps);
|
|
623
657
|
}
|
|
624
658
|
return { kind: 'not-parked', taskId, status, ...triageGate };
|
|
625
659
|
}
|
|
@@ -668,7 +702,7 @@ async function planReviewArm(taskId, signal, deps, checkpointId) {
|
|
|
668
702
|
...(reopenRefusal !== undefined ? { reopenRefusal } : {}),
|
|
669
703
|
};
|
|
670
704
|
}
|
|
671
|
-
async function askParkArm(taskId, signal, runs, deps) {
|
|
705
|
+
async function askParkArm(taskId, signal, runs, carrierVerdict, deps) {
|
|
672
706
|
const verdict = await askVerdict(taskId, deps);
|
|
673
707
|
if (reopenDelivered(verdict))
|
|
674
708
|
return { kind: 'ask-reopened', taskId, firstSight: verdict.firstSight === true };
|
|
@@ -692,17 +726,19 @@ async function askParkArm(taskId, signal, runs, deps) {
|
|
|
692
726
|
};
|
|
693
727
|
}
|
|
694
728
|
if (release.lastStatus !== null && RUNNING_STATES.includes(release.lastStatus)) {
|
|
695
|
-
return runningChoiceArm(taskId, release.lastStatus, signal, false, runs, deps);
|
|
729
|
+
return runningChoiceArm(taskId, release.lastStatus, signal, false, runs, carrierVerdict, deps);
|
|
696
730
|
}
|
|
697
731
|
return { kind: 'ask-decided-release-unknown', taskId, lastStatus: release.lastStatus };
|
|
698
732
|
}
|
|
699
733
|
const inFlight = reopenRefusedForDecisionInFlight(verdict);
|
|
700
734
|
if (verdict.reopened === false && verdict.decidedWithoutCard !== true && verdict.pendingRowGone === true && !inFlight) {
|
|
701
|
-
return staleParkArm(taskId, signal, runs, deps);
|
|
735
|
+
return staleParkArm(taskId, signal, runs, carrierVerdict, deps);
|
|
702
736
|
}
|
|
703
737
|
const noView = reopenRefusedForNoPresentationSurface(verdict);
|
|
704
738
|
const policyBlocked = inFlight || noView ? undefined : reopenPolicyBlockedOf(verdict);
|
|
705
|
-
const
|
|
739
|
+
const rowVerdict = inFlight ? undefined : reopenRowVerdictOf(verdict);
|
|
740
|
+
const rowDeadline = rowVerdict !== undefined ? reopenRowDeadlineStateOf(verdict) : undefined;
|
|
741
|
+
const errorCode = inFlight || noView || reopenRefusedForUserDismissal(verdict) || policyBlocked !== undefined || rowVerdict !== undefined ? undefined : reopenErrorCodeOf(verdict);
|
|
706
742
|
return {
|
|
707
743
|
kind: 'ask-reopen-failed',
|
|
708
744
|
taskId,
|
|
@@ -712,6 +748,8 @@ async function askParkArm(taskId, signal, runs, deps) {
|
|
|
712
748
|
...(noView ? { noPresentationSurface: true } : {}),
|
|
713
749
|
...(errorCode !== undefined ? { errorCode } : {}),
|
|
714
750
|
...(policyBlocked !== undefined ? { policyBlocked } : {}),
|
|
751
|
+
...(rowVerdict !== undefined ? { rowVerdict } : {}),
|
|
752
|
+
...(rowDeadline !== undefined ? { rowDeadline } : {}),
|
|
715
753
|
};
|
|
716
754
|
}
|
|
717
755
|
async function probeRunStatusOnce(taskId, durable, durableGet, deps) {
|
|
@@ -738,7 +776,7 @@ async function probeRunStatusOnce(taskId, durable, durableGet, deps) {
|
|
|
738
776
|
status = readStatusGuarded(record);
|
|
739
777
|
return errorCode !== undefined ? { status, ghost, errorCode } : { status, ghost };
|
|
740
778
|
}
|
|
741
|
-
async function staleParkArm(taskId, busy, runs, deps) {
|
|
779
|
+
async function staleParkArm(taskId, busy, runs, carrierVerdict, deps) {
|
|
742
780
|
const reopenFailed = {
|
|
743
781
|
kind: 'ask-reopen-failed',
|
|
744
782
|
taskId,
|
|
@@ -766,11 +804,11 @@ async function staleParkArm(taskId, busy, runs, deps) {
|
|
|
766
804
|
if (fresh === null)
|
|
767
805
|
return withFailureCode(reopenFailed, first.errorCode);
|
|
768
806
|
if (RUNNING_STATES.includes(fresh))
|
|
769
|
-
return runningChoiceArm(taskId, fresh, busy, false, runs, deps);
|
|
807
|
+
return runningChoiceArm(taskId, fresh, busy, false, runs, carrierVerdict, deps);
|
|
770
808
|
if (PLAN_REVIEW_STATES.includes(fresh))
|
|
771
809
|
return planReviewArm(taskId, busy, deps);
|
|
772
810
|
if (isSdkRunTerminal(fresh))
|
|
773
|
-
return { kind: 'ask-run-settled', taskId, status: fresh };
|
|
811
|
+
return runSettledOutcome(carrierVerdict, { kind: 'ask-run-settled', taskId, status: fresh });
|
|
774
812
|
if (!ASK_PARK_STATES.includes(fresh))
|
|
775
813
|
return reopenFailed;
|
|
776
814
|
const offer = deps?.offerStaleParkChoice;
|
|
@@ -809,7 +847,7 @@ async function staleParkArm(taskId, busy, runs, deps) {
|
|
|
809
847
|
return withFailureCode(reopenFailedAfterCard, afterCard.errorCode);
|
|
810
848
|
if (!ASK_PARK_STATES.includes(afterCard.status)) {
|
|
811
849
|
if (isSdkRunTerminal(afterCard.status))
|
|
812
|
-
return { kind: 'ask-run-settled', taskId, status: afterCard.status };
|
|
850
|
+
return runSettledOutcome(carrierVerdict, { kind: 'ask-run-settled', taskId, status: afterCard.status });
|
|
813
851
|
if (RUNNING_STATES.includes(afterCard.status))
|
|
814
852
|
return { kind: 'not-parked', taskId, status: afterCard.status };
|
|
815
853
|
return !CLAIM_HELD_STATES.includes(afterCard.status) ? reopenFailed : reopenFailedAfterCard;
|
|
@@ -871,11 +909,10 @@ async function cancelAndConfirmRelease(taskId, durable, durableGet, deps) {
|
|
|
871
909
|
(verdict.lastStatus !== null && CLAIM_HELD_STATES.includes(verdict.lastStatus)),
|
|
872
910
|
};
|
|
873
911
|
}
|
|
874
|
-
async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps) {
|
|
912
|
+
async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, carrierVerdict, deps) {
|
|
875
913
|
const notParked = { kind: 'not-parked', taskId, status };
|
|
876
914
|
const offer = deps?.offerRunningChoice;
|
|
877
915
|
const injected = deps?.submissionOrigin === 'injected';
|
|
878
|
-
const carrierVerdict = injected ? injectedCarrierVerdict(guardedRead(() => deps?.injectedCarriers), taskId) : null;
|
|
879
916
|
if (typeof offer !== 'function' && !injected)
|
|
880
917
|
return notParked;
|
|
881
918
|
const text = typeof deps?.deniedMessage === 'string' ? deps.deniedMessage : '';
|
|
@@ -895,7 +932,7 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
|
|
|
895
932
|
if (probeCallerAborted())
|
|
896
933
|
return notParked;
|
|
897
934
|
if (fresh !== null) {
|
|
898
|
-
const routed = await routeFreshNonRunning(fresh, taskId, busy, runs, deps);
|
|
935
|
+
const routed = await routeFreshNonRunning(fresh, taskId, busy, runs, deps, carrierVerdict);
|
|
899
936
|
if (routed !== undefined)
|
|
900
937
|
return routed;
|
|
901
938
|
}
|
|
@@ -936,16 +973,17 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
|
|
|
936
973
|
if (choice === 'steer' && canSteer && runs?.steer !== undefined) {
|
|
937
974
|
try {
|
|
938
975
|
const receipt = await runs.steer(taskId, steerBodyOf({ text }, UNOBSERVED_STEER_PRIORITY), sessionOpts(deps));
|
|
939
|
-
const { delivery, status: receiptStatus } = readSteerReceipt(receipt);
|
|
976
|
+
const { delivery, status: receiptStatus, messageId } = readSteerReceipt(receipt);
|
|
977
|
+
const handedId = messageId !== undefined ? { messageId } : {};
|
|
940
978
|
if (delivery === 'queued') {
|
|
941
979
|
const verdict = receiptStatus !== null && PLAN_REVIEW_STATES.includes(receiptStatus)
|
|
942
980
|
? await planVerdict(taskId, deps)
|
|
943
981
|
: receiptStatus !== null && ASK_PARK_STATES.includes(receiptStatus)
|
|
944
982
|
? await askVerdict(taskId, deps)
|
|
945
983
|
: null;
|
|
946
|
-
return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: verdict };
|
|
984
|
+
return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: verdict, ...handedId };
|
|
947
985
|
}
|
|
948
|
-
return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: null };
|
|
986
|
+
return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: null, ...handedId };
|
|
949
987
|
}
|
|
950
988
|
catch (e) {
|
|
951
989
|
const delivery = atMostOnceFailureClass(e);
|
|
@@ -974,7 +1012,7 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
|
|
|
974
1012
|
return { kind: 'running-not-found', taskId };
|
|
975
1013
|
if (probeCallerAborted() || preFire.status === null)
|
|
976
1014
|
return notParked;
|
|
977
|
-
const rerouted = await routeFreshNonRunning(preFire.status, taskId, busy, runs, deps);
|
|
1015
|
+
const rerouted = await routeFreshNonRunning(preFire.status, taskId, busy, runs, deps, carrierVerdict);
|
|
978
1016
|
if (rerouted !== undefined)
|
|
979
1017
|
return rerouted;
|
|
980
1018
|
const verdict = await cancelAndConfirmRelease(taskId, runs, runs.get, deps);
|
|
@@ -996,15 +1034,15 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
|
|
|
996
1034
|
return { kind: 'running-attach', taskId };
|
|
997
1035
|
return notParked;
|
|
998
1036
|
}
|
|
999
|
-
async function routeFreshNonRunning(fresh, taskId, busy, runs, deps) {
|
|
1037
|
+
async function routeFreshNonRunning(fresh, taskId, busy, runs, deps, carrierVerdict) {
|
|
1000
1038
|
if (RUNNING_STATES.includes(fresh))
|
|
1001
1039
|
return undefined;
|
|
1002
1040
|
if (PLAN_REVIEW_STATES.includes(fresh))
|
|
1003
1041
|
return planReviewArm(taskId, busy, deps);
|
|
1004
1042
|
if (ASK_PARK_STATES.includes(fresh))
|
|
1005
|
-
return askParkArm(taskId, busy, runs, deps);
|
|
1043
|
+
return askParkArm(taskId, busy, runs, carrierVerdict, deps);
|
|
1006
1044
|
if (isSdkRunTerminal(fresh))
|
|
1007
|
-
return { kind: 'running-settled', taskId, status: fresh };
|
|
1045
|
+
return runSettledOutcome(carrierVerdict, { kind: 'running-settled', taskId, status: fresh });
|
|
1008
1046
|
return { kind: 'not-parked', taskId, status: fresh };
|
|
1009
1047
|
}
|
|
1010
1048
|
export const INTERACTIVE_WAY_OUT = EN_MESSAGES['session.selfHeal.wayOut.interactive'];
|
|
@@ -1190,6 +1228,13 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
|
|
|
1190
1228
|
case 'ask-reopen-failed': {
|
|
1191
1229
|
if (outcome.decisionInFlight === true)
|
|
1192
1230
|
return decisionInFlightRow('ask', outcome.taskId, lang);
|
|
1231
|
+
if (outcome.rowVerdict !== undefined) {
|
|
1232
|
+
return say(lang, 'session.selfHeal.row.askReopenFailed.rowUnresumable', {
|
|
1233
|
+
taskId: outcome.taskId,
|
|
1234
|
+
sentence: checkpointRowBarSentence(outcome.rowVerdict),
|
|
1235
|
+
unbound: rowBarWayOutContent(outcome.rowVerdict, outcome.rowDeadline ?? 'unknown', lang),
|
|
1236
|
+
});
|
|
1237
|
+
}
|
|
1193
1238
|
if (outcome.policyBlocked !== undefined)
|
|
1194
1239
|
return askParkAutoReopenBlockedContent(outcome.policyBlocked, outcome.taskId, 'interactive', lang);
|
|
1195
1240
|
const viaEngine = engineDecide && outcome.decidePath ? msg('session.selfHeal.viaEngine', { decidePath: outcome.decidePath }) : '';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type UiLanguage } from './env/uiLanguage.js';
|
|
1
2
|
export type CheckpointRowVerdictReading = {
|
|
2
3
|
readonly kind: 'ok';
|
|
3
4
|
} | {
|
|
@@ -21,3 +22,13 @@ export type CheckpointRequirementsDamagedReading = {
|
|
|
21
22
|
readonly kind: 'row_mismatch';
|
|
22
23
|
};
|
|
23
24
|
export declare function checkpointRequirementsDamagedOf(failure: object | null | undefined): CheckpointRequirementsDamagedReading | undefined;
|
|
25
|
+
export type CheckpointRowBar = Exclude<CheckpointRowVerdictReading, {
|
|
26
|
+
readonly kind: 'ok';
|
|
27
|
+
}>;
|
|
28
|
+
export declare function checkpointRowBarOf(row: object | null | undefined): CheckpointRowBar | undefined;
|
|
29
|
+
export declare const CHECKPOINT_ROW_BAR_SENTENCE: string;
|
|
30
|
+
export declare function checkpointRowBarSentence(bar: CheckpointRowBar): string;
|
|
31
|
+
export type CheckpointDeadlineState = 'armed' | 'none' | 'unknown';
|
|
32
|
+
export declare function checkpointDeadlineStateOf(row: object | null | undefined): CheckpointDeadlineState;
|
|
33
|
+
export declare function unboundWayOutContent(state: CheckpointDeadlineState, lang?: UiLanguage | (string & {})): string;
|
|
34
|
+
export declare function rowBarWayOutContent(bar: CheckpointRowBar, state: CheckpointDeadlineState, lang?: UiLanguage | (string & {})): string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { readErrorString, slotReadOf } from './wireFailureShape.js';
|
|
2
|
+
import { msg, renderMessage } from './i18n/translate.js';
|
|
3
|
+
import { isUiLanguage } from './env/uiLanguage.js';
|
|
2
4
|
const UNREADABLE = Object.freeze({ kind: 'unreadable' });
|
|
3
5
|
const OK = Object.freeze({ kind: 'ok' });
|
|
4
6
|
function ownNonEmptyString(o, key) {
|
|
@@ -87,3 +89,36 @@ export function checkpointRequirementsDamagedOf(failure) {
|
|
|
87
89
|
return undefined;
|
|
88
90
|
}
|
|
89
91
|
}
|
|
92
|
+
export function checkpointRowBarOf(row) {
|
|
93
|
+
const v = checkpointRowVerdictOf(row);
|
|
94
|
+
return v === undefined || v.kind === 'ok' ? undefined : v;
|
|
95
|
+
}
|
|
96
|
+
export const CHECKPOINT_ROW_BAR_SENTENCE = renderMessage(msg('approval.rowUnresumable.fallback'));
|
|
97
|
+
export function checkpointRowBarSentence(bar) {
|
|
98
|
+
return bar.kind !== 'unreadable' && typeof bar.sentence === 'string' && bar.sentence !== '' ? bar.sentence : CHECKPOINT_ROW_BAR_SENTENCE;
|
|
99
|
+
}
|
|
100
|
+
export function checkpointDeadlineStateOf(row) {
|
|
101
|
+
try {
|
|
102
|
+
if (typeof row !== 'object' || row === null)
|
|
103
|
+
return 'unknown';
|
|
104
|
+
const r = slotReadOf(row, 'deadline');
|
|
105
|
+
if (r.presence !== 'present')
|
|
106
|
+
return 'unknown';
|
|
107
|
+
const v = r.value;
|
|
108
|
+
if (v === null)
|
|
109
|
+
return 'none';
|
|
110
|
+
return typeof v === 'number' && Number.isFinite(v) && v >= 0 ? 'armed' : 'unknown';
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return 'unknown';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export function unboundWayOutContent(state, lang) {
|
|
117
|
+
const key = state === 'armed' ? 'approval.decide.unboundWayOut.armed' : state === 'none' ? 'approval.decide.unboundWayOut.none' : 'approval.decide.unboundWayOut.unknown';
|
|
118
|
+
return renderMessage(msg(key), isUiLanguage(lang) ? lang : undefined);
|
|
119
|
+
}
|
|
120
|
+
export function rowBarWayOutContent(bar, state, lang) {
|
|
121
|
+
if (bar.kind === 'lacking')
|
|
122
|
+
return renderMessage(msg('approval.rowUnresumable.lackingWayOut'), isUiLanguage(lang) ? lang : undefined);
|
|
123
|
+
return unboundWayOutContent(state, lang);
|
|
124
|
+
}
|
|
@@ -63,6 +63,15 @@ export interface CloudExecutionProjection {
|
|
|
63
63
|
}
|
|
64
64
|
export declare function cloudExecutionToPolicy(execution: unknown): CloudExecutionProjection;
|
|
65
65
|
export declare function cloudRosterNames(rostersValue: unknown): string[];
|
|
66
|
+
export type CloudA2aReading = {
|
|
67
|
+
readonly kind: 'present';
|
|
68
|
+
readonly peerNames: readonly string[];
|
|
69
|
+
readonly unreadableRows: number;
|
|
70
|
+
} | {
|
|
71
|
+
readonly kind: 'absent';
|
|
72
|
+
} | {
|
|
73
|
+
readonly kind: 'unreadable';
|
|
74
|
+
};
|
|
66
75
|
export interface CloudEffectiveWarning {
|
|
67
76
|
readonly kind: string;
|
|
68
77
|
readonly domain?: string;
|
|
@@ -137,6 +146,7 @@ export interface CloudProjection {
|
|
|
137
146
|
budget: CloudBudgetReading;
|
|
138
147
|
runtimeCaps: CloudRuntimeCapsReading;
|
|
139
148
|
modelRefIssues: CloudModelRefIssue[];
|
|
149
|
+
a2a: CloudA2aReading;
|
|
140
150
|
}
|
|
141
151
|
export declare function projectEffectiveBody(body: unknown, skillBodies: Record<string, string>, env: EnvLike, rostersValue?: unknown, opts?: CloudModelsDocOptions, skills?: CloudSkillsOptions): CloudProjection;
|
|
142
152
|
export interface CloudEffectiveNotice {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mcpAllowToolsVerdict, mcpAssertionHeaderNotSentNotice, mcpElicitationVerdict, mcpToolAxesVerdict, mcpToolFacesVerdict, readMcpHttpIdentityHeaders } from './mcpWireCaps.js';
|
|
2
2
|
import { skillToolListsVerdict, toCappedSpec } from './skillsWireCaps.js';
|
|
3
3
|
import { SETTINGS_DESCRIBE_BAD_MCP_SERVER_NAME, SETTINGS_IS_USABLE_MCP_SERVER_NAME, SETTINGS_READ_REQUEST_MCP_TRANSPORT } from './generated/settingsSchemaFns.js';
|
|
4
|
+
import { SETTINGS_IS_USABLE_WIRE_NAME } from './generated/settingsSchemaFns.js';
|
|
4
5
|
import { snapshotArgs, wireTransportOf } from './mcpWireTransport.js';
|
|
5
6
|
import { msg, renderMessage } from './i18n/translate.js';
|
|
6
7
|
import { TIER_ORDER } from './model/tierVocabulary.js';
|
|
@@ -8,6 +9,7 @@ import { SETTINGS_NARROW_AT_MENTION } from './generated/settingsSchemaFns.js';
|
|
|
8
9
|
import { modelsPolicyOf } from './model/modelsPolicy.js';
|
|
9
10
|
import { normalizeEngineBaseUrl } from './engineUrl.js';
|
|
10
11
|
import { guardedRead, readOwnDataNonEmptyString, readOwnDataValue } from './ownKey.js';
|
|
12
|
+
import { slotReadOf } from './wireFailureShape.js';
|
|
11
13
|
import { capForDisplay } from './fleetTaskDesc.js';
|
|
12
14
|
import { SETTINGS_BUDGET_NUMBER_KEYS, SETTINGS_BUDGET_PER_MODEL_NUMBER_KEYS, SETTINGS_BUDGET_STRING_KEYS, SETTINGS_TIER_GROUP_NAME_RE, } from './generated/settingsSchemaTables.js';
|
|
13
15
|
const asRec = (v) => (typeof v === 'object' && v !== null && !Array.isArray(v) ? v : undefined);
|
|
@@ -535,6 +537,36 @@ export function cloudRosterNames(rostersValue) {
|
|
|
535
537
|
.map((e) => asStr(asRec(e)?.name))
|
|
536
538
|
.filter((n) => !!n);
|
|
537
539
|
}
|
|
540
|
+
function cloudA2aOf(body) {
|
|
541
|
+
const cfg = slotReadOf(body, 'config');
|
|
542
|
+
const config = cfg.presence === 'present' ? guardedRead(() => asRec(cfg.value)) : undefined;
|
|
543
|
+
if (config === undefined)
|
|
544
|
+
return { kind: 'unreadable' };
|
|
545
|
+
const slot = slotReadOf(config, 'a2a');
|
|
546
|
+
if (slot.presence === 'absent')
|
|
547
|
+
return { kind: 'absent' };
|
|
548
|
+
const domain = slot.presence === 'present' ? guardedRead(() => asRec(slot.value)) : undefined;
|
|
549
|
+
if (domain === undefined)
|
|
550
|
+
return { kind: 'unreadable' };
|
|
551
|
+
const peersSlot = slotReadOf(domain, 'peers');
|
|
552
|
+
if (peersSlot.presence === 'absent')
|
|
553
|
+
return { kind: 'present', peerNames: [], unreadableRows: 0 };
|
|
554
|
+
const peers = peersSlot.presence === 'present' ? guardedRead(() => (Array.isArray(peersSlot.value) ? peersSlot.value : undefined)) : undefined;
|
|
555
|
+
const count = peers === undefined ? undefined : guardedRead(() => readOwnDataValue(peers, 'length'));
|
|
556
|
+
if (peers === undefined || typeof count !== 'number' || !Number.isSafeInteger(count) || count < 0)
|
|
557
|
+
return { kind: 'unreadable' };
|
|
558
|
+
const peerNames = [];
|
|
559
|
+
let unreadableRows = 0;
|
|
560
|
+
for (let i = 0; i < count; i++) {
|
|
561
|
+
const row = guardedRead(() => readOwnDataValue(peers, String(i)));
|
|
562
|
+
const name = typeof row === 'object' && row !== null ? guardedRead(() => readOwnDataValue(row, 'name')) : undefined;
|
|
563
|
+
if (typeof name === 'string' && SETTINGS_IS_USABLE_WIRE_NAME(name))
|
|
564
|
+
peerNames.push(name);
|
|
565
|
+
else
|
|
566
|
+
unreadableRows += 1;
|
|
567
|
+
}
|
|
568
|
+
return { kind: 'present', peerNames, unreadableRows };
|
|
569
|
+
}
|
|
538
570
|
const BUDGET_NUMBER_KEYS = SETTINGS_BUDGET_NUMBER_KEYS;
|
|
539
571
|
const BUDGET_STRING_KEYS = SETTINGS_BUDGET_STRING_KEYS;
|
|
540
572
|
const PER_MODEL_NUMBER_KEYS = SETTINGS_BUDGET_PER_MODEL_NUMBER_KEYS;
|
|
@@ -702,6 +734,7 @@ export function projectEffectiveBody(body, skillBodies, env, rostersValue, opts,
|
|
|
702
734
|
budget: budgetOf(b, view),
|
|
703
735
|
runtimeCaps: runtimeCapsOf(b, view),
|
|
704
736
|
modelRefIssues,
|
|
737
|
+
a2a: cloudA2aOf(b),
|
|
705
738
|
};
|
|
706
739
|
}
|
|
707
740
|
const quoted = (s, fallback) => (s === undefined ? fallback : `the "${s}" settings`);
|
package/dist/coreValuePorts.d.ts
CHANGED
|
@@ -153,6 +153,7 @@ export interface CoreValuePorts {
|
|
|
153
153
|
IMPORTED_SETTINGS_LAYERS: readonly ['userSettings', 'projectSettings', 'localSettings'];
|
|
154
154
|
runParkedOf(run: WorkflowRunParkedInputView): boolean;
|
|
155
155
|
parkedAgentsOf(agents: ReadonlyArray<WorkflowAgentStatusView>): WorkflowAgentStatusView[];
|
|
156
|
+
modelFaceResolvable(face: object, options?: ModelFaceOptionsView): ModelFaceVerdictView;
|
|
156
157
|
}
|
|
157
158
|
export interface WorkflowAgentStatusView {
|
|
158
159
|
readonly status: string;
|
|
@@ -161,7 +162,21 @@ export interface WorkflowRunParkedInputView {
|
|
|
161
162
|
readonly status: string;
|
|
162
163
|
readonly agents: ReadonlyArray<WorkflowAgentStatusView>;
|
|
163
164
|
}
|
|
164
|
-
export
|
|
165
|
+
export interface ModelFaceOptionsView {
|
|
166
|
+
readonly spec?: {
|
|
167
|
+
readonly model?: string | object;
|
|
168
|
+
readonly modelRole?: string;
|
|
169
|
+
};
|
|
170
|
+
readonly when?: readonly ('per-task' | 'deployment')[];
|
|
171
|
+
}
|
|
172
|
+
export type ModelFaceVerdictView = {
|
|
173
|
+
readonly ok: true;
|
|
174
|
+
} | {
|
|
175
|
+
readonly ok: false;
|
|
176
|
+
readonly role: string;
|
|
177
|
+
readonly code: string;
|
|
178
|
+
};
|
|
179
|
+
export declare const CORE_VALUE_PORT_NAMES: readonly ["resolveAutonomousLoopPrompt", "loosenReasons", "combinePolicies", "createAllowDenyPolicy", "MCP_NAMESPACE", "protocolOf", "ruleToolGrammarOf", "validatePermissionRules", "mintNamespacePrefix", "compileAllowList", "routeKeyOf", "joinRequestUrl", "resolveRouteCredential", "adjudicateModelRoute", "routePairingStatus", "judgeRuleToolName", "readRuleEntry", "readMcpToolAxes", "ANTHROPIC_DEFAULT_BASE_URL", "readToolFaces", "ruleNameCovers", "IMPORTED_SETTINGS_LAYERS", "runParkedOf", "parkedAgentsOf", "modelFaceResolvable"];
|
|
165
180
|
export type CoreValuePortName = (typeof CORE_VALUE_PORT_NAMES)[number];
|
|
166
181
|
export declare function installCoreValuePorts(ports: Partial<CoreValuePorts> | null): () => void;
|
|
167
182
|
export declare function hasCoreValuePorts(): boolean;
|
|
@@ -195,3 +210,4 @@ export declare function ruleNameCovers(ruleName: string, toolName: string): bool
|
|
|
195
210
|
export declare function importedSettingsLayers(): CoreValuePorts['IMPORTED_SETTINGS_LAYERS'] | undefined;
|
|
196
211
|
export declare function runParkedOf(run: WorkflowRunParkedInputView): boolean | undefined;
|
|
197
212
|
export declare function parkedAgentsOf(agents: ReadonlyArray<WorkflowAgentStatusView>): WorkflowAgentStatusView[] | undefined;
|
|
213
|
+
export declare function modelFaceResolvable(face: object, options?: ModelFaceOptionsView): ModelFaceVerdictView | undefined;
|
package/dist/coreValuePorts.js
CHANGED
|
@@ -23,6 +23,7 @@ export const CORE_VALUE_PORT_NAMES = Object.freeze([
|
|
|
23
23
|
'IMPORTED_SETTINGS_LAYERS',
|
|
24
24
|
'runParkedOf',
|
|
25
25
|
'parkedAgentsOf',
|
|
26
|
+
'modelFaceResolvable',
|
|
26
27
|
]);
|
|
27
28
|
let installed = null;
|
|
28
29
|
export function installCoreValuePorts(ports) {
|
|
@@ -137,3 +138,7 @@ export function parkedAgentsOf(agents) {
|
|
|
137
138
|
const fn = port('parkedAgentsOf');
|
|
138
139
|
return fn === undefined ? undefined : fn(agents);
|
|
139
140
|
}
|
|
141
|
+
export function modelFaceResolvable(face, options) {
|
|
142
|
+
const fn = port('modelFaceResolvable');
|
|
143
|
+
return fn === undefined ? undefined : fn(face, options);
|
|
144
|
+
}
|
package/dist/decideReceipt.js
CHANGED
|
@@ -9,6 +9,7 @@ import { askRowEndingCauseFor } from './hitl/approvalEndingCause.js';
|
|
|
9
9
|
import { SDK_DECIDE_BINDING_KEYS } from './generated/sdkFactTables.js';
|
|
10
10
|
import { isUiLanguage } from './env/uiLanguage.js';
|
|
11
11
|
import { msg, renderMessage } from './i18n/translate.js';
|
|
12
|
+
import { unboundWayOutContent } from './checkpointRowVerdict.js';
|
|
12
13
|
const STATUS_RESUMING = 'resuming';
|
|
13
14
|
function str(v) {
|
|
14
15
|
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
@@ -162,7 +163,7 @@ export function decideRequiresBindingFromError(e) {
|
|
|
162
163
|
}
|
|
163
164
|
}
|
|
164
165
|
export function decideRequiresBindingContent(_detail, lang) {
|
|
165
|
-
return renderMessage(msg('approval.decide.requiresBinding'), isUiLanguage(lang) ? lang : undefined);
|
|
166
|
+
return renderMessage(msg('approval.decide.requiresBinding', { wayOut: unboundWayOutContent('unknown', lang) }), isUiLanguage(lang) ? lang : undefined);
|
|
166
167
|
}
|
|
167
168
|
function askGoneRawCause(e) {
|
|
168
169
|
let top;
|
|
@@ -2,6 +2,7 @@ export declare const REDACTION_MARKER_PREFIX = "\u00ABredacted";
|
|
|
2
2
|
export declare function looksLikeKnownSecret(s: string): boolean;
|
|
3
3
|
export declare function isDiagnosticValueWord(value: string): boolean;
|
|
4
4
|
export declare function percentBoundaryReadingOf(text: string): string;
|
|
5
|
+
type BlankNet = 0 | 1 | 2;
|
|
5
6
|
interface WashStats {
|
|
6
7
|
passes: number;
|
|
7
8
|
capped: boolean;
|
|
@@ -13,7 +14,7 @@ export interface DisplayFace {
|
|
|
13
14
|
readonly unsafe: RegExp | null;
|
|
14
15
|
readonly fold: boolean;
|
|
15
16
|
readonly mark: DisplayMark;
|
|
16
|
-
readonly
|
|
17
|
+
readonly blanks?: BlankNet;
|
|
17
18
|
readonly keepCrlf?: boolean;
|
|
18
19
|
}
|
|
19
20
|
export declare function applyDisplayFace(text: string, face: DisplayFace): string;
|
|
@@ -26,8 +27,8 @@ export interface DisplayUntrustedOptions {
|
|
|
26
27
|
readonly keepLayout?: boolean | 'crlf';
|
|
27
28
|
readonly mark?: DisplayMark;
|
|
28
29
|
readonly max?: number;
|
|
29
|
-
readonly escapeBackslashes?: boolean;
|
|
30
|
-
readonly blanks?: boolean | '
|
|
30
|
+
readonly escapeBackslashes?: boolean | 'auto';
|
|
31
|
+
readonly blanks?: boolean | 'except-ideographic';
|
|
31
32
|
}
|
|
32
33
|
export interface DisplayMarkSpan {
|
|
33
34
|
readonly start: number;
|
|
@@ -37,6 +38,7 @@ export interface DisplayMarkSpan {
|
|
|
37
38
|
export interface DisplayUntrustedMarked {
|
|
38
39
|
readonly text: string;
|
|
39
40
|
readonly marks: readonly DisplayMarkSpan[];
|
|
41
|
+
readonly exact: boolean;
|
|
40
42
|
}
|
|
41
43
|
export declare const DISPLAY_DECISION_BODY: Readonly<DisplayUntrustedOptions>;
|
|
42
44
|
export declare const ESCAPE_FACE: DisplayFace;
|