@sema-agent/client-core 0.85.2 → 0.86.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 (57) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/README.md +20 -13
  3. package/dist/adapt/arms.js +5 -1
  4. package/dist/adapter/downstream/terminalToSdkResult.d.ts +3 -3
  5. package/dist/agentSession/backgroundView.js +7 -1
  6. package/dist/agentSession/contract.d.ts +1 -1
  7. package/dist/centerWiringCapability.d.ts +38 -0
  8. package/dist/centerWiringCapability.js +202 -0
  9. package/dist/decideFailureNote.js +3 -0
  10. package/dist/engineCapReader.d.ts +8 -0
  11. package/dist/engineCapReader.js +15 -0
  12. package/dist/engineErrorCodes.d.ts +3 -0
  13. package/dist/engineErrorCodes.js +8 -0
  14. package/dist/engineNoticeCodes.d.ts +62 -0
  15. package/dist/engineNoticeCodes.js +247 -29
  16. package/dist/executionLaneCapability.d.ts +6 -0
  17. package/dist/executionLaneCapability.js +55 -2
  18. package/dist/fleet/fleetProjection.js +6 -8
  19. package/dist/fleet/workflowSizeWarning.js +2 -5
  20. package/dist/gateOutcome.d.ts +13 -0
  21. package/dist/gateOutcome.js +48 -1
  22. package/dist/gateVocabulary.d.ts +6 -3
  23. package/dist/gateVocabulary.js +7 -15
  24. package/dist/generated/engineFactTables.d.ts +10 -0
  25. package/dist/generated/engineFactTables.js +113 -0
  26. package/dist/generated/engineNoticeTables.js +14 -0
  27. package/dist/hitl/refusedToolNameProse.d.ts +4 -0
  28. package/dist/hitl/refusedToolNameProse.js +7 -0
  29. package/dist/hitl/sessionPolicyDeliverable.js +9 -5
  30. package/dist/hitl/sessionPolicyWire.d.ts +16 -0
  31. package/dist/hitl/sessionPolicyWire.js +49 -1
  32. package/dist/index.d.ts +5 -1
  33. package/dist/index.js +5 -1
  34. package/dist/inheritEnvWire.d.ts +22 -0
  35. package/dist/inheritEnvWire.js +84 -0
  36. package/dist/peerFrames.js +2 -10
  37. package/dist/printInitToolFace.d.ts +6 -0
  38. package/dist/printInitToolFace.js +115 -2
  39. package/dist/readCredentialRefusal.d.ts +2 -0
  40. package/dist/readCredentialRefusal.js +7 -0
  41. package/dist/request/taskRequest.d.ts +4 -5
  42. package/dist/request/taskRequest.js +33 -23
  43. package/dist/runTerminal.js +2 -6
  44. package/dist/sqlEngineCapability.js +15 -2
  45. package/dist/storePostureCapability.d.ts +25 -0
  46. package/dist/storePostureCapability.js +132 -0
  47. package/dist/toolResult.js +2 -47
  48. package/dist/wireErrorTriage.d.ts +1 -0
  49. package/dist/wireErrorTriage.js +3 -0
  50. package/dist/wireFailureShape.d.ts +3 -0
  51. package/dist/wireFailureShape.js +44 -0
  52. package/dist/wireRefusalCopy.d.ts +39 -1
  53. package/dist/wireRefusalCopy.js +350 -2
  54. package/dist/workflowClient.d.ts +4 -0
  55. package/dist/workflowClient.js +12 -4
  56. package/docs/INTEGRATION-CLIENTS.md +716 -14
  57. package/package.json +2 -2
@@ -0,0 +1,38 @@
1
+ export interface CenterWiringRevisionView {
2
+ version: number;
3
+ updatedAt: string;
4
+ }
5
+ export interface CenterWiringCallerView {
6
+ lease: string;
7
+ retryAfterSec?: number;
8
+ }
9
+ export interface CenterWiringView {
10
+ effectivePull: boolean;
11
+ effectiveRevision: CenterWiringRevisionView | null;
12
+ lease: string;
13
+ leaseHealth?: string;
14
+ failMode?: string;
15
+ usageReport: boolean;
16
+ issuer: string;
17
+ caller?: CenterWiringCallerView;
18
+ }
19
+ export type CenterWiringReading = {
20
+ kind: 'unobserved';
21
+ } | {
22
+ kind: 'not_reported';
23
+ } | {
24
+ kind: 'none';
25
+ } | {
26
+ kind: 'present';
27
+ view: CenterWiringView;
28
+ };
29
+ export declare function projectCenterWiringCapability(caps: unknown): CenterWiringReading | undefined;
30
+ export declare function noteEngineCapsForCenterWiring(baseUrl: string, caps: unknown, opts?: {
31
+ generation?: number;
32
+ }): void;
33
+ export declare function observedCenterWiring(baseUrl?: string | undefined): CenterWiringReading;
34
+ export type CallerQuotaLease = 'enforced' | 'not-enforced' | 'exhausted' | 'unobserved' | 'no-lease' | 'unknown';
35
+ export declare function callerQuotaLease(reading: CenterWiringReading): CallerQuotaLease;
36
+ export declare function centerWiringDoctorDetail(reading: CenterWiringReading): string;
37
+ export declare function forgetCenterWiringReading(baseUrl: string | undefined): void;
38
+ export declare function __resetCenterWiringReadingsForTests(): void;
@@ -0,0 +1,202 @@
1
+ import { capForDisplay } from './fleetTaskDesc.js';
2
+ import { engineWireTarget } from './engineWireTarget.js';
3
+ import { capsGenerationOf, createEngineCapReader } from './engineCapReader.js';
4
+ const nonEmpty = (v) => typeof v === 'string' && v !== '';
5
+ const isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
6
+ function optionalSeat(o, key) {
7
+ if (!Object.hasOwn(o, key))
8
+ return { state: 'absent' };
9
+ const value = o[key];
10
+ return value === undefined ? { state: 'absent' } : { state: 'value', value };
11
+ }
12
+ export function projectCenterWiringCapability(caps) {
13
+ try {
14
+ return projectCenterWiringOf(caps);
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ function projectCenterWiringOf(caps) {
21
+ if (!isPlainObject(caps))
22
+ return undefined;
23
+ const cw = Object.hasOwn(caps, 'centerWiring') ? caps.centerWiring : undefined;
24
+ if (cw === undefined)
25
+ return capsGenerationOf(caps).generation === 'new' ? { kind: 'none' } : { kind: 'not_reported' };
26
+ if (!isPlainObject(cw))
27
+ return undefined;
28
+ const effectivePull = cw.effectivePull;
29
+ const revisionRaw = cw.effectiveRevision;
30
+ const lease = cw.lease;
31
+ const usageReport = cw.usageReport;
32
+ const issuer = cw.issuer;
33
+ if (typeof effectivePull !== 'boolean' || typeof usageReport !== 'boolean')
34
+ return undefined;
35
+ if (!nonEmpty(lease) || !nonEmpty(issuer))
36
+ return undefined;
37
+ let effectiveRevision;
38
+ if (revisionRaw === null) {
39
+ effectiveRevision = null;
40
+ }
41
+ else {
42
+ if (!isPlainObject(revisionRaw))
43
+ return undefined;
44
+ const version = revisionRaw.version;
45
+ const updatedAt = revisionRaw.updatedAt;
46
+ if (typeof version !== 'number' || !Number.isFinite(version) || !nonEmpty(updatedAt))
47
+ return undefined;
48
+ effectiveRevision = { version, updatedAt };
49
+ }
50
+ const health = optionalSeat(cw, 'leaseHealth');
51
+ if (health.state === 'value' && !nonEmpty(health.value))
52
+ return undefined;
53
+ const mode = optionalSeat(cw, 'failMode');
54
+ if (mode.state === 'value' && !nonEmpty(mode.value))
55
+ return undefined;
56
+ const callerSeat = optionalSeat(cw, 'caller');
57
+ let caller;
58
+ if (callerSeat.state === 'value') {
59
+ if (!isPlainObject(callerSeat.value))
60
+ return undefined;
61
+ const callerLease = callerSeat.value.lease;
62
+ if (!nonEmpty(callerLease))
63
+ return undefined;
64
+ const wait = optionalSeat(callerSeat.value, 'retryAfterSec');
65
+ if (wait.state === 'value' && (typeof wait.value !== 'number' || !Number.isFinite(wait.value) || wait.value < 0))
66
+ return undefined;
67
+ caller = { lease: callerLease, ...(wait.state === 'value' ? { retryAfterSec: wait.value } : {}) };
68
+ }
69
+ return {
70
+ kind: 'present',
71
+ view: {
72
+ effectivePull,
73
+ effectiveRevision,
74
+ lease,
75
+ ...(health.state === 'value' ? { leaseHealth: health.value } : {}),
76
+ ...(mode.state === 'value' ? { failMode: mode.value } : {}),
77
+ usageReport,
78
+ issuer,
79
+ ...(caller !== undefined ? { caller } : {}),
80
+ },
81
+ };
82
+ }
83
+ const reader = createEngineCapReader({
84
+ name: 'centerWiring',
85
+ project: projectCenterWiringCapability,
86
+ makeUnobserved: () => ({ kind: 'unobserved' }),
87
+ });
88
+ export function noteEngineCapsForCenterWiring(baseUrl, caps, opts) {
89
+ reader.note(baseUrl, caps, opts);
90
+ }
91
+ export function observedCenterWiring(baseUrl = engineWireTarget()?.baseUrl) {
92
+ return reader.observed(baseUrl);
93
+ }
94
+ function guarded(reading) {
95
+ if (typeof reading !== 'object' || reading === null)
96
+ return undefined;
97
+ try {
98
+ const kind = reading.kind;
99
+ if (kind === 'not_reported' || kind === 'unobserved' || kind === 'none')
100
+ return { kind };
101
+ if (kind !== 'present')
102
+ return undefined;
103
+ const view = reading.view;
104
+ return isPlainObject(view) ? { kind: 'present', view } : undefined;
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ export function callerQuotaLease(reading) {
111
+ const r = guarded(reading);
112
+ if (r === undefined)
113
+ return 'unknown';
114
+ if (r.kind === 'none')
115
+ return 'no-lease';
116
+ if (r.kind !== 'present')
117
+ return 'unknown';
118
+ try {
119
+ const lease = r.view.lease;
120
+ if (lease === 'absent')
121
+ return 'no-lease';
122
+ if (lease !== 'configured')
123
+ return 'unknown';
124
+ const caller = r.view.caller;
125
+ if (!isPlainObject(caller))
126
+ return 'unknown';
127
+ const callerLease = caller.lease;
128
+ return callerLease === 'enforced' || callerLease === 'not-enforced' || callerLease === 'exhausted' || callerLease === 'unobserved' ? callerLease : 'unknown';
129
+ }
130
+ catch {
131
+ return 'unknown';
132
+ }
133
+ }
134
+ const WORD_DETAIL_MAX = 40;
135
+ const word = (v) => capForDisplay(v, WORD_DETAIL_MAX);
136
+ function healthClause(v) {
137
+ if (v === undefined)
138
+ return 'lease health not reported';
139
+ if (v === 'ok')
140
+ return 'the quota service is answering';
141
+ if (v === 'auth-rejected')
142
+ return "the quota service rejected this engine's credentials";
143
+ if (v === 'unreachable')
144
+ return 'the quota service could not be reached';
145
+ if (v === 'unobserved')
146
+ return 'no lease negotiated yet';
147
+ return nonEmpty(v) ? `lease health reported as "${word(v)}"` : 'lease health not reported';
148
+ }
149
+ function failModeClause(v) {
150
+ if (v === undefined)
151
+ return 'failure posture not reported';
152
+ if (v === 'closed')
153
+ return 'billed requests are refused while a budget cannot be confirmed';
154
+ if (v === 'open')
155
+ return 'billed requests are let through while a budget cannot be confirmed';
156
+ return nonEmpty(v) ? `failure posture reported as "${word(v)}"` : 'failure posture not reported';
157
+ }
158
+ export function centerWiringDoctorDetail(reading) {
159
+ const unobserved = 'center wiring not observed — the engine reports it on /v1/capabilities; this process has no usable capabilities reading cached for it, so whether this engine is connected to a configuration center is unknown';
160
+ const r = guarded(reading);
161
+ if (r?.kind === 'not_reported') {
162
+ return 'center wiring not reported by this engine — only newer engines advertise it; this does not say whether the engine is connected to a configuration center';
163
+ }
164
+ if (r?.kind === 'none') {
165
+ return 'no configuration center on this deployment — the engine runs on its own local configuration; no quota lease or usage reporting goes through a center';
166
+ }
167
+ if (r?.kind !== 'present')
168
+ return unobserved;
169
+ try {
170
+ const v = r.view;
171
+ const pull = v.effectivePull === true ? 'configuration pulled from the center' : 'latest configuration pull did not succeed (running on what it already had)';
172
+ const rev = v.effectiveRevision;
173
+ const revision = isPlainObject(rev) && typeof rev.version === 'number' && Number.isFinite(rev.version) ? `revision ${String(rev.version)} in effect` : 'no revision in effect yet';
174
+ const lease = v.lease;
175
+ const leasePart = lease === 'absent'
176
+ ? 'quota lease not configured'
177
+ : lease === 'configured'
178
+ ? `quota lease configured (${healthClause(v.leaseHealth)}; ${failModeClause(v.failMode)})`
179
+ : nonEmpty(lease)
180
+ ? `quota lease reported as "${word(lease)}"`
181
+ : 'quota lease not reported';
182
+ const usage = v.usageReport === true ? 'usage reporting on' : 'usage reporting off';
183
+ const iss = v.issuer;
184
+ const issuer = iss === 'explicit'
185
+ ? 'token issuer set explicitly'
186
+ : iss === 'fallback'
187
+ ? 'token issuer defaults to the center'
188
+ : nonEmpty(iss)
189
+ ? `token issuer reported as "${word(iss)}"`
190
+ : 'token issuer not reported';
191
+ return `connected to a configuration center — ${pull}, ${revision} · ${leasePart} · ${usage} · ${issuer}`;
192
+ }
193
+ catch {
194
+ return unobserved;
195
+ }
196
+ }
197
+ export function forgetCenterWiringReading(baseUrl) {
198
+ reader.forget(baseUrl);
199
+ }
200
+ export function __resetCenterWiringReadingsForTests() {
201
+ reader.__resetForTests();
202
+ }
@@ -1,13 +1,16 @@
1
1
  import { corruptStoredRowContent, corruptStoredRowWhere } from './wireErrorTriage.js';
2
2
  import { parkedResumeStartupContent, parkedResumeStartupFromError, resumePolicyBlockContent, resumePolicyBlockFromError, } from './resumeRefusalCopy.js';
3
3
  import { decideParkMovedContent, decideParkMovedFromError } from './decideReceipt.js';
4
+ import { settingsPermissionBucketRefusalContent, settingsPermissionBucketRefusalFromError } from './wireRefusalCopy.js';
4
5
  export function decideFailureNote(err, decision) {
5
6
  const where = corruptStoredRowWhere(err);
6
7
  const fold = resumePolicyBlockFromError(err);
7
8
  const startup = parkedResumeStartupFromError(err, decision);
8
9
  const moved = decideParkMovedFromError(err);
10
+ const bucket = settingsPermissionBucketRefusalFromError(err);
9
11
  return ((where === undefined ? '' : ` — ${corruptStoredRowContent(where)}`) +
10
12
  (fold === null ? '' : ` — ${resumePolicyBlockContent(fold)}`) +
13
+ (bucket === null ? '' : ` — ${settingsPermissionBucketRefusalContent(bucket)}`) +
11
14
  (startup === null ? '' : ` — ${parkedResumeStartupContent(startup)}`) +
12
15
  (moved === null ? '' : ` — ${decideParkMovedContent(moved)}`));
13
16
  }
@@ -12,4 +12,12 @@ interface EngineCapReader<R> {
12
12
  __resetForTests(): void;
13
13
  }
14
14
  export declare function createEngineCapReader<R>(spec: EngineCapReaderSpec<R>): EngineCapReader<R>;
15
+ export type CapsGeneration = {
16
+ generation: 'new';
17
+ store: object;
18
+ } | {
19
+ generation: 'old';
20
+ store: 'absent' | 'malformed';
21
+ };
22
+ export declare function capsGenerationOf(caps: object): CapsGeneration;
15
23
  export {};
@@ -43,3 +43,18 @@ export function createEngineCapReader(spec) {
43
43
  },
44
44
  };
45
45
  }
46
+ export function capsGenerationOf(caps) {
47
+ try {
48
+ if (!Object.hasOwn(caps, 'store'))
49
+ return { generation: 'old', store: 'absent' };
50
+ const store = caps.store;
51
+ if (store === undefined)
52
+ return { generation: 'old', store: 'absent' };
53
+ if (typeof store !== 'object' || store === null || Array.isArray(store))
54
+ return { generation: 'old', store: 'malformed' };
55
+ return { generation: 'new', store };
56
+ }
57
+ catch {
58
+ return { generation: 'old', store: 'malformed' };
59
+ }
60
+ }
@@ -5,6 +5,7 @@ export declare const LIMITS_MAX_WALLTIME_EXCEEDED = "limits.max_walltime_exceede
5
5
  export declare function isLimitsExceededCode(code: string | undefined): boolean;
6
6
  export declare const USAGE_WINDOW_EXHAUSTED = "usage.window_exhausted";
7
7
  export declare const ENV_LIFETIME_EXPIRED = "env.lifetime_expired";
8
+ export declare const FLEET_LEASE_UNAVAILABLE = "fleet.lease_unavailable";
8
9
  export declare const CONFIG_LIMIT_INVALID = "config.limit_invalid";
9
10
  export declare const CONFIG_STRATEGY_FIND_LIMIT_INVALID = "config.strategy_find_limit_invalid";
10
11
  export declare const CONFIG_STRATEGY_MAX_SIZE_INVALID = "config.strategy_max_size_invalid";
@@ -14,6 +15,8 @@ export declare const CONFIG_MEMORY_PROJECT_KEY_SPELLING = "config.memory_project
14
15
  export declare const CONFIG_MEMORY_WRITE_SCOPE_MISMATCH = "config.memory_write_scope_mismatch";
15
16
  export declare const CONFIG_LEGACY_TOOL_NAME = "config.legacy_tool_name";
16
17
  export declare const CONFIG_REFUSAL_CODES: ReadonlySet<string>;
18
+ export declare const RULES_LEGACY_TOOL_NAME = "rules.legacy_tool_name";
19
+ export declare function isRulesRefusalCode(code: string | undefined): boolean;
17
20
  export declare const DELEGATION_CONCURRENCY_CAP = "delegation.concurrency_cap";
18
21
  export declare const DELEGATION_SESSION_CAP = "delegation.session_cap";
19
22
  export declare const DELEGATION_CAP_CODES: ReadonlySet<string>;
@@ -1,4 +1,5 @@
1
1
  import { frozenSet } from './frozenSet.js';
2
+ import { CORE_TOOL_DECLARATION_CODES } from './generated/engineFactTables.js';
2
3
  export const LIMITS_MAX_TOKENS_EXCEEDED = 'limits.max_tokens_exceeded';
3
4
  export const LIMITS_MAX_COST_EXCEEDED = 'limits.max_cost_exceeded';
4
5
  export const LIMITS_MAX_TURNS_EXCEEDED = 'limits.max_turns_exceeded';
@@ -9,6 +10,7 @@ export function isLimitsExceededCode(code) {
9
10
  }
10
11
  export const USAGE_WINDOW_EXHAUSTED = 'usage.window_exhausted';
11
12
  export const ENV_LIFETIME_EXPIRED = 'env.lifetime_expired';
13
+ export const FLEET_LEASE_UNAVAILABLE = 'fleet.lease_unavailable';
12
14
  export const CONFIG_LIMIT_INVALID = 'config.limit_invalid';
13
15
  export const CONFIG_STRATEGY_FIND_LIMIT_INVALID = 'config.strategy_find_limit_invalid';
14
16
  export const CONFIG_STRATEGY_MAX_SIZE_INVALID = 'config.strategy_max_size_invalid';
@@ -26,7 +28,13 @@ export const CONFIG_REFUSAL_CODES = frozenSet([
26
28
  CONFIG_MEMORY_PROJECT_KEY_SPELLING,
27
29
  CONFIG_MEMORY_WRITE_SCOPE_MISMATCH,
28
30
  CONFIG_LEGACY_TOOL_NAME,
31
+ ...CORE_TOOL_DECLARATION_CODES,
29
32
  ]);
33
+ export const RULES_LEGACY_TOOL_NAME = 'rules.legacy_tool_name';
34
+ const RULES_ERROR_CODE_PREFIX = 'rules.';
35
+ export function isRulesRefusalCode(code) {
36
+ return typeof code === 'string' && code.startsWith(RULES_ERROR_CODE_PREFIX);
37
+ }
30
38
  export const DELEGATION_CONCURRENCY_CAP = 'delegation.concurrency_cap';
31
39
  export const DELEGATION_SESSION_CAP = 'delegation.session_cap';
32
40
  export const DELEGATION_CAP_CODES = frozenSet([
@@ -19,6 +19,7 @@ export interface AskUnresolvableFactsView {
19
19
  toolCallId: string;
20
20
  cause: string;
21
21
  parkLaneExisted?: boolean;
22
+ remedy?: string;
22
23
  }
23
24
  export declare function readAskUnresolvable(notice: unknown): AskUnresolvableFactsView | undefined;
24
25
  export declare const DURABLE_MANDATE_SOURCES: readonly string[];
@@ -81,6 +82,61 @@ export interface SessionRecordsSkippedFactsView {
81
82
  }
82
83
  export declare function readSessionRecordsSkipped(notice: unknown): SessionRecordsSkippedFactsView | undefined;
83
84
  export declare function sessionRecordsSkippedNote(facts: Pick<SessionRecordsSkippedFactsView, 'entriesKept'>): string | undefined;
85
+ export interface RuleStoreUnavailableFactsView {
86
+ at: string;
87
+ sessionId: string;
88
+ runId: string;
89
+ }
90
+ export declare function readRuleStoreUnavailable(notice: unknown): RuleStoreUnavailableFactsView | undefined;
91
+ declare const CLASSIFIER_UNAVAILABLE_DISPOSITIONS: readonly ["asked", "denied"];
92
+ type ClassifierUnavailableDispositionWord = (typeof CLASSIFIER_UNAVAILABLE_DISPOSITIONS)[number];
93
+ export interface ClassifierUnavailableFactsView {
94
+ toolName: string;
95
+ toolCallId: string;
96
+ cause: string;
97
+ disposition: ClassifierUnavailableDispositionWord;
98
+ sessionId?: string;
99
+ runId?: string;
100
+ }
101
+ export declare function readClassifierUnavailable(notice: unknown): ClassifierUnavailableFactsView | undefined;
102
+ export declare const PERMISSION_MODE_FOLD_REASONS: readonly string[];
103
+ export interface PermissionModeUnavailableFactsView {
104
+ requested: string;
105
+ effective: string;
106
+ by: string;
107
+ sessionId: string;
108
+ runId: string;
109
+ childSessionId?: string;
110
+ }
111
+ export declare function readPermissionModeUnavailable(notice: unknown): PermissionModeUnavailableFactsView | undefined;
112
+ export interface AskReleasedByModeFactsView {
113
+ mode: string;
114
+ askClass: string;
115
+ origin?: string;
116
+ mandate?: string;
117
+ count: number;
118
+ firstToolCallId: string;
119
+ sessionId?: string;
120
+ runId?: string;
121
+ }
122
+ export declare function readAskReleasedByMode(notice: unknown): AskReleasedByModeFactsView | undefined;
123
+ export interface ReadDenyUnappliedFactsView {
124
+ mode: string;
125
+ toolCallId: string;
126
+ tiers: readonly string[];
127
+ rows: readonly string[];
128
+ rowCount: number;
129
+ sessionId: string;
130
+ runId: string;
131
+ }
132
+ export declare function readReadDenyUnapplied(notice: unknown): ReadDenyUnappliedFactsView | undefined;
133
+ export interface LegacyModeSeedMigratedFactsView {
134
+ permissionMode?: string;
135
+ droppedKeys: readonly string[];
136
+ sessionId: string;
137
+ runId: string;
138
+ }
139
+ export declare function readLegacyModeSeedMigrated(notice: unknown): LegacyModeSeedMigratedFactsView | undefined;
84
140
  export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
85
141
  readonly 'mcp.injection_dropped': typeof readMcpInjectionDrop;
86
142
  readonly 'delegation.ask_unresolvable': typeof readAskUnresolvable;
@@ -91,6 +147,12 @@ export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
91
147
  readonly 'approval.read_root_granted': typeof readReadRootGrantNotice;
92
148
  readonly 'approval.read_root_grant_rejected': typeof readReadRootGrantNotice;
93
149
  readonly 'session.records_skipped': typeof readSessionRecordsSkipped;
150
+ readonly 'permission.rule_store_unavailable': typeof readRuleStoreUnavailable;
151
+ readonly 'classifier.unavailable': typeof readClassifierUnavailable;
152
+ readonly 'config.permission_mode_unavailable': typeof readPermissionModeUnavailable;
153
+ readonly 'permission.ask_released_by_mode': typeof readAskReleasedByMode;
154
+ readonly 'permission.read_deny_unapplied': typeof readReadDenyUnapplied;
155
+ readonly 'resume.legacy_mode_seed_migrated': typeof readLegacyModeSeedMigrated;
94
156
  }>;
95
157
  type FactReaderTable = typeof ENGINE_NOTICE_FACT_READERS;
96
158
  export type EngineNoticeFactsCode = keyof FactReaderTable;