@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,463 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Q1: Ceiling Enforcement (Hybrid Dual-Layer + Regulatory Observability)
|
|
3
|
+
*
|
|
4
|
+
* Implements three-layer enforcement:
|
|
5
|
+
* - Kernel Layer: Structure validation (cannot bypass)
|
|
6
|
+
* - Policy Layer: Authorization via governance rules
|
|
7
|
+
* - Regulatory Layer: Observability for gaming detection
|
|
8
|
+
*
|
|
9
|
+
* Key Features:
|
|
10
|
+
* - Dual logging (raw + clamped scores)
|
|
11
|
+
* - Gaming detection via variance analysis
|
|
12
|
+
* - Regulatory audit ledger with retention
|
|
13
|
+
* - Hash-chained event immutability
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
import { createLogger } from '../common/logger.js';
|
|
18
|
+
import { TrustTier, RegulatoryFramework, getTierFromScore, clampToCeiling, trustComputationEventSchema, regulatoryAuditEntrySchema, } from './types.js';
|
|
19
|
+
import { getAgentContextCeiling } from './context.js';
|
|
20
|
+
const logger = createLogger({ component: 'phase6:ceiling' });
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// HASH UTILITIES
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Calculate SHA-256 hash
|
|
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
|
+
* Calculate effective ceiling from all sources
|
|
36
|
+
*/
|
|
37
|
+
export function calculateEffectiveCeiling(context) {
|
|
38
|
+
const contextCeiling = getAgentContextCeiling(context.agentContext);
|
|
39
|
+
const sources = [
|
|
40
|
+
{
|
|
41
|
+
type: 'context',
|
|
42
|
+
value: contextCeiling,
|
|
43
|
+
constraint: `Context type ${context.agentContext.contextType}`,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'organizational',
|
|
47
|
+
value: getOrgCeiling(context.agentContext),
|
|
48
|
+
constraint: `Organization ${context.agentContext.parentOrg.orgId}`,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'deployment',
|
|
52
|
+
value: getDeploymentCeiling(context.agentContext),
|
|
53
|
+
constraint: `Deployment ${context.agentContext.parentOrg.parentDeployment.deploymentId}`,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
// Add attestation ceiling if present
|
|
57
|
+
if (context.attestationCeiling !== undefined) {
|
|
58
|
+
sources.push({
|
|
59
|
+
type: 'attestation',
|
|
60
|
+
value: context.attestationCeiling,
|
|
61
|
+
constraint: 'TEE attestation',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Find minimum ceiling
|
|
65
|
+
const minSource = sources.reduce((min, current) => current.value < min.value ? current : min);
|
|
66
|
+
return minSource;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get organizational ceiling (from constraints)
|
|
70
|
+
*/
|
|
71
|
+
function getOrgCeiling(context) {
|
|
72
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
73
|
+
const tierScores = [99, 299, 499, 699, 899, 1000];
|
|
74
|
+
const idx = tierOrder.indexOf(context.parentOrg.constraints.maxTrustTier);
|
|
75
|
+
return tierScores[idx] ?? 1000;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get deployment ceiling (from max allowed tier)
|
|
79
|
+
*/
|
|
80
|
+
function getDeploymentCeiling(context) {
|
|
81
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
82
|
+
const tierScores = [99, 299, 499, 699, 899, 1000];
|
|
83
|
+
const idx = tierOrder.indexOf(context.parentOrg.parentDeployment.maxAllowedTier);
|
|
84
|
+
return tierScores[idx] ?? 1000;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Kernel layer enforcement - validates structure and applies ceiling
|
|
88
|
+
* This layer cannot be bypassed.
|
|
89
|
+
*/
|
|
90
|
+
export function enforceKernelCeiling(rawScore, ceilingContext) {
|
|
91
|
+
// Validate raw score is in valid range
|
|
92
|
+
if (rawScore < 0 || !Number.isFinite(rawScore)) {
|
|
93
|
+
return {
|
|
94
|
+
valid: false,
|
|
95
|
+
rawScore: 0,
|
|
96
|
+
clampedScore: 0,
|
|
97
|
+
ceilingApplied: true,
|
|
98
|
+
ceilingSource: { type: 'context', value: 0, constraint: 'Invalid raw score' },
|
|
99
|
+
reason: 'Raw score must be >= 0 and finite',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Calculate effective ceiling
|
|
103
|
+
const ceilingSource = calculateEffectiveCeiling(ceilingContext);
|
|
104
|
+
// Apply ceiling
|
|
105
|
+
const clampedScore = clampToCeiling(rawScore, ceilingSource.value);
|
|
106
|
+
const ceilingApplied = clampedScore < rawScore;
|
|
107
|
+
return {
|
|
108
|
+
valid: true,
|
|
109
|
+
rawScore,
|
|
110
|
+
clampedScore,
|
|
111
|
+
ceilingApplied,
|
|
112
|
+
ceilingSource,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Policy layer enforcement - applies policy-as-code rules
|
|
117
|
+
*/
|
|
118
|
+
export function enforcePolicyCeiling(clampedScore, tier, policyContext) {
|
|
119
|
+
const appliedPolicies = [];
|
|
120
|
+
// Check required tier if specified
|
|
121
|
+
if (policyContext.requiredTier !== undefined) {
|
|
122
|
+
const tierOrder = [TrustTier.T0, TrustTier.T1, TrustTier.T2, TrustTier.T3, TrustTier.T4, TrustTier.T5];
|
|
123
|
+
const currentIdx = tierOrder.indexOf(tier);
|
|
124
|
+
const requiredIdx = tierOrder.indexOf(policyContext.requiredTier);
|
|
125
|
+
if (currentIdx < requiredIdx) {
|
|
126
|
+
return {
|
|
127
|
+
valid: false,
|
|
128
|
+
appliedPolicies: ['tier-requirement'],
|
|
129
|
+
deniedBy: 'tier-requirement',
|
|
130
|
+
reason: `Required tier ${policyContext.requiredTier}, current tier ${tier}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
appliedPolicies.push('tier-requirement:passed');
|
|
134
|
+
}
|
|
135
|
+
// Policy layer passes
|
|
136
|
+
return {
|
|
137
|
+
valid: true,
|
|
138
|
+
appliedPolicies,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// =============================================================================
|
|
142
|
+
// REGULATORY LAYER (Observability)
|
|
143
|
+
// =============================================================================
|
|
144
|
+
/**
|
|
145
|
+
* Gaming detection thresholds
|
|
146
|
+
*/
|
|
147
|
+
export const GAMING_DETECTION_THRESHOLDS = {
|
|
148
|
+
varianceAnomaly: 100, // Raw - clamped > 100 triggers flag
|
|
149
|
+
frequencyAnomaly: 10, // >10 score changes per minute
|
|
150
|
+
patternWindowMs: 60000, // 1 minute window for pattern detection
|
|
151
|
+
oscillationThreshold: 5, // >5 tier changes in window = oscillation
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Detect gaming indicators
|
|
155
|
+
*/
|
|
156
|
+
export function detectGamingIndicators(rawScore, clampedScore, tier, state) {
|
|
157
|
+
const now = new Date();
|
|
158
|
+
const windowStart = new Date(now.getTime() - GAMING_DETECTION_THRESHOLDS.patternWindowMs);
|
|
159
|
+
// Cleanup old events
|
|
160
|
+
state.recentEvents = state.recentEvents.filter((e) => e.timestamp > windowStart);
|
|
161
|
+
// Add current event
|
|
162
|
+
state.recentEvents.push({ timestamp: now, rawScore, clampedScore, tier });
|
|
163
|
+
// Variance anomaly: large gap between raw and clamped
|
|
164
|
+
const variance = rawScore - clampedScore;
|
|
165
|
+
const varianceAnomaly = variance > GAMING_DETECTION_THRESHOLDS.varianceAnomaly;
|
|
166
|
+
// Frequency anomaly: too many changes in window
|
|
167
|
+
const frequencyAnomaly = state.recentEvents.length > GAMING_DETECTION_THRESHOLDS.frequencyAnomaly;
|
|
168
|
+
// Pattern anomaly: oscillating tiers
|
|
169
|
+
const tiers = state.recentEvents.map((e) => e.tier);
|
|
170
|
+
let tierChanges = 0;
|
|
171
|
+
for (let i = 1; i < tiers.length; i++) {
|
|
172
|
+
if (tiers[i] !== tiers[i - 1]) {
|
|
173
|
+
tierChanges++;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const patternAnomaly = tierChanges > GAMING_DETECTION_THRESHOLDS.oscillationThreshold;
|
|
177
|
+
return { varianceAnomaly, frequencyAnomaly, patternAnomaly };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Determine retention requirements
|
|
181
|
+
*/
|
|
182
|
+
export function getRetentionRequirements(framework, hasAnomaly) {
|
|
183
|
+
// Regulatory framework retention periods
|
|
184
|
+
const retentionPeriods = {
|
|
185
|
+
[RegulatoryFramework.NONE]: hasAnomaly ? 90 : 30,
|
|
186
|
+
[RegulatoryFramework.HIPAA]: 2190, // 6 years
|
|
187
|
+
[RegulatoryFramework.GDPR]: 365, // 1 year minimum
|
|
188
|
+
[RegulatoryFramework.EU_AI_ACT]: 3650, // 10 years for high-risk
|
|
189
|
+
[RegulatoryFramework.SOC2]: 365,
|
|
190
|
+
[RegulatoryFramework.ISO_42001]: 1095, // 3 years
|
|
191
|
+
};
|
|
192
|
+
return {
|
|
193
|
+
required: framework !== RegulatoryFramework.NONE || hasAnomaly,
|
|
194
|
+
retentionDays: retentionPeriods[framework],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// =============================================================================
|
|
198
|
+
// TRUST COMPUTATION EVENT CREATION
|
|
199
|
+
// =============================================================================
|
|
200
|
+
/**
|
|
201
|
+
* Create trust computation event with dual logging
|
|
202
|
+
*/
|
|
203
|
+
export async function createTrustComputationEvent(agentId, rawScore, ceilingContext, policyContext, previousEventHash) {
|
|
204
|
+
const now = new Date();
|
|
205
|
+
// Kernel layer
|
|
206
|
+
const kernelResult = enforceKernelCeiling(rawScore, ceilingContext);
|
|
207
|
+
// Policy layer
|
|
208
|
+
const tier = getTierFromScore(kernelResult.clampedScore);
|
|
209
|
+
const policyResult = enforcePolicyCeiling(kernelResult.clampedScore, tier, policyContext);
|
|
210
|
+
// Determine enforcement layer
|
|
211
|
+
let enforcementLayer;
|
|
212
|
+
if (!kernelResult.valid) {
|
|
213
|
+
enforcementLayer = 'kernel';
|
|
214
|
+
}
|
|
215
|
+
else if (!policyResult.valid) {
|
|
216
|
+
enforcementLayer = 'policy';
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
enforcementLayer = 'regulatory';
|
|
220
|
+
}
|
|
221
|
+
const eventData = {
|
|
222
|
+
eventId: crypto.randomUUID(),
|
|
223
|
+
agentId,
|
|
224
|
+
timestamp: now,
|
|
225
|
+
rawScore: kernelResult.rawScore,
|
|
226
|
+
clampedScore: kernelResult.clampedScore,
|
|
227
|
+
ceilingApplied: kernelResult.ceilingApplied,
|
|
228
|
+
ceilingSource: kernelResult.ceilingSource,
|
|
229
|
+
enforcementLayer,
|
|
230
|
+
kernelValidated: kernelResult.valid,
|
|
231
|
+
policyValidated: policyResult.valid,
|
|
232
|
+
regulatoryLogged: true,
|
|
233
|
+
contextType: ceilingContext.agentContext.contextType,
|
|
234
|
+
contextCeiling: kernelResult.ceilingSource.value,
|
|
235
|
+
effectiveTier: tier,
|
|
236
|
+
previousEventHash,
|
|
237
|
+
};
|
|
238
|
+
const eventHash = await calculateHash(JSON.stringify(eventData));
|
|
239
|
+
const event = {
|
|
240
|
+
...eventData,
|
|
241
|
+
eventHash,
|
|
242
|
+
};
|
|
243
|
+
// Validate with Zod
|
|
244
|
+
const parsed = trustComputationEventSchema.safeParse(event);
|
|
245
|
+
if (!parsed.success) {
|
|
246
|
+
throw new Error(`Invalid trust computation event: ${parsed.error.message}`);
|
|
247
|
+
}
|
|
248
|
+
logger.debug({
|
|
249
|
+
agentId,
|
|
250
|
+
rawScore,
|
|
251
|
+
clampedScore: event.clampedScore,
|
|
252
|
+
tier,
|
|
253
|
+
ceilingApplied: event.ceilingApplied,
|
|
254
|
+
}, 'Trust computation event created');
|
|
255
|
+
return event;
|
|
256
|
+
}
|
|
257
|
+
// =============================================================================
|
|
258
|
+
// REGULATORY AUDIT LEDGER
|
|
259
|
+
// =============================================================================
|
|
260
|
+
/**
|
|
261
|
+
* Create regulatory audit entry
|
|
262
|
+
*/
|
|
263
|
+
export async function createRegulatoryAuditEntry(event, gamingIndicators, framework, ledgerSequence, previousEntryHash) {
|
|
264
|
+
const now = new Date();
|
|
265
|
+
const variance = event.rawScore - event.clampedScore;
|
|
266
|
+
const hasAnomaly = gamingIndicators.varianceAnomaly || gamingIndicators.frequencyAnomaly || gamingIndicators.patternAnomaly;
|
|
267
|
+
// Determine compliance status
|
|
268
|
+
let complianceStatus;
|
|
269
|
+
if (gamingIndicators.patternAnomaly) {
|
|
270
|
+
complianceStatus = 'violation';
|
|
271
|
+
}
|
|
272
|
+
else if (gamingIndicators.varianceAnomaly || gamingIndicators.frequencyAnomaly) {
|
|
273
|
+
complianceStatus = 'warning';
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
complianceStatus = 'compliant';
|
|
277
|
+
}
|
|
278
|
+
const retention = getRetentionRequirements(framework, hasAnomaly);
|
|
279
|
+
const entryData = {
|
|
280
|
+
entryId: crypto.randomUUID(),
|
|
281
|
+
agentId: event.agentId,
|
|
282
|
+
timestamp: now,
|
|
283
|
+
rawScore: event.rawScore,
|
|
284
|
+
clampedScore: event.clampedScore,
|
|
285
|
+
variance,
|
|
286
|
+
varianceAnomaly: gamingIndicators.varianceAnomaly,
|
|
287
|
+
frequencyAnomaly: gamingIndicators.frequencyAnomaly,
|
|
288
|
+
patternAnomaly: gamingIndicators.patternAnomaly,
|
|
289
|
+
regulatoryFramework: framework,
|
|
290
|
+
complianceStatus,
|
|
291
|
+
retentionRequired: retention.required,
|
|
292
|
+
retentionUntil: retention.required
|
|
293
|
+
? new Date(now.getTime() + retention.retentionDays * 24 * 60 * 60 * 1000)
|
|
294
|
+
: undefined,
|
|
295
|
+
ledgerSequence,
|
|
296
|
+
previousEntryHash,
|
|
297
|
+
};
|
|
298
|
+
const entryHash = await calculateHash(JSON.stringify(entryData));
|
|
299
|
+
const entry = {
|
|
300
|
+
...entryData,
|
|
301
|
+
entryHash,
|
|
302
|
+
};
|
|
303
|
+
// Validate with Zod
|
|
304
|
+
const parsed = regulatoryAuditEntrySchema.safeParse(entry);
|
|
305
|
+
if (!parsed.success) {
|
|
306
|
+
throw new Error(`Invalid regulatory audit entry: ${parsed.error.message}`);
|
|
307
|
+
}
|
|
308
|
+
if (complianceStatus !== 'compliant') {
|
|
309
|
+
logger.warn({
|
|
310
|
+
agentId: entry.agentId,
|
|
311
|
+
complianceStatus,
|
|
312
|
+
variance,
|
|
313
|
+
gamingIndicators,
|
|
314
|
+
}, 'Compliance issue detected');
|
|
315
|
+
}
|
|
316
|
+
return entry;
|
|
317
|
+
}
|
|
318
|
+
// =============================================================================
|
|
319
|
+
// CEILING ENFORCEMENT SERVICE
|
|
320
|
+
// =============================================================================
|
|
321
|
+
/**
|
|
322
|
+
* Service for managing ceiling enforcement and regulatory audit
|
|
323
|
+
*/
|
|
324
|
+
export class CeilingEnforcementService {
|
|
325
|
+
events = new Map(); // agentId -> events
|
|
326
|
+
lastEventHash = new Map(); // agentId -> last event hash
|
|
327
|
+
auditLedger = [];
|
|
328
|
+
gamingState = new Map();
|
|
329
|
+
regulatoryFramework;
|
|
330
|
+
constructor(framework = RegulatoryFramework.NONE) {
|
|
331
|
+
this.regulatoryFramework = framework;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Compute trust with ceiling enforcement
|
|
335
|
+
*/
|
|
336
|
+
async computeTrust(agentId, rawScore, ceilingContext, policyContext) {
|
|
337
|
+
// Get or create gaming detection state
|
|
338
|
+
let gamingState = this.gamingState.get(agentId);
|
|
339
|
+
if (!gamingState) {
|
|
340
|
+
gamingState = { recentEvents: [], lastCleanup: new Date() };
|
|
341
|
+
this.gamingState.set(agentId, gamingState);
|
|
342
|
+
}
|
|
343
|
+
// Create trust computation event
|
|
344
|
+
const previousEventHash = this.lastEventHash.get(agentId);
|
|
345
|
+
const event = await createTrustComputationEvent(agentId, rawScore, ceilingContext, policyContext ?? { agentId }, previousEventHash);
|
|
346
|
+
// Store event
|
|
347
|
+
const agentEvents = this.events.get(agentId) ?? [];
|
|
348
|
+
agentEvents.push(event);
|
|
349
|
+
this.events.set(agentId, agentEvents);
|
|
350
|
+
this.lastEventHash.set(agentId, event.eventHash);
|
|
351
|
+
// Detect gaming indicators
|
|
352
|
+
const gamingIndicators = detectGamingIndicators(event.rawScore, event.clampedScore, event.effectiveTier, gamingState);
|
|
353
|
+
// Create audit entry
|
|
354
|
+
const auditEntry = await createRegulatoryAuditEntry(event, gamingIndicators, this.regulatoryFramework, this.auditLedger.length, this.auditLedger.length > 0 ? this.auditLedger[this.auditLedger.length - 1].entryHash : undefined);
|
|
355
|
+
this.auditLedger.push(auditEntry);
|
|
356
|
+
return { event, auditEntry };
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Get computation events for an agent
|
|
360
|
+
*/
|
|
361
|
+
getEvents(agentId) {
|
|
362
|
+
return this.events.get(agentId) ?? [];
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Get audit ledger entries
|
|
366
|
+
*/
|
|
367
|
+
getAuditLedger(filter) {
|
|
368
|
+
let entries = this.auditLedger;
|
|
369
|
+
if (filter?.agentId) {
|
|
370
|
+
entries = entries.filter((e) => e.agentId === filter.agentId);
|
|
371
|
+
}
|
|
372
|
+
if (filter?.complianceStatus) {
|
|
373
|
+
entries = entries.filter((e) => e.complianceStatus === filter.complianceStatus);
|
|
374
|
+
}
|
|
375
|
+
if (filter?.startDate) {
|
|
376
|
+
entries = entries.filter((e) => e.timestamp >= filter.startDate);
|
|
377
|
+
}
|
|
378
|
+
if (filter?.endDate) {
|
|
379
|
+
entries = entries.filter((e) => e.timestamp <= filter.endDate);
|
|
380
|
+
}
|
|
381
|
+
return entries;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Verify audit ledger integrity
|
|
385
|
+
*/
|
|
386
|
+
async verifyLedgerIntegrity() {
|
|
387
|
+
const issues = [];
|
|
388
|
+
for (let i = 0; i < this.auditLedger.length; i++) {
|
|
389
|
+
const entry = this.auditLedger[i];
|
|
390
|
+
// Verify sequence
|
|
391
|
+
if (entry.ledgerSequence !== i) {
|
|
392
|
+
issues.push(`Entry ${i} has wrong sequence ${entry.ledgerSequence}`);
|
|
393
|
+
return { valid: false, brokenAt: i, issues };
|
|
394
|
+
}
|
|
395
|
+
// Verify chain
|
|
396
|
+
if (i > 0) {
|
|
397
|
+
const previousEntry = this.auditLedger[i - 1];
|
|
398
|
+
if (entry.previousEntryHash !== previousEntry.entryHash) {
|
|
399
|
+
issues.push(`Entry ${i} has broken chain link`);
|
|
400
|
+
return { valid: false, brokenAt: i, issues };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// Verify hash
|
|
404
|
+
const { entryHash, ...dataToHash } = entry;
|
|
405
|
+
const expectedHash = await calculateHash(JSON.stringify({ ...dataToHash, entryHash: undefined }));
|
|
406
|
+
// Note: This check would need the original data structure to work correctly
|
|
407
|
+
// Simplified for this implementation
|
|
408
|
+
}
|
|
409
|
+
return { valid: issues.length === 0, issues };
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Get agents with gaming flags
|
|
413
|
+
*/
|
|
414
|
+
getGamingAlerts() {
|
|
415
|
+
const alerts = new Map();
|
|
416
|
+
for (const entry of this.auditLedger) {
|
|
417
|
+
if (entry.complianceStatus !== 'compliant') {
|
|
418
|
+
const current = alerts.get(entry.agentId) ?? { alertCount: 0, latestStatus: 'compliant' };
|
|
419
|
+
current.alertCount++;
|
|
420
|
+
current.latestStatus = entry.complianceStatus;
|
|
421
|
+
alerts.set(entry.agentId, current);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return Array.from(alerts.entries()).map(([agentId, data]) => ({
|
|
425
|
+
agentId,
|
|
426
|
+
...data,
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Get statistics
|
|
431
|
+
*/
|
|
432
|
+
getStats() {
|
|
433
|
+
const complianceBreakdown = {
|
|
434
|
+
compliant: 0,
|
|
435
|
+
warning: 0,
|
|
436
|
+
violation: 0,
|
|
437
|
+
};
|
|
438
|
+
for (const entry of this.auditLedger) {
|
|
439
|
+
complianceBreakdown[entry.complianceStatus]++;
|
|
440
|
+
}
|
|
441
|
+
let totalEvents = 0;
|
|
442
|
+
for (const events of this.events.values()) {
|
|
443
|
+
totalEvents += events.length;
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
totalEvents,
|
|
447
|
+
totalAuditEntries: this.auditLedger.length,
|
|
448
|
+
complianceBreakdown,
|
|
449
|
+
agentsWithAlerts: this.getGamingAlerts().length,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Create a new ceiling enforcement service
|
|
455
|
+
*/
|
|
456
|
+
export function createCeilingEnforcementService(framework = RegulatoryFramework.NONE) {
|
|
457
|
+
return new CeilingEnforcementService(framework);
|
|
458
|
+
}
|
|
459
|
+
// =============================================================================
|
|
460
|
+
// EXPORTS
|
|
461
|
+
// =============================================================================
|
|
462
|
+
export { RegulatoryFramework, } from './types.js';
|
|
463
|
+
//# sourceMappingURL=ceiling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ceiling.js","sourceRoot":"","sources":["../../src/phase6/ceiling.ts"],"names":[],"mappings":"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"}
|