@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
package/dist/model.js ADDED
@@ -0,0 +1,437 @@
1
+ import { assertContextAllowedByPolicyV1, resolveControlBoundaryV1, } from './boundary.js';
2
+ import { canonicalizeControlJsonV1, digestControlJsonV1, utf8ByteLength, } from './canonical.js';
3
+ import { validateControlScopeV1 } from './scopes.js';
4
+ import { assertDigest, assertExactKeys, assertOneOf, assertString, deepFreeze as freezeControlValue, } from './validation.js';
5
+ const MAX_CONTEXT_ENTRIES = 256;
6
+ const MAX_RENDERED_BYTES = 1_048_576;
7
+ export function renderControlledModelRequestV1(controlled, resolveEntries) {
8
+ assertControlledModelRequest(controlled);
9
+ const entries = [...resolveEntries(controlled.contextEntryIds)];
10
+ if (entries.length !== controlled.contextEntryIds.length) {
11
+ throw new Error('context_zone_invalid');
12
+ }
13
+ const byId = new Map(entries.map((entry) => [entry.contextEntryId, entry]));
14
+ const ordered = controlled.contextEntryIds.map((id) => {
15
+ const entry = byId.get(id);
16
+ if (!entry ||
17
+ entry.runId !== controlled.runId ||
18
+ entry.tenantId !== controlled.tenantId) {
19
+ throw new Error('context_zone_invalid');
20
+ }
21
+ return entry;
22
+ });
23
+ const messages = [];
24
+ for (const zone of [
25
+ 'policy',
26
+ 'objective',
27
+ 'local_trusted',
28
+ 'user_untrusted',
29
+ 'peer_untrusted',
30
+ 'tool_untrusted',
31
+ 'retrieval_untrusted',
32
+ 'provider_untrusted',
33
+ 'assessor_untrusted',
34
+ ]) {
35
+ for (const entry of ordered) {
36
+ if (entry.zone !== zone)
37
+ continue;
38
+ if (zone === 'policy' ||
39
+ zone === 'objective' ||
40
+ zone === 'local_trusted') {
41
+ messages.push({
42
+ role: zone === 'policy' ? 'system' : 'developer',
43
+ content: entry.mediaType === 'text'
44
+ ? String(entry.content)
45
+ : canonicalizeControlJsonV1(entry.content),
46
+ });
47
+ }
48
+ else {
49
+ messages.push({
50
+ role: 'user',
51
+ content: canonicalizeControlJsonV1({
52
+ schemaVersion: 1,
53
+ kind: 'agentplat.control.context',
54
+ zone: entry.zone,
55
+ sourceKind: entry.sourceKind,
56
+ sourceId: entry.sourceId,
57
+ sourceVersion: entry.sourceVersion,
58
+ provenanceDigest: entry.provenanceDigest,
59
+ content: entry.content,
60
+ }),
61
+ });
62
+ }
63
+ }
64
+ }
65
+ const request = {
66
+ messages,
67
+ ...(controlled.model === null ? {} : { model: controlled.model }),
68
+ ...(controlled.tools.length === 0 ? {} : { tools: [...controlled.tools] }),
69
+ ...(controlled.options === null
70
+ ? {}
71
+ : {
72
+ options: {
73
+ ...(controlled.options.temperature === null
74
+ ? {}
75
+ : { temperature: controlled.options.temperature }),
76
+ ...(controlled.options.maxOutputTokens === null
77
+ ? {}
78
+ : { maxOutputTokens: controlled.options.maxOutputTokens }),
79
+ ...(controlled.options.stop.length === 0
80
+ ? {}
81
+ : { stop: [...controlled.options.stop] }),
82
+ ...(controlled.options.responseFormat === null
83
+ ? {}
84
+ : { responseFormat: controlled.options.responseFormat }),
85
+ },
86
+ }),
87
+ };
88
+ const canonical = modelRequestJson(request);
89
+ if (utf8ByteLength(canonicalizeControlJsonV1(canonical)) > MAX_RENDERED_BYTES) {
90
+ throw new Error('context_limit_exceeded');
91
+ }
92
+ return Object.freeze({
93
+ schemaVersion: 1,
94
+ request: deepFreeze(request),
95
+ providerRequestDigest: digestControlJsonV1('provider-request', canonical),
96
+ contextEntries: Object.freeze(ordered),
97
+ });
98
+ }
99
+ export class ControlledModelExecutorV1 {
100
+ #adapter;
101
+ #resolveEntries;
102
+ #assessor;
103
+ #mode;
104
+ #risk;
105
+ #controlBoundary;
106
+ constructor(options) {
107
+ if (options.outputRisk === 'high' && options.mode !== 'buffered') {
108
+ throw new Error('release_mode_incompatible');
109
+ }
110
+ assertDigest(options.assessor.assessorBindingDigest, 'assessorBindingDigest');
111
+ this.#adapter = options.adapter;
112
+ this.#controlBoundary = options.controlBoundary;
113
+ this.#resolveEntries = options.contextEntries;
114
+ this.#assessor = Object.freeze({
115
+ assessorId: options.assessor.assessorId,
116
+ assessorVersion: options.assessor.assessorVersion,
117
+ assessorBindingDigest: options.assessor.assessorBindingDigest,
118
+ assess: options.assessor.assess.bind(options.assessor),
119
+ });
120
+ this.#mode = options.mode;
121
+ this.#risk = options.outputRisk;
122
+ }
123
+ async generate(controlled, context) {
124
+ const boundary = this.#resolveBoundary(controlled);
125
+ const rendered = renderControlledModelRequestV1(controlled, this.#resolveEntries);
126
+ assertContextAllowedByPolicyV1(boundary.policy, rendered.contextEntries);
127
+ await this.#requireAllow({
128
+ schemaVersion: 1,
129
+ runId: controlled.runId,
130
+ checkpoint: 'pre_run',
131
+ targetKind: 'provider_request',
132
+ targetDigest: rendered.providerRequestDigest,
133
+ content: null,
134
+ sequence: null,
135
+ fromByte: null,
136
+ throughByteExclusive: null,
137
+ }, boundary.policy);
138
+ const result = await this.#adapter.generate(rendered.request, context);
139
+ const outputBytes = utf8ByteLength(result.content);
140
+ if (outputBytes > boundary.policy.limits.maxBufferedOutputBytes)
141
+ throw new Error('release_buffer_exceeded');
142
+ const outputDigest = digestControlJsonV1('assessment-target', result.content);
143
+ const assessment = await this.#assess({
144
+ schemaVersion: 1,
145
+ runId: controlled.runId,
146
+ checkpoint: 'post_run',
147
+ targetKind: 'final_output',
148
+ targetDigest: outputDigest,
149
+ content: result.content,
150
+ sequence: null,
151
+ fromByte: 0,
152
+ throughByteExclusive: outputBytes,
153
+ }, boundary.policy);
154
+ const allowed = assessment.disposition === 'allow' || this.#mode === 'observe';
155
+ return Object.freeze({
156
+ schemaVersion: 1,
157
+ runId: controlled.runId,
158
+ status: allowed
159
+ ? 'completed'
160
+ : terminalDisposition(assessment.disposition),
161
+ output: allowed ? result.content : null,
162
+ outputDigest,
163
+ releasedBytes: allowed ? outputBytes : 0,
164
+ providerResult: allowed ? deepFreeze(result) : null,
165
+ });
166
+ }
167
+ async *stream(controlled, context) {
168
+ if (!this.#adapter.stream)
169
+ throw new Error('release_mode_incompatible');
170
+ const boundary = this.#resolveBoundary(controlled);
171
+ const rendered = renderControlledModelRequestV1(controlled, this.#resolveEntries);
172
+ assertContextAllowedByPolicyV1(boundary.policy, rendered.contextEntries);
173
+ await this.#requireAllow({
174
+ schemaVersion: 1,
175
+ runId: controlled.runId,
176
+ checkpoint: 'pre_run',
177
+ targetKind: 'provider_request',
178
+ targetDigest: rendered.providerRequestDigest,
179
+ content: null,
180
+ sequence: null,
181
+ fromByte: null,
182
+ throughByteExclusive: null,
183
+ }, boundary.policy);
184
+ yield {
185
+ type: 'control_started',
186
+ runId: controlled.runId,
187
+ providerRequestDigest: rendered.providerRequestDigest,
188
+ };
189
+ let streamId = `stream:${controlled.runId}`;
190
+ let sequence = 0;
191
+ let received = '';
192
+ let releasedBytes = 0;
193
+ let completion;
194
+ let providerTerminal = false;
195
+ const buffered = [];
196
+ try {
197
+ for await (const event of this.#adapter.stream(rendered.request, context)) {
198
+ if (providerTerminal)
199
+ throw new Error('stream_terminal_invalid');
200
+ if (event.type === 'started') {
201
+ if (event.id)
202
+ streamId = `stream:${event.id}`;
203
+ continue;
204
+ }
205
+ if (event.type === 'text_delta') {
206
+ assertChunk(event.content, boundary.policy.limits.maxOutputChunkBytes);
207
+ if (sequence >= boundary.policy.limits.maxOutputChunksPerRun)
208
+ throw new Error('state_capacity_exceeded');
209
+ const fromByte = utf8ByteLength(received);
210
+ received += event.content;
211
+ if (this.#mode === 'buffered' &&
212
+ utf8ByteLength(received) >
213
+ boundary.policy.limits.maxBufferedOutputBytes)
214
+ throw new Error('release_buffer_exceeded');
215
+ if (this.#mode === 'incremental' &&
216
+ utf8ByteLength(event.content) >
217
+ boundary.policy.limits.maxPendingWindowBytes)
218
+ throw new Error('release_buffer_exceeded');
219
+ const digest = digestControlJsonV1('assessment-target', event.content);
220
+ const currentSequence = sequence++;
221
+ if (this.#mode === 'buffered') {
222
+ buffered.push({
223
+ content: event.content,
224
+ sequence: currentSequence,
225
+ digest,
226
+ });
227
+ continue;
228
+ }
229
+ const assessment = await this.#assess({
230
+ schemaVersion: 1,
231
+ runId: controlled.runId,
232
+ checkpoint: 'stream',
233
+ targetKind: 'stream_window',
234
+ targetDigest: digestControlJsonV1('stream-window', {
235
+ streamId,
236
+ sequence: currentSequence,
237
+ fromByte,
238
+ throughByteExclusive: utf8ByteLength(received),
239
+ contentDigest: digest,
240
+ }),
241
+ content: event.content,
242
+ sequence: currentSequence,
243
+ fromByte,
244
+ throughByteExclusive: utf8ByteLength(received),
245
+ }, boundary.policy);
246
+ if (assessment.disposition !== 'allow' && this.#mode !== 'observe') {
247
+ context.signal?.throwIfAborted();
248
+ yield {
249
+ type: 'control_completed',
250
+ runId: controlled.runId,
251
+ status: terminalDisposition(assessment.disposition),
252
+ releasedBytes,
253
+ outputDigest: null,
254
+ };
255
+ return;
256
+ }
257
+ releasedBytes += utf8ByteLength(event.content);
258
+ yield {
259
+ type: 'control_output_released',
260
+ runId: controlled.runId,
261
+ streamId,
262
+ sequence: currentSequence,
263
+ throughByteExclusive: releasedBytes,
264
+ content: event.content,
265
+ contentDigest: digest,
266
+ };
267
+ continue;
268
+ }
269
+ if (event.type === 'tool_call') {
270
+ yield {
271
+ type: 'control_tool_withheld',
272
+ runId: controlled.runId,
273
+ callId: event.call.id,
274
+ toolName: event.call.name,
275
+ };
276
+ continue;
277
+ }
278
+ if (event.type === 'completed') {
279
+ providerTerminal = true;
280
+ completion = event.result;
281
+ continue;
282
+ }
283
+ if (event.type === 'failed') {
284
+ providerTerminal = true;
285
+ throw new Error('assessment_indeterminate');
286
+ }
287
+ }
288
+ if (!completion)
289
+ throw new Error('stream_terminal_missing');
290
+ const finalText = completion.content;
291
+ if (received && completion.content !== received)
292
+ throw new Error('stream_content_mismatch');
293
+ if (utf8ByteLength(finalText) >
294
+ boundary.policy.limits.maxBufferedOutputBytes)
295
+ throw new Error('release_buffer_exceeded');
296
+ const outputDigest = digestControlJsonV1('assessment-target', finalText);
297
+ const assessment = await this.#assess({
298
+ schemaVersion: 1,
299
+ runId: controlled.runId,
300
+ checkpoint: 'post_run',
301
+ targetKind: 'final_output',
302
+ targetDigest: outputDigest,
303
+ content: finalText,
304
+ sequence: null,
305
+ fromByte: 0,
306
+ throughByteExclusive: utf8ByteLength(finalText),
307
+ }, boundary.policy);
308
+ if (assessment.disposition !== 'allow' && this.#mode !== 'observe') {
309
+ yield {
310
+ type: 'control_completed',
311
+ runId: controlled.runId,
312
+ status: terminalDisposition(assessment.disposition),
313
+ releasedBytes,
314
+ outputDigest,
315
+ };
316
+ return;
317
+ }
318
+ if (this.#mode === 'buffered') {
319
+ for (const chunk of buffered) {
320
+ releasedBytes += utf8ByteLength(chunk.content);
321
+ yield {
322
+ type: 'control_output_released',
323
+ runId: controlled.runId,
324
+ streamId,
325
+ sequence: chunk.sequence,
326
+ throughByteExclusive: releasedBytes,
327
+ content: chunk.content,
328
+ contentDigest: chunk.digest,
329
+ };
330
+ }
331
+ }
332
+ else if (sequence === 0 && finalText) {
333
+ releasedBytes = utf8ByteLength(finalText);
334
+ yield {
335
+ type: 'control_output_released',
336
+ runId: controlled.runId,
337
+ streamId,
338
+ sequence: 0,
339
+ throughByteExclusive: releasedBytes,
340
+ content: finalText,
341
+ contentDigest: outputDigest,
342
+ };
343
+ }
344
+ yield {
345
+ type: 'control_completed',
346
+ runId: controlled.runId,
347
+ status: 'completed',
348
+ releasedBytes,
349
+ outputDigest,
350
+ };
351
+ }
352
+ catch (error) {
353
+ yield {
354
+ type: 'control_failed',
355
+ runId: controlled.runId,
356
+ reasonCode: error instanceof Error ? error.message : 'assessment_indeterminate',
357
+ };
358
+ }
359
+ }
360
+ async #requireAllow(request, policy) {
361
+ const assessment = await this.#assess(request, policy);
362
+ if (assessment.disposition !== 'allow' && this.#mode !== 'observe') {
363
+ throw new Error(assessment.reasonCode || 'assessment_required');
364
+ }
365
+ }
366
+ async #assess(request, policy) {
367
+ const binding = policy.assessmentBindings.find((candidate) => candidate.checkpoint === request.checkpoint);
368
+ if (!binding ||
369
+ binding.assessorId !== this.#assessor.assessorId ||
370
+ binding.assessorVersion !== this.#assessor.assessorVersion ||
371
+ binding.assessorBindingDigest !== this.#assessor.assessorBindingDigest)
372
+ throw new Error('assessment_assessor_mismatch');
373
+ const result = await this.#assessor.assess(request);
374
+ assertExactKeys(result, ['disposition', 'reasonCode'], 'model assessment');
375
+ assertOneOf(result.disposition, ['allow', 'deny', 'abstain', 'escalate'], 'assessment disposition');
376
+ assertString(result.reasonCode, 'assessment reasonCode');
377
+ return freezeControlValue({ ...result });
378
+ }
379
+ #resolveBoundary(controlled) {
380
+ return resolveControlBoundaryV1(this.#controlBoundary, {
381
+ policyId: controlled.policyId,
382
+ policyVersion: controlled.policyVersion,
383
+ capabilityHandleId: controlled.capabilityHandleId,
384
+ expectedMode: this.#mode,
385
+ expectedOutputRisk: this.#risk,
386
+ });
387
+ }
388
+ }
389
+ function assertControlledModelRequest(request) {
390
+ if (request.schemaVersion !== 1)
391
+ throw new TypeError('assessment_invalid');
392
+ if (request.scope !== null)
393
+ validateControlScopeV1(request.scope);
394
+ if (request.contextEntryIds.length < 1 ||
395
+ request.contextEntryIds.length > MAX_CONTEXT_ENTRIES)
396
+ throw new Error('context_limit_exceeded');
397
+ if (new Set(request.contextEntryIds).size !== request.contextEntryIds.length)
398
+ throw new Error('state_conflict');
399
+ if (!Number.isSafeInteger(request.policyVersion) || request.policyVersion < 1)
400
+ throw new TypeError('assessment_invalid');
401
+ const options = request.options;
402
+ if (options) {
403
+ if (options.temperature !== null &&
404
+ (!Number.isFinite(options.temperature) ||
405
+ options.temperature < 0 ||
406
+ options.temperature > 2))
407
+ throw new TypeError('assessment_invalid');
408
+ if (options.maxOutputTokens !== null &&
409
+ (!Number.isSafeInteger(options.maxOutputTokens) ||
410
+ options.maxOutputTokens < 1))
411
+ throw new TypeError('assessment_invalid');
412
+ if (options.stop.length > 16 ||
413
+ options.stop.some((stop) => utf8ByteLength(stop) > 256))
414
+ throw new TypeError('assessment_invalid');
415
+ }
416
+ }
417
+ function assertChunk(content, maximumBytes) {
418
+ if (utf8ByteLength(content) < 1 || utf8ByteLength(content) > maximumBytes)
419
+ throw new Error('release_buffer_exceeded');
420
+ }
421
+ function modelRequestJson(request) {
422
+ return JSON.parse(JSON.stringify(request));
423
+ }
424
+ function deepFreeze(value) {
425
+ if (value && typeof value === 'object' && !Object.isFrozen(value)) {
426
+ Object.freeze(value);
427
+ for (const child of Object.values(value))
428
+ deepFreeze(child);
429
+ }
430
+ return value;
431
+ }
432
+ function terminalDisposition(disposition) {
433
+ if (disposition === 'deny' || disposition === 'allow')
434
+ return 'denied';
435
+ return disposition === 'abstain' ? 'abstained' : 'escalated';
436
+ }
437
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { InferenceControlPolicyV1, PolicyRecordV1 } from './types.js';
2
+ export declare function validateInferenceControlPolicyV1(value: unknown): InferenceControlPolicyV1;
3
+ export declare function createPolicyRecordV1(policy: InferenceControlPolicyV1): PolicyRecordV1;
4
+ /**
5
+ * Validates an Objective-scoped policy revision against its immutable local
6
+ * parent. A remote revision may remove authority or tighten a bound, but may
7
+ * not select a different enforcement model, dependency, action, channel or
8
+ * larger resource/continuation budget.
9
+ */
10
+ export declare function assertPolicyNarrowingV1(parentInput: InferenceControlPolicyV1, childInput: InferenceControlPolicyV1): InferenceControlPolicyV1;
11
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,wBAAwB,EACxB,cAAc,EAEf,MAAM,YAAY,CAAC;AAcpB,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,wBAAwB,CA6R1B;AA2BD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,wBAAwB,GAC/B,cAAc,CAUhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,wBAAwB,EACrC,UAAU,EAAE,wBAAwB,GACnC,wBAAwB,CA0F1B"}