@agentplat/inference-control 0.3.0-alpha.3

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 (83) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +101 -0
  3. package/dist/assessments.d.ts +5 -0
  4. package/dist/assessments.d.ts.map +1 -0
  5. package/dist/assessments.js +216 -0
  6. package/dist/assessments.js.map +1 -0
  7. package/dist/boundary.d.ts +24 -0
  8. package/dist/boundary.d.ts.map +1 -0
  9. package/dist/boundary.js +46 -0
  10. package/dist/boundary.js.map +1 -0
  11. package/dist/canonical.d.ts +6 -0
  12. package/dist/canonical.d.ts.map +1 -0
  13. package/dist/canonical.js +74 -0
  14. package/dist/canonical.js.map +1 -0
  15. package/dist/capabilities.d.ts +43 -0
  16. package/dist/capabilities.d.ts.map +1 -0
  17. package/dist/capabilities.js +304 -0
  18. package/dist/capabilities.js.map +1 -0
  19. package/dist/context.d.ts +7 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +191 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +14 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/messages.d.ts +124 -0
  28. package/dist/messages.d.ts.map +1 -0
  29. package/dist/messages.js +475 -0
  30. package/dist/messages.js.map +1 -0
  31. package/dist/model.d.ts +104 -0
  32. package/dist/model.d.ts.map +1 -0
  33. package/dist/model.js +437 -0
  34. package/dist/model.js.map +1 -0
  35. package/dist/policy.d.ts +11 -0
  36. package/dist/policy.d.ts.map +1 -0
  37. package/dist/policy.js +338 -0
  38. package/dist/policy.js.map +1 -0
  39. package/dist/reducer.d.ts +193 -0
  40. package/dist/reducer.d.ts.map +1 -0
  41. package/dist/reducer.js +1341 -0
  42. package/dist/reducer.js.map +1 -0
  43. package/dist/runtime.d.ts +132 -0
  44. package/dist/runtime.d.ts.map +1 -0
  45. package/dist/runtime.js +587 -0
  46. package/dist/runtime.js.map +1 -0
  47. package/dist/scopes.d.ts +3 -0
  48. package/dist/scopes.d.ts.map +1 -0
  49. package/dist/scopes.js +83 -0
  50. package/dist/scopes.js.map +1 -0
  51. package/dist/sha256.d.ts +2 -0
  52. package/dist/sha256.d.ts.map +1 -0
  53. package/dist/sha256.js +72 -0
  54. package/dist/sha256.js.map +1 -0
  55. package/dist/state-records.d.ts +8 -0
  56. package/dist/state-records.d.ts.map +1 -0
  57. package/dist/state-records.js +204 -0
  58. package/dist/state-records.js.map +1 -0
  59. package/dist/state.d.ts +19 -0
  60. package/dist/state.d.ts.map +1 -0
  61. package/dist/state.js +689 -0
  62. package/dist/state.js.map +1 -0
  63. package/dist/streams.d.ts +5 -0
  64. package/dist/streams.d.ts.map +1 -0
  65. package/dist/streams.js +93 -0
  66. package/dist/streams.js.map +1 -0
  67. package/dist/telemetry.d.ts +12 -0
  68. package/dist/telemetry.d.ts.map +1 -0
  69. package/dist/telemetry.js +20 -0
  70. package/dist/telemetry.js.map +1 -0
  71. package/dist/tools.d.ts +221 -0
  72. package/dist/tools.d.ts.map +1 -0
  73. package/dist/tools.js +755 -0
  74. package/dist/tools.js.map +1 -0
  75. package/dist/types.d.ts +474 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +43 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/validation.d.ts +23 -0
  80. package/dist/validation.d.ts.map +1 -0
  81. package/dist/validation.js +154 -0
  82. package/dist/validation.js.map +1 -0
  83. package/package.json +56 -0
@@ -0,0 +1,191 @@
1
+ import { canonicalizeControlJsonV1, digestControlJsonV1, utf8ByteLength, } from './canonical.js';
2
+ import { validateControlScopeV1 } from './scopes.js';
3
+ import { assertDigest, assertExactKeys, assertIdentifier, assertOneOf, assertSafeInteger, assertStrictJsonValue, assertString, deepFreeze, } from './validation.js';
4
+ const zones = [
5
+ 'policy',
6
+ 'objective',
7
+ 'local_trusted',
8
+ 'user_untrusted',
9
+ 'peer_untrusted',
10
+ 'tool_untrusted',
11
+ 'retrieval_untrusted',
12
+ 'provider_untrusted',
13
+ 'assessor_untrusted',
14
+ ];
15
+ export function validateContextEntryV1(value) {
16
+ const keys = [
17
+ 'schemaVersion',
18
+ 'contextEntryId',
19
+ 'runId',
20
+ 'tenantId',
21
+ 'zone',
22
+ 'sourceKind',
23
+ 'sourceId',
24
+ 'sourceVersion',
25
+ 'mediaType',
26
+ 'content',
27
+ 'contentDigest',
28
+ 'provenanceDigest',
29
+ 'encodedBytes',
30
+ 'createdAtLogicalMs',
31
+ 'scope',
32
+ 'derivation',
33
+ ];
34
+ assertExactKeys(value, keys, 'context entry');
35
+ const v = value;
36
+ if (v.schemaVersion !== 1)
37
+ throw new TypeError('Unsupported context schema');
38
+ for (const key of [
39
+ 'contextEntryId',
40
+ 'runId',
41
+ 'tenantId',
42
+ 'sourceId',
43
+ ])
44
+ assertIdentifier(v[key], key);
45
+ assertOneOf(v.zone, zones, 'zone');
46
+ assertOneOf(v.sourceKind, ['local', 'user', 'peer', 'tool', 'retrieval', 'provider', 'assessor'], 'sourceKind');
47
+ if (['policy', 'objective', 'local_trusted'].includes(v.zone) &&
48
+ v.sourceKind !== 'local')
49
+ throw new TypeError('context_zone_invalid');
50
+ assertSafeInteger(v.sourceVersion, 'sourceVersion', 1);
51
+ assertOneOf(v.mediaType, ['text', 'json'], 'mediaType');
52
+ if (v.mediaType === 'text')
53
+ assertString(v.content, 'content');
54
+ else
55
+ assertStrictJsonValue(v.content);
56
+ assertDigest(v.contentDigest, 'contentDigest');
57
+ assertDigest(v.provenanceDigest, 'provenanceDigest');
58
+ assertSafeInteger(v.encodedBytes, 'encodedBytes');
59
+ assertSafeInteger(v.createdAtLogicalMs, 'createdAtLogicalMs');
60
+ if (v.scope !== null)
61
+ validateControlScopeV1(v.scope);
62
+ if (v.derivation !== null)
63
+ validateDerivation(v.derivation);
64
+ const content = v.content;
65
+ const expectedContentDigest = digestControlJsonV1('context', content);
66
+ const expectedEncodedBytes = encodedContentBytes(content, v.mediaType);
67
+ const expectedProvenanceDigest = digestControlJsonV1('provenance', provenanceMaterial(v));
68
+ if (v.contentDigest !== expectedContentDigest ||
69
+ v.encodedBytes !== expectedEncodedBytes ||
70
+ v.provenanceDigest !== expectedProvenanceDigest)
71
+ throw new TypeError('state_conflict');
72
+ return deepFreeze({ ...v });
73
+ }
74
+ export function createContextEntryV1(input) {
75
+ const content = input.content;
76
+ const encodedBytes = encodedContentBytes(content, input.mediaType);
77
+ return validateContextEntryV1({
78
+ ...input,
79
+ schemaVersion: 1,
80
+ contentDigest: digestControlJsonV1('context', content),
81
+ provenanceDigest: digestControlJsonV1('provenance', provenanceMaterial(input)),
82
+ encodedBytes,
83
+ });
84
+ }
85
+ export function canAdmitContextEntryV1(policy, existing, entry) {
86
+ const admitted = validateContextEntryV1(entry);
87
+ const retained = existing.map((item) => validateContextEntryV1(item));
88
+ return (policy.allowedContextZones.includes(admitted.zone) &&
89
+ retained.length < policy.limits.maxContextEntriesPerRun &&
90
+ admitted.encodedBytes <= policy.limits.maxContextEntryBytes &&
91
+ retained.reduce((total, item) => total + item.encodedBytes, 0) +
92
+ admitted.encodedBytes <=
93
+ policy.limits.maxContextBytesPerRun);
94
+ }
95
+ export function promoteContextEntryV1(source, promotion, policy) {
96
+ validateContextEntryV1(source);
97
+ validatePromotion(promotion);
98
+ if (!policy.allowedTransformerBindings.some((item) => item.id === promotion.transformerId &&
99
+ item.version === promotion.transformerVersion) ||
100
+ !policy.allowedContextZones.includes(promotion.targetZone))
101
+ throw new TypeError('context_promotion_denied');
102
+ if (promotion.sourceContextEntryId !== source.contextEntryId ||
103
+ promotion.sourceContentDigest !== source.contentDigest ||
104
+ promotion.policyId !== policy.policyId ||
105
+ promotion.policyVersion !== policy.policyVersion)
106
+ throw new TypeError('context_promotion_denied');
107
+ return createContextEntryV1({
108
+ ...source,
109
+ contextEntryId: `${source.contextEntryId}:p:${promotion.transformerId}:${promotion.transformerVersion}`,
110
+ zone: promotion.targetZone,
111
+ sourceKind: 'local',
112
+ createdAtLogicalMs: promotion.promotedAtLogicalMs,
113
+ derivation: promotion,
114
+ });
115
+ }
116
+ export const CONTEXT_ZONES_V1 = zones;
117
+ function encodedContentBytes(content, mediaType) {
118
+ return utf8ByteLength(mediaType === 'text'
119
+ ? content
120
+ : canonicalizeControlJsonV1(content));
121
+ }
122
+ function provenanceMaterial(entry) {
123
+ return {
124
+ sourceKind: entry.sourceKind,
125
+ sourceId: entry.sourceId,
126
+ sourceVersion: entry.sourceVersion,
127
+ derivation: entry.derivation,
128
+ };
129
+ }
130
+ function validateDerivation(value) {
131
+ if (!value || typeof value !== 'object' || Array.isArray(value))
132
+ throw new TypeError('context derivation must be an object');
133
+ const record = value;
134
+ if (Object.hasOwn(record, 'transformerId')) {
135
+ assertExactKeys(value, [
136
+ 'sourceContextEntryId',
137
+ 'sourceContentDigest',
138
+ 'transformerId',
139
+ 'transformerVersion',
140
+ 'policyId',
141
+ 'policyVersion',
142
+ 'targetZone',
143
+ 'promotedAtLogicalMs',
144
+ ], 'context promotion');
145
+ for (const key of [
146
+ 'sourceContextEntryId',
147
+ 'transformerId',
148
+ 'policyId',
149
+ ])
150
+ assertIdentifier(record[key], key);
151
+ assertDigest(record.sourceContentDigest, 'sourceContentDigest');
152
+ for (const key of ['transformerVersion', 'policyVersion'])
153
+ assertSafeInteger(record[key], key, 1);
154
+ assertOneOf(record.targetZone, [
155
+ 'local_trusted',
156
+ 'user_untrusted',
157
+ 'peer_untrusted',
158
+ 'tool_untrusted',
159
+ 'retrieval_untrusted',
160
+ 'provider_untrusted',
161
+ 'assessor_untrusted',
162
+ ], 'targetZone');
163
+ assertSafeInteger(record.promotedAtLogicalMs, 'promotedAtLogicalMs');
164
+ return;
165
+ }
166
+ assertExactKeys(value, [
167
+ 'sourceContextEntryId',
168
+ 'sourceContentDigest',
169
+ 'assessmentRequestId',
170
+ 'assessmentId',
171
+ 'assessorId',
172
+ 'assessorVersion',
173
+ 'targetZone',
174
+ 'createdAtLogicalMs',
175
+ ], 'assessor revision');
176
+ for (const key of [
177
+ 'sourceContextEntryId',
178
+ 'assessmentRequestId',
179
+ 'assessmentId',
180
+ 'assessorId',
181
+ ])
182
+ assertIdentifier(record[key], key);
183
+ assertDigest(record.sourceContentDigest, 'sourceContentDigest');
184
+ assertSafeInteger(record.assessorVersion, 'assessorVersion', 1);
185
+ assertOneOf(record.targetZone, ['assessor_untrusted'], 'targetZone');
186
+ assertSafeInteger(record.createdAtLogicalMs, 'createdAtLogicalMs');
187
+ }
188
+ function validatePromotion(value) {
189
+ validateDerivation(value);
190
+ }
191
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export * from './types.js';
2
+ export * from './canonical.js';
3
+ export * from './validation.js';
4
+ export * from './scopes.js';
5
+ export * from './capabilities.js';
6
+ export * from './boundary.js';
7
+ export * from './context.js';
8
+ export * from './policy.js';
9
+ export * from './assessments.js';
10
+ export * from './streams.js';
11
+ export * from './telemetry.js';
12
+ export * from './state.js';
13
+ export * from './reducer.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from './types.js';
2
+ export * from './canonical.js';
3
+ export * from './validation.js';
4
+ export * from './scopes.js';
5
+ export * from './capabilities.js';
6
+ export * from './boundary.js';
7
+ export * from './context.js';
8
+ export * from './policy.js';
9
+ export * from './assessments.js';
10
+ export * from './streams.js';
11
+ export * from './telemetry.js';
12
+ export * from './state.js';
13
+ export * from './reducer.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { type ActionScope, type AuthorityResult, type ActionAuthorityResolver, type ControlJson } from './tools.js';
2
+ export declare const MAX_OUTBOUND_MESSAGE_BYTES_V1 = 65536;
3
+ export type MessageAttemptStatus = 'prepared' | 'reserved' | 'sent' | 'failed' | 'indeterminate' | 'expired';
4
+ export interface OutboundMessage {
5
+ readonly schemaVersion: 1;
6
+ readonly messageId: string;
7
+ readonly runId: string;
8
+ readonly tenantId: string;
9
+ readonly channel: string;
10
+ readonly recipient: string;
11
+ readonly mediaType: 'text' | 'json';
12
+ readonly content: string | ControlJson;
13
+ readonly scope: ActionScope;
14
+ readonly idempotencyKey: string;
15
+ readonly messageDigest: string;
16
+ }
17
+ export interface MessageReservation {
18
+ readonly schemaVersion: 1;
19
+ readonly reservationId: string;
20
+ readonly messageDispatchAttemptId: string;
21
+ readonly reservedByGatewayId: string;
22
+ readonly reservedStateGeneration: number;
23
+ readonly authorityGeneration: number | null;
24
+ readonly fencingToken: string | null;
25
+ readonly reservedAtLogicalMs: number;
26
+ }
27
+ export interface OutboundMessageAttempt {
28
+ readonly schemaVersion: 1;
29
+ readonly messageAttemptId: string;
30
+ readonly messageId: string;
31
+ readonly assessmentRequestId: string;
32
+ readonly assessmentId: string;
33
+ readonly messageDigest: string;
34
+ readonly scopeDigest: string;
35
+ readonly idempotencyKey: string;
36
+ readonly generation: number;
37
+ readonly dispatcherId: string;
38
+ readonly dispatcherVersion: number;
39
+ readonly dispatcherDigest: string;
40
+ readonly status: MessageAttemptStatus;
41
+ readonly reservation: MessageReservation | null;
42
+ readonly reservedAtLogicalMs: number | null;
43
+ readonly expiresAtLogicalMs: number;
44
+ }
45
+ export interface MessageDispatchPermit {
46
+ readonly schemaVersion: 1;
47
+ readonly messageAttemptId: string;
48
+ readonly reservationId: string;
49
+ readonly messageDispatchAttemptId: string;
50
+ readonly gatewayId: string;
51
+ readonly scopeDigest: string;
52
+ readonly messageDigest: string;
53
+ readonly idempotencyKey: string;
54
+ readonly authorityGeneration: number | null;
55
+ readonly fencingToken: string | null;
56
+ }
57
+ export interface OutboundMessageDispatcher {
58
+ readonly dispatcherId: string;
59
+ readonly dispatcherVersion: number;
60
+ readonly dispatcherDigest: string;
61
+ readonly fencingMode: 'local_only' | 'downstream_atomic';
62
+ send(input: {
63
+ readonly message: OutboundMessage;
64
+ readonly permit: MessageDispatchPermit;
65
+ }): Promise<{
66
+ readonly ok: boolean;
67
+ }>;
68
+ }
69
+ export interface MessageAssessmentResolver {
70
+ readonly assessorId: string;
71
+ readonly assessorVersion: number;
72
+ /** Exact replay is a currentness check; cancellation or revocation is false. */
73
+ consumeCurrent(message: OutboundMessage, attempt: OutboundMessageAttempt, logicalTimeMs: number): Promise<boolean>;
74
+ }
75
+ export interface OutboundMessageGatewayLimitsV1 {
76
+ readonly maxOutboundMessageBytes?: number;
77
+ }
78
+ export declare function outboundMessageDigest(message: Omit<OutboundMessage, 'messageDigest'>): string;
79
+ declare const messageReserveCapability: unique symbol;
80
+ declare const messageOutcomeCapability: unique symbol;
81
+ declare const messageLookupCapability: unique symbol;
82
+ declare const messageAdvanceCapability: unique symbol;
83
+ /** Local-only message-attempt store. A reserved snapshot is never replayable. */
84
+ export declare class LocalMessageAttemptLedger {
85
+ readonly gatewayId: string;
86
+ private readonly attempts;
87
+ private readonly idempotency;
88
+ private highWater;
89
+ constructor(gatewayId: string);
90
+ prepare(attempt: OutboundMessageAttempt): OutboundMessageAttempt;
91
+ [messageReserveCapability](id: string, time: number, authority: AuthorityResult): OutboundMessageAttempt;
92
+ [messageOutcomeCapability](id: string, reservationId: string, dispatchId: string, status: Extract<MessageAttemptStatus, 'sent' | 'failed' | 'indeterminate'>): OutboundMessageAttempt;
93
+ [messageLookupCapability](messageId: string, messageDigest: string, scope: string, idempotency: string): OutboundMessageAttempt | undefined;
94
+ [messageAdvanceCapability](id: string, time: number): OutboundMessageAttempt;
95
+ get(id: string): OutboundMessageAttempt | undefined;
96
+ snapshot(): MessageAttemptLedgerSnapshot;
97
+ restore(snapshot: MessageAttemptLedgerSnapshot): void;
98
+ private replace;
99
+ private require;
100
+ private time;
101
+ }
102
+ export interface MessageAttemptLedgerSnapshot {
103
+ readonly schemaVersion: 1;
104
+ readonly highWaterLogicalMs: number;
105
+ readonly attempts: readonly OutboundMessageAttempt[];
106
+ }
107
+ export declare class OutboundMessageGateway {
108
+ readonly ledger: LocalMessageAttemptLedger;
109
+ readonly dispatcher: OutboundMessageDispatcher;
110
+ readonly authorityResolver: ActionAuthorityResolver;
111
+ readonly assessmentResolver: MessageAssessmentResolver;
112
+ readonly allowedChannels: readonly string[];
113
+ readonly maxOutboundMessageBytes: number;
114
+ constructor(ledger: LocalMessageAttemptLedger, dispatcher: OutboundMessageDispatcher, authorityResolver: ActionAuthorityResolver, assessmentResolver: MessageAssessmentResolver, allowedChannels: readonly string[], limits?: OutboundMessageGatewayLimitsV1);
115
+ send(input: {
116
+ readonly schemaVersion: 1;
117
+ readonly message: OutboundMessage;
118
+ readonly logicalTimeMs: number;
119
+ }): Promise<{
120
+ readonly ok: boolean;
121
+ }>;
122
+ }
123
+ export {};
124
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}