@vorionsys/atsf-core 0.2.0 → 0.2.1

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 (164) hide show
  1. package/README.md +12 -12
  2. package/dist/api/server.js +4 -4
  3. package/dist/api/server.js.map +1 -1
  4. package/dist/basis/parser.d.ts +210 -210
  5. package/dist/basis/parser.js.map +1 -1
  6. package/dist/chain/index.d.ts +147 -0
  7. package/dist/chain/index.d.ts.map +1 -0
  8. package/dist/chain/index.js +219 -0
  9. package/dist/chain/index.js.map +1 -0
  10. package/dist/common/adapters.d.ts +9 -9
  11. package/dist/common/adapters.d.ts.map +1 -1
  12. package/dist/common/adapters.js +6 -6
  13. package/dist/common/config.d.ts +152 -152
  14. package/dist/common/types.d.ts +32 -15
  15. package/dist/common/types.d.ts.map +1 -1
  16. package/dist/common/types.js.map +1 -1
  17. package/dist/enforce/index.d.ts +226 -16
  18. package/dist/enforce/index.d.ts.map +1 -1
  19. package/dist/enforce/index.js +196 -49
  20. package/dist/enforce/index.js.map +1 -1
  21. package/dist/index.d.ts +9 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +14 -3
  24. package/dist/index.js.map +1 -1
  25. package/dist/intent/index.d.ts +127 -10
  26. package/dist/intent/index.d.ts.map +1 -1
  27. package/dist/intent/index.js +121 -16
  28. package/dist/intent/index.js.map +1 -1
  29. package/dist/langchain/executor.d.ts +19 -5
  30. package/dist/langchain/executor.d.ts.map +1 -1
  31. package/dist/langchain/executor.js +287 -36
  32. package/dist/langchain/executor.js.map +1 -1
  33. package/dist/langchain/index.d.ts +2 -1
  34. package/dist/langchain/index.d.ts.map +1 -1
  35. package/dist/langchain/index.js +3 -1
  36. package/dist/langchain/index.js.map +1 -1
  37. package/dist/langchain/tools.d.ts.map +1 -1
  38. package/dist/langchain/tools.js +2 -1
  39. package/dist/langchain/tools.js.map +1 -1
  40. package/dist/langchain/types.d.ts +41 -0
  41. package/dist/langchain/types.d.ts.map +1 -1
  42. package/dist/layers/index.d.ts +1 -1
  43. package/dist/layers/index.d.ts.map +1 -1
  44. package/dist/persistence/file.d.ts +35 -3
  45. package/dist/persistence/file.d.ts.map +1 -1
  46. package/dist/persistence/file.js +138 -11
  47. package/dist/persistence/file.js.map +1 -1
  48. package/dist/persistence/index.d.ts +10 -1
  49. package/dist/persistence/index.d.ts.map +1 -1
  50. package/dist/persistence/index.js +15 -1
  51. package/dist/persistence/index.js.map +1 -1
  52. package/dist/persistence/sqlite.d.ts +135 -0
  53. package/dist/persistence/sqlite.d.ts.map +1 -0
  54. package/dist/persistence/sqlite.js +372 -0
  55. package/dist/persistence/sqlite.js.map +1 -0
  56. package/dist/phase6/ceiling.d.ts +177 -0
  57. package/dist/phase6/ceiling.d.ts.map +1 -0
  58. package/dist/phase6/ceiling.js +463 -0
  59. package/dist/phase6/ceiling.js.map +1 -0
  60. package/dist/phase6/context.d.ts +207 -0
  61. package/dist/phase6/context.d.ts.map +1 -0
  62. package/dist/phase6/context.js +603 -0
  63. package/dist/phase6/context.js.map +1 -0
  64. package/dist/phase6/index.d.ts +79 -0
  65. package/dist/phase6/index.d.ts.map +1 -0
  66. package/dist/phase6/index.js +152 -0
  67. package/dist/phase6/index.js.map +1 -0
  68. package/dist/phase6/presets.d.ts +148 -0
  69. package/dist/phase6/presets.d.ts.map +1 -0
  70. package/dist/phase6/presets.js +467 -0
  71. package/dist/phase6/presets.js.map +1 -0
  72. package/dist/phase6/provenance.d.ts +148 -0
  73. package/dist/phase6/provenance.d.ts.map +1 -0
  74. package/dist/phase6/provenance.js +545 -0
  75. package/dist/phase6/provenance.js.map +1 -0
  76. package/dist/phase6/role-gates/index.d.ts +7 -0
  77. package/dist/phase6/role-gates/index.d.ts.map +1 -0
  78. package/dist/phase6/role-gates/index.js +7 -0
  79. package/dist/phase6/role-gates/index.js.map +1 -0
  80. package/dist/phase6/role-gates/kernel.d.ts +84 -0
  81. package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
  82. package/dist/phase6/role-gates/kernel.js +258 -0
  83. package/dist/phase6/role-gates/kernel.js.map +1 -0
  84. package/dist/phase6/role-gates/policy.d.ts +110 -0
  85. package/dist/phase6/role-gates/policy.d.ts.map +1 -0
  86. package/dist/phase6/role-gates/policy.js +157 -0
  87. package/dist/phase6/role-gates/policy.js.map +1 -0
  88. package/dist/phase6/role-gates.d.ts +164 -0
  89. package/dist/phase6/role-gates.d.ts.map +1 -0
  90. package/dist/phase6/role-gates.js +536 -0
  91. package/dist/phase6/role-gates.js.map +1 -0
  92. package/dist/phase6/types.d.ts +1827 -0
  93. package/dist/phase6/types.d.ts.map +1 -0
  94. package/dist/phase6/types.js +450 -0
  95. package/dist/phase6/types.js.map +1 -0
  96. package/dist/phase6/weight-presets/canonical.d.ts +93 -0
  97. package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
  98. package/dist/phase6/weight-presets/canonical.js +122 -0
  99. package/dist/phase6/weight-presets/canonical.js.map +1 -0
  100. package/dist/phase6/weight-presets/deltas.d.ts +144 -0
  101. package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
  102. package/dist/phase6/weight-presets/deltas.js +184 -0
  103. package/dist/phase6/weight-presets/deltas.js.map +1 -0
  104. package/dist/phase6/weight-presets/index.d.ts +8 -0
  105. package/dist/phase6/weight-presets/index.d.ts.map +1 -0
  106. package/dist/phase6/weight-presets/index.js +8 -0
  107. package/dist/phase6/weight-presets/index.js.map +1 -0
  108. package/dist/phase6/weight-presets/merger.d.ts +79 -0
  109. package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
  110. package/dist/phase6/weight-presets/merger.js +161 -0
  111. package/dist/phase6/weight-presets/merger.js.map +1 -0
  112. package/dist/proof/index.d.ts +2 -0
  113. package/dist/proof/index.d.ts.map +1 -1
  114. package/dist/proof/index.js +24 -0
  115. package/dist/proof/index.js.map +1 -1
  116. package/dist/proof/merkle.d.ts +195 -0
  117. package/dist/proof/merkle.d.ts.map +1 -0
  118. package/dist/proof/merkle.js +412 -0
  119. package/dist/proof/merkle.js.map +1 -0
  120. package/dist/proof/zk-proofs.d.ts +218 -0
  121. package/dist/proof/zk-proofs.d.ts.map +1 -0
  122. package/dist/proof/zk-proofs.js +531 -0
  123. package/dist/proof/zk-proofs.js.map +1 -0
  124. package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
  125. package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
  126. package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
  127. package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
  128. package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
  129. package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
  130. package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
  131. package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
  132. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
  133. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
  134. package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
  135. package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
  136. package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
  137. package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
  138. package/dist/trust-engine/context-policy/enforcement.js +104 -0
  139. package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
  140. package/dist/trust-engine/context-policy/factory.d.ts +75 -0
  141. package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
  142. package/dist/trust-engine/context-policy/factory.js +130 -0
  143. package/dist/trust-engine/context-policy/factory.js.map +1 -0
  144. package/dist/trust-engine/context-policy/index.d.ts +6 -0
  145. package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
  146. package/dist/trust-engine/context-policy/index.js +6 -0
  147. package/dist/trust-engine/context-policy/index.js.map +1 -0
  148. package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
  149. package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
  150. package/dist/trust-engine/creation-modifiers/index.js +5 -0
  151. package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
  152. package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
  153. package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
  154. package/dist/trust-engine/creation-modifiers/types.js +166 -0
  155. package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
  156. package/dist/trust-engine/index.d.ts +54 -1
  157. package/dist/trust-engine/index.d.ts.map +1 -1
  158. package/dist/trust-engine/index.js +118 -1
  159. package/dist/trust-engine/index.js.map +1 -1
  160. package/dist/trust-engine/phase6-types.d.ts +123 -0
  161. package/dist/trust-engine/phase6-types.d.ts.map +1 -0
  162. package/dist/trust-engine/phase6-types.js +88 -0
  163. package/dist/trust-engine/phase6-types.js.map +1 -0
  164. package/package.json +19 -7
@@ -0,0 +1,467 @@
1
+ /**
2
+ * Q4: Federated Weight Presets with Derivation Chains
3
+ *
4
+ * Implements 3-Tier Federation:
5
+ * - Tier 1: ACI Canonical (immutable, spec-defined)
6
+ * - Tier 2: Vorion Reference (platform defaults)
7
+ * - Tier 3: Axiom Deployment (org-specific derivations)
8
+ *
9
+ * Key Features:
10
+ * - Cryptographic derivation chains
11
+ * - Delta tracking (what changed from parent)
12
+ * - Regulator-verifiable lineage
13
+ * - Weight normalization (sum to 1.0)
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import { createLogger } from '../common/logger.js';
18
+ import { ACI_CANONICAL_PRESETS, trustPresetSchema, presetLineageSchema, trustWeightsSchema, } from './types.js';
19
+ const logger = createLogger({ component: 'phase6:presets' });
20
+ // =============================================================================
21
+ // HASH UTILITIES
22
+ // =============================================================================
23
+ /**
24
+ * Calculate SHA-256 hash for preset integrity
25
+ */
26
+ async function calculateHash(data) {
27
+ const encoder = new TextEncoder();
28
+ const dataBuffer = encoder.encode(data);
29
+ const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
30
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
31
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
32
+ }
33
+ /**
34
+ * Hash preset data deterministically
35
+ */
36
+ async function hashPresetData(preset) {
37
+ const data = {
38
+ presetId: preset.presetId,
39
+ name: preset.name,
40
+ source: preset.source,
41
+ version: preset.version,
42
+ weights: preset.weights,
43
+ parentPresetId: preset.parentPresetId,
44
+ createdAt: preset.createdAt.toISOString(),
45
+ createdBy: preset.createdBy,
46
+ };
47
+ return calculateHash(JSON.stringify(data));
48
+ }
49
+ // =============================================================================
50
+ // WEIGHT UTILITIES
51
+ // =============================================================================
52
+ /**
53
+ * Normalize weights to sum to 1.0
54
+ */
55
+ export function normalizeWeights(weights) {
56
+ const sum = weights.observability + weights.capability + weights.behavior + weights.governance + weights.context;
57
+ if (Math.abs(sum - 1.0) < 0.001) {
58
+ return weights; // Already normalized
59
+ }
60
+ return {
61
+ observability: weights.observability / sum,
62
+ capability: weights.capability / sum,
63
+ behavior: weights.behavior / sum,
64
+ governance: weights.governance / sum,
65
+ context: weights.context / sum,
66
+ };
67
+ }
68
+ /**
69
+ * Validate weights sum to 1.0
70
+ */
71
+ export function validateWeights(weights) {
72
+ const result = trustWeightsSchema.safeParse(weights);
73
+ if (!result.success) {
74
+ return { valid: false, reason: result.error.message };
75
+ }
76
+ return { valid: true };
77
+ }
78
+ /**
79
+ * Calculate delta between two weight sets
80
+ */
81
+ export function calculateWeightsDelta(parent, child) {
82
+ const delta = {};
83
+ if (Math.abs(child.observability - parent.observability) > 0.001) {
84
+ delta.observability = child.observability - parent.observability;
85
+ }
86
+ if (Math.abs(child.capability - parent.capability) > 0.001) {
87
+ delta.capability = child.capability - parent.capability;
88
+ }
89
+ if (Math.abs(child.behavior - parent.behavior) > 0.001) {
90
+ delta.behavior = child.behavior - parent.behavior;
91
+ }
92
+ if (Math.abs(child.governance - parent.governance) > 0.001) {
93
+ delta.governance = child.governance - parent.governance;
94
+ }
95
+ if (Math.abs(child.context - parent.context) > 0.001) {
96
+ delta.context = child.context - parent.context;
97
+ }
98
+ return delta;
99
+ }
100
+ /**
101
+ * Apply delta to weights
102
+ */
103
+ export function applyWeightsDelta(base, delta) {
104
+ return normalizeWeights({
105
+ observability: base.observability + (delta.observability ?? 0),
106
+ capability: base.capability + (delta.capability ?? 0),
107
+ behavior: base.behavior + (delta.behavior ?? 0),
108
+ governance: base.governance + (delta.governance ?? 0),
109
+ context: base.context + (delta.context ?? 0),
110
+ });
111
+ }
112
+ // =============================================================================
113
+ // TIER 1: ACI CANONICAL PRESETS (IMMUTABLE)
114
+ // =============================================================================
115
+ /**
116
+ * Get an ACI canonical preset by ID
117
+ */
118
+ export function getACIPreset(presetId) {
119
+ return ACI_CANONICAL_PRESETS[presetId];
120
+ }
121
+ /**
122
+ * Get all ACI canonical presets
123
+ */
124
+ export function getAllACIPresets() {
125
+ return Object.values(ACI_CANONICAL_PRESETS);
126
+ }
127
+ /**
128
+ * Verify ACI preset is authentic (hash matches known value)
129
+ */
130
+ export function verifyACIPreset(preset) {
131
+ const canonical = ACI_CANONICAL_PRESETS[preset.presetId];
132
+ if (!canonical)
133
+ return false;
134
+ return preset.presetHash === canonical.presetHash;
135
+ }
136
+ /**
137
+ * Derive a new preset from a parent
138
+ * Maintains cryptographic link to parent for lineage tracking.
139
+ */
140
+ export async function derivePreset(input) {
141
+ const { parentPreset, weightOverrides, ...rest } = input;
142
+ // Calculate new weights
143
+ let newWeights;
144
+ let delta;
145
+ if (weightOverrides) {
146
+ // Apply overrides and normalize
147
+ newWeights = normalizeWeights({
148
+ observability: weightOverrides.observability ?? parentPreset.weights.observability,
149
+ capability: weightOverrides.capability ?? parentPreset.weights.capability,
150
+ behavior: weightOverrides.behavior ?? parentPreset.weights.behavior,
151
+ governance: weightOverrides.governance ?? parentPreset.weights.governance,
152
+ context: weightOverrides.context ?? parentPreset.weights.context,
153
+ });
154
+ delta = calculateWeightsDelta(parentPreset.weights, newWeights);
155
+ }
156
+ else {
157
+ // Copy parent weights exactly
158
+ newWeights = { ...parentPreset.weights };
159
+ }
160
+ // Validate weights
161
+ const weightResult = validateWeights(newWeights);
162
+ if (!weightResult.valid) {
163
+ throw new Error(`Invalid weights: ${weightResult.reason}`);
164
+ }
165
+ // Validate source hierarchy
166
+ const sourceOrder = ['aci', 'vorion', 'axiom'];
167
+ const parentSourceIdx = sourceOrder.indexOf(parentPreset.source);
168
+ const childSourceIdx = sourceOrder.indexOf(input.source);
169
+ if (childSourceIdx < parentSourceIdx) {
170
+ throw new Error(`Cannot derive ${input.source} preset from ${parentPreset.source} - must be same level or lower in hierarchy`);
171
+ }
172
+ const now = new Date();
173
+ const presetData = {
174
+ presetId: rest.presetId,
175
+ name: rest.name,
176
+ description: rest.description,
177
+ source: rest.source,
178
+ version: 1,
179
+ weights: newWeights,
180
+ parentPresetId: parentPreset.presetId,
181
+ parentHash: parentPreset.presetHash,
182
+ derivationDelta: delta,
183
+ createdAt: now,
184
+ createdBy: rest.createdBy,
185
+ comment: rest.comment,
186
+ };
187
+ const presetHash = await hashPresetData(presetData);
188
+ const preset = {
189
+ ...presetData,
190
+ presetHash,
191
+ };
192
+ // Validate with Zod
193
+ const parsed = trustPresetSchema.safeParse(preset);
194
+ if (!parsed.success) {
195
+ throw new Error(`Invalid preset: ${parsed.error.message}`);
196
+ }
197
+ logger.info({
198
+ presetId: preset.presetId,
199
+ source: preset.source,
200
+ parentPresetId: parentPreset.presetId,
201
+ }, 'Preset derived');
202
+ return Object.freeze(preset);
203
+ }
204
+ /**
205
+ * Create a Vorion reference preset from ACI canonical
206
+ */
207
+ export async function createVorionPreset(presetId, name, description, aciPresetId, weightOverrides, comment, createdBy) {
208
+ const aciPreset = getACIPreset(aciPresetId);
209
+ if (!aciPreset) {
210
+ throw new Error(`ACI preset ${aciPresetId} not found`);
211
+ }
212
+ return derivePreset({
213
+ presetId,
214
+ name,
215
+ description,
216
+ source: 'vorion',
217
+ parentPreset: aciPreset,
218
+ weightOverrides,
219
+ comment,
220
+ createdBy,
221
+ });
222
+ }
223
+ /**
224
+ * Create an Axiom deployment preset from Vorion reference
225
+ */
226
+ export async function createAxiomPreset(presetId, name, description, vorionPreset, weightOverrides, comment, createdBy) {
227
+ if (vorionPreset.source !== 'vorion' && vorionPreset.source !== 'aci') {
228
+ throw new Error(`Axiom preset must derive from Vorion or ACI preset, got ${vorionPreset.source}`);
229
+ }
230
+ return derivePreset({
231
+ presetId,
232
+ name,
233
+ description,
234
+ source: 'axiom',
235
+ parentPreset: vorionPreset,
236
+ weightOverrides,
237
+ comment,
238
+ createdBy,
239
+ });
240
+ }
241
+ // =============================================================================
242
+ // LINEAGE TRACKING
243
+ // =============================================================================
244
+ /**
245
+ * Build complete lineage for a preset
246
+ */
247
+ export async function buildPresetLineage(preset, presetRegistry) {
248
+ const chain = [];
249
+ const hashes = [];
250
+ let current = preset;
251
+ while (current) {
252
+ chain.unshift(current.presetId);
253
+ hashes.unshift(current.presetHash);
254
+ if (current.parentPresetId) {
255
+ // Check ACI presets first
256
+ current = ACI_CANONICAL_PRESETS[current.parentPresetId] ?? presetRegistry.get(current.parentPresetId);
257
+ }
258
+ else {
259
+ current = undefined;
260
+ }
261
+ }
262
+ const lineage = {
263
+ leafPresetId: preset.presetId,
264
+ chain,
265
+ hashes,
266
+ verified: false, // Needs regulator verification
267
+ };
268
+ // Validate with Zod
269
+ const parsed = presetLineageSchema.safeParse(lineage);
270
+ if (!parsed.success) {
271
+ throw new Error(`Invalid lineage: ${parsed.error.message}`);
272
+ }
273
+ return lineage;
274
+ }
275
+ /**
276
+ * Verify preset lineage integrity
277
+ */
278
+ export async function verifyPresetLineage(lineage, presetRegistry) {
279
+ const issues = [];
280
+ if (lineage.chain.length !== lineage.hashes.length) {
281
+ issues.push('Chain and hash lengths mismatch');
282
+ return { valid: false, issues };
283
+ }
284
+ // Verify each link in the chain
285
+ for (let i = 0; i < lineage.chain.length; i++) {
286
+ const presetId = lineage.chain[i];
287
+ const expectedHash = lineage.hashes[i];
288
+ // Find preset
289
+ const preset = ACI_CANONICAL_PRESETS[presetId] ?? presetRegistry.get(presetId);
290
+ if (!preset) {
291
+ issues.push(`Preset ${presetId} not found in registry`);
292
+ continue;
293
+ }
294
+ if (preset.presetHash !== expectedHash) {
295
+ issues.push(`Hash mismatch for ${presetId} - expected ${expectedHash}, got ${preset.presetHash}`);
296
+ }
297
+ // Verify parent link (except for root)
298
+ if (i > 0) {
299
+ const expectedParentId = lineage.chain[i - 1];
300
+ if (preset.parentPresetId !== expectedParentId) {
301
+ issues.push(`Parent link broken: ${presetId} should reference ${expectedParentId}, references ${preset.parentPresetId}`);
302
+ }
303
+ const expectedParentHash = lineage.hashes[i - 1];
304
+ if (preset.parentHash !== expectedParentHash) {
305
+ issues.push(`Parent hash mismatch for ${presetId}`);
306
+ }
307
+ }
308
+ }
309
+ return {
310
+ valid: issues.length === 0,
311
+ issues,
312
+ };
313
+ }
314
+ /**
315
+ * Mark lineage as verified by regulator
316
+ */
317
+ export function markLineageVerified(lineage, verifiedBy) {
318
+ return {
319
+ ...lineage,
320
+ verified: true,
321
+ verifiedAt: new Date(),
322
+ verifiedBy,
323
+ };
324
+ }
325
+ // =============================================================================
326
+ // PRESET SERVICE
327
+ // =============================================================================
328
+ /**
329
+ * Service for managing federated weight presets
330
+ */
331
+ export class PresetService {
332
+ vorionPresets = new Map();
333
+ axiomPresets = new Map();
334
+ lineages = new Map();
335
+ /**
336
+ * Get all presets (combined)
337
+ */
338
+ getAllPresets() {
339
+ const all = new Map();
340
+ // Add ACI canonical
341
+ for (const [id, preset] of Object.entries(ACI_CANONICAL_PRESETS)) {
342
+ all.set(id, preset);
343
+ }
344
+ // Add Vorion reference
345
+ for (const [id, preset] of this.vorionPresets) {
346
+ all.set(id, preset);
347
+ }
348
+ // Add Axiom deployment
349
+ for (const [id, preset] of this.axiomPresets) {
350
+ all.set(id, preset);
351
+ }
352
+ return all;
353
+ }
354
+ /**
355
+ * Get preset by ID (searches all tiers)
356
+ */
357
+ getPreset(presetId) {
358
+ return (ACI_CANONICAL_PRESETS[presetId] ??
359
+ this.vorionPresets.get(presetId) ??
360
+ this.axiomPresets.get(presetId));
361
+ }
362
+ /**
363
+ * Create and register a Vorion reference preset
364
+ */
365
+ async createVorionPreset(presetId, name, description, aciPresetId, weightOverrides, comment, createdBy = 'system') {
366
+ const preset = await createVorionPreset(presetId, name, description, aciPresetId, weightOverrides, comment ?? '', createdBy);
367
+ this.vorionPresets.set(presetId, preset);
368
+ // Build and store lineage
369
+ const lineage = await buildPresetLineage(preset, this.getAllPresets());
370
+ this.lineages.set(presetId, lineage);
371
+ return preset;
372
+ }
373
+ /**
374
+ * Create and register an Axiom deployment preset
375
+ */
376
+ async createAxiomPreset(presetId, name, description, parentPresetId, weightOverrides, comment, createdBy = 'system') {
377
+ const parentPreset = this.getPreset(parentPresetId);
378
+ if (!parentPreset) {
379
+ throw new Error(`Parent preset ${parentPresetId} not found`);
380
+ }
381
+ const preset = await createAxiomPreset(presetId, name, description, parentPreset, weightOverrides, comment ?? '', createdBy);
382
+ this.axiomPresets.set(presetId, preset);
383
+ // Build and store lineage
384
+ const lineage = await buildPresetLineage(preset, this.getAllPresets());
385
+ this.lineages.set(presetId, lineage);
386
+ return preset;
387
+ }
388
+ /**
389
+ * Get lineage for a preset
390
+ */
391
+ getLineage(presetId) {
392
+ return this.lineages.get(presetId);
393
+ }
394
+ /**
395
+ * Verify a preset's lineage
396
+ */
397
+ async verifyLineage(presetId) {
398
+ const lineage = this.lineages.get(presetId);
399
+ if (!lineage) {
400
+ return { valid: false, issues: ['Lineage not found'] };
401
+ }
402
+ return verifyPresetLineage(lineage, this.getAllPresets());
403
+ }
404
+ /**
405
+ * Mark lineage as regulator-verified
406
+ */
407
+ markVerified(presetId, verifiedBy) {
408
+ const lineage = this.lineages.get(presetId);
409
+ if (!lineage) {
410
+ throw new Error(`Lineage for ${presetId} not found`);
411
+ }
412
+ this.lineages.set(presetId, markLineageVerified(lineage, verifiedBy));
413
+ logger.info({ presetId, verifiedBy }, 'Lineage marked as verified');
414
+ }
415
+ /**
416
+ * Get statistics
417
+ */
418
+ getStats() {
419
+ const verifiedCount = Array.from(this.lineages.values()).filter((l) => l.verified).length;
420
+ return {
421
+ aciPresets: Object.keys(ACI_CANONICAL_PRESETS).length,
422
+ vorionPresets: this.vorionPresets.size,
423
+ axiomPresets: this.axiomPresets.size,
424
+ verifiedLineages: verifiedCount,
425
+ };
426
+ }
427
+ }
428
+ /**
429
+ * Create a new preset service instance
430
+ */
431
+ export function createPresetService() {
432
+ return new PresetService();
433
+ }
434
+ // =============================================================================
435
+ // VORION REFERENCE PRESETS (Built-in)
436
+ // =============================================================================
437
+ /**
438
+ * Initialize Vorion reference presets
439
+ * These are the platform defaults derived from ACI canonical.
440
+ */
441
+ export async function initializeVorionPresets(service) {
442
+ // High-security preset (emphasizes observability + governance)
443
+ await service.createVorionPreset('vorion:preset:high-security', 'High Security', 'For high-risk operations requiring maximum visibility', 'aci:preset:conservative', {
444
+ observability: 0.35,
445
+ governance: 0.30,
446
+ behavior: 0.20,
447
+ capability: 0.10,
448
+ context: 0.05,
449
+ }, 'Vorion platform default for T4+ agents in regulated environments', '@vorion/platform');
450
+ // Balanced autonomy preset (for general use)
451
+ await service.createVorionPreset('vorion:preset:balanced-autonomy', 'Balanced Autonomy', 'Default preset for most agents', 'aci:preset:balanced', undefined, // Use ACI balanced weights exactly
452
+ 'Vorion platform default for general-purpose agents', '@vorion/platform');
453
+ // Performance-focused preset (emphasizes capability)
454
+ await service.createVorionPreset('vorion:preset:performance', 'Performance Focused', 'For agents where capability is primary concern', 'aci:preset:capability-focused', {
455
+ capability: 0.40,
456
+ behavior: 0.25,
457
+ observability: 0.15,
458
+ governance: 0.10,
459
+ context: 0.10,
460
+ }, 'Vorion platform default for compute-intensive agents', '@vorion/platform');
461
+ logger.info('Vorion reference presets initialized');
462
+ }
463
+ // =============================================================================
464
+ // EXPORTS
465
+ // =============================================================================
466
+ export { ACI_CANONICAL_PRESETS, } from './types.js';
467
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/phase6/presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Q5: Provenance Capture + Policy Interpretation
3
+ *
4
+ * Separates immutable provenance (what) from mutable policy (how to interpret):
5
+ * - AgentProvenance: IMMUTABLE - captured at instantiation
6
+ * - CreationModifierPolicy: MUTABLE - can evolve independently
7
+ *
8
+ * Key Features:
9
+ * - Tamper-proof provenance records
10
+ * - Policy versioning with supersession chains
11
+ * - Condition-based modifier evaluation
12
+ * - Full audit trail for regulator review
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { type AgentProvenance, type CreationModifierPolicy, type CreationModifierConditions, type ModifierEvaluationRecord, CreationType } from './types.js';
17
+ /**
18
+ * Input for creating agent provenance
19
+ */
20
+ export interface CreateProvenanceInput {
21
+ agentId: string;
22
+ creationType: CreationType;
23
+ parentAgentId?: string;
24
+ parentProvenance?: AgentProvenance;
25
+ createdBy: string;
26
+ }
27
+ /**
28
+ * Create immutable agent provenance record
29
+ * This captures the origin story of an agent and cannot be modified.
30
+ */
31
+ export declare function createProvenance(input: CreateProvenanceInput): Promise<AgentProvenance>;
32
+ /**
33
+ * Verify provenance integrity
34
+ */
35
+ export declare function verifyProvenance(provenance: AgentProvenance): Promise<{
36
+ valid: boolean;
37
+ reason?: string;
38
+ }>;
39
+ /**
40
+ * Default modifiers per creation type
41
+ */
42
+ export declare const DEFAULT_CREATION_MODIFIERS: Record<CreationType, number>;
43
+ /**
44
+ * Input for creating modifier policy
45
+ */
46
+ export interface CreateModifierPolicyInput {
47
+ policyId: string;
48
+ creationType: CreationType;
49
+ baselineModifier?: number;
50
+ conditions?: CreationModifierConditions;
51
+ effectiveFrom?: Date;
52
+ effectiveUntil?: Date;
53
+ createdBy: string;
54
+ supersedes?: string;
55
+ }
56
+ /**
57
+ * Create a new creation modifier policy
58
+ */
59
+ export declare function createModifierPolicy(input: CreateModifierPolicyInput): Promise<CreationModifierPolicy>;
60
+ /**
61
+ * Create a new version of an existing policy
62
+ */
63
+ export declare function updateModifierPolicy(existingPolicy: CreationModifierPolicy, updates: Partial<Omit<CreateModifierPolicyInput, 'policyId' | 'creationType' | 'createdBy'>>, updatedBy: string): Promise<CreationModifierPolicy>;
64
+ /**
65
+ * Evaluation context for modifier calculation
66
+ */
67
+ export interface ModifierEvaluationContext {
68
+ provenance: AgentProvenance;
69
+ parentProvenance?: AgentProvenance;
70
+ parentTrustScore?: number;
71
+ organizationId?: string;
72
+ attestations?: string[];
73
+ }
74
+ /**
75
+ * Evaluate modifier for a provenance record
76
+ */
77
+ export declare function evaluateModifier(context: ModifierEvaluationContext, policies: CreationModifierPolicy[]): Promise<ModifierEvaluationRecord>;
78
+ /**
79
+ * Service for managing agent provenance and modifier policies
80
+ */
81
+ export declare class ProvenanceService {
82
+ private provenances;
83
+ private policies;
84
+ private evaluations;
85
+ /**
86
+ * Create and register provenance for an agent
87
+ */
88
+ createProvenance(input: CreateProvenanceInput): Promise<AgentProvenance>;
89
+ /**
90
+ * Get provenance for an agent
91
+ */
92
+ getProvenance(agentId: string): AgentProvenance | undefined;
93
+ /**
94
+ * Create a new modifier policy
95
+ */
96
+ createPolicy(input: CreateModifierPolicyInput): Promise<CreationModifierPolicy>;
97
+ /**
98
+ * Update an existing policy
99
+ */
100
+ updatePolicy(policyId: string, updates: Partial<Omit<CreateModifierPolicyInput, 'policyId' | 'creationType' | 'createdBy'>>, updatedBy: string): Promise<CreationModifierPolicy>;
101
+ /**
102
+ * Get current version of a policy
103
+ */
104
+ getPolicy(policyId: string): CreationModifierPolicy | undefined;
105
+ /**
106
+ * Get all policy versions
107
+ */
108
+ getPolicyVersions(policyId: string): readonly CreationModifierPolicy[];
109
+ /**
110
+ * Get all active policies
111
+ */
112
+ getActivePolicies(): CreationModifierPolicy[];
113
+ /**
114
+ * Evaluate modifier for an agent
115
+ */
116
+ evaluateModifier(agentId: string): Promise<ModifierEvaluationRecord>;
117
+ /**
118
+ * Get evaluation history for an agent
119
+ */
120
+ getEvaluationHistory(agentId: string): readonly ModifierEvaluationRecord[];
121
+ /**
122
+ * Verify provenance chain for an agent
123
+ */
124
+ verifyProvenanceChain(agentId: string): Promise<{
125
+ valid: boolean;
126
+ chain: string[];
127
+ issues: string[];
128
+ }>;
129
+ /**
130
+ * Get statistics
131
+ */
132
+ getStats(): {
133
+ provenanceCount: number;
134
+ policyCount: number;
135
+ evaluationCount: number;
136
+ byCreationType: Record<CreationType, number>;
137
+ };
138
+ }
139
+ /**
140
+ * Create a new provenance service instance
141
+ */
142
+ export declare function createProvenanceService(): ProvenanceService;
143
+ /**
144
+ * Initialize default modifier policies
145
+ */
146
+ export declare function initializeDefaultPolicies(service: ProvenanceService): Promise<void>;
147
+ export { type AgentProvenance, type CreationModifierPolicy, type CreationModifierConditions, type ModifierEvaluationRecord, CreationType, } from './types.js';
148
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/phase6/provenance.ts"],"names":[],"mappings":"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"}