@vorionsys/atsf-core 0.1.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.
- package/README.md +12 -12
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +463 -35
- package/dist/api/server.js.map +1 -1
- package/dist/arbitration/index.d.ts.map +1 -1
- package/dist/arbitration/index.js +8 -6
- package/dist/arbitration/index.js.map +1 -1
- package/dist/audit/key-manager.d.ts +118 -0
- package/dist/audit/key-manager.d.ts.map +1 -0
- package/dist/audit/key-manager.js +565 -0
- package/dist/audit/key-manager.js.map +1 -0
- package/dist/basis/evaluator.d.ts +31 -0
- package/dist/basis/evaluator.d.ts.map +1 -1
- package/dist/basis/evaluator.js +205 -10
- package/dist/basis/evaluator.js.map +1 -1
- package/dist/basis/parser.d.ts +210 -210
- package/dist/basis/parser.js.map +1 -1
- package/dist/carbon-aware/carbon-metrics.d.ts +151 -0
- package/dist/carbon-aware/carbon-metrics.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-metrics.js +370 -0
- package/dist/carbon-aware/carbon-metrics.js.map +1 -0
- package/dist/carbon-aware/carbon-router.d.ts +101 -0
- package/dist/carbon-aware/carbon-router.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-router.js +400 -0
- package/dist/carbon-aware/carbon-router.js.map +1 -0
- package/dist/chain/index.d.ts +147 -0
- package/dist/chain/index.d.ts.map +1 -0
- package/dist/chain/index.js +219 -0
- package/dist/chain/index.js.map +1 -0
- package/dist/cognigate/index.d.ts +33 -4
- package/dist/cognigate/index.d.ts.map +1 -1
- package/dist/cognigate/index.js +199 -24
- package/dist/cognigate/index.js.map +1 -1
- package/dist/common/adapters.d.ts +172 -0
- package/dist/common/adapters.d.ts.map +1 -0
- package/dist/common/adapters.js +329 -0
- package/dist/common/adapters.js.map +1 -0
- package/dist/common/config.d.ts +168 -163
- package/dist/common/config.d.ts.map +1 -1
- package/dist/common/config.js +2 -0
- package/dist/common/config.js.map +1 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/types.d.ts +67 -16
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/types.js +4 -0
- package/dist/common/types.js.map +1 -1
- package/dist/enforce/index.d.ts +226 -16
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +196 -49
- package/dist/enforce/index.js.map +1 -1
- package/dist/governance/fluid-workflow.d.ts +217 -0
- package/dist/governance/fluid-workflow.d.ts.map +1 -0
- package/dist/governance/fluid-workflow.js +491 -0
- package/dist/governance/fluid-workflow.js.map +1 -0
- package/dist/governance/index.d.ts +1 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +127 -10
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +121 -16
- package/dist/intent/index.js.map +1 -1
- package/dist/langchain/executor.d.ts +19 -5
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +287 -36
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts +2 -1
- package/dist/langchain/index.d.ts.map +1 -1
- package/dist/langchain/index.js +3 -1
- package/dist/langchain/index.js.map +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +2 -1
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts +41 -0
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/persistence/file.d.ts +35 -3
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +138 -11
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts +11 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +25 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +135 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +372 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/persistence/supabase.d.ts +93 -0
- package/dist/persistence/supabase.d.ts.map +1 -0
- package/dist/persistence/supabase.js +219 -0
- package/dist/persistence/supabase.js.map +1 -0
- package/dist/persistence/types.d.ts +5 -1
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/phase6/ceiling.d.ts +177 -0
- package/dist/phase6/ceiling.d.ts.map +1 -0
- package/dist/phase6/ceiling.js +463 -0
- package/dist/phase6/ceiling.js.map +1 -0
- package/dist/phase6/context.d.ts +207 -0
- package/dist/phase6/context.d.ts.map +1 -0
- package/dist/phase6/context.js +603 -0
- package/dist/phase6/context.js.map +1 -0
- package/dist/phase6/index.d.ts +79 -0
- package/dist/phase6/index.d.ts.map +1 -0
- package/dist/phase6/index.js +152 -0
- package/dist/phase6/index.js.map +1 -0
- package/dist/phase6/presets.d.ts +148 -0
- package/dist/phase6/presets.d.ts.map +1 -0
- package/dist/phase6/presets.js +467 -0
- package/dist/phase6/presets.js.map +1 -0
- package/dist/phase6/provenance.d.ts +148 -0
- package/dist/phase6/provenance.d.ts.map +1 -0
- package/dist/phase6/provenance.js +545 -0
- package/dist/phase6/provenance.js.map +1 -0
- package/dist/phase6/role-gates/index.d.ts +7 -0
- package/dist/phase6/role-gates/index.d.ts.map +1 -0
- package/dist/phase6/role-gates/index.js +7 -0
- package/dist/phase6/role-gates/index.js.map +1 -0
- package/dist/phase6/role-gates/kernel.d.ts +84 -0
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
- package/dist/phase6/role-gates/kernel.js +258 -0
- package/dist/phase6/role-gates/kernel.js.map +1 -0
- package/dist/phase6/role-gates/policy.d.ts +110 -0
- package/dist/phase6/role-gates/policy.d.ts.map +1 -0
- package/dist/phase6/role-gates/policy.js +157 -0
- package/dist/phase6/role-gates/policy.js.map +1 -0
- package/dist/phase6/role-gates.d.ts +164 -0
- package/dist/phase6/role-gates.d.ts.map +1 -0
- package/dist/phase6/role-gates.js +536 -0
- package/dist/phase6/role-gates.js.map +1 -0
- package/dist/phase6/types.d.ts +1827 -0
- package/dist/phase6/types.d.ts.map +1 -0
- package/dist/phase6/types.js +450 -0
- package/dist/phase6/types.js.map +1 -0
- package/dist/phase6/weight-presets/canonical.d.ts +93 -0
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
- package/dist/phase6/weight-presets/canonical.js +122 -0
- package/dist/phase6/weight-presets/canonical.js.map +1 -0
- package/dist/phase6/weight-presets/deltas.d.ts +144 -0
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
- package/dist/phase6/weight-presets/deltas.js +184 -0
- package/dist/phase6/weight-presets/deltas.js.map +1 -0
- package/dist/phase6/weight-presets/index.d.ts +8 -0
- package/dist/phase6/weight-presets/index.d.ts.map +1 -0
- package/dist/phase6/weight-presets/index.js +8 -0
- package/dist/phase6/weight-presets/index.js.map +1 -0
- package/dist/phase6/weight-presets/merger.d.ts +79 -0
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
- package/dist/phase6/weight-presets/merger.js +161 -0
- package/dist/phase6/weight-presets/merger.js.map +1 -0
- package/dist/proof/index.d.ts +50 -1
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +122 -3
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +195 -0
- package/dist/proof/merkle.d.ts.map +1 -0
- package/dist/proof/merkle.js +412 -0
- package/dist/proof/merkle.js.map +1 -0
- package/dist/proof/zk-proofs.d.ts +218 -0
- package/dist/proof/zk-proofs.d.ts.map +1 -0
- package/dist/proof/zk-proofs.js +531 -0
- package/dist/proof/zk-proofs.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.js +104 -0
- package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
- package/dist/trust-engine/context-policy/factory.d.ts +75 -0
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/factory.js +130 -0
- package/dist/trust-engine/context-policy/factory.js.map +1 -0
- package/dist/trust-engine/context-policy/index.d.ts +6 -0
- package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/index.js +6 -0
- package/dist/trust-engine/context-policy/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.js +5 -0
- package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.js +166 -0
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
- package/dist/trust-engine/decay-profiles.d.ts +159 -0
- package/dist/trust-engine/decay-profiles.d.ts.map +1 -0
- package/dist/trust-engine/decay-profiles.js +210 -0
- package/dist/trust-engine/decay-profiles.js.map +1 -0
- package/dist/trust-engine/index.d.ts +144 -5
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +320 -15
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +123 -0
- package/dist/trust-engine/phase6-types.d.ts.map +1 -0
- package/dist/trust-engine/phase6-types.js +88 -0
- package/dist/trust-engine/phase6-types.js.map +1 -0
- package/package.json +26 -10
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Q2: Hierarchical Context System
|
|
3
|
+
*
|
|
4
|
+
* Implements 4-Tier Context with Tiered Immutability:
|
|
5
|
+
* - Tier 1: Deployment Context (IMMUTABLE - set at deployment)
|
|
6
|
+
* - Tier 2: Organizational Context (LOCKED POST-STARTUP)
|
|
7
|
+
* - Tier 3: Agent Context (FROZEN AT CREATION)
|
|
8
|
+
* - Tier 4: Operation Context (EPHEMERAL - per-request)
|
|
9
|
+
*
|
|
10
|
+
* Key Features:
|
|
11
|
+
* - Cryptographic hash chain for integrity verification
|
|
12
|
+
* - Parent chain validation (each tier references parent)
|
|
13
|
+
* - Ceiling inheritance (child cannot exceed parent)
|
|
14
|
+
* - Regulatory framework propagation
|
|
15
|
+
*
|
|
16
|
+
* @packageDocumentation
|
|
17
|
+
*/
|
|
18
|
+
import { createLogger } from '../common/logger.js';
|
|
19
|
+
import { TrustTier, CONTEXT_CEILINGS, deploymentContextSchema, organizationalContextSchema, agentContextSchema, operationContextSchema, } from './types.js';
|
|
20
|
+
const logger = createLogger({ component: 'phase6:context' });
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// HASH UTILITIES
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Calculate SHA-256 hash for context integrity
|
|
26
|
+
*/
|
|
27
|
+
async function calculateHash(data) {
|
|
28
|
+
const encoder = new TextEncoder();
|
|
29
|
+
const dataBuffer = encoder.encode(data);
|
|
30
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
|
|
31
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
32
|
+
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create deterministic hash from context data
|
|
36
|
+
*/
|
|
37
|
+
async function hashContextData(data) {
|
|
38
|
+
// Sort keys for deterministic serialization
|
|
39
|
+
const sortedKeys = Object.keys(data).sort();
|
|
40
|
+
const sortedData = {};
|
|
41
|
+
for (const key of sortedKeys) {
|
|
42
|
+
sortedData[key] = data[key];
|
|
43
|
+
}
|
|
44
|
+
return calculateHash(JSON.stringify(sortedData));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create an immutable deployment context
|
|
48
|
+
* Once created, this cannot be modified without redeployment.
|
|
49
|
+
*/
|
|
50
|
+
export async function createDeploymentContext(input) {
|
|
51
|
+
const now = new Date();
|
|
52
|
+
// Calculate deployment hash from configuration
|
|
53
|
+
const configData = {
|
|
54
|
+
deploymentId: input.deploymentId,
|
|
55
|
+
regulatoryFramework: input.regulatoryFramework,
|
|
56
|
+
maxAllowedTier: input.maxAllowedTier,
|
|
57
|
+
allowedContextTypes: input.allowedContextTypes,
|
|
58
|
+
deployedAt: now.toISOString(),
|
|
59
|
+
deployedBy: input.deployedBy,
|
|
60
|
+
};
|
|
61
|
+
const deploymentHash = await hashContextData(configData);
|
|
62
|
+
const context = {
|
|
63
|
+
deploymentId: input.deploymentId,
|
|
64
|
+
deploymentHash,
|
|
65
|
+
regulatoryFramework: input.regulatoryFramework,
|
|
66
|
+
maxAllowedTier: input.maxAllowedTier,
|
|
67
|
+
allowedContextTypes: input.allowedContextTypes,
|
|
68
|
+
deployedAt: now,
|
|
69
|
+
deployedBy: input.deployedBy,
|
|
70
|
+
immutable: true,
|
|
71
|
+
};
|
|
72
|
+
// Validate with Zod
|
|
73
|
+
const parsed = deploymentContextSchema.safeParse(context);
|
|
74
|
+
if (!parsed.success) {
|
|
75
|
+
logger.error({ errors: parsed.error.errors }, 'Invalid deployment context');
|
|
76
|
+
throw new Error(`Invalid deployment context: ${parsed.error.message}`);
|
|
77
|
+
}
|
|
78
|
+
logger.info({
|
|
79
|
+
deploymentId: context.deploymentId,
|
|
80
|
+
framework: context.regulatoryFramework,
|
|
81
|
+
maxTier: context.maxAllowedTier,
|
|
82
|
+
}, 'Deployment context created');
|
|
83
|
+
return Object.freeze(context);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Verify deployment context integrity
|
|
87
|
+
*/
|
|
88
|
+
export async function verifyDeploymentContext(context) {
|
|
89
|
+
// Recalculate hash
|
|
90
|
+
const configData = {
|
|
91
|
+
deploymentId: context.deploymentId,
|
|
92
|
+
regulatoryFramework: context.regulatoryFramework,
|
|
93
|
+
maxAllowedTier: context.maxAllowedTier,
|
|
94
|
+
allowedContextTypes: context.allowedContextTypes,
|
|
95
|
+
deployedAt: context.deployedAt.toISOString(),
|
|
96
|
+
deployedBy: context.deployedBy,
|
|
97
|
+
};
|
|
98
|
+
const expectedHash = await hashContextData(configData);
|
|
99
|
+
if (context.deploymentHash !== expectedHash) {
|
|
100
|
+
return { valid: false, reason: 'Deployment hash mismatch - possible tampering' };
|
|
101
|
+
}
|
|
102
|
+
// Validate immutability marker
|
|
103
|
+
if (context.immutable !== true) {
|
|
104
|
+
return { valid: false, reason: 'Immutability marker missing' };
|
|
105
|
+
}
|
|
106
|
+
return { valid: true };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Builder for organizational context
|
|
110
|
+
* Allows configuration during startup, then locks.
|
|
111
|
+
*/
|
|
112
|
+
export class OrganizationalContextBuilder {
|
|
113
|
+
context;
|
|
114
|
+
locked = false;
|
|
115
|
+
constructor(input) {
|
|
116
|
+
// Validate parent deployment first
|
|
117
|
+
if (!input.parentDeployment.immutable) {
|
|
118
|
+
throw new Error('Parent deployment context must be immutable');
|
|
119
|
+
}
|
|
120
|
+
// Ensure max trust tier doesn't exceed parent
|
|
121
|
+
const parentMaxTier = input.parentDeployment.maxAllowedTier;
|
|
122
|
+
const requestedMaxTier = input.constraints.maxTrustTier ?? parentMaxTier;
|
|
123
|
+
// Tier comparison (T0 < T1 < ... < T5)
|
|
124
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
125
|
+
const parentTierIdx = tierOrder.indexOf(parentMaxTier);
|
|
126
|
+
const requestedTierIdx = tierOrder.indexOf(requestedMaxTier);
|
|
127
|
+
const effectiveMaxTier = requestedTierIdx <= parentTierIdx ? requestedMaxTier : parentMaxTier;
|
|
128
|
+
const constraints = {
|
|
129
|
+
maxTrustTier: effectiveMaxTier,
|
|
130
|
+
deniedDomains: input.constraints.deniedDomains,
|
|
131
|
+
requiredAttestations: input.constraints.requiredAttestations,
|
|
132
|
+
dataClassification: input.constraints.dataClassification,
|
|
133
|
+
auditLevel: input.constraints.auditLevel,
|
|
134
|
+
};
|
|
135
|
+
this.context = {
|
|
136
|
+
orgId: input.orgId,
|
|
137
|
+
tenantId: input.tenantId,
|
|
138
|
+
parentDeployment: input.parentDeployment,
|
|
139
|
+
constraints,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Update constraints (only allowed before locking)
|
|
144
|
+
*/
|
|
145
|
+
updateConstraints(updates) {
|
|
146
|
+
if (this.locked) {
|
|
147
|
+
throw new Error('Organizational context is locked - cannot modify constraints');
|
|
148
|
+
}
|
|
149
|
+
// Ensure updates don't exceed parent deployment ceiling
|
|
150
|
+
if (updates.maxTrustTier !== undefined) {
|
|
151
|
+
const parentMaxTier = this.context.parentDeployment.maxAllowedTier;
|
|
152
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
153
|
+
const parentTierIdx = tierOrder.indexOf(parentMaxTier);
|
|
154
|
+
const requestedTierIdx = tierOrder.indexOf(updates.maxTrustTier);
|
|
155
|
+
if (requestedTierIdx > parentTierIdx) {
|
|
156
|
+
throw new Error(`Cannot set maxTrustTier to ${updates.maxTrustTier} - parent deployment limits to ${parentMaxTier}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
this.context.constraints = {
|
|
160
|
+
...this.context.constraints,
|
|
161
|
+
...updates,
|
|
162
|
+
};
|
|
163
|
+
return this;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Add denied domain
|
|
167
|
+
*/
|
|
168
|
+
addDeniedDomain(domain) {
|
|
169
|
+
if (this.locked) {
|
|
170
|
+
throw new Error('Organizational context is locked - cannot add denied domains');
|
|
171
|
+
}
|
|
172
|
+
this.context.constraints = {
|
|
173
|
+
...this.context.constraints,
|
|
174
|
+
deniedDomains: [...this.context.constraints.deniedDomains, domain],
|
|
175
|
+
};
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Add required attestation
|
|
180
|
+
*/
|
|
181
|
+
addRequiredAttestation(attestation) {
|
|
182
|
+
if (this.locked) {
|
|
183
|
+
throw new Error('Organizational context is locked - cannot add attestations');
|
|
184
|
+
}
|
|
185
|
+
this.context.constraints = {
|
|
186
|
+
...this.context.constraints,
|
|
187
|
+
requiredAttestations: [...this.context.constraints.requiredAttestations, attestation],
|
|
188
|
+
};
|
|
189
|
+
return this;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Lock the organizational context (no further modifications allowed)
|
|
193
|
+
*/
|
|
194
|
+
async lock() {
|
|
195
|
+
if (this.locked) {
|
|
196
|
+
throw new Error('Organizational context is already locked');
|
|
197
|
+
}
|
|
198
|
+
const now = new Date();
|
|
199
|
+
// Calculate org hash including parent chain
|
|
200
|
+
const hashData = {
|
|
201
|
+
orgId: this.context.orgId,
|
|
202
|
+
tenantId: this.context.tenantId,
|
|
203
|
+
parentDeploymentHash: this.context.parentDeployment.deploymentHash,
|
|
204
|
+
constraints: this.context.constraints,
|
|
205
|
+
lockedAt: now.toISOString(),
|
|
206
|
+
};
|
|
207
|
+
const orgHash = await hashContextData(hashData);
|
|
208
|
+
const lockedContext = {
|
|
209
|
+
orgId: this.context.orgId,
|
|
210
|
+
tenantId: this.context.tenantId,
|
|
211
|
+
parentDeployment: this.context.parentDeployment,
|
|
212
|
+
lockedAt: now,
|
|
213
|
+
constraints: this.context.constraints,
|
|
214
|
+
orgHash,
|
|
215
|
+
};
|
|
216
|
+
// Validate with Zod
|
|
217
|
+
const parsed = organizationalContextSchema.safeParse(lockedContext);
|
|
218
|
+
if (!parsed.success) {
|
|
219
|
+
throw new Error(`Invalid organizational context: ${parsed.error.message}`);
|
|
220
|
+
}
|
|
221
|
+
this.locked = true;
|
|
222
|
+
logger.info({
|
|
223
|
+
orgId: lockedContext.orgId,
|
|
224
|
+
tenantId: lockedContext.tenantId,
|
|
225
|
+
maxTier: lockedContext.constraints.maxTrustTier,
|
|
226
|
+
}, 'Organizational context locked');
|
|
227
|
+
return Object.freeze(lockedContext);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if context is locked
|
|
231
|
+
*/
|
|
232
|
+
isLocked() {
|
|
233
|
+
return this.locked;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Create and immediately lock organizational context
|
|
238
|
+
*/
|
|
239
|
+
export async function createOrganizationalContext(input) {
|
|
240
|
+
const builder = new OrganizationalContextBuilder(input);
|
|
241
|
+
return builder.lock();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Verify organizational context integrity
|
|
245
|
+
*/
|
|
246
|
+
export async function verifyOrganizationalContext(context) {
|
|
247
|
+
// Verify parent first
|
|
248
|
+
const parentResult = await verifyDeploymentContext(context.parentDeployment);
|
|
249
|
+
if (!parentResult.valid) {
|
|
250
|
+
return { valid: false, reason: `Parent deployment invalid: ${parentResult.reason}` };
|
|
251
|
+
}
|
|
252
|
+
// Verify org is locked
|
|
253
|
+
if (!context.lockedAt) {
|
|
254
|
+
return { valid: false, reason: 'Organizational context not locked' };
|
|
255
|
+
}
|
|
256
|
+
// Recalculate hash
|
|
257
|
+
const hashData = {
|
|
258
|
+
orgId: context.orgId,
|
|
259
|
+
tenantId: context.tenantId,
|
|
260
|
+
parentDeploymentHash: context.parentDeployment.deploymentHash,
|
|
261
|
+
constraints: context.constraints,
|
|
262
|
+
lockedAt: context.lockedAt.toISOString(),
|
|
263
|
+
};
|
|
264
|
+
const expectedHash = await hashContextData(hashData);
|
|
265
|
+
if (context.orgHash !== expectedHash) {
|
|
266
|
+
return { valid: false, reason: 'Organizational hash mismatch - possible tampering' };
|
|
267
|
+
}
|
|
268
|
+
// Verify constraints don't exceed parent
|
|
269
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
270
|
+
const parentTierIdx = tierOrder.indexOf(context.parentDeployment.maxAllowedTier);
|
|
271
|
+
const orgTierIdx = tierOrder.indexOf(context.constraints.maxTrustTier);
|
|
272
|
+
if (orgTierIdx > parentTierIdx) {
|
|
273
|
+
return {
|
|
274
|
+
valid: false,
|
|
275
|
+
reason: `Organizational tier ${context.constraints.maxTrustTier} exceeds parent ${context.parentDeployment.maxAllowedTier}`,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
return { valid: true };
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Create an agent context (frozen at creation)
|
|
282
|
+
* Once created, this cannot be modified for the lifetime of the agent.
|
|
283
|
+
*/
|
|
284
|
+
export async function createAgentContext(input) {
|
|
285
|
+
// Verify parent is locked
|
|
286
|
+
if (!input.parentOrg.lockedAt) {
|
|
287
|
+
throw new Error('Parent organizational context must be locked before creating agent context');
|
|
288
|
+
}
|
|
289
|
+
// Verify context type is allowed by deployment
|
|
290
|
+
if (!input.parentOrg.parentDeployment.allowedContextTypes.includes(input.contextType)) {
|
|
291
|
+
throw new Error(`Context type ${input.contextType} not allowed by deployment - allowed: ${input.parentOrg.parentDeployment.allowedContextTypes.join(', ')}`);
|
|
292
|
+
}
|
|
293
|
+
const now = new Date();
|
|
294
|
+
// Calculate context hash including parent chain
|
|
295
|
+
const hashData = {
|
|
296
|
+
agentId: input.agentId,
|
|
297
|
+
parentOrgHash: input.parentOrg.orgHash,
|
|
298
|
+
contextType: input.contextType,
|
|
299
|
+
createdAt: now.toISOString(),
|
|
300
|
+
createdBy: input.createdBy,
|
|
301
|
+
};
|
|
302
|
+
const contextHash = await hashContextData(hashData);
|
|
303
|
+
const context = {
|
|
304
|
+
agentId: input.agentId,
|
|
305
|
+
parentOrg: input.parentOrg,
|
|
306
|
+
contextType: input.contextType,
|
|
307
|
+
createdAt: now,
|
|
308
|
+
createdBy: input.createdBy,
|
|
309
|
+
contextHash,
|
|
310
|
+
};
|
|
311
|
+
// Validate with Zod
|
|
312
|
+
const parsed = agentContextSchema.safeParse(context);
|
|
313
|
+
if (!parsed.success) {
|
|
314
|
+
throw new Error(`Invalid agent context: ${parsed.error.message}`);
|
|
315
|
+
}
|
|
316
|
+
logger.info({
|
|
317
|
+
agentId: context.agentId,
|
|
318
|
+
contextType: context.contextType,
|
|
319
|
+
parentOrgId: input.parentOrg.orgId,
|
|
320
|
+
}, 'Agent context created (frozen)');
|
|
321
|
+
return Object.freeze(context);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Verify agent context integrity
|
|
325
|
+
*/
|
|
326
|
+
export async function verifyAgentContext(context) {
|
|
327
|
+
// Verify parent chain
|
|
328
|
+
const orgResult = await verifyOrganizationalContext(context.parentOrg);
|
|
329
|
+
if (!orgResult.valid) {
|
|
330
|
+
return { valid: false, reason: `Parent organization invalid: ${orgResult.reason}` };
|
|
331
|
+
}
|
|
332
|
+
// Verify context type is still allowed
|
|
333
|
+
if (!context.parentOrg.parentDeployment.allowedContextTypes.includes(context.contextType)) {
|
|
334
|
+
return {
|
|
335
|
+
valid: false,
|
|
336
|
+
reason: `Context type ${context.contextType} no longer allowed by deployment`,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
// Recalculate hash
|
|
340
|
+
const hashData = {
|
|
341
|
+
agentId: context.agentId,
|
|
342
|
+
parentOrgHash: context.parentOrg.orgHash,
|
|
343
|
+
contextType: context.contextType,
|
|
344
|
+
createdAt: context.createdAt.toISOString(),
|
|
345
|
+
createdBy: context.createdBy,
|
|
346
|
+
};
|
|
347
|
+
const expectedHash = await hashContextData(hashData);
|
|
348
|
+
if (context.contextHash !== expectedHash) {
|
|
349
|
+
return { valid: false, reason: 'Agent context hash mismatch - possible tampering' };
|
|
350
|
+
}
|
|
351
|
+
return { valid: true };
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Get the effective ceiling for an agent context
|
|
355
|
+
* Considers: deployment ceiling, org ceiling, and context type ceiling
|
|
356
|
+
*/
|
|
357
|
+
export function getAgentContextCeiling(context) {
|
|
358
|
+
// Context type ceiling
|
|
359
|
+
const contextCeiling = CONTEXT_CEILINGS[context.contextType];
|
|
360
|
+
// Org constraint ceiling (convert tier to score)
|
|
361
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
362
|
+
const tierScores = [99, 299, 499, 699, 899, 1000];
|
|
363
|
+
const orgTierIdx = tierOrder.indexOf(context.parentOrg.constraints.maxTrustTier);
|
|
364
|
+
const orgCeiling = tierScores[orgTierIdx];
|
|
365
|
+
// Deployment ceiling
|
|
366
|
+
const deploymentTierIdx = tierOrder.indexOf(context.parentOrg.parentDeployment.maxAllowedTier);
|
|
367
|
+
const deploymentCeiling = tierScores[deploymentTierIdx];
|
|
368
|
+
// Return minimum of all ceilings
|
|
369
|
+
return Math.min(contextCeiling, orgCeiling, deploymentCeiling);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Create an ephemeral operation context
|
|
373
|
+
* Automatically expires after TTL.
|
|
374
|
+
*/
|
|
375
|
+
export async function createOperationContext(input) {
|
|
376
|
+
// Verify parent agent context
|
|
377
|
+
const agentResult = await verifyAgentContext(input.parentAgent);
|
|
378
|
+
if (!agentResult.valid) {
|
|
379
|
+
throw new Error(`Invalid parent agent context: ${agentResult.reason}`);
|
|
380
|
+
}
|
|
381
|
+
const now = new Date();
|
|
382
|
+
const ttlMs = input.ttlMs ?? 5 * 60 * 1000; // Default 5 minutes
|
|
383
|
+
const expiresAt = new Date(now.getTime() + ttlMs);
|
|
384
|
+
const context = {
|
|
385
|
+
operationId: crypto.randomUUID(),
|
|
386
|
+
parentAgent: input.parentAgent,
|
|
387
|
+
requestMetadata: input.requestMetadata ?? {},
|
|
388
|
+
correlationId: crypto.randomUUID(),
|
|
389
|
+
startedAt: now,
|
|
390
|
+
expiresAt,
|
|
391
|
+
ephemeral: true,
|
|
392
|
+
};
|
|
393
|
+
// Validate with Zod
|
|
394
|
+
const parsed = operationContextSchema.safeParse(context);
|
|
395
|
+
if (!parsed.success) {
|
|
396
|
+
throw new Error(`Invalid operation context: ${parsed.error.message}`);
|
|
397
|
+
}
|
|
398
|
+
logger.debug({
|
|
399
|
+
operationId: context.operationId,
|
|
400
|
+
agentId: input.parentAgent.agentId,
|
|
401
|
+
ttlMs,
|
|
402
|
+
}, 'Operation context created (ephemeral)');
|
|
403
|
+
return context; // Not frozen - can be modified during operation
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Check if operation context is expired
|
|
407
|
+
*/
|
|
408
|
+
export function isOperationExpired(context) {
|
|
409
|
+
return new Date() > context.expiresAt;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Get the effective ceiling for an operation
|
|
413
|
+
* Inherits from agent context ceiling
|
|
414
|
+
*/
|
|
415
|
+
export function getOperationCeiling(context) {
|
|
416
|
+
return getAgentContextCeiling(context.parentAgent);
|
|
417
|
+
}
|
|
418
|
+
// =============================================================================
|
|
419
|
+
// FULL CONTEXT CHAIN VALIDATION
|
|
420
|
+
// =============================================================================
|
|
421
|
+
/**
|
|
422
|
+
* Validate entire context hierarchy from operation to deployment
|
|
423
|
+
*/
|
|
424
|
+
export async function validateContextChain(context) {
|
|
425
|
+
const violations = [];
|
|
426
|
+
let hashChainValid = true;
|
|
427
|
+
let tier;
|
|
428
|
+
// Determine context tier and validate
|
|
429
|
+
if ('ephemeral' in context && context.ephemeral === true) {
|
|
430
|
+
// Operation context
|
|
431
|
+
tier = 'operation';
|
|
432
|
+
const opContext = context;
|
|
433
|
+
if (isOperationExpired(opContext)) {
|
|
434
|
+
violations.push('Operation context has expired');
|
|
435
|
+
}
|
|
436
|
+
// Validate parent chain
|
|
437
|
+
const agentResult = await verifyAgentContext(opContext.parentAgent);
|
|
438
|
+
if (!agentResult.valid) {
|
|
439
|
+
violations.push(`Agent context invalid: ${agentResult.reason}`);
|
|
440
|
+
hashChainValid = false;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else if ('contextHash' in context) {
|
|
444
|
+
// Agent context
|
|
445
|
+
tier = 'agent';
|
|
446
|
+
const agentContext = context;
|
|
447
|
+
const result = await verifyAgentContext(agentContext);
|
|
448
|
+
if (!result.valid) {
|
|
449
|
+
violations.push(result.reason);
|
|
450
|
+
hashChainValid = false;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
else if ('orgHash' in context) {
|
|
454
|
+
// Organizational context
|
|
455
|
+
tier = 'organizational';
|
|
456
|
+
const orgContext = context;
|
|
457
|
+
const result = await verifyOrganizationalContext(orgContext);
|
|
458
|
+
if (!result.valid) {
|
|
459
|
+
violations.push(result.reason);
|
|
460
|
+
hashChainValid = false;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
// Deployment context
|
|
465
|
+
tier = 'deployment';
|
|
466
|
+
const deployContext = context;
|
|
467
|
+
const result = await verifyDeploymentContext(deployContext);
|
|
468
|
+
if (!result.valid) {
|
|
469
|
+
violations.push(result.reason);
|
|
470
|
+
hashChainValid = false;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return {
|
|
474
|
+
valid: violations.length === 0,
|
|
475
|
+
tier,
|
|
476
|
+
reason: violations.length > 0 ? violations.join('; ') : undefined,
|
|
477
|
+
constraintViolations: violations,
|
|
478
|
+
hashChainValid,
|
|
479
|
+
validatedAt: new Date(),
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
// =============================================================================
|
|
483
|
+
// CONTEXT SERVICE
|
|
484
|
+
// =============================================================================
|
|
485
|
+
/**
|
|
486
|
+
* Service for managing the 4-tier context hierarchy
|
|
487
|
+
*/
|
|
488
|
+
export class ContextService {
|
|
489
|
+
deployments = new Map();
|
|
490
|
+
organizations = new Map();
|
|
491
|
+
agents = new Map();
|
|
492
|
+
activeOperations = new Map();
|
|
493
|
+
/**
|
|
494
|
+
* Register a deployment context
|
|
495
|
+
*/
|
|
496
|
+
registerDeployment(context) {
|
|
497
|
+
if (this.deployments.has(context.deploymentId)) {
|
|
498
|
+
throw new Error(`Deployment ${context.deploymentId} already registered`);
|
|
499
|
+
}
|
|
500
|
+
this.deployments.set(context.deploymentId, context);
|
|
501
|
+
logger.info({ deploymentId: context.deploymentId }, 'Deployment registered');
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Register an organizational context
|
|
505
|
+
*/
|
|
506
|
+
registerOrganization(context) {
|
|
507
|
+
if (!context.lockedAt) {
|
|
508
|
+
throw new Error('Cannot register unlocked organizational context');
|
|
509
|
+
}
|
|
510
|
+
if (this.organizations.has(context.orgId)) {
|
|
511
|
+
throw new Error(`Organization ${context.orgId} already registered`);
|
|
512
|
+
}
|
|
513
|
+
this.organizations.set(context.orgId, context);
|
|
514
|
+
logger.info({ orgId: context.orgId, tenantId: context.tenantId }, 'Organization registered');
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Register an agent context
|
|
518
|
+
*/
|
|
519
|
+
registerAgent(context) {
|
|
520
|
+
if (this.agents.has(context.agentId)) {
|
|
521
|
+
throw new Error(`Agent ${context.agentId} already registered`);
|
|
522
|
+
}
|
|
523
|
+
this.agents.set(context.agentId, context);
|
|
524
|
+
logger.info({ agentId: context.agentId }, 'Agent registered');
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Create and register an operation context
|
|
528
|
+
*/
|
|
529
|
+
async createOperation(input) {
|
|
530
|
+
const context = await createOperationContext(input);
|
|
531
|
+
this.activeOperations.set(context.operationId, context);
|
|
532
|
+
return context;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Complete an operation (removes from active)
|
|
536
|
+
*/
|
|
537
|
+
completeOperation(operationId) {
|
|
538
|
+
this.activeOperations.delete(operationId);
|
|
539
|
+
logger.debug({ operationId }, 'Operation completed');
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Get deployment by ID
|
|
543
|
+
*/
|
|
544
|
+
getDeployment(deploymentId) {
|
|
545
|
+
return this.deployments.get(deploymentId);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Get organization by ID
|
|
549
|
+
*/
|
|
550
|
+
getOrganization(orgId) {
|
|
551
|
+
return this.organizations.get(orgId);
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Get agent by ID
|
|
555
|
+
*/
|
|
556
|
+
getAgent(agentId) {
|
|
557
|
+
return this.agents.get(agentId);
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Get active operation by ID
|
|
561
|
+
*/
|
|
562
|
+
getOperation(operationId) {
|
|
563
|
+
return this.activeOperations.get(operationId);
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Cleanup expired operations
|
|
567
|
+
*/
|
|
568
|
+
cleanupExpiredOperations() {
|
|
569
|
+
let cleaned = 0;
|
|
570
|
+
for (const [id, context] of this.activeOperations) {
|
|
571
|
+
if (isOperationExpired(context)) {
|
|
572
|
+
this.activeOperations.delete(id);
|
|
573
|
+
cleaned++;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
if (cleaned > 0) {
|
|
577
|
+
logger.debug({ cleaned }, 'Cleaned up expired operations');
|
|
578
|
+
}
|
|
579
|
+
return cleaned;
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Get statistics
|
|
583
|
+
*/
|
|
584
|
+
getStats() {
|
|
585
|
+
return {
|
|
586
|
+
deployments: this.deployments.size,
|
|
587
|
+
organizations: this.organizations.size,
|
|
588
|
+
agents: this.agents.size,
|
|
589
|
+
activeOperations: this.activeOperations.size,
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Create a new context service instance
|
|
595
|
+
*/
|
|
596
|
+
export function createContextService() {
|
|
597
|
+
return new ContextService();
|
|
598
|
+
}
|
|
599
|
+
// =============================================================================
|
|
600
|
+
// EXPORTS
|
|
601
|
+
// =============================================================================
|
|
602
|
+
export { ContextType, TrustTier, RegulatoryFramework, CONTEXT_CEILINGS, } from './types.js';
|
|
603
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/phase6/context.ts"],"names":[],"mappings":"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"}
|