@sema-agent/client-core 0.91.0 → 0.92.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 +172 -0
- package/README.md +31 -21
- package/dist/adapt/arms.js +4 -12
- package/dist/adapt/panelTasks.d.ts +0 -2
- package/dist/adapt/panelTasks.js +6 -26
- package/dist/adapt.js +2 -2
- package/dist/adapter/activeRunSelfHeal.d.ts +0 -2
- package/dist/adapter/activeRunSelfHeal.js +5 -27
- package/dist/adapter/downstream/terminalToSdkResult.js +16 -7
- package/dist/adapter/runStream.js +3 -1
- package/dist/askSurvivesStandingAnswer.d.ts +4 -1
- package/dist/askSurvivesStandingAnswer.js +13 -0
- package/dist/autoModeUnavailable.js +3 -2
- package/dist/cloudConfigWireCaps.js +5 -4
- package/dist/compensations.js +5 -5
- package/dist/controlRouter.d.ts +23 -23
- package/dist/controlRouter.js +114 -49
- package/dist/coreValuePorts.d.ts +4 -2
- package/dist/coreValuePorts.js +5 -0
- package/dist/decideFailureNote.js +4 -2
- package/dist/decideReceipt.d.ts +9 -0
- package/dist/decideReceipt.js +62 -1
- package/dist/displayUntrusted.js +2 -1
- package/dist/effectiveFacts.d.ts +14 -4
- package/dist/effectiveFacts.js +45 -5
- package/dist/engineAgentAbsence.js +2 -1
- package/dist/engineCapReader.js +16 -10
- package/dist/engineCapsCache.d.ts +2 -0
- package/dist/engineCapsCache.js +13 -2
- package/dist/engineErrorCodes.d.ts +14 -0
- package/dist/engineErrorCodes.js +37 -0
- package/dist/engineNoticeCodes.d.ts +14 -0
- package/dist/engineNoticeCodes.js +71 -0
- package/dist/executionLaneCapability.js +2 -0
- package/dist/gateOutcome.js +2 -17
- package/dist/gateVocabulary.d.ts +2 -4
- package/dist/gateVocabulary.js +3 -11
- package/dist/generated/engineFactTables.d.ts +16 -1
- package/dist/generated/engineFactTables.js +81 -0
- package/dist/generated/engineNoticeTables.js +3 -0
- package/dist/generated/settingsSchemaTables.d.ts +8 -0
- package/dist/generated/settingsSchemaTables.js +40 -0
- package/dist/hitl/allowRuleShadow.d.ts +21 -0
- package/dist/hitl/allowRuleShadow.js +167 -0
- package/dist/hitl/askClassPair.d.ts +14 -0
- package/dist/hitl/askClassPair.js +42 -0
- package/dist/hitl/askGateWire.js +1 -0
- package/dist/hitl/askSurvivesPosture.d.ts +5 -0
- package/dist/hitl/askSurvivesPosture.js +17 -0
- package/dist/hitl/automaticAnswerVerdict.d.ts +21 -0
- package/dist/hitl/automaticAnswerVerdict.js +143 -0
- package/dist/hitl/crashConverged.d.ts +1 -0
- package/dist/hitl/crashConverged.js +1 -1
- package/dist/hitl/frameRouter.d.ts +2 -0
- package/dist/hitl/frameRouter.js +66 -14
- package/dist/hitl/gateLedger.d.ts +6 -0
- package/dist/hitl/gateLedger.js +34 -5
- package/dist/hitl/hitlHostSurface.d.ts +2 -0
- package/dist/hitl/hitlHostSurface.js +7 -0
- package/dist/hitl/livePendingAsk.js +24 -5
- package/dist/hitl/parkResolver.js +3 -1
- package/dist/hitl/persistedRulesWire.d.ts +4 -1
- package/dist/hitl/persistedRulesWire.js +9 -2
- package/dist/hitl/planReviewWire.js +2 -2
- package/dist/hitl/replayedApproval.d.ts +21 -0
- package/dist/hitl/replayedApproval.js +89 -0
- package/dist/hitl/sessionPolicyDeliverable.js +20 -2
- package/dist/hitl/sessionPolicyWire.d.ts +8 -0
- package/dist/hitl/sessionPolicyWire.js +12 -2
- package/dist/hitl/toolApprovalWire.d.ts +6 -1
- package/dist/hitl/toolApprovalWire.js +20 -40
- package/dist/hookMatcherVerdict.js +2 -1
- package/dist/humanTurn.js +3 -4
- package/dist/index.d.ts +15 -5
- package/dist/index.js +12 -3
- package/dist/inheritEnvWire.js +3 -4
- package/dist/mcpLiveness.js +2 -1
- package/dist/memoryVerbsWire.d.ts +1 -1
- package/dist/memoryVerbsWire.js +3 -0
- package/dist/model/catalog.js +2 -1
- package/dist/model/providerPresets.d.ts +3 -1
- package/dist/model/tierVocabulary.d.ts +2 -1
- package/dist/model/tierVocabulary.js +3 -8
- package/dist/peerFrames.js +2 -2
- package/dist/permissionRuleIssue.js +9 -6
- package/dist/permissionsDeclaration.d.ts +7 -1
- package/dist/permissionsDeclaration.js +29 -20
- package/dist/pluginHooksWire.js +2 -11
- package/dist/promptProfileWireCaps.d.ts +2 -1
- package/dist/protocolSegment.d.ts +9 -0
- package/dist/protocolSegment.js +28 -0
- package/dist/request/taskRequest.js +1 -15
- package/dist/ruleCompileVerdict.d.ts +2 -0
- package/dist/ruleCompileVerdict.js +13 -0
- package/dist/ruleRemovalConsequence.d.ts +2 -1
- package/dist/runCancelContext.d.ts +12 -0
- package/dist/runCancelContext.js +83 -1
- package/dist/seam.js +1 -1
- package/dist/seatContract.d.ts +2 -1
- package/dist/sessionMemoryStatus.d.ts +2 -4
- package/dist/sessionSyncFileHistoryCapability.d.ts +18 -0
- package/dist/sessionSyncFileHistoryCapability.js +50 -0
- package/dist/skillToolListsCapability.d.ts +18 -0
- package/dist/skillToolListsCapability.js +50 -0
- package/dist/sqlEngineCapability.js +1 -8
- package/dist/steerPriorityCapability.d.ts +18 -0
- package/dist/steerPriorityCapability.js +80 -0
- package/dist/steerReceipt.d.ts +9 -0
- package/dist/steerReceipt.js +25 -0
- package/dist/subagent/engineSubagentSteer.js +2 -9
- package/dist/supportFloor.js +2 -2
- package/dist/toolResult.d.ts +8 -0
- package/dist/toolResult.js +47 -3
- package/dist/types/engineState.d.ts +2 -12
- package/dist/userInvokedSkillsCapability.d.ts +18 -0
- package/dist/userInvokedSkillsCapability.js +50 -0
- package/dist/wireFailureShape.d.ts +2 -0
- package/dist/wireFailureShape.js +4 -0
- package/dist/workflowsJournalCapability.d.ts +18 -0
- package/dist/workflowsJournalCapability.js +50 -0
- package/dist/writeProtectionCapability.d.ts +2 -4
- package/docs/INTEGRATION-CLIENTS.md +624 -12
- package/package.json +2 -2
|
@@ -14,6 +14,8 @@ export declare const CONFIG_DELEGATION_ENTRY_CAPS = "config.delegation_entry_cap
|
|
|
14
14
|
export declare const CONFIG_MEMORY_PROJECT_KEY_SPELLING = "config.memory_project_key_spelling";
|
|
15
15
|
export declare const CONFIG_MEMORY_WRITE_SCOPE_MISMATCH = "config.memory_write_scope_mismatch";
|
|
16
16
|
export declare const CONFIG_LEGACY_TOOL_NAME = "config.legacy_tool_name";
|
|
17
|
+
export declare const CONFIG_IMAGE_INVALID = "config.image_invalid";
|
|
18
|
+
export declare function imageInvalidFailureNoteOf(code: string | undefined): string | undefined;
|
|
17
19
|
export declare const CONFIG_REFUSAL_CODES: ReadonlySet<string>;
|
|
18
20
|
export declare const RULES_LEGACY_TOOL_NAME = "rules.legacy_tool_name";
|
|
19
21
|
export declare function isRulesRefusalCode(code: string | undefined): boolean;
|
|
@@ -69,6 +71,18 @@ export declare const DECIDE_GATE_MOVED = "decide.gate_moved";
|
|
|
69
71
|
export declare const DECIDE_CLAIM_LOST = "decide.claim_lost";
|
|
70
72
|
export declare const DECIDE_PARK_MOVED_CODES: readonly string[];
|
|
71
73
|
export declare function isDecideParkMovedCode(code: string | null | undefined): boolean;
|
|
74
|
+
export declare const ASK_GONE = "gone.ask";
|
|
75
|
+
export declare const ASK_GONE_DENIED_WORD = "routing_failure_fail_closed";
|
|
76
|
+
export declare const RUN_STALLED = "run.stalled";
|
|
77
|
+
export declare const RUN_ORPHANED = "run.orphaned";
|
|
78
|
+
export declare const APPROVAL_EXPIRED = "approval.expired";
|
|
79
|
+
export declare const RUN_DEATH_VERDICT_CODES: readonly ["run.stalled", "run.orphaned", "approval.expired"];
|
|
80
|
+
export type RunDeathVerdictCode = (typeof RUN_DEATH_VERDICT_CODES)[number];
|
|
81
|
+
export declare function runDeathVerdictNoteOf(code: string | undefined): string | undefined;
|
|
82
|
+
export declare const CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED = "capability.operator_principals_required";
|
|
83
|
+
export declare function isUnavailableFaceCode(code: string | undefined): boolean;
|
|
84
|
+
export type OperatorGateRefusal = 'operator_only' | 'operators_unconfigured';
|
|
85
|
+
export declare function operatorGateRefusalContent(cause: OperatorGateRefusal): string | undefined;
|
|
72
86
|
export declare const WORKFLOW_PARK_REFUSAL_CODES: readonly string[];
|
|
73
87
|
export declare function isWorkflowParkRefusalCode(code: unknown): boolean;
|
|
74
88
|
export declare const DRAINING_ERROR_CODE = "draining";
|
package/dist/engineErrorCodes.js
CHANGED
|
@@ -19,6 +19,12 @@ export const CONFIG_DELEGATION_ENTRY_CAPS = 'config.delegation_entry_caps';
|
|
|
19
19
|
export const CONFIG_MEMORY_PROJECT_KEY_SPELLING = 'config.memory_project_key_spelling';
|
|
20
20
|
export const CONFIG_MEMORY_WRITE_SCOPE_MISMATCH = 'config.memory_write_scope_mismatch';
|
|
21
21
|
export const CONFIG_LEGACY_TOOL_NAME = 'config.legacy_tool_name';
|
|
22
|
+
export const CONFIG_IMAGE_INVALID = 'config.image_invalid';
|
|
23
|
+
const IMAGE_INVALID_FAILURE_NOTE = 'This run did not start: an image sent with the message was refused before the model was called — the engine’s own error text says which image and what is wrong with it. ' +
|
|
24
|
+
'Nothing was sent to the model; remove or replace that image, then send the message again.';
|
|
25
|
+
export function imageInvalidFailureNoteOf(code) {
|
|
26
|
+
return code === CONFIG_IMAGE_INVALID ? IMAGE_INVALID_FAILURE_NOTE : undefined;
|
|
27
|
+
}
|
|
22
28
|
export const CONFIG_REFUSAL_CODES = frozenSet([
|
|
23
29
|
CONFIG_LIMIT_INVALID,
|
|
24
30
|
CONFIG_STRATEGY_FIND_LIMIT_INVALID,
|
|
@@ -28,6 +34,7 @@ export const CONFIG_REFUSAL_CODES = frozenSet([
|
|
|
28
34
|
CONFIG_MEMORY_PROJECT_KEY_SPELLING,
|
|
29
35
|
CONFIG_MEMORY_WRITE_SCOPE_MISMATCH,
|
|
30
36
|
CONFIG_LEGACY_TOOL_NAME,
|
|
37
|
+
CONFIG_IMAGE_INVALID,
|
|
31
38
|
...CORE_TOOL_DECLARATION_CODES,
|
|
32
39
|
]);
|
|
33
40
|
export const RULES_LEGACY_TOOL_NAME = 'rules.legacy_tool_name';
|
|
@@ -149,6 +156,36 @@ export const DECIDE_PARK_MOVED_CODES = Object.freeze([
|
|
|
149
156
|
export function isDecideParkMovedCode(code) {
|
|
150
157
|
return typeof code === 'string' && DECIDE_PARK_MOVED_CODES.includes(code);
|
|
151
158
|
}
|
|
159
|
+
export const ASK_GONE = 'gone.ask';
|
|
160
|
+
export const ASK_GONE_DENIED_WORD = 'routing_failure_fail_closed';
|
|
161
|
+
export const RUN_STALLED = 'run.stalled';
|
|
162
|
+
export const RUN_ORPHANED = 'run.orphaned';
|
|
163
|
+
export const APPROVAL_EXPIRED = 'approval.expired';
|
|
164
|
+
export const RUN_DEATH_VERDICT_CODES = Object.freeze([RUN_STALLED, RUN_ORPHANED, APPROVAL_EXPIRED]);
|
|
165
|
+
const RUN_HOLDER_LOST_NOTE = 'This run ended because the engine process that was running it went away (it was restarted, or stopped answering) before the run finished. ' +
|
|
166
|
+
'The request itself was not at fault, but this run cannot be picked up again; submit the work again as a new task.';
|
|
167
|
+
const RUN_APPROVAL_EXPIRED_NOTE = 'This run ended because it was waiting on an approval for too long and the engine retired it. ' +
|
|
168
|
+
'The request itself was not at fault, but this run cannot be picked up again; submit the work again as a new task, and it will ask for the approval again.';
|
|
169
|
+
export function runDeathVerdictNoteOf(code) {
|
|
170
|
+
if (code === RUN_STALLED || code === RUN_ORPHANED)
|
|
171
|
+
return RUN_HOLDER_LOST_NOTE;
|
|
172
|
+
if (code === APPROVAL_EXPIRED)
|
|
173
|
+
return RUN_APPROVAL_EXPIRED_NOTE;
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
export const CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED = 'capability.operator_principals_required';
|
|
177
|
+
export function isUnavailableFaceCode(code) {
|
|
178
|
+
return typeof code === 'string' && (code.startsWith('capability.') || code.startsWith('feature.'));
|
|
179
|
+
}
|
|
180
|
+
export function operatorGateRefusalContent(cause) {
|
|
181
|
+
if (cause === 'operator_only') {
|
|
182
|
+
return 'Nothing was done: this is an operator-only action and the caller is not one of this deployment’s operators.';
|
|
183
|
+
}
|
|
184
|
+
if (cause === 'operators_unconfigured') {
|
|
185
|
+
return 'Nothing was done: this is an operator-only action and this deployment has no operators configured, so no caller can perform it here — whoever runs the deployment has to name its operators first.';
|
|
186
|
+
}
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
152
189
|
const WORKFLOW_PARK_TRUTH_UNREADABLE = 'workflow.park_truth_unreadable';
|
|
153
190
|
const WORKFLOW_PARK_NOT_PENDING = 'workflow.park_not_pending';
|
|
154
191
|
const WORKFLOW_PARK_BINDING_BROKEN = 'workflow.park_binding_broken';
|
|
@@ -169,6 +169,19 @@ export interface UserInputUndrainedFactsView {
|
|
|
169
169
|
}
|
|
170
170
|
export declare function readUserInputUndrained(notice: unknown): UserInputUndrainedFactsView | undefined;
|
|
171
171
|
export declare function userInputUndrainedNotice(facts: Pick<UserInputUndrainedFactsView, 'kind' | 'count' | 'cause' | 'childSessionId'>): string | undefined;
|
|
172
|
+
export interface TurnInterruptedFactsView {
|
|
173
|
+
lane: 'input_now' | 'user_halt' | 'unrecognized';
|
|
174
|
+
inputId?: string;
|
|
175
|
+
cause?: string;
|
|
176
|
+
sessionId?: string;
|
|
177
|
+
runId?: string;
|
|
178
|
+
taskId?: string;
|
|
179
|
+
actorId?: string;
|
|
180
|
+
}
|
|
181
|
+
export declare function readTurnInterrupted(notice: unknown): TurnInterruptedFactsView | undefined;
|
|
182
|
+
export declare function turnInterruptedNotice(facts: Pick<TurnInterruptedFactsView, 'lane'>): string | undefined;
|
|
183
|
+
export type SteerCutVerdict = 'this_input' | 'other_input' | 'user_halt' | 'unattributed' | 'not_a_cut';
|
|
184
|
+
export declare function steerCutVerdict(notice: unknown, messageId: string | undefined): SteerCutVerdict;
|
|
172
185
|
export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
|
|
173
186
|
readonly 'mcp.injection_dropped': typeof readMcpInjectionDrop;
|
|
174
187
|
readonly 'delegation.ask_unresolvable': typeof readAskUnresolvable;
|
|
@@ -189,6 +202,7 @@ export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
|
|
|
189
202
|
readonly 'task.tool_turn_incomplete': typeof readToolTurnIncomplete;
|
|
190
203
|
readonly 'task.user_steer_undrained': typeof readUserInputUndrained;
|
|
191
204
|
readonly 'task.user_followup_undrained': typeof readUserInputUndrained;
|
|
205
|
+
readonly 'task.turn_interrupted': typeof readTurnInterrupted;
|
|
192
206
|
}>;
|
|
193
207
|
type FactReaderTable = typeof ENGINE_NOTICE_FACT_READERS;
|
|
194
208
|
export type EngineNoticeFactsCode = keyof FactReaderTable;
|
|
@@ -643,6 +643,76 @@ export function userInputUndrainedNotice(facts) {
|
|
|
643
643
|
}
|
|
644
644
|
return unrecognizedUndrainedSentence(n, kind);
|
|
645
645
|
}
|
|
646
|
+
export function readTurnInterrupted(notice) {
|
|
647
|
+
return guardedRead(notice, readTurnInterruptedOf);
|
|
648
|
+
}
|
|
649
|
+
function readTurnInterruptedOf(notice) {
|
|
650
|
+
if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
|
|
651
|
+
return undefined;
|
|
652
|
+
const n = notice;
|
|
653
|
+
if (ownSeat(n, 'code') !== 'task.turn_interrupted')
|
|
654
|
+
return undefined;
|
|
655
|
+
const d = ownSeat(n, 'detail');
|
|
656
|
+
if (typeof d !== 'object' || d === null || Array.isArray(d))
|
|
657
|
+
return undefined;
|
|
658
|
+
const o = d;
|
|
659
|
+
const causeRaw = ownSeat(o, 'cause');
|
|
660
|
+
const cause = nonEmpty(causeRaw);
|
|
661
|
+
const inputId = nonEmpty(ownSeat(o, 'inputId'));
|
|
662
|
+
const lane = causeRaw === undefined && inputId !== undefined ? 'input_now' : cause === 'user_halt' ? 'user_halt' : 'unrecognized';
|
|
663
|
+
const sessionId = nonEmpty(optionalOwnSeat(o, 'sessionId'));
|
|
664
|
+
const runId = nonEmpty(optionalOwnSeat(o, 'runId'));
|
|
665
|
+
const taskId = nonEmpty(optionalOwnSeat(o, 'taskId'));
|
|
666
|
+
const actorId = nonEmpty(optionalOwnSeat(o, 'actorId'));
|
|
667
|
+
return {
|
|
668
|
+
lane,
|
|
669
|
+
...(lane === 'input_now' && inputId !== undefined ? { inputId } : {}),
|
|
670
|
+
...(cause !== undefined ? { cause } : {}),
|
|
671
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
672
|
+
...(runId !== undefined ? { runId } : {}),
|
|
673
|
+
...(taskId !== undefined ? { taskId } : {}),
|
|
674
|
+
...(actorId !== undefined ? { actorId } : {}),
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
const TURN_INTERRUPTED_SENTENCE = Object.freeze({
|
|
678
|
+
input_now: 'Your message interrupted the running turn — tool calls that had already finished keep their results, and the run continues with your message first.',
|
|
679
|
+
user_halt: 'You stopped the run — the running turn was cut, and tool calls that had already finished keep their results.',
|
|
680
|
+
unrecognized: 'A running turn was cut for a reason this version does not recognise — tool calls that had already finished keep their results.',
|
|
681
|
+
});
|
|
682
|
+
export function turnInterruptedNotice(facts) {
|
|
683
|
+
try {
|
|
684
|
+
if (facts === null || typeof facts !== 'object' || Array.isArray(facts) || !Object.hasOwn(facts, 'lane'))
|
|
685
|
+
return undefined;
|
|
686
|
+
const lane = facts.lane;
|
|
687
|
+
return typeof lane === 'string' && Object.hasOwn(TURN_INTERRUPTED_SENTENCE, lane)
|
|
688
|
+
? TURN_INTERRUPTED_SENTENCE[lane]
|
|
689
|
+
: undefined;
|
|
690
|
+
}
|
|
691
|
+
catch {
|
|
692
|
+
return undefined;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
export function steerCutVerdict(notice, messageId) {
|
|
696
|
+
let code;
|
|
697
|
+
try {
|
|
698
|
+
if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
|
|
699
|
+
return 'not_a_cut';
|
|
700
|
+
code = ownSeat(notice, 'code');
|
|
701
|
+
}
|
|
702
|
+
catch {
|
|
703
|
+
return 'not_a_cut';
|
|
704
|
+
}
|
|
705
|
+
if (code !== 'task.turn_interrupted')
|
|
706
|
+
return 'not_a_cut';
|
|
707
|
+
const facts = readTurnInterrupted(notice);
|
|
708
|
+
if (facts === undefined || facts.lane === 'unrecognized')
|
|
709
|
+
return 'unattributed';
|
|
710
|
+
if (facts.lane === 'user_halt')
|
|
711
|
+
return 'user_halt';
|
|
712
|
+
if (typeof messageId !== 'string' || messageId.length === 0 || facts.inputId === undefined)
|
|
713
|
+
return 'unattributed';
|
|
714
|
+
return facts.inputId === messageId ? 'this_input' : 'other_input';
|
|
715
|
+
}
|
|
646
716
|
export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
|
|
647
717
|
'mcp.injection_dropped': readMcpInjectionDrop,
|
|
648
718
|
'delegation.ask_unresolvable': readAskUnresolvable,
|
|
@@ -663,6 +733,7 @@ export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
|
|
|
663
733
|
'task.tool_turn_incomplete': readToolTurnIncomplete,
|
|
664
734
|
'task.user_steer_undrained': readUserInputUndrained,
|
|
665
735
|
'task.user_followup_undrained': readUserInputUndrained,
|
|
736
|
+
'task.turn_interrupted': readTurnInterrupted,
|
|
666
737
|
});
|
|
667
738
|
const _factReaderTablePin = true;
|
|
668
739
|
void _factReaderTablePin;
|
|
@@ -64,6 +64,8 @@ export function observedExecutionLane(baseUrl = engineWireTarget()?.baseUrl) {
|
|
|
64
64
|
export function toolsRunHereFromExecutionLane(reading, legacyInference) {
|
|
65
65
|
if (reading.kind === 'present')
|
|
66
66
|
return reading.view.toolsOnThisHost;
|
|
67
|
+
if (reading.kind === 'not_reported')
|
|
68
|
+
return false;
|
|
67
69
|
return legacyInference;
|
|
68
70
|
}
|
|
69
71
|
export function noOsSandboxOnThisHost(reading) {
|
package/dist/gateOutcome.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ccToolDenialKindForSettledBy, isCcToolDenialKind, isGateDeniedByWord } from './gateVocabulary.js';
|
|
2
2
|
import { GATE_PARKED_ERROR_CODE } from './engineErrorCodes.js';
|
|
3
|
-
import { CORE_MODE_RELEASE_REASONS } from './generated/engineFactTables.js';
|
|
3
|
+
import { CORE_MODE_RELEASE_REASONS, CORE_SETTLEMENT_KINDS } from './generated/engineFactTables.js';
|
|
4
4
|
function str(v) {
|
|
5
5
|
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
6
6
|
}
|
|
@@ -8,22 +8,7 @@ export const GATE_MODE_RELEASE_REASON_WORDS = CORE_MODE_RELEASE_REASONS;
|
|
|
8
8
|
export function isGateModeReleaseReasonWord(v) {
|
|
9
9
|
return typeof v === 'string' && CORE_MODE_RELEASE_REASONS.includes(v);
|
|
10
10
|
}
|
|
11
|
-
export const SETTLEMENT_KIND_WORDS =
|
|
12
|
-
'human_allowed',
|
|
13
|
-
'human_refused',
|
|
14
|
-
'approval_window_expired',
|
|
15
|
-
'denial_limit_window_expired',
|
|
16
|
-
'park_sla_expired',
|
|
17
|
-
'no_approver',
|
|
18
|
-
'approver_unavailable',
|
|
19
|
-
'approver_error',
|
|
20
|
-
'approver_contract',
|
|
21
|
-
'presentation_failed',
|
|
22
|
-
'blanket_allow_refused',
|
|
23
|
-
'policy_allowed',
|
|
24
|
-
'policy_refused',
|
|
25
|
-
'task_aborted',
|
|
26
|
-
]);
|
|
11
|
+
export const SETTLEMENT_KIND_WORDS = CORE_SETTLEMENT_KINDS;
|
|
27
12
|
function readWho(v) {
|
|
28
13
|
if (typeof v !== 'object' || v === null || Array.isArray(v))
|
|
29
14
|
return undefined;
|
package/dist/gateVocabulary.d.ts
CHANGED
|
@@ -5,12 +5,11 @@ export type CcToolDenialKind = (typeof CC_TOOL_DENIAL_KINDS)[number];
|
|
|
5
5
|
export declare function isCcToolDenialKind(v: unknown): v is CcToolDenialKind;
|
|
6
6
|
export declare function isCcToolDenialKindADenial(v: unknown): boolean;
|
|
7
7
|
export declare function ccToolDenialKindForSettledBy(settledBy: unknown): CcToolDenialKind | undefined;
|
|
8
|
-
|
|
9
|
-
export type GateDeniedByWord = (typeof CORE_DENIED_BY_VALUES)[number] | (typeof RETIRED_DENIED_BY_WORDS)[number];
|
|
8
|
+
export type GateDeniedByWord = (typeof CORE_DENIED_BY_VALUES)[number];
|
|
10
9
|
export declare const GATE_DENIED_BY_WORDS: readonly GateDeniedByWord[];
|
|
11
10
|
export declare function isGateDeniedByWord(v: unknown): v is GateDeniedByWord;
|
|
12
11
|
export declare function gateDeniedByDetail(deniedBy: unknown): string;
|
|
13
|
-
export declare function askOriginDetail(origin: unknown,
|
|
12
|
+
export declare function askOriginDetail(origin: unknown, _message?: unknown): string;
|
|
14
13
|
export declare const RULE_STORE_UNREADABLE_KINDS: readonly ["store", "call"];
|
|
15
14
|
export type RuleStoreUnreadableKind = (typeof RULE_STORE_UNREADABLE_KINDS)[number];
|
|
16
15
|
export declare function isRuleStoreUnreadableKind(v: unknown): v is RuleStoreUnreadableKind;
|
|
@@ -19,4 +18,3 @@ export declare function mandatedApprovalDetail(): string;
|
|
|
19
18
|
export type ApprovalMandateWord = (typeof APPROVAL_MANDATE_WORDS)[number];
|
|
20
19
|
export declare function isApprovalMandateWord(v: unknown): v is ApprovalMandateWord;
|
|
21
20
|
export declare function approvalMandateDetail(word: ApprovalMandateWord): string;
|
|
22
|
-
export {};
|
package/dist/gateVocabulary.js
CHANGED
|
@@ -21,8 +21,7 @@ export function ccToolDenialKindForSettledBy(settledBy) {
|
|
|
21
21
|
return 'permission-rule';
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
|
-
const
|
|
25
|
-
export const GATE_DENIED_BY_WORDS = Object.freeze([...CORE_DENIED_BY_VALUES, ...RETIRED_DENIED_BY_WORDS]);
|
|
24
|
+
export const GATE_DENIED_BY_WORDS = Object.freeze([...CORE_DENIED_BY_VALUES]);
|
|
26
25
|
const _deniedByWordsPin = true;
|
|
27
26
|
void _deniedByWordsPin;
|
|
28
27
|
const DENIED_BY_SENTENCES = Object.freeze({
|
|
@@ -31,7 +30,6 @@ const DENIED_BY_SENTENCES = Object.freeze({
|
|
|
31
30
|
org: 'denied by an organization rule',
|
|
32
31
|
persisted_rule: 'denied by a persisted rule',
|
|
33
32
|
classifier: 'denied by the auto-mode classifier',
|
|
34
|
-
plan_mode: 'denied because plan mode only allows reads',
|
|
35
33
|
compliance: 'denied by a compliance lock',
|
|
36
34
|
write_protection: 'denied because the write landed on a write-protected path',
|
|
37
35
|
ask_resolution: 'denied when the approval was resolved',
|
|
@@ -46,7 +44,7 @@ export function gateDeniedByDetail(deniedBy) {
|
|
|
46
44
|
return DENIED_BY_SENTENCES[deniedBy];
|
|
47
45
|
}
|
|
48
46
|
const word = typeof deniedBy === 'string' && deniedBy.length > 0 ? deniedBy : '(none)';
|
|
49
|
-
return `denied by a layer this build does not know (${word}) — this build does not know this layer name
|
|
47
|
+
return `denied by a layer this build does not know (${word}) — this build does not know this layer name, so it cannot say which layer refused this call or why`;
|
|
50
48
|
}
|
|
51
49
|
const ASK_ORIGIN_SENTENCES = Object.freeze({
|
|
52
50
|
content_question: 'the tool itself asked you a question',
|
|
@@ -61,16 +59,10 @@ const ASK_ORIGIN_SENTENCES = Object.freeze({
|
|
|
61
59
|
safety_tighten: 'the gate tightened on this call’s own facts (network egress, irreversibility, or a protected write)',
|
|
62
60
|
policy: 'this deployment’s permission policy asks about this call',
|
|
63
61
|
});
|
|
64
|
-
|
|
65
|
-
export function askOriginDetail(origin, message) {
|
|
62
|
+
export function askOriginDetail(origin, _message) {
|
|
66
63
|
const known = typeof origin === 'string' && Object.hasOwn(ASK_ORIGIN_SENTENCES, origin)
|
|
67
64
|
? ASK_ORIGIN_SENTENCES[origin]
|
|
68
65
|
: undefined;
|
|
69
|
-
if (typeof origin === 'string' && ORIGIN_PREFERS_ENGINE_MESSAGE.has(origin)) {
|
|
70
|
-
const spoken = typeof message === 'string' ? message.trim() : '';
|
|
71
|
-
if (spoken.length > 0)
|
|
72
|
-
return spoken;
|
|
73
|
-
}
|
|
74
66
|
if (known !== undefined)
|
|
75
67
|
return known;
|
|
76
68
|
const word = typeof origin === 'string' && origin.length > 0 ? origin : '(none)';
|
|
@@ -21,4 +21,19 @@ export interface CoreModeArbitrationRow {
|
|
|
21
21
|
readonly ruleMayClear: boolean;
|
|
22
22
|
readonly hookAskFloor: boolean;
|
|
23
23
|
}
|
|
24
|
-
export declare const CORE_MODE_ARBITRATION: Readonly<Record<"content_question" | "hook" | "ancestor" | "unverifiable_delete" | "transcript_write" | "org_rule" | "governance_unavailable" | "rule_unreadable" | "ask_rule" | "denial_limit_fallback" | "operator_forced" | "shell_floor" | "write_protection_unresolved" | "probe" | "write_protection" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "mode" | "unstated" | "ordinary", CoreModeArbitrationRow>>;
|
|
24
|
+
export declare const CORE_MODE_ARBITRATION: Readonly<Record<"content_question" | "hook" | "ancestor" | "unverifiable_delete" | "transcript_write" | "org_rule" | "governance_unavailable" | "rule_unreadable" | "ask_rule" | "denial_limit_fallback" | "requires_user_interaction" | "operator_forced" | "shell_floor" | "write_protection_unresolved" | "probe" | "write_protection" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "mode" | "unstated" | "ordinary", CoreModeArbitrationRow>>;
|
|
25
|
+
export declare const CORE_SKILL_GRANT_ORIGINS: readonly ["model", "user", "inherited"];
|
|
26
|
+
export declare const CORE_ALLOW_ENTRY_INERT_REASONS: readonly ["wildcard_all", "namespace_wildcard", "path_pattern", "domain", "content_unsupported", "grammar"];
|
|
27
|
+
export declare const CORE_ALLOW_RULE_MEMBERS: readonly ["hook", "deployment", "persisted", "skill", "request"];
|
|
28
|
+
export declare const CORE_RULE_TOOL_NAME_VERDICTS: readonly ["current", "retired", "unprefixed_namespace"];
|
|
29
|
+
export declare const CORE_SETTLEMENT_KINDS: readonly ["human_allowed", "human_refused", "approval_window_expired", "denial_limit_window_expired", "park_sla_expired", "no_approver", "approver_unavailable", "approver_error", "approver_contract", "presentation_failed", "blanket_allow_refused", "policy_allowed", "policy_refused", "task_aborted"];
|
|
30
|
+
export declare const CORE_CLASSIFIER_DENY_CAUSES: readonly ["unavailable", "parse_error"];
|
|
31
|
+
export declare const CORE_AUTO_MODE_UNAVAILABLE_CAUSES: readonly ["error", "timeout"];
|
|
32
|
+
export declare const CORE_DEFAULT_TIER_ORDER: readonly ["ultra", "max", "pro", "flash", "lite"];
|
|
33
|
+
export declare const CORE_CC_MODEL_TIER_ALIASES: Readonly<Record<"fable" | "mythos" | "opus" | "sonnet" | "haiku", (typeof CORE_DEFAULT_TIER_ORDER)[number]>>;
|
|
34
|
+
export declare const CORE_DURABLE_AGENT_HANDLE_RE: RegExp;
|
|
35
|
+
export declare const CORE_PERMISSION_MODE_CLASSES: readonly ["bypass", "prompting"];
|
|
36
|
+
export declare const CORE_MCP_LIVENESS_STATES: readonly ["reachable", "unreachable", "unknown"];
|
|
37
|
+
export declare const CORE_RULE_BEHAVIORS: readonly ["deny", "ask", "allow"];
|
|
38
|
+
export declare const CORE_MCP_IMAGE_MAX_BASE64: number;
|
|
39
|
+
export declare const CORE_MAX_PENDING_STEER_CHARS: number;
|
|
@@ -151,6 +151,7 @@ export const CORE_MODE_ARBITRATION = Object.freeze({
|
|
|
151
151
|
"rule_unreadable": Object.freeze({ bypassImmune: false, classifierEligible: false, sandboxAdmission: false, ruleMayClear: false, hookAskFloor: false }),
|
|
152
152
|
"ask_rule": Object.freeze({ bypassImmune: true, classifierEligible: false, sandboxAdmission: false, ruleMayClear: false, hookAskFloor: true }),
|
|
153
153
|
"denial_limit_fallback": Object.freeze({ bypassImmune: true, classifierEligible: false, sandboxAdmission: false, ruleMayClear: false, hookAskFloor: false }),
|
|
154
|
+
"requires_user_interaction": Object.freeze({ bypassImmune: true, classifierEligible: false, sandboxAdmission: false, ruleMayClear: false, hookAskFloor: true }),
|
|
154
155
|
"operator_forced": Object.freeze({ bypassImmune: true, classifierEligible: true, sandboxAdmission: true, ruleMayClear: false, hookAskFloor: false }),
|
|
155
156
|
"shell_floor": Object.freeze({ bypassImmune: true, classifierEligible: true, sandboxAdmission: true, ruleMayClear: false, hookAskFloor: false }),
|
|
156
157
|
"write_protection_unresolved": Object.freeze({ bypassImmune: true, classifierEligible: false, sandboxAdmission: true, ruleMayClear: false, hookAskFloor: true }),
|
|
@@ -164,3 +165,83 @@ export const CORE_MODE_ARBITRATION = Object.freeze({
|
|
|
164
165
|
"unstated": Object.freeze({ bypassImmune: false, classifierEligible: true, sandboxAdmission: false, ruleMayClear: true, hookAskFloor: false }),
|
|
165
166
|
"ordinary": Object.freeze({ bypassImmune: false, classifierEligible: true, sandboxAdmission: true, ruleMayClear: true, hookAskFloor: false }),
|
|
166
167
|
});
|
|
168
|
+
export const CORE_SKILL_GRANT_ORIGINS = Object.freeze([
|
|
169
|
+
"model",
|
|
170
|
+
"user",
|
|
171
|
+
"inherited",
|
|
172
|
+
]);
|
|
173
|
+
export const CORE_ALLOW_ENTRY_INERT_REASONS = Object.freeze([
|
|
174
|
+
"wildcard_all",
|
|
175
|
+
"namespace_wildcard",
|
|
176
|
+
"path_pattern",
|
|
177
|
+
"domain",
|
|
178
|
+
"content_unsupported",
|
|
179
|
+
"grammar",
|
|
180
|
+
]);
|
|
181
|
+
export const CORE_ALLOW_RULE_MEMBERS = Object.freeze([
|
|
182
|
+
"hook",
|
|
183
|
+
"deployment",
|
|
184
|
+
"persisted",
|
|
185
|
+
"skill",
|
|
186
|
+
"request",
|
|
187
|
+
]);
|
|
188
|
+
export const CORE_RULE_TOOL_NAME_VERDICTS = Object.freeze([
|
|
189
|
+
"current",
|
|
190
|
+
"retired",
|
|
191
|
+
"unprefixed_namespace",
|
|
192
|
+
]);
|
|
193
|
+
export const CORE_SETTLEMENT_KINDS = Object.freeze([
|
|
194
|
+
"human_allowed",
|
|
195
|
+
"human_refused",
|
|
196
|
+
"approval_window_expired",
|
|
197
|
+
"denial_limit_window_expired",
|
|
198
|
+
"park_sla_expired",
|
|
199
|
+
"no_approver",
|
|
200
|
+
"approver_unavailable",
|
|
201
|
+
"approver_error",
|
|
202
|
+
"approver_contract",
|
|
203
|
+
"presentation_failed",
|
|
204
|
+
"blanket_allow_refused",
|
|
205
|
+
"policy_allowed",
|
|
206
|
+
"policy_refused",
|
|
207
|
+
"task_aborted",
|
|
208
|
+
]);
|
|
209
|
+
export const CORE_CLASSIFIER_DENY_CAUSES = Object.freeze([
|
|
210
|
+
"unavailable",
|
|
211
|
+
"parse_error",
|
|
212
|
+
]);
|
|
213
|
+
export const CORE_AUTO_MODE_UNAVAILABLE_CAUSES = Object.freeze([
|
|
214
|
+
"error",
|
|
215
|
+
"timeout",
|
|
216
|
+
]);
|
|
217
|
+
export const CORE_DEFAULT_TIER_ORDER = Object.freeze([
|
|
218
|
+
"ultra",
|
|
219
|
+
"max",
|
|
220
|
+
"pro",
|
|
221
|
+
"flash",
|
|
222
|
+
"lite",
|
|
223
|
+
]);
|
|
224
|
+
export const CORE_CC_MODEL_TIER_ALIASES = Object.freeze({
|
|
225
|
+
"fable": "max",
|
|
226
|
+
"mythos": "max",
|
|
227
|
+
"opus": "pro",
|
|
228
|
+
"sonnet": "flash",
|
|
229
|
+
"haiku": "lite",
|
|
230
|
+
});
|
|
231
|
+
export const CORE_DURABLE_AGENT_HANDLE_RE = Object.freeze(/^a[0-9a-f]{6,32}$/);
|
|
232
|
+
export const CORE_PERMISSION_MODE_CLASSES = Object.freeze([
|
|
233
|
+
"bypass",
|
|
234
|
+
"prompting",
|
|
235
|
+
]);
|
|
236
|
+
export const CORE_MCP_LIVENESS_STATES = Object.freeze([
|
|
237
|
+
"reachable",
|
|
238
|
+
"unreachable",
|
|
239
|
+
"unknown",
|
|
240
|
+
]);
|
|
241
|
+
export const CORE_RULE_BEHAVIORS = Object.freeze([
|
|
242
|
+
"deny",
|
|
243
|
+
"ask",
|
|
244
|
+
"allow",
|
|
245
|
+
]);
|
|
246
|
+
export const CORE_MCP_IMAGE_MAX_BASE64 = 5242880;
|
|
247
|
+
export const CORE_MAX_PENDING_STEER_CHARS = 16000;
|
|
@@ -28,6 +28,7 @@ export const CORE_ENGINE_NOTICE_CODES = Object.freeze([
|
|
|
28
28
|
"permission.ask_released_by_mode",
|
|
29
29
|
"permission.read_deny_unapplied",
|
|
30
30
|
"permission.rule_store_unavailable",
|
|
31
|
+
"permission.allowed_tool_not_granted",
|
|
31
32
|
"peer.inbound_disposition",
|
|
32
33
|
"peer.held_settled",
|
|
33
34
|
"peer.idle_subscription",
|
|
@@ -115,6 +116,7 @@ export const CORE_NOTICE_AUDIENCE = Object.freeze({
|
|
|
115
116
|
"permission.ask_released_by_mode": "user",
|
|
116
117
|
"permission.read_deny_unapplied": "user",
|
|
117
118
|
"permission.rule_store_unavailable": "user",
|
|
119
|
+
"permission.allowed_tool_not_granted": "user",
|
|
118
120
|
"peer.inbound_disposition": "user",
|
|
119
121
|
"peer.held_settled": "user",
|
|
120
122
|
"peer.idle_subscription": "user",
|
|
@@ -208,6 +210,7 @@ export const CORE_NOTICE_MINTER = Object.freeze({
|
|
|
208
210
|
"permission.ask_released_by_mode": "engine",
|
|
209
211
|
"permission.read_deny_unapplied": "engine",
|
|
210
212
|
"permission.rule_store_unavailable": "engine",
|
|
213
|
+
"permission.allowed_tool_not_granted": "engine",
|
|
211
214
|
"peer.inbound_disposition": "engine",
|
|
212
215
|
"peer.held_settled": "engine",
|
|
213
216
|
"peer.idle_subscription": "engine",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const SETTINGS_ENGINE_OWNED_HOOK_EVENTS: readonly ["PreToolUse", "PostToolUse", "PostToolUseFailure", "PostToolBatch", "PreCompact", "PostCompact", "Stop", "StopFailure", "UserPromptSubmit"];
|
|
2
|
+
export declare const SETTINGS_SECRET_LITERAL_RE: RegExp;
|
|
3
|
+
export declare const SETTINGS_TIER_GROUP_NAME_RE: RegExp;
|
|
4
|
+
export declare const SETTINGS_BUDGET_NUMBER_KEYS: readonly ["maxBudgetUsd", "tpmLimit", "rpmLimit", "maxParallelRequests", "maxRunCostUsd", "maxIterations"];
|
|
5
|
+
export declare const SETTINGS_BUDGET_STRING_KEYS: readonly ["mode", "budgetDuration", "enforcement"];
|
|
6
|
+
export declare const SETTINGS_BUDGET_PER_MODEL_NUMBER_KEYS: readonly ["maxBudgetUsd", "tpmLimit", "rpmLimit"];
|
|
7
|
+
export declare const SETTINGS_MODEL_API_WORDS: readonly ["openai-completions", "anthropic-messages"];
|
|
8
|
+
export declare const SETTINGS_TOOL_NAME_MATCHER_EVENTS: readonly ["PreToolUse", "PostToolUse", "PostToolUseFailure"];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const SETTINGS_ENGINE_OWNED_HOOK_EVENTS = Object.freeze([
|
|
2
|
+
"PreToolUse",
|
|
3
|
+
"PostToolUse",
|
|
4
|
+
"PostToolUseFailure",
|
|
5
|
+
"PostToolBatch",
|
|
6
|
+
"PreCompact",
|
|
7
|
+
"PostCompact",
|
|
8
|
+
"Stop",
|
|
9
|
+
"StopFailure",
|
|
10
|
+
"UserPromptSubmit",
|
|
11
|
+
]);
|
|
12
|
+
export const SETTINGS_SECRET_LITERAL_RE = Object.freeze(/^(sk-|gh[opus]_|github_pat_|xox[baprse]-|xapp-|bearer\s|basic\s|eyJ[A-Za-z0-9_-]{10,}\.|AKIA[0-9A-Z]{12,}|AIza[0-9A-Za-z_-]{20,}|-----BEGIN[A-Z0-9 ]*PRIVATE KEY)/i);
|
|
13
|
+
export const SETTINGS_TIER_GROUP_NAME_RE = Object.freeze(/^[a-z0-9][a-z0-9._-]*$/i);
|
|
14
|
+
export const SETTINGS_BUDGET_NUMBER_KEYS = Object.freeze([
|
|
15
|
+
"maxBudgetUsd",
|
|
16
|
+
"tpmLimit",
|
|
17
|
+
"rpmLimit",
|
|
18
|
+
"maxParallelRequests",
|
|
19
|
+
"maxRunCostUsd",
|
|
20
|
+
"maxIterations",
|
|
21
|
+
]);
|
|
22
|
+
export const SETTINGS_BUDGET_STRING_KEYS = Object.freeze([
|
|
23
|
+
"mode",
|
|
24
|
+
"budgetDuration",
|
|
25
|
+
"enforcement",
|
|
26
|
+
]);
|
|
27
|
+
export const SETTINGS_BUDGET_PER_MODEL_NUMBER_KEYS = Object.freeze([
|
|
28
|
+
"maxBudgetUsd",
|
|
29
|
+
"tpmLimit",
|
|
30
|
+
"rpmLimit",
|
|
31
|
+
]);
|
|
32
|
+
export const SETTINGS_MODEL_API_WORDS = Object.freeze([
|
|
33
|
+
"openai-completions",
|
|
34
|
+
"anthropic-messages",
|
|
35
|
+
]);
|
|
36
|
+
export const SETTINGS_TOOL_NAME_MATCHER_EVENTS = Object.freeze([
|
|
37
|
+
"PreToolUse",
|
|
38
|
+
"PostToolUse",
|
|
39
|
+
"PostToolUseFailure",
|
|
40
|
+
]);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ApprovalAllowRuleShadowMember {
|
|
2
|
+
readonly member?: string;
|
|
3
|
+
readonly known: boolean;
|
|
4
|
+
readonly entries?: readonly string[];
|
|
5
|
+
readonly omitted?: number;
|
|
6
|
+
readonly malformed?: true;
|
|
7
|
+
}
|
|
8
|
+
export interface AllowRuleShadowedWireMember {
|
|
9
|
+
readonly member: string;
|
|
10
|
+
readonly entries: readonly string[];
|
|
11
|
+
readonly omitted?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ApprovalAllowRuleShadow {
|
|
14
|
+
readonly source: 'allow_rule_shadowed' | 'legacy_shadowed_rule';
|
|
15
|
+
readonly members: readonly ApprovalAllowRuleShadowMember[];
|
|
16
|
+
readonly unreadable?: true;
|
|
17
|
+
}
|
|
18
|
+
export declare function readAllowRuleShadowFromWire(carrier: object | null | undefined, leg: 'frame' | 'row'): ApprovalAllowRuleShadow | undefined;
|
|
19
|
+
export declare function readApprovalAllowRuleShadow(card: object | null | undefined): ApprovalAllowRuleShadow | undefined;
|
|
20
|
+
export declare function approvalAllowRuleShadowed(card: object | null | undefined): boolean;
|
|
21
|
+
export declare function legacyShadowedRuleTextOf(r: ApprovalAllowRuleShadow | undefined): string | undefined;
|