@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.
Files changed (215) hide show
  1. package/README.md +12 -12
  2. package/dist/api/server.d.ts.map +1 -1
  3. package/dist/api/server.js +463 -35
  4. package/dist/api/server.js.map +1 -1
  5. package/dist/arbitration/index.d.ts.map +1 -1
  6. package/dist/arbitration/index.js +8 -6
  7. package/dist/arbitration/index.js.map +1 -1
  8. package/dist/audit/key-manager.d.ts +118 -0
  9. package/dist/audit/key-manager.d.ts.map +1 -0
  10. package/dist/audit/key-manager.js +565 -0
  11. package/dist/audit/key-manager.js.map +1 -0
  12. package/dist/basis/evaluator.d.ts +31 -0
  13. package/dist/basis/evaluator.d.ts.map +1 -1
  14. package/dist/basis/evaluator.js +205 -10
  15. package/dist/basis/evaluator.js.map +1 -1
  16. package/dist/basis/parser.d.ts +210 -210
  17. package/dist/basis/parser.js.map +1 -1
  18. package/dist/carbon-aware/carbon-metrics.d.ts +151 -0
  19. package/dist/carbon-aware/carbon-metrics.d.ts.map +1 -0
  20. package/dist/carbon-aware/carbon-metrics.js +370 -0
  21. package/dist/carbon-aware/carbon-metrics.js.map +1 -0
  22. package/dist/carbon-aware/carbon-router.d.ts +101 -0
  23. package/dist/carbon-aware/carbon-router.d.ts.map +1 -0
  24. package/dist/carbon-aware/carbon-router.js +400 -0
  25. package/dist/carbon-aware/carbon-router.js.map +1 -0
  26. package/dist/chain/index.d.ts +147 -0
  27. package/dist/chain/index.d.ts.map +1 -0
  28. package/dist/chain/index.js +219 -0
  29. package/dist/chain/index.js.map +1 -0
  30. package/dist/cognigate/index.d.ts +33 -4
  31. package/dist/cognigate/index.d.ts.map +1 -1
  32. package/dist/cognigate/index.js +199 -24
  33. package/dist/cognigate/index.js.map +1 -1
  34. package/dist/common/adapters.d.ts +172 -0
  35. package/dist/common/adapters.d.ts.map +1 -0
  36. package/dist/common/adapters.js +329 -0
  37. package/dist/common/adapters.js.map +1 -0
  38. package/dist/common/config.d.ts +168 -163
  39. package/dist/common/config.d.ts.map +1 -1
  40. package/dist/common/config.js +2 -0
  41. package/dist/common/config.js.map +1 -1
  42. package/dist/common/index.d.ts +1 -0
  43. package/dist/common/index.d.ts.map +1 -1
  44. package/dist/common/index.js +1 -0
  45. package/dist/common/index.js.map +1 -1
  46. package/dist/common/types.d.ts +67 -16
  47. package/dist/common/types.d.ts.map +1 -1
  48. package/dist/common/types.js +4 -0
  49. package/dist/common/types.js.map +1 -1
  50. package/dist/enforce/index.d.ts +226 -16
  51. package/dist/enforce/index.d.ts.map +1 -1
  52. package/dist/enforce/index.js +196 -49
  53. package/dist/enforce/index.js.map +1 -1
  54. package/dist/governance/fluid-workflow.d.ts +217 -0
  55. package/dist/governance/fluid-workflow.d.ts.map +1 -0
  56. package/dist/governance/fluid-workflow.js +491 -0
  57. package/dist/governance/fluid-workflow.js.map +1 -0
  58. package/dist/governance/index.d.ts +1 -0
  59. package/dist/governance/index.d.ts.map +1 -1
  60. package/dist/governance/index.js +1 -0
  61. package/dist/governance/index.js.map +1 -1
  62. package/dist/index.d.ts +9 -3
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +14 -3
  65. package/dist/index.js.map +1 -1
  66. package/dist/intent/index.d.ts +127 -10
  67. package/dist/intent/index.d.ts.map +1 -1
  68. package/dist/intent/index.js +121 -16
  69. package/dist/intent/index.js.map +1 -1
  70. package/dist/langchain/executor.d.ts +19 -5
  71. package/dist/langchain/executor.d.ts.map +1 -1
  72. package/dist/langchain/executor.js +287 -36
  73. package/dist/langchain/executor.js.map +1 -1
  74. package/dist/langchain/index.d.ts +2 -1
  75. package/dist/langchain/index.d.ts.map +1 -1
  76. package/dist/langchain/index.js +3 -1
  77. package/dist/langchain/index.js.map +1 -1
  78. package/dist/langchain/tools.d.ts.map +1 -1
  79. package/dist/langchain/tools.js +2 -1
  80. package/dist/langchain/tools.js.map +1 -1
  81. package/dist/langchain/types.d.ts +41 -0
  82. package/dist/langchain/types.d.ts.map +1 -1
  83. package/dist/layers/index.d.ts +1 -1
  84. package/dist/layers/index.d.ts.map +1 -1
  85. package/dist/persistence/file.d.ts +35 -3
  86. package/dist/persistence/file.d.ts.map +1 -1
  87. package/dist/persistence/file.js +138 -11
  88. package/dist/persistence/file.js.map +1 -1
  89. package/dist/persistence/index.d.ts +11 -1
  90. package/dist/persistence/index.d.ts.map +1 -1
  91. package/dist/persistence/index.js +25 -1
  92. package/dist/persistence/index.js.map +1 -1
  93. package/dist/persistence/sqlite.d.ts +135 -0
  94. package/dist/persistence/sqlite.d.ts.map +1 -0
  95. package/dist/persistence/sqlite.js +372 -0
  96. package/dist/persistence/sqlite.js.map +1 -0
  97. package/dist/persistence/supabase.d.ts +93 -0
  98. package/dist/persistence/supabase.d.ts.map +1 -0
  99. package/dist/persistence/supabase.js +219 -0
  100. package/dist/persistence/supabase.js.map +1 -0
  101. package/dist/persistence/types.d.ts +5 -1
  102. package/dist/persistence/types.d.ts.map +1 -1
  103. package/dist/phase6/ceiling.d.ts +177 -0
  104. package/dist/phase6/ceiling.d.ts.map +1 -0
  105. package/dist/phase6/ceiling.js +463 -0
  106. package/dist/phase6/ceiling.js.map +1 -0
  107. package/dist/phase6/context.d.ts +207 -0
  108. package/dist/phase6/context.d.ts.map +1 -0
  109. package/dist/phase6/context.js +603 -0
  110. package/dist/phase6/context.js.map +1 -0
  111. package/dist/phase6/index.d.ts +79 -0
  112. package/dist/phase6/index.d.ts.map +1 -0
  113. package/dist/phase6/index.js +152 -0
  114. package/dist/phase6/index.js.map +1 -0
  115. package/dist/phase6/presets.d.ts +148 -0
  116. package/dist/phase6/presets.d.ts.map +1 -0
  117. package/dist/phase6/presets.js +467 -0
  118. package/dist/phase6/presets.js.map +1 -0
  119. package/dist/phase6/provenance.d.ts +148 -0
  120. package/dist/phase6/provenance.d.ts.map +1 -0
  121. package/dist/phase6/provenance.js +545 -0
  122. package/dist/phase6/provenance.js.map +1 -0
  123. package/dist/phase6/role-gates/index.d.ts +7 -0
  124. package/dist/phase6/role-gates/index.d.ts.map +1 -0
  125. package/dist/phase6/role-gates/index.js +7 -0
  126. package/dist/phase6/role-gates/index.js.map +1 -0
  127. package/dist/phase6/role-gates/kernel.d.ts +84 -0
  128. package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
  129. package/dist/phase6/role-gates/kernel.js +258 -0
  130. package/dist/phase6/role-gates/kernel.js.map +1 -0
  131. package/dist/phase6/role-gates/policy.d.ts +110 -0
  132. package/dist/phase6/role-gates/policy.d.ts.map +1 -0
  133. package/dist/phase6/role-gates/policy.js +157 -0
  134. package/dist/phase6/role-gates/policy.js.map +1 -0
  135. package/dist/phase6/role-gates.d.ts +164 -0
  136. package/dist/phase6/role-gates.d.ts.map +1 -0
  137. package/dist/phase6/role-gates.js +536 -0
  138. package/dist/phase6/role-gates.js.map +1 -0
  139. package/dist/phase6/types.d.ts +1827 -0
  140. package/dist/phase6/types.d.ts.map +1 -0
  141. package/dist/phase6/types.js +450 -0
  142. package/dist/phase6/types.js.map +1 -0
  143. package/dist/phase6/weight-presets/canonical.d.ts +93 -0
  144. package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
  145. package/dist/phase6/weight-presets/canonical.js +122 -0
  146. package/dist/phase6/weight-presets/canonical.js.map +1 -0
  147. package/dist/phase6/weight-presets/deltas.d.ts +144 -0
  148. package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
  149. package/dist/phase6/weight-presets/deltas.js +184 -0
  150. package/dist/phase6/weight-presets/deltas.js.map +1 -0
  151. package/dist/phase6/weight-presets/index.d.ts +8 -0
  152. package/dist/phase6/weight-presets/index.d.ts.map +1 -0
  153. package/dist/phase6/weight-presets/index.js +8 -0
  154. package/dist/phase6/weight-presets/index.js.map +1 -0
  155. package/dist/phase6/weight-presets/merger.d.ts +79 -0
  156. package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
  157. package/dist/phase6/weight-presets/merger.js +161 -0
  158. package/dist/phase6/weight-presets/merger.js.map +1 -0
  159. package/dist/proof/index.d.ts +50 -1
  160. package/dist/proof/index.d.ts.map +1 -1
  161. package/dist/proof/index.js +122 -3
  162. package/dist/proof/index.js.map +1 -1
  163. package/dist/proof/merkle.d.ts +195 -0
  164. package/dist/proof/merkle.d.ts.map +1 -0
  165. package/dist/proof/merkle.js +412 -0
  166. package/dist/proof/merkle.js.map +1 -0
  167. package/dist/proof/zk-proofs.d.ts +218 -0
  168. package/dist/proof/zk-proofs.d.ts.map +1 -0
  169. package/dist/proof/zk-proofs.js +531 -0
  170. package/dist/proof/zk-proofs.js.map +1 -0
  171. package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
  172. package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
  173. package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
  174. package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
  175. package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
  176. package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
  177. package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
  178. package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
  179. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
  180. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
  181. package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
  182. package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
  183. package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
  184. package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
  185. package/dist/trust-engine/context-policy/enforcement.js +104 -0
  186. package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
  187. package/dist/trust-engine/context-policy/factory.d.ts +75 -0
  188. package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
  189. package/dist/trust-engine/context-policy/factory.js +130 -0
  190. package/dist/trust-engine/context-policy/factory.js.map +1 -0
  191. package/dist/trust-engine/context-policy/index.d.ts +6 -0
  192. package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
  193. package/dist/trust-engine/context-policy/index.js +6 -0
  194. package/dist/trust-engine/context-policy/index.js.map +1 -0
  195. package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
  196. package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
  197. package/dist/trust-engine/creation-modifiers/index.js +5 -0
  198. package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
  199. package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
  200. package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
  201. package/dist/trust-engine/creation-modifiers/types.js +166 -0
  202. package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
  203. package/dist/trust-engine/decay-profiles.d.ts +159 -0
  204. package/dist/trust-engine/decay-profiles.d.ts.map +1 -0
  205. package/dist/trust-engine/decay-profiles.js +210 -0
  206. package/dist/trust-engine/decay-profiles.js.map +1 -0
  207. package/dist/trust-engine/index.d.ts +144 -5
  208. package/dist/trust-engine/index.d.ts.map +1 -1
  209. package/dist/trust-engine/index.js +320 -15
  210. package/dist/trust-engine/index.js.map +1 -1
  211. package/dist/trust-engine/phase6-types.d.ts +123 -0
  212. package/dist/trust-engine/phase6-types.d.ts.map +1 -0
  213. package/dist/trust-engine/phase6-types.js +88 -0
  214. package/dist/trust-engine/phase6-types.js.map +1 -0
  215. 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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"}