@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,74 @@
1
+ import { sha256Hex } from './sha256.js';
2
+ const encoder = new TextEncoder();
3
+ const surrogate = /[\uD800-\uDFFF]/u;
4
+ function assertSafeString(value) {
5
+ if (surrogate.test(value)) {
6
+ for (let i = 0; i < value.length; i++) {
7
+ const code = value.charCodeAt(i);
8
+ if (code >= 0xd800 && code <= 0xdbff) {
9
+ if (++i >= value.length ||
10
+ value.charCodeAt(i) < 0xdc00 ||
11
+ value.charCodeAt(i) > 0xdfff)
12
+ throw new TypeError('Unpaired surrogate is not canonical JSON');
13
+ }
14
+ else if (code >= 0xdc00 && code <= 0xdfff)
15
+ throw new TypeError('Unpaired surrogate is not canonical JSON');
16
+ }
17
+ }
18
+ }
19
+ function canonical(value, seen) {
20
+ if (value === null)
21
+ return 'null';
22
+ switch (typeof value) {
23
+ case 'boolean':
24
+ return value ? 'true' : 'false';
25
+ case 'string':
26
+ assertSafeString(value);
27
+ return JSON.stringify(value);
28
+ case 'number':
29
+ if (!Number.isFinite(value))
30
+ throw new TypeError('Canonical JSON requires finite numbers');
31
+ return Object.is(value, -0) ? '0' : JSON.stringify(value);
32
+ case 'object':
33
+ break;
34
+ default:
35
+ throw new TypeError('Canonical JSON contains a non-JSON value');
36
+ }
37
+ if (seen.has(value))
38
+ throw new TypeError('Canonical JSON cannot contain cycles');
39
+ seen.add(value);
40
+ let result;
41
+ if (Array.isArray(value)) {
42
+ for (let i = 0; i < value.length; i++)
43
+ if (!Object.hasOwn(value, i))
44
+ throw new TypeError('Canonical JSON cannot contain sparse arrays');
45
+ result = `[${value.map((item) => canonical(item, seen)).join(',')}]`;
46
+ }
47
+ else {
48
+ const prototype = Object.getPrototypeOf(value);
49
+ if (prototype !== Object.prototype && prototype !== null)
50
+ throw new TypeError('Canonical JSON requires plain objects');
51
+ if (Object.getOwnPropertySymbols(value).length)
52
+ throw new TypeError('Canonical JSON cannot contain symbol keys');
53
+ const keys = Object.keys(value).sort();
54
+ for (const key of keys) {
55
+ assertSafeString(key);
56
+ if (Object.getOwnPropertyDescriptor(value, key)?.get ||
57
+ Object.getOwnPropertyDescriptor(value, key)?.set)
58
+ throw new TypeError('Canonical JSON cannot contain accessors');
59
+ }
60
+ result = `{${keys.map((key) => `${JSON.stringify(key)}:${canonical(value[key], seen)}`).join(',')}}`;
61
+ }
62
+ seen.delete(value);
63
+ return result;
64
+ }
65
+ export function canonicalizeControlJsonV1(value) {
66
+ return canonical(value, new Set());
67
+ }
68
+ export function digestControlJsonV1(domain, value) {
69
+ return `sha256:${sha256Hex(encoder.encode(`agentplat.inference-control/${domain}/v1\0${canonicalizeControlJsonV1(value)}`))}`;
70
+ }
71
+ export function utf8ByteLength(value) {
72
+ return encoder.encode(value).byteLength;
73
+ }
74
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { CapabilityAssuranceV1, CapabilityBindingRequirementV1, CapabilityDescriptorV1, CapabilityHandleV1, ControlCheckpointV1, RequiredControlCapabilityV1, ReleaseModeV1 } from './types.js';
2
+ export declare function validateCapabilityDescriptorV1(value: unknown): CapabilityDescriptorV1;
3
+ export declare class CapabilityRegistryV1 {
4
+ #private;
5
+ register(input: {
6
+ descriptor: CapabilityDescriptorV1;
7
+ descriptorDigest?: string;
8
+ wrapperInstanceId: string;
9
+ }): CapabilityHandleV1;
10
+ resolve(handleId: string): CapabilityHandleV1 | undefined;
11
+ descriptor(handleId: string): CapabilityDescriptorV1 | undefined;
12
+ rebind(binding: CapabilityBindingRequirementV1): CapabilityHandleV1;
13
+ }
14
+ export declare function bindingMatches(handle: CapabilityHandleV1, binding: CapabilityBindingRequirementV1): boolean;
15
+ export interface CapabilityNegotiationInputV1 {
16
+ readonly policyDigest: string;
17
+ readonly descriptorDigest: string;
18
+ readonly mode: ReleaseModeV1;
19
+ readonly checkpoints: readonly ControlCheckpointV1[];
20
+ readonly requiredCapabilities: readonly RequiredControlCapabilityV1[];
21
+ readonly minimumCapabilityAssurance: CapabilityAssuranceV1;
22
+ readonly allowedCapabilityBindings: readonly CapabilityBindingRequirementV1[];
23
+ }
24
+ export type CapabilityNegotiationResultV1 = {
25
+ schemaVersion: 1;
26
+ policyDigest: string;
27
+ descriptorDigest: string;
28
+ accepted: true;
29
+ effectiveReleaseMode: ReleaseModeV1;
30
+ enforcedCheckpoints: readonly ControlCheckpointV1[];
31
+ observedCheckpoints: readonly ControlCheckpointV1[];
32
+ } | {
33
+ schemaVersion: 1;
34
+ policyDigest: string;
35
+ descriptorDigest: string;
36
+ accepted: false;
37
+ reasonCode: 'policy_capability_missing' | 'release_mode_incompatible';
38
+ missingCapabilities: readonly RequiredControlCapabilityV1[];
39
+ };
40
+ /** Validates the complete, replayable result of a capability negotiation. */
41
+ export declare function validateCapabilityNegotiationResultV1(value: unknown): CapabilityNegotiationResultV1;
42
+ export declare function negotiateCapabilitiesV1(descriptorInput: CapabilityDescriptorV1, input: CapabilityNegotiationInputV1): CapabilityNegotiationResultV1;
43
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACd,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,sBAAsB,CA2CxB;AACD,qBAAa,oBAAoB;;IAK/B,QAAQ,CAAC,KAAK,EAAE;QACd,UAAU,EAAE,sBAAsB,CAAC;QACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,kBAAkB;IAgCtB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAGzD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAGhE,MAAM,CAAC,OAAO,EAAE,8BAA8B,GAAG,kBAAkB;CAyBpE;AACD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAQT;AACD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,oBAAoB,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACtE,QAAQ,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;IAC3D,QAAQ,CAAC,yBAAyB,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAC/E;AACD,MAAM,MAAM,6BAA6B,GACrC;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;IACf,oBAAoB,EAAE,aAAa,CAAC;IACpC,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACpD,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACrD,GACD;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,2BAA2B,GAAG,2BAA2B,CAAC;IACtE,mBAAmB,EAAE,SAAS,2BAA2B,EAAE,CAAC;CAC7D,CAAC;AAEN,6EAA6E;AAC7E,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,GACb,6BAA6B,CAwE/B;AAYD,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,sBAAsB,EACvC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CA2G/B"}
@@ -0,0 +1,304 @@
1
+ import { digestControlJsonV1 } from './canonical.js';
2
+ import { assertDigest, assertExactKeys, assertIdentifier, assertOneOf, assertSafeInteger, compareCodeUnits, deepFreeze, sortedUnique, } from './validation.js';
3
+ const descriptorKeys = [
4
+ 'schemaVersion',
5
+ 'capabilityId',
6
+ 'descriptorVersion',
7
+ 'inputInspection',
8
+ 'finalOutputAssessment',
9
+ 'incrementalOutputAssessment',
10
+ 'releaseInterruption',
11
+ 'toolInterception',
12
+ 'messageInterception',
13
+ 'representationAccess',
14
+ 'declarationSource',
15
+ 'assurance',
16
+ 'wrapperId',
17
+ 'wrapperVersion',
18
+ ];
19
+ export function validateCapabilityDescriptorV1(value) {
20
+ assertExactKeys(value, descriptorKeys, 'capability descriptor');
21
+ const v = value;
22
+ if (v.schemaVersion !== 1)
23
+ throw new TypeError('Unsupported capability schema');
24
+ assertIdentifier(v.capabilityId, 'capabilityId');
25
+ assertSafeInteger(v.descriptorVersion, 'descriptorVersion', 1);
26
+ assertIdentifier(v.wrapperId, 'wrapperId');
27
+ assertSafeInteger(v.wrapperVersion, 'wrapperVersion', 1);
28
+ assertOneOf(v.inputInspection, ['full', 'none'], 'inputInspection');
29
+ assertOneOf(v.finalOutputAssessment, ['full', 'none'], 'finalOutputAssessment');
30
+ assertOneOf(v.incrementalOutputAssessment, ['windowed', 'none'], 'incrementalOutputAssessment');
31
+ assertOneOf(v.releaseInterruption, ['local', 'none'], 'releaseInterruption');
32
+ assertOneOf(v.toolInterception, ['all', 'application_only', 'none'], 'toolInterception');
33
+ assertOneOf(v.messageInterception, ['application_only', 'none'], 'messageInterception');
34
+ assertOneOf(v.representationAccess, ['none', 'opaque', 'token'], 'representationAccess');
35
+ assertOneOf(v.declarationSource, ['wrapper', 'adapter'], 'declarationSource');
36
+ assertOneOf(v.assurance, ['reference_tested', 'application_verified', 'declared'], 'assurance');
37
+ return deepFreeze({ ...v });
38
+ }
39
+ export class CapabilityRegistryV1 {
40
+ #entries = new Map();
41
+ register(input) {
42
+ const descriptor = validateCapabilityDescriptorV1(input.descriptor);
43
+ assertIdentifier(input.wrapperInstanceId, 'wrapperInstanceId');
44
+ const digest = digestControlJsonV1('capability', descriptor);
45
+ if (input.descriptorDigest !== undefined) {
46
+ assertDigest(input.descriptorDigest, 'descriptorDigest');
47
+ if (input.descriptorDigest !== digest)
48
+ throw new TypeError('descriptorDigest does not match descriptor');
49
+ }
50
+ const id = `${descriptor.capabilityId}:${descriptor.descriptorVersion}:${descriptor.wrapperId}:${descriptor.wrapperVersion}:${input.wrapperInstanceId}`;
51
+ const prior = this.#entries.get(id);
52
+ if (prior && prior.handle.descriptorDigest !== digest)
53
+ throw new TypeError('Capability identity is already bound to different content');
54
+ if (prior)
55
+ return prior.handle;
56
+ const handle = deepFreeze({
57
+ schemaVersion: 1,
58
+ capabilityHandleId: id,
59
+ capabilityId: descriptor.capabilityId,
60
+ descriptorVersion: descriptor.descriptorVersion,
61
+ wrapperId: descriptor.wrapperId,
62
+ wrapperVersion: descriptor.wrapperVersion,
63
+ wrapperInstanceId: input.wrapperInstanceId,
64
+ descriptorDigest: digest,
65
+ });
66
+ this.#entries.set(id, { descriptor, handle });
67
+ return handle;
68
+ }
69
+ resolve(handleId) {
70
+ return this.#entries.get(handleId)?.handle;
71
+ }
72
+ descriptor(handleId) {
73
+ return this.#entries.get(handleId)?.descriptor;
74
+ }
75
+ rebind(binding) {
76
+ assertExactKeys(binding, [
77
+ 'schemaVersion',
78
+ 'capabilityId',
79
+ 'descriptorVersion',
80
+ 'wrapperId',
81
+ 'wrapperVersion',
82
+ 'descriptorDigest',
83
+ 'requiredAssurance',
84
+ ], 'capability binding');
85
+ if (binding.schemaVersion !== 1)
86
+ throw new TypeError('dependency_rebind_failed');
87
+ assertDigest(binding.descriptorDigest, 'binding.descriptorDigest');
88
+ for (const entry of this.#entries.values())
89
+ if (bindingMatches(entry.handle, binding) &&
90
+ entry.descriptor.assurance === binding.requiredAssurance)
91
+ return entry.handle;
92
+ throw new TypeError('dependency_rebind_failed');
93
+ }
94
+ }
95
+ export function bindingMatches(handle, binding) {
96
+ return (handle.capabilityId === binding.capabilityId &&
97
+ handle.descriptorVersion === binding.descriptorVersion &&
98
+ handle.wrapperId === binding.wrapperId &&
99
+ handle.wrapperVersion === binding.wrapperVersion &&
100
+ handle.descriptorDigest === binding.descriptorDigest);
101
+ }
102
+ /** Validates the complete, replayable result of a capability negotiation. */
103
+ export function validateCapabilityNegotiationResultV1(value) {
104
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
105
+ throw new TypeError('capability negotiation result must be an object');
106
+ const result = value;
107
+ if (result.accepted === true) {
108
+ assertExactKeys(result, [
109
+ 'schemaVersion',
110
+ 'policyDigest',
111
+ 'descriptorDigest',
112
+ 'accepted',
113
+ 'effectiveReleaseMode',
114
+ 'enforcedCheckpoints',
115
+ 'observedCheckpoints',
116
+ ], 'accepted capability negotiation result');
117
+ if (result.schemaVersion !== 1)
118
+ throw new TypeError('Unsupported capability negotiation schema');
119
+ assertDigest(result.policyDigest, 'policyDigest');
120
+ assertDigest(result.descriptorDigest, 'descriptorDigest');
121
+ assertOneOf(result.effectiveReleaseMode, ['observe', 'buffered', 'incremental'], 'effectiveReleaseMode');
122
+ validateCheckpoints(result.enforcedCheckpoints, 'enforcedCheckpoints');
123
+ validateCheckpoints(result.observedCheckpoints, 'observedCheckpoints');
124
+ const enforced = result.enforcedCheckpoints;
125
+ const observed = result.observedCheckpoints;
126
+ if (enforced.some((checkpoint) => observed.includes(checkpoint)))
127
+ throw new TypeError('capability negotiation checkpoint is duplicated');
128
+ return deepFreeze(structuredClone(result));
129
+ }
130
+ if (result.accepted !== false)
131
+ throw new TypeError('capability negotiation accepted must be boolean');
132
+ assertExactKeys(result, [
133
+ 'schemaVersion',
134
+ 'policyDigest',
135
+ 'descriptorDigest',
136
+ 'accepted',
137
+ 'reasonCode',
138
+ 'missingCapabilities',
139
+ ], 'rejected capability negotiation result');
140
+ if (result.schemaVersion !== 1)
141
+ throw new TypeError('Unsupported capability negotiation schema');
142
+ assertDigest(result.policyDigest, 'policyDigest');
143
+ assertDigest(result.descriptorDigest, 'descriptorDigest');
144
+ assertOneOf(result.reasonCode, ['policy_capability_missing', 'release_mode_incompatible'], 'reasonCode');
145
+ if (!Array.isArray(result.missingCapabilities))
146
+ throw new TypeError('missingCapabilities must be an array');
147
+ for (const requirement of result.missingCapabilities)
148
+ validateRequirement(requirement);
149
+ sortedUnique(result.missingCapabilities.map((requirement) => `${requirement.kind}:${requirement.value}`), 'missingCapabilities');
150
+ return deepFreeze(structuredClone(result));
151
+ }
152
+ function validateCheckpoints(value, name) {
153
+ if (!Array.isArray(value))
154
+ throw new TypeError(`${name} must be an array`);
155
+ for (const checkpoint of value)
156
+ assertOneOf(checkpoint, ['pre_run', 'stream', 'post_run', 'pre_tool', 'pre_message'], name);
157
+ sortedUnique(value, name);
158
+ }
159
+ export function negotiateCapabilitiesV1(descriptorInput, input) {
160
+ const descriptor = validateCapabilityDescriptorV1(descriptorInput);
161
+ assertDigest(input.policyDigest, 'policyDigest');
162
+ assertDigest(input.descriptorDigest, 'descriptorDigest');
163
+ assertOneOf(input.mode, ['observe', 'buffered', 'incremental'], 'mode');
164
+ assertOneOf(input.minimumCapabilityAssurance, ['verified', 'declared'], 'minimumCapabilityAssurance');
165
+ for (const checkpoint of input.checkpoints)
166
+ assertOneOf(checkpoint, ['pre_run', 'stream', 'post_run', 'pre_tool', 'pre_message'], 'checkpoint');
167
+ sortedUnique(input.checkpoints, 'checkpoints');
168
+ for (const requirement of input.requiredCapabilities)
169
+ validateRequirement(requirement);
170
+ sortedUnique(input.requiredCapabilities.map((requirement) => `${requirement.kind}:${requirement.value}`), 'requiredCapabilities');
171
+ for (const binding of input.allowedCapabilityBindings)
172
+ validateBinding(binding);
173
+ const actualDigest = digestControlJsonV1('capability', descriptor);
174
+ if (input.descriptorDigest !== actualDigest)
175
+ throw new TypeError('descriptorDigest does not match descriptor');
176
+ const requirements = [...input.requiredCapabilities];
177
+ if (input.mode === 'incremental') {
178
+ requirements.push({ kind: 'incremental_output_assessment', value: 'windowed' }, { kind: 'release_interruption', value: 'local' });
179
+ }
180
+ const missing = requirements.filter((requirement) => !requirementSatisfied(descriptor, requirement));
181
+ const allowed = input.allowedCapabilityBindings.some((binding) => bindingMatches({
182
+ schemaVersion: 1,
183
+ capabilityHandleId: 'negotiation',
184
+ capabilityId: descriptor.capabilityId,
185
+ descriptorVersion: descriptor.descriptorVersion,
186
+ wrapperId: descriptor.wrapperId,
187
+ wrapperVersion: descriptor.wrapperVersion,
188
+ wrapperInstanceId: 'negotiation',
189
+ descriptorDigest: actualDigest,
190
+ }, binding) && binding.requiredAssurance === descriptor.assurance);
191
+ const verified = descriptor.assurance === 'reference_tested' ||
192
+ descriptor.assurance === 'application_verified';
193
+ if (input.mode === 'observe')
194
+ return {
195
+ schemaVersion: 1,
196
+ policyDigest: input.policyDigest,
197
+ descriptorDigest: actualDigest,
198
+ accepted: true,
199
+ effectiveReleaseMode: 'observe',
200
+ enforcedCheckpoints: [],
201
+ observedCheckpoints: [...input.checkpoints].sort(),
202
+ };
203
+ if (!allowed ||
204
+ (input.minimumCapabilityAssurance === 'verified' && !verified) ||
205
+ descriptor.assurance === 'declared' ||
206
+ missing.length)
207
+ return {
208
+ schemaVersion: 1,
209
+ policyDigest: input.policyDigest,
210
+ descriptorDigest: actualDigest,
211
+ accepted: false,
212
+ reasonCode: 'policy_capability_missing',
213
+ missingCapabilities: [...missing].sort(compareRequirement),
214
+ };
215
+ if (input.mode === 'incremental' &&
216
+ descriptor.releaseInterruption !== 'local')
217
+ return {
218
+ schemaVersion: 1,
219
+ policyDigest: input.policyDigest,
220
+ descriptorDigest: actualDigest,
221
+ accepted: false,
222
+ reasonCode: 'release_mode_incompatible',
223
+ missingCapabilities: [],
224
+ };
225
+ return {
226
+ schemaVersion: 1,
227
+ policyDigest: input.policyDigest,
228
+ descriptorDigest: actualDigest,
229
+ accepted: true,
230
+ effectiveReleaseMode: input.mode,
231
+ enforcedCheckpoints: [...input.checkpoints].sort(),
232
+ observedCheckpoints: [],
233
+ };
234
+ }
235
+ function validateBinding(binding) {
236
+ assertExactKeys(binding, [
237
+ 'schemaVersion',
238
+ 'capabilityId',
239
+ 'descriptorVersion',
240
+ 'wrapperId',
241
+ 'wrapperVersion',
242
+ 'descriptorDigest',
243
+ 'requiredAssurance',
244
+ ], 'capability binding');
245
+ if (binding.schemaVersion !== 1)
246
+ throw new TypeError('Unsupported capability binding');
247
+ assertIdentifier(binding.capabilityId, 'capabilityId');
248
+ assertSafeInteger(binding.descriptorVersion, 'descriptorVersion', 1);
249
+ assertIdentifier(binding.wrapperId, 'wrapperId');
250
+ assertSafeInteger(binding.wrapperVersion, 'wrapperVersion', 1);
251
+ assertDigest(binding.descriptorDigest, 'descriptorDigest');
252
+ assertOneOf(binding.requiredAssurance, ['reference_tested', 'application_verified', 'declared'], 'requiredAssurance');
253
+ }
254
+ function validateRequirement(value) {
255
+ assertExactKeys(value, ['kind', 'value'], 'required capability');
256
+ switch (value.kind) {
257
+ case 'input_inspection':
258
+ case 'final_output_assessment':
259
+ assertOneOf(value.value, ['full'], 'required capability value');
260
+ return;
261
+ case 'incremental_output_assessment':
262
+ assertOneOf(value.value, ['windowed'], 'required capability value');
263
+ return;
264
+ case 'release_interruption':
265
+ assertOneOf(value.value, ['local'], 'required capability value');
266
+ return;
267
+ case 'tool_interception':
268
+ assertOneOf(value.value, ['application_only', 'all'], 'required capability value');
269
+ return;
270
+ case 'message_interception':
271
+ assertOneOf(value.value, ['application_only'], 'required capability value');
272
+ return;
273
+ case 'representation_access':
274
+ assertOneOf(value.value, ['opaque', 'token'], 'required capability value');
275
+ return;
276
+ default:
277
+ throw new TypeError('required capability kind is invalid');
278
+ }
279
+ }
280
+ function requirementSatisfied(descriptor, requirement) {
281
+ switch (requirement.kind) {
282
+ case 'input_inspection':
283
+ return descriptor.inputInspection === requirement.value;
284
+ case 'final_output_assessment':
285
+ return descriptor.finalOutputAssessment === requirement.value;
286
+ case 'incremental_output_assessment':
287
+ return descriptor.incrementalOutputAssessment === requirement.value;
288
+ case 'release_interruption':
289
+ return descriptor.releaseInterruption === requirement.value;
290
+ case 'tool_interception':
291
+ return requirement.value === 'application_only'
292
+ ? descriptor.toolInterception === 'application_only' ||
293
+ descriptor.toolInterception === 'all'
294
+ : descriptor.toolInterception === 'all';
295
+ case 'message_interception':
296
+ return descriptor.messageInterception === requirement.value;
297
+ case 'representation_access':
298
+ return descriptor.representationAccess === requirement.value;
299
+ }
300
+ }
301
+ function compareRequirement(left, right) {
302
+ return compareCodeUnits(`${left.kind}:${left.value}`, `${right.kind}:${right.value}`);
303
+ }
304
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ContextEntryV1, ContextZoneV1, InferenceControlPolicyV1, PromotionRecordV1 } from './types.js';
2
+ export declare function validateContextEntryV1(value: unknown): ContextEntryV1;
3
+ export declare function createContextEntryV1(input: Omit<ContextEntryV1, 'schemaVersion' | 'contentDigest' | 'provenanceDigest' | 'encodedBytes'>): ContextEntryV1;
4
+ export declare function canAdmitContextEntryV1(policy: InferenceControlPolicyV1, existing: readonly ContextEntryV1[], entry: ContextEntryV1): boolean;
5
+ export declare function promoteContextEntryV1(source: ContextEntryV1, promotion: PromotionRecordV1, policy: InferenceControlPolicyV1): ContextEntryV1;
6
+ export declare const CONTEXT_ZONES_V1: readonly ContextZoneV1[];
7
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAwBpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAwErE;AACD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CACT,cAAc,EACd,eAAe,GAAG,eAAe,GAAG,kBAAkB,GAAG,cAAc,CACxE,GACA,cAAc,CAgBhB;AACD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,wBAAwB,EAChC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,KAAK,EAAE,cAAc,GACpB,OAAO,CAWT;AACD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,wBAAwB,GAC/B,cAAc,CA2BhB;AACD,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAAU,CAAC"}