@vorionsys/atsf-core 0.2.4 → 0.3.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/CHANGELOG.md +1 -0
- package/LICENSE +1 -1
- package/README.md +82 -29
- package/dist/adapters/base-adapter.d.ts +94 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +233 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +83 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +4 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/webhook-handler.d.ts +64 -0
- package/dist/adapters/webhook-handler.d.ts.map +1 -0
- package/dist/adapters/webhook-handler.js +170 -0
- package/dist/adapters/webhook-handler.js.map +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +2 -0
- package/dist/api/server.js.map +1 -1
- package/dist/arbitration/index.d.ts +0 -8
- package/dist/arbitration/index.d.ts.map +1 -1
- package/dist/arbitration/index.js +2 -0
- package/dist/arbitration/index.js.map +1 -1
- package/dist/arbitration/types.d.ts.map +1 -1
- package/dist/arbitration/types.js +2 -8
- package/dist/arbitration/types.js.map +1 -1
- package/dist/basis/evaluator.d.ts +0 -5
- package/dist/basis/evaluator.d.ts.map +1 -1
- package/dist/basis/evaluator.js +2 -0
- package/dist/basis/evaluator.js.map +1 -1
- package/dist/basis/index.d.ts.map +1 -1
- package/dist/basis/index.js +2 -0
- package/dist/basis/index.js.map +1 -1
- package/dist/basis/parser.d.ts +46 -46
- package/dist/basis/parser.d.ts.map +1 -1
- package/dist/basis/parser.js +2 -0
- package/dist/basis/parser.js.map +1 -1
- package/dist/basis/types.d.ts.map +1 -1
- package/dist/basis/types.js +2 -3
- package/dist/basis/types.js.map +1 -1
- package/dist/chain/index.d.ts +0 -8
- package/dist/chain/index.d.ts.map +1 -1
- package/dist/chain/index.js +2 -0
- package/dist/chain/index.js.map +1 -1
- package/dist/cognigate/index.d.ts +0 -8
- package/dist/cognigate/index.d.ts.map +1 -1
- package/dist/cognigate/index.js +2 -0
- package/dist/cognigate/index.js.map +1 -1
- package/dist/common/adapters.d.ts.map +1 -1
- package/dist/common/adapters.js +2 -8
- package/dist/common/adapters.js.map +1 -1
- 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.map +1 -1
- package/dist/common/index.js +2 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/logger.d.ts.map +1 -1
- package/dist/common/logger.js +2 -0
- package/dist/common/logger.js.map +1 -1
- package/dist/common/types.d.ts +8 -8
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/types.js +2 -9
- package/dist/common/types.js.map +1 -1
- package/dist/containment/index.d.ts +0 -8
- package/dist/containment/index.d.ts.map +1 -1
- package/dist/containment/index.js +2 -0
- package/dist/containment/index.js.map +1 -1
- package/dist/containment/types.d.ts.map +1 -1
- package/dist/containment/types.js +2 -8
- package/dist/containment/types.js.map +1 -1
- package/dist/contracts/index.d.ts +0 -8
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js +2 -8
- package/dist/contracts/types.js.map +1 -1
- package/dist/crewai/callback.d.ts +0 -7
- package/dist/crewai/callback.d.ts.map +1 -1
- package/dist/crewai/callback.js +2 -0
- package/dist/crewai/callback.js.map +1 -1
- package/dist/crewai/executor.d.ts +0 -7
- package/dist/crewai/executor.d.ts.map +1 -1
- package/dist/crewai/executor.js +2 -0
- package/dist/crewai/executor.js.map +1 -1
- package/dist/crewai/index.d.ts.map +1 -1
- package/dist/crewai/index.js +2 -0
- package/dist/crewai/index.js.map +1 -1
- package/dist/crewai/tools.d.ts.map +1 -1
- package/dist/crewai/tools.js +2 -7
- package/dist/crewai/tools.js.map +1 -1
- package/dist/crewai/types.d.ts.map +1 -1
- package/dist/crewai/types.js +2 -7
- package/dist/crewai/types.js.map +1 -1
- package/dist/enforce/index.d.ts +0 -15
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +3 -1
- package/dist/enforce/index.js.map +1 -1
- package/dist/enforce/trust-aware-enforcement-service.d.ts +0 -15
- package/dist/enforce/trust-aware-enforcement-service.d.ts.map +1 -1
- package/dist/enforce/trust-aware-enforcement-service.js +2 -0
- package/dist/enforce/trust-aware-enforcement-service.js.map +1 -1
- package/dist/governance/fluid-workflow.d.ts +0 -8
- package/dist/governance/fluid-workflow.d.ts.map +1 -1
- package/dist/governance/fluid-workflow.js +2 -0
- package/dist/governance/fluid-workflow.js.map +1 -1
- package/dist/governance/index.d.ts +0 -8
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/proof-bridge.d.ts.map +1 -1
- package/dist/governance/proof-bridge.js +2 -12
- package/dist/governance/proof-bridge.js.map +1 -1
- package/dist/governance/types.d.ts.map +1 -1
- package/dist/governance/types.js +2 -8
- package/dist/governance/types.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +0 -13
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +4 -2
- package/dist/intent/index.js.map +1 -1
- package/dist/intent/persistent-intent-service.d.ts +0 -15
- package/dist/intent/persistent-intent-service.d.ts.map +1 -1
- package/dist/intent/persistent-intent-service.js +2 -0
- package/dist/intent/persistent-intent-service.js.map +1 -1
- package/dist/intent/supabase-intent-repository.d.ts +0 -17
- package/dist/intent/supabase-intent-repository.d.ts.map +1 -1
- package/dist/intent/supabase-intent-repository.js +2 -0
- package/dist/intent/supabase-intent-repository.js.map +1 -1
- package/dist/intent-gateway/index.d.ts +499 -0
- package/dist/intent-gateway/index.d.ts.map +1 -0
- package/dist/intent-gateway/index.js +1332 -0
- package/dist/intent-gateway/index.js.map +1 -0
- package/dist/langchain/callback.d.ts +0 -7
- package/dist/langchain/callback.d.ts.map +1 -1
- package/dist/langchain/callback.js +2 -0
- package/dist/langchain/callback.js.map +1 -1
- package/dist/langchain/executor.d.ts +0 -7
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +2 -0
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts.map +1 -1
- package/dist/langchain/index.js +2 -0
- package/dist/langchain/index.js.map +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +2 -7
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/langchain/types.js +2 -7
- package/dist/langchain/types.js.map +1 -1
- package/dist/layers/implementations/L0-request-format.d.ts.map +1 -1
- package/dist/layers/implementations/L0-request-format.js +2 -0
- package/dist/layers/implementations/L0-request-format.js.map +1 -1
- package/dist/layers/implementations/L1-input-size.d.ts.map +1 -1
- package/dist/layers/implementations/L1-input-size.js +2 -0
- package/dist/layers/implementations/L1-input-size.js.map +1 -1
- package/dist/layers/implementations/L2-charset-sanitizer.d.ts.map +1 -1
- package/dist/layers/implementations/L2-charset-sanitizer.js +2 -0
- package/dist/layers/implementations/L2-charset-sanitizer.js.map +1 -1
- package/dist/layers/implementations/L3-schema-conformance.d.ts.map +1 -1
- package/dist/layers/implementations/L3-schema-conformance.js +2 -0
- package/dist/layers/implementations/L3-schema-conformance.js.map +1 -1
- package/dist/layers/implementations/L4-injection-detector.d.ts.map +1 -1
- package/dist/layers/implementations/L4-injection-detector.js +2 -0
- package/dist/layers/implementations/L4-injection-detector.js.map +1 -1
- package/dist/layers/implementations/L5-rate-limiter.d.ts.map +1 -1
- package/dist/layers/implementations/L5-rate-limiter.js +2 -0
- package/dist/layers/implementations/L5-rate-limiter.js.map +1 -1
- package/dist/layers/implementations/index.d.ts.map +1 -1
- package/dist/layers/implementations/index.js +2 -0
- package/dist/layers/implementations/index.js.map +1 -1
- package/dist/layers/index.d.ts +0 -8
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/layers/index.js +2 -0
- package/dist/layers/index.js.map +1 -1
- package/dist/layers/types.d.ts.map +1 -1
- package/dist/layers/types.js +2 -8
- package/dist/layers/types.js.map +1 -1
- package/dist/paramesphere/activation-collector.d.ts +128 -0
- package/dist/paramesphere/activation-collector.d.ts.map +1 -0
- package/dist/paramesphere/activation-collector.js +260 -0
- package/dist/paramesphere/activation-collector.js.map +1 -0
- package/dist/paramesphere/cognitive-envelope.d.ts +117 -0
- package/dist/paramesphere/cognitive-envelope.d.ts.map +1 -0
- package/dist/paramesphere/cognitive-envelope.js +220 -0
- package/dist/paramesphere/cognitive-envelope.js.map +1 -0
- package/dist/paramesphere/envelope-integration.d.ts +60 -0
- package/dist/paramesphere/envelope-integration.d.ts.map +1 -0
- package/dist/paramesphere/envelope-integration.js +114 -0
- package/dist/paramesphere/envelope-integration.js.map +1 -0
- package/dist/paramesphere/fingerprint-monitor.d.ts +143 -0
- package/dist/paramesphere/fingerprint-monitor.d.ts.map +1 -0
- package/dist/paramesphere/fingerprint-monitor.js +240 -0
- package/dist/paramesphere/fingerprint-monitor.js.map +1 -0
- package/dist/paramesphere/fingerprint-store.d.ts +85 -0
- package/dist/paramesphere/fingerprint-store.d.ts.map +1 -0
- package/dist/paramesphere/fingerprint-store.js +68 -0
- package/dist/paramesphere/fingerprint-store.js.map +1 -0
- package/dist/paramesphere/index.d.ts +22 -0
- package/dist/paramesphere/index.d.ts.map +1 -0
- package/dist/paramesphere/index.js +19 -0
- package/dist/paramesphere/index.js.map +1 -0
- package/dist/paramesphere/monitor-integration.d.ts +47 -0
- package/dist/paramesphere/monitor-integration.d.ts.map +1 -0
- package/dist/paramesphere/monitor-integration.js +102 -0
- package/dist/paramesphere/monitor-integration.js.map +1 -0
- package/dist/paramesphere/paramesphere-engine.d.ts +126 -0
- package/dist/paramesphere/paramesphere-engine.d.ts.map +1 -0
- package/dist/paramesphere/paramesphere-engine.js +610 -0
- package/dist/paramesphere/paramesphere-engine.js.map +1 -0
- package/dist/paramesphere/types.d.ts +191 -0
- package/dist/paramesphere/types.d.ts.map +1 -0
- package/dist/paramesphere/types.js +9 -0
- package/dist/paramesphere/types.js.map +1 -0
- package/dist/persistence/file.d.ts +0 -7
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +2 -0
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +2 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/memory.d.ts.map +1 -1
- package/dist/persistence/memory.js +2 -7
- package/dist/persistence/memory.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +0 -8
- package/dist/persistence/sqlite.d.ts.map +1 -1
- package/dist/persistence/sqlite.js +3 -1
- package/dist/persistence/sqlite.js.map +1 -1
- package/dist/persistence/supabase.d.ts.map +1 -1
- package/dist/persistence/supabase.js +3 -8
- package/dist/persistence/supabase.js.map +1 -1
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/persistence/types.js +2 -7
- package/dist/persistence/types.js.map +1 -1
- package/dist/phase6/ceiling.d.ts +0 -16
- package/dist/phase6/ceiling.d.ts.map +1 -1
- package/dist/phase6/ceiling.js +2 -0
- package/dist/phase6/ceiling.js.map +1 -1
- package/dist/phase6/context.d.ts +0 -17
- package/dist/phase6/context.d.ts.map +1 -1
- package/dist/phase6/context.js +2 -0
- package/dist/phase6/context.js.map +1 -1
- package/dist/phase6/index.d.ts.map +1 -1
- package/dist/phase6/index.js +2 -0
- package/dist/phase6/index.js.map +1 -1
- package/dist/phase6/presets.d.ts +0 -16
- package/dist/phase6/presets.d.ts.map +1 -1
- package/dist/phase6/presets.js +5 -3
- package/dist/phase6/presets.js.map +1 -1
- package/dist/phase6/provenance.d.ts +7 -16
- package/dist/phase6/provenance.d.ts.map +1 -1
- package/dist/phase6/provenance.js +18 -10
- package/dist/phase6/provenance.js.map +1 -1
- package/dist/phase6/role-gates/index.d.ts.map +1 -1
- package/dist/phase6/role-gates/index.js +2 -0
- package/dist/phase6/role-gates/index.js.map +1 -1
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -1
- package/dist/phase6/role-gates/kernel.js +2 -0
- package/dist/phase6/role-gates/kernel.js.map +1 -1
- package/dist/phase6/role-gates/policy.d.ts.map +1 -1
- package/dist/phase6/role-gates/policy.js +2 -11
- package/dist/phase6/role-gates/policy.js.map +1 -1
- package/dist/phase6/role-gates.d.ts +0 -16
- package/dist/phase6/role-gates.d.ts.map +1 -1
- package/dist/phase6/role-gates.js +2 -0
- package/dist/phase6/role-gates.js.map +1 -1
- package/dist/phase6/types.d.ts +217 -188
- package/dist/phase6/types.d.ts.map +1 -1
- package/dist/phase6/types.js +50 -1
- package/dist/phase6/types.js.map +1 -1
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -1
- package/dist/phase6/weight-presets/canonical.js +2 -0
- package/dist/phase6/weight-presets/canonical.js.map +1 -1
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -1
- package/dist/phase6/weight-presets/deltas.js +2 -10
- package/dist/phase6/weight-presets/deltas.js.map +1 -1
- package/dist/phase6/weight-presets/index.d.ts.map +1 -1
- package/dist/phase6/weight-presets/index.js +2 -0
- package/dist/phase6/weight-presets/index.js.map +1 -1
- package/dist/phase6/weight-presets/merger.d.ts +0 -10
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -1
- package/dist/phase6/weight-presets/merger.js +2 -0
- package/dist/phase6/weight-presets/merger.js.map +1 -1
- package/dist/proof/index.d.ts +3 -10
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +27 -9
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +0 -16
- package/dist/proof/merkle.d.ts.map +1 -1
- package/dist/proof/merkle.js +2 -0
- package/dist/proof/merkle.js.map +1 -1
- package/dist/proof/zk-proofs.d.ts +0 -18
- package/dist/proof/zk-proofs.d.ts.map +1 -1
- package/dist/proof/zk-proofs.js +2 -0
- package/dist/proof/zk-proofs.js.map +1 -1
- package/dist/provenance/index.d.ts +0 -8
- package/dist/provenance/index.d.ts.map +1 -1
- package/dist/provenance/index.js +2 -0
- package/dist/provenance/index.js.map +1 -1
- package/dist/provenance/types.d.ts.map +1 -1
- package/dist/provenance/types.js +2 -8
- package/dist/provenance/types.js.map +1 -1
- package/dist/sandbox-training/challenges.d.ts.map +1 -1
- package/dist/sandbox-training/challenges.js +2 -8
- package/dist/sandbox-training/challenges.js.map +1 -1
- package/dist/sandbox-training/graduation.d.ts.map +1 -1
- package/dist/sandbox-training/graduation.js +2 -8
- package/dist/sandbox-training/graduation.js.map +1 -1
- package/dist/sandbox-training/index.d.ts.map +1 -1
- package/dist/sandbox-training/index.js +2 -0
- package/dist/sandbox-training/index.js.map +1 -1
- package/dist/sandbox-training/promotion-service.d.ts.map +1 -1
- package/dist/sandbox-training/promotion-service.js +2 -11
- package/dist/sandbox-training/promotion-service.js.map +1 -1
- package/dist/sandbox-training/runner.d.ts.map +1 -1
- package/dist/sandbox-training/runner.js +2 -8
- package/dist/sandbox-training/runner.js.map +1 -1
- package/dist/sandbox-training/scorer.d.ts.map +1 -1
- package/dist/sandbox-training/scorer.js +2 -8
- package/dist/sandbox-training/scorer.js.map +1 -1
- package/dist/sandbox-training/types.d.ts.map +1 -1
- package/dist/sandbox-training/types.js +2 -8
- package/dist/sandbox-training/types.js.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +0 -8
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/audit.js +2 -8
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/index.js +2 -0
- package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/kernel.js +2 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -1
- package/dist/trust-engine/context-policy/enforcement.d.ts +0 -9
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -1
- package/dist/trust-engine/context-policy/enforcement.js +2 -9
- package/dist/trust-engine/context-policy/enforcement.js.map +1 -1
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -1
- package/dist/trust-engine/context-policy/factory.js +2 -0
- package/dist/trust-engine/context-policy/factory.js.map +1 -1
- package/dist/trust-engine/context-policy/index.d.ts.map +1 -1
- package/dist/trust-engine/context-policy/index.js +2 -0
- package/dist/trust-engine/context-policy/index.js.map +1 -1
- package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -1
- package/dist/trust-engine/creation-modifiers/index.js +2 -0
- package/dist/trust-engine/creation-modifiers/index.js.map +1 -1
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -1
- package/dist/trust-engine/creation-modifiers/types.js +2 -0
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -1
- package/dist/trust-engine/decay-profiles.d.ts +20 -11
- package/dist/trust-engine/decay-profiles.d.ts.map +1 -1
- package/dist/trust-engine/decay-profiles.js +15 -23
- package/dist/trust-engine/decay-profiles.js.map +1 -1
- package/dist/trust-engine/index.d.ts +419 -80
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +1048 -186
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +3 -13
- package/dist/trust-engine/phase6-types.d.ts.map +1 -1
- package/dist/trust-engine/phase6-types.js +5 -13
- package/dist/trust-engine/phase6-types.js.map +1 -1
- package/dist/trust-engine/trust-verifier.d.ts +121 -0
- package/dist/trust-engine/trust-verifier.d.ts.map +1 -0
- package/dist/trust-engine/trust-verifier.js +226 -0
- package/dist/trust-engine/trust-verifier.js.map +1 -0
- package/package.json +140 -135
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cognitive Envelope — Hyper-Rectangle Breach Detection
|
|
3
|
+
*
|
|
4
|
+
* Implements the patent-specified 6-dimensional cognitive envelope that
|
|
5
|
+
* monitors an AI model's characteristic vector for anomalous deviations.
|
|
6
|
+
*
|
|
7
|
+
* The envelope E is defined as the Cartesian product of per-dimension
|
|
8
|
+
* intervals [mu_d − k·sigma_d, mu_d + k·sigma_d] for d = 1..D.
|
|
9
|
+
* With k = 3 (99.7% coverage per dimension):
|
|
10
|
+
* For a single sample, the any-dimension FP rate at k=3 is
|
|
11
|
+
* 1 - (0.997)^6 ≈ 1.79%. Requiring 3 consecutive breaches gives
|
|
12
|
+
* ~(0.018)^3 ≈ 5.8e-6 effective FP rate. Per-dimension: (0.003)^3 ≈ 2.7e-8.
|
|
13
|
+
*
|
|
14
|
+
* Characteristic vector dimensions (defaults):
|
|
15
|
+
* 0 — Weight Geometry (Frobenius norm or spectral norm)
|
|
16
|
+
* 1 — Activation Clustering (silhouette coefficient)
|
|
17
|
+
* 2 — Embedding Drift (cosine distance from baseline)
|
|
18
|
+
* 3 — Attention Entropy (average attention entropy)
|
|
19
|
+
* 4 — Gradient Norm (global gradient L2 norm)
|
|
20
|
+
* 5 — Effective Dimensionality (participation ratio)
|
|
21
|
+
*
|
|
22
|
+
* ## Breach Counter Lifecycle
|
|
23
|
+
*
|
|
24
|
+
* The breach counter is the central state variable that drives trust
|
|
25
|
+
* multiplier decisions. Its lifecycle works as follows:
|
|
26
|
+
*
|
|
27
|
+
* 1. **Increment on breach** — Each time `checkBreach()` detects any
|
|
28
|
+
* dimension outside the envelope bounds, the counter increments by 1.
|
|
29
|
+
*
|
|
30
|
+
* 2. **Decrement on clean check** — Each clean (no-breach) check
|
|
31
|
+
* decrements the counter by 1, down to a floor of 0. This means
|
|
32
|
+
* recovery is linear: an agent must pass as many clean checks as it
|
|
33
|
+
* accumulated breaches.
|
|
34
|
+
*
|
|
35
|
+
* 3. **Clamped by `maxBreachCounter`** — The counter is clamped to
|
|
36
|
+
* `maxBreachCounter` (default: 100) to prevent unbounded growth
|
|
37
|
+
* during sustained attacks. Without this cap, a prolonged attack
|
|
38
|
+
* (e.g., thousands of consecutive breaches) would require an equally
|
|
39
|
+
* long run of clean checks to recover — effectively locking the agent
|
|
40
|
+
* into a breached state forever. The cap ensures recovery time is
|
|
41
|
+
* bounded: at most `maxBreachCounter` clean checks to fully recover.
|
|
42
|
+
*
|
|
43
|
+
* 4. **`reset()` as the escape valve** — In cases where an operator
|
|
44
|
+
* determines the breach state is stale or the underlying cause has
|
|
45
|
+
* been resolved (e.g., a model was rolled back to a known-good
|
|
46
|
+
* checkpoint), `reset()` zeroes the counter and the rate-limit
|
|
47
|
+
* timestamp without clearing the baseline. This allows immediate
|
|
48
|
+
* re-evaluation against the same envelope bounds.
|
|
49
|
+
*
|
|
50
|
+
* ### Trust multiplier mapping
|
|
51
|
+
*
|
|
52
|
+
* - `counter == 0` → 1.0 (normal)
|
|
53
|
+
* - `0 < counter < breachThreshold` → 0.9 (approaching breach)
|
|
54
|
+
* - `counter >= breachThreshold` → 0.7 (full breach)
|
|
55
|
+
*
|
|
56
|
+
* @packageDocumentation
|
|
57
|
+
*/
|
|
58
|
+
import type { EnvelopeConfig, BreachResult, EnvelopeState } from './types.js';
|
|
59
|
+
export declare class CognitiveEnvelope {
|
|
60
|
+
private readonly config;
|
|
61
|
+
private mu;
|
|
62
|
+
private sigma;
|
|
63
|
+
private lowerBounds;
|
|
64
|
+
private upperBounds;
|
|
65
|
+
private baselined;
|
|
66
|
+
private breachCounter;
|
|
67
|
+
private lastCheckMs;
|
|
68
|
+
constructor(config?: Partial<EnvelopeConfig>);
|
|
69
|
+
/**
|
|
70
|
+
* Establish the envelope baseline from an observation period.
|
|
71
|
+
*
|
|
72
|
+
* @param measurements Array of observation vectors. Each inner array has
|
|
73
|
+
* length equal to `config.dimensions`. At least 2
|
|
74
|
+
* observations are required to compute sigma.
|
|
75
|
+
*/
|
|
76
|
+
baselineFromObservations(measurements: number[][]): void;
|
|
77
|
+
/**
|
|
78
|
+
* Check a current characteristic vector against the envelope.
|
|
79
|
+
*
|
|
80
|
+
* Breach counter increments on any-dimension breach and decrements
|
|
81
|
+
* (towards 0) on a clean check. Trust multiplier is determined by
|
|
82
|
+
* the counter value relative to the threshold.
|
|
83
|
+
*/
|
|
84
|
+
checkBreach(currentChars: number[]): BreachResult;
|
|
85
|
+
/**
|
|
86
|
+
* Get the current internal state of the envelope.
|
|
87
|
+
*/
|
|
88
|
+
getState(): EnvelopeState;
|
|
89
|
+
/**
|
|
90
|
+
* Reset the breach counter to zero without clearing the baseline.
|
|
91
|
+
*
|
|
92
|
+
* This is the manual escape valve for operators. After a sustained attack
|
|
93
|
+
* drives the breach counter to its maximum, natural recovery requires up
|
|
94
|
+
* to `maxBreachCounter` consecutive clean checks. When the root cause has
|
|
95
|
+
* been addressed (e.g., a model rollback or config correction), calling
|
|
96
|
+
* `reset()` zeroes the counter and the rate-limit timestamp so the next
|
|
97
|
+
* `checkBreach()` evaluates immediately with a clean slate.
|
|
98
|
+
*
|
|
99
|
+
* The baseline (mu, sigma, bounds) is preserved — only the breach
|
|
100
|
+
* tracking state is cleared. To fully re-baseline, use
|
|
101
|
+
* {@link clearBaseline} followed by {@link baselineFromObservations}.
|
|
102
|
+
*/
|
|
103
|
+
reset(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Fully clear the baseline and all state.
|
|
106
|
+
*/
|
|
107
|
+
clearBaseline(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Compute the trust multiplier based on breach counter.
|
|
110
|
+
*
|
|
111
|
+
* - counter == 0 → 1.0 (normal)
|
|
112
|
+
* - 0 < counter < threshold → 0.9 (approaching breach)
|
|
113
|
+
* - counter >= threshold → 0.7 (full breach)
|
|
114
|
+
*/
|
|
115
|
+
private currentTrustMultiplier;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=cognitive-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitive-envelope.d.ts","sourceRoot":"","sources":["../../src/paramesphere/cognitive-envelope.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkB9E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAGxC,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAK;gBAEZ,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAiB5C;;;;;;OAMG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAuDxD;;;;;;OAMG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,YAAY;IAgEjD;;OAEG;IACH,QAAQ,IAAI,aAAa;IAYzB;;;;;;;;;;;;;OAaG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,aAAa,IAAI,IAAI;IAcrB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2024-2026 Vorion LLC
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Defaults
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const DEFAULT_ENVELOPE_CONFIG = {
|
|
7
|
+
k: 3.0,
|
|
8
|
+
breachThreshold: 3,
|
|
9
|
+
dimensions: 6,
|
|
10
|
+
measurementIntervalMs: 300_000, // 5 minutes
|
|
11
|
+
maxBreachCounter: 100, // caps recovery cost; see module docstring § Breach Counter Lifecycle
|
|
12
|
+
};
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// CognitiveEnvelope
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
export class CognitiveEnvelope {
|
|
17
|
+
config;
|
|
18
|
+
// Baseline statistics
|
|
19
|
+
mu = [];
|
|
20
|
+
sigma = [];
|
|
21
|
+
lowerBounds = [];
|
|
22
|
+
upperBounds = [];
|
|
23
|
+
baselined = false;
|
|
24
|
+
// Breach tracking
|
|
25
|
+
breachCounter = 0;
|
|
26
|
+
lastCheckMs = 0;
|
|
27
|
+
constructor(config) {
|
|
28
|
+
this.config = { ...DEFAULT_ENVELOPE_CONFIG, ...config };
|
|
29
|
+
if (this.config.dimensions < 1) {
|
|
30
|
+
throw new Error('dimensions must be >= 1');
|
|
31
|
+
}
|
|
32
|
+
if (this.config.k <= 0) {
|
|
33
|
+
throw new Error('k must be > 0');
|
|
34
|
+
}
|
|
35
|
+
if (this.config.breachThreshold < 1) {
|
|
36
|
+
throw new Error('breachThreshold must be >= 1');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// -----------------------------------------------------------------------
|
|
40
|
+
// Public API
|
|
41
|
+
// -----------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Establish the envelope baseline from an observation period.
|
|
44
|
+
*
|
|
45
|
+
* @param measurements Array of observation vectors. Each inner array has
|
|
46
|
+
* length equal to `config.dimensions`. At least 2
|
|
47
|
+
* observations are required to compute sigma.
|
|
48
|
+
*/
|
|
49
|
+
baselineFromObservations(measurements) {
|
|
50
|
+
const D = this.config.dimensions;
|
|
51
|
+
if (measurements.length < 2) {
|
|
52
|
+
throw new Error('At least 2 observations required to establish a baseline');
|
|
53
|
+
}
|
|
54
|
+
for (const m of measurements) {
|
|
55
|
+
if (m.length !== D) {
|
|
56
|
+
throw new Error(`Measurement vector length ${m.length} does not match configured dimensions ${D}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const N = measurements.length;
|
|
60
|
+
this.mu = new Array(D).fill(0);
|
|
61
|
+
this.sigma = new Array(D).fill(0);
|
|
62
|
+
// Compute mean
|
|
63
|
+
for (const m of measurements) {
|
|
64
|
+
for (let d = 0; d < D; d++) {
|
|
65
|
+
this.mu[d] += m[d];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (let d = 0; d < D; d++) {
|
|
69
|
+
this.mu[d] /= N;
|
|
70
|
+
}
|
|
71
|
+
// Compute sample standard deviation
|
|
72
|
+
for (const m of measurements) {
|
|
73
|
+
for (let d = 0; d < D; d++) {
|
|
74
|
+
const diff = m[d] - this.mu[d];
|
|
75
|
+
this.sigma[d] += diff * diff;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (let d = 0; d < D; d++) {
|
|
79
|
+
this.sigma[d] = Math.sqrt(this.sigma[d] / (N - 1));
|
|
80
|
+
// Guard against zero variance: use a tiny epsilon
|
|
81
|
+
if (this.sigma[d] < 1e-15) {
|
|
82
|
+
this.sigma[d] = 1e-15;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Compute bounds
|
|
86
|
+
this.lowerBounds = new Array(D);
|
|
87
|
+
this.upperBounds = new Array(D);
|
|
88
|
+
for (let d = 0; d < D; d++) {
|
|
89
|
+
this.lowerBounds[d] = this.mu[d] - this.config.k * this.sigma[d];
|
|
90
|
+
this.upperBounds[d] = this.mu[d] + this.config.k * this.sigma[d];
|
|
91
|
+
}
|
|
92
|
+
this.baselined = true;
|
|
93
|
+
this.breachCounter = 0;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check a current characteristic vector against the envelope.
|
|
97
|
+
*
|
|
98
|
+
* Breach counter increments on any-dimension breach and decrements
|
|
99
|
+
* (towards 0) on a clean check. Trust multiplier is determined by
|
|
100
|
+
* the counter value relative to the threshold.
|
|
101
|
+
*/
|
|
102
|
+
checkBreach(currentChars) {
|
|
103
|
+
if (!this.baselined) {
|
|
104
|
+
throw new Error('Envelope not baselined — call baselineFromObservations() first');
|
|
105
|
+
}
|
|
106
|
+
const D = this.config.dimensions;
|
|
107
|
+
if (currentChars.length !== D) {
|
|
108
|
+
throw new Error(`Characteristic vector length ${currentChars.length} does not match dimensions ${D}`);
|
|
109
|
+
}
|
|
110
|
+
// Rate-limit checks
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
if (this.lastCheckMs > 0 && now - this.lastCheckMs < this.config.measurementIntervalMs) {
|
|
113
|
+
// Return a clean result without modifying state
|
|
114
|
+
return {
|
|
115
|
+
breached: this.breachCounter >= this.config.breachThreshold,
|
|
116
|
+
trustMultiplier: this.currentTrustMultiplier(),
|
|
117
|
+
breachCounter: this.breachCounter,
|
|
118
|
+
dimensionBreaches: new Array(D).fill(false),
|
|
119
|
+
maxDeviation: 0,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
this.lastCheckMs = now;
|
|
123
|
+
// Per-dimension breach check
|
|
124
|
+
const dimensionBreaches = new Array(D);
|
|
125
|
+
let anyBreach = false;
|
|
126
|
+
let maxDeviation = 0;
|
|
127
|
+
for (let d = 0; d < D; d++) {
|
|
128
|
+
const deviation = Math.abs(currentChars[d] - this.mu[d]) / this.sigma[d];
|
|
129
|
+
if (deviation > maxDeviation)
|
|
130
|
+
maxDeviation = deviation;
|
|
131
|
+
const outside = currentChars[d] < this.lowerBounds[d] || currentChars[d] > this.upperBounds[d];
|
|
132
|
+
dimensionBreaches[d] = outside;
|
|
133
|
+
if (outside)
|
|
134
|
+
anyBreach = true;
|
|
135
|
+
}
|
|
136
|
+
// Update breach counter
|
|
137
|
+
if (anyBreach) {
|
|
138
|
+
this.breachCounter++;
|
|
139
|
+
// Clamp to maxBreachCounter to cap recovery cost from sustained attacks
|
|
140
|
+
if (this.breachCounter > this.config.maxBreachCounter) {
|
|
141
|
+
this.breachCounter = this.config.maxBreachCounter;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Decrement towards zero on clean check
|
|
146
|
+
if (this.breachCounter > 0)
|
|
147
|
+
this.breachCounter--;
|
|
148
|
+
}
|
|
149
|
+
const breached = this.breachCounter >= this.config.breachThreshold;
|
|
150
|
+
return {
|
|
151
|
+
breached,
|
|
152
|
+
trustMultiplier: this.currentTrustMultiplier(),
|
|
153
|
+
breachCounter: this.breachCounter,
|
|
154
|
+
dimensionBreaches,
|
|
155
|
+
maxDeviation,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get the current internal state of the envelope.
|
|
160
|
+
*/
|
|
161
|
+
getState() {
|
|
162
|
+
return {
|
|
163
|
+
baselined: this.baselined,
|
|
164
|
+
mu: [...this.mu],
|
|
165
|
+
sigma: [...this.sigma],
|
|
166
|
+
breachCounter: this.breachCounter,
|
|
167
|
+
lastCheckMs: this.lastCheckMs,
|
|
168
|
+
lowerBounds: [...this.lowerBounds],
|
|
169
|
+
upperBounds: [...this.upperBounds],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Reset the breach counter to zero without clearing the baseline.
|
|
174
|
+
*
|
|
175
|
+
* This is the manual escape valve for operators. After a sustained attack
|
|
176
|
+
* drives the breach counter to its maximum, natural recovery requires up
|
|
177
|
+
* to `maxBreachCounter` consecutive clean checks. When the root cause has
|
|
178
|
+
* been addressed (e.g., a model rollback or config correction), calling
|
|
179
|
+
* `reset()` zeroes the counter and the rate-limit timestamp so the next
|
|
180
|
+
* `checkBreach()` evaluates immediately with a clean slate.
|
|
181
|
+
*
|
|
182
|
+
* The baseline (mu, sigma, bounds) is preserved — only the breach
|
|
183
|
+
* tracking state is cleared. To fully re-baseline, use
|
|
184
|
+
* {@link clearBaseline} followed by {@link baselineFromObservations}.
|
|
185
|
+
*/
|
|
186
|
+
reset() {
|
|
187
|
+
this.breachCounter = 0;
|
|
188
|
+
this.lastCheckMs = 0;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Fully clear the baseline and all state.
|
|
192
|
+
*/
|
|
193
|
+
clearBaseline() {
|
|
194
|
+
this.mu = [];
|
|
195
|
+
this.sigma = [];
|
|
196
|
+
this.lowerBounds = [];
|
|
197
|
+
this.upperBounds = [];
|
|
198
|
+
this.baselined = false;
|
|
199
|
+
this.breachCounter = 0;
|
|
200
|
+
this.lastCheckMs = 0;
|
|
201
|
+
}
|
|
202
|
+
// -----------------------------------------------------------------------
|
|
203
|
+
// Internal
|
|
204
|
+
// -----------------------------------------------------------------------
|
|
205
|
+
/**
|
|
206
|
+
* Compute the trust multiplier based on breach counter.
|
|
207
|
+
*
|
|
208
|
+
* - counter == 0 → 1.0 (normal)
|
|
209
|
+
* - 0 < counter < threshold → 0.9 (approaching breach)
|
|
210
|
+
* - counter >= threshold → 0.7 (full breach)
|
|
211
|
+
*/
|
|
212
|
+
currentTrustMultiplier() {
|
|
213
|
+
if (this.breachCounter <= 0)
|
|
214
|
+
return 1.0;
|
|
215
|
+
if (this.breachCounter < this.config.breachThreshold)
|
|
216
|
+
return 0.9;
|
|
217
|
+
return 0.7;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=cognitive-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitive-envelope.js","sourceRoot":"","sources":["../../src/paramesphere/cognitive-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Envelope Integration — Connects CognitiveEnvelope to TrustEngine.
|
|
3
|
+
*
|
|
4
|
+
* Thin adapter that periodically runs the envelope's `checkBreach()` against
|
|
5
|
+
* a caller-supplied dimension vector and, when a breach is detected, records
|
|
6
|
+
* a trust signal via `TrustEngine.recordSignal()`.
|
|
7
|
+
*
|
|
8
|
+
* The monitor runs on an interval (default 60 s) and is fully decoupled:
|
|
9
|
+
* the envelope decides whether there is a breach, and this module just
|
|
10
|
+
* translates that into trust signals. Breach history is kept for audit.
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import type { CognitiveEnvelope } from './cognitive-envelope.js';
|
|
15
|
+
import type { BreachResult } from './types.js';
|
|
16
|
+
import type { TrustEngine } from '../trust-engine/index.js';
|
|
17
|
+
/** Configuration for the envelope-to-engine integration. */
|
|
18
|
+
export interface EnvelopeIntegrationConfig {
|
|
19
|
+
/** Interval between automatic breach checks in milliseconds. Default: 60 000 (1 min). */
|
|
20
|
+
checkIntervalMs?: number;
|
|
21
|
+
/** Entity ID whose trust score will receive breach signals. */
|
|
22
|
+
entityId: string;
|
|
23
|
+
/** Function that returns the current characteristic vector (6 dimensions). */
|
|
24
|
+
getDimensions: () => number[];
|
|
25
|
+
}
|
|
26
|
+
/** A recorded breach event kept for audit. */
|
|
27
|
+
export interface BreachHistoryEntry {
|
|
28
|
+
timestamp: string;
|
|
29
|
+
result: BreachResult;
|
|
30
|
+
signalId: string;
|
|
31
|
+
}
|
|
32
|
+
/** Handle returned by {@link connectEnvelopeToTrustEngine}. */
|
|
33
|
+
export interface EnvelopeMonitor {
|
|
34
|
+
/** Stop the interval and release resources. */
|
|
35
|
+
stop(): void;
|
|
36
|
+
/** Read-only copy of breach history. */
|
|
37
|
+
getBreachHistory(): BreachHistoryEntry[];
|
|
38
|
+
/** Number of checks executed so far. */
|
|
39
|
+
getCheckCount(): number;
|
|
40
|
+
/** Whether the monitor interval is currently running. */
|
|
41
|
+
isRunning(): boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Wire a CognitiveEnvelope's breach detection to a TrustEngine.
|
|
45
|
+
*
|
|
46
|
+
* Starts an interval that calls `envelope.checkBreach(getDimensions())`.
|
|
47
|
+
* When a breach is detected, a trust signal is recorded with the
|
|
48
|
+
* `trustMultiplier` as the signal value (0.7 for full breach, 0.9 for
|
|
49
|
+
* approaching) and metadata describing the breach.
|
|
50
|
+
*
|
|
51
|
+
* @returns An {@link EnvelopeMonitor} handle — call `.stop()` to tear down.
|
|
52
|
+
*/
|
|
53
|
+
export declare function connectEnvelopeToTrustEngine(envelope: CognitiveEnvelope, engine: TrustEngine, config: EnvelopeIntegrationConfig): EnvelopeMonitor;
|
|
54
|
+
/**
|
|
55
|
+
* Stop an EnvelopeMonitor and release its interval.
|
|
56
|
+
*
|
|
57
|
+
* Convenience wrapper — equivalent to `monitor.stop()`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function disconnectEnvelope(monitor: EnvelopeMonitor): void;
|
|
60
|
+
//# sourceMappingURL=envelope-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope-integration.d.ts","sourceRoot":"","sources":["../../src/paramesphere/envelope-integration.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAM5D,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;CAC/B;AAED,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,IAAI,IAAI,IAAI,CAAC;IACb,wCAAwC;IACxC,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;IACzC,wCAAwC;IACxC,aAAa,IAAI,MAAM,CAAC;IACxB,yDAAyD;IACzD,SAAS,IAAI,OAAO,CAAC;CACtB;AAeD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,yBAAyB,GAChC,eAAe,CA8FjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAEjE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2024-2026 Vorion LLC
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Defaults
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const DEFAULT_CHECK_INTERVAL_MS = 60_000;
|
|
7
|
+
const SIGNAL_SOURCE = 'cognitive-envelope';
|
|
8
|
+
const SIGNAL_TYPE_BREACH = 'ENVELOPE_BREACH';
|
|
9
|
+
const SIGNAL_TYPE_HEALTH = 'ENVELOPE_HEALTH';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Public API
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/**
|
|
14
|
+
* Wire a CognitiveEnvelope's breach detection to a TrustEngine.
|
|
15
|
+
*
|
|
16
|
+
* Starts an interval that calls `envelope.checkBreach(getDimensions())`.
|
|
17
|
+
* When a breach is detected, a trust signal is recorded with the
|
|
18
|
+
* `trustMultiplier` as the signal value (0.7 for full breach, 0.9 for
|
|
19
|
+
* approaching) and metadata describing the breach.
|
|
20
|
+
*
|
|
21
|
+
* @returns An {@link EnvelopeMonitor} handle — call `.stop()` to tear down.
|
|
22
|
+
*/
|
|
23
|
+
export function connectEnvelopeToTrustEngine(envelope, engine, config) {
|
|
24
|
+
if (!config.entityId) {
|
|
25
|
+
throw new Error('entityId is required');
|
|
26
|
+
}
|
|
27
|
+
if (typeof config.getDimensions !== 'function') {
|
|
28
|
+
throw new Error('getDimensions must be a function');
|
|
29
|
+
}
|
|
30
|
+
const intervalMs = config.checkIntervalMs ?? DEFAULT_CHECK_INTERVAL_MS;
|
|
31
|
+
if (intervalMs <= 0) {
|
|
32
|
+
throw new Error('checkIntervalMs must be > 0');
|
|
33
|
+
}
|
|
34
|
+
const breachHistory = [];
|
|
35
|
+
let checkCount = 0;
|
|
36
|
+
let running = true;
|
|
37
|
+
// The core check function — also exported on the monitor for manual invocation in tests.
|
|
38
|
+
function runCheck() {
|
|
39
|
+
const dims = config.getDimensions();
|
|
40
|
+
const result = envelope.checkBreach(dims);
|
|
41
|
+
checkCount++;
|
|
42
|
+
const signalId = `${SIGNAL_SOURCE}-${config.entityId}-${Date.now()}`;
|
|
43
|
+
const now = new Date().toISOString();
|
|
44
|
+
if (result.breached) {
|
|
45
|
+
// Breach: signal value is the continuous trustMultiplier (0.7 or 0.9)
|
|
46
|
+
const signal = {
|
|
47
|
+
id: signalId,
|
|
48
|
+
entityId: config.entityId,
|
|
49
|
+
type: SIGNAL_TYPE_BREACH,
|
|
50
|
+
value: result.trustMultiplier,
|
|
51
|
+
source: SIGNAL_SOURCE,
|
|
52
|
+
timestamp: now,
|
|
53
|
+
metadata: {
|
|
54
|
+
breachCounter: result.breachCounter,
|
|
55
|
+
maxDeviation: result.maxDeviation,
|
|
56
|
+
dimensionBreaches: result.dimensionBreaches,
|
|
57
|
+
trustMultiplier: result.trustMultiplier,
|
|
58
|
+
envelopeHealth: result.trustMultiplier,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
breachHistory.push({
|
|
62
|
+
timestamp: now,
|
|
63
|
+
result,
|
|
64
|
+
signalId,
|
|
65
|
+
});
|
|
66
|
+
void engine.recordSignal(signal);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Healthy: emit continuous health signal (value = 1.0)
|
|
70
|
+
const signal = {
|
|
71
|
+
id: signalId,
|
|
72
|
+
entityId: config.entityId,
|
|
73
|
+
type: SIGNAL_TYPE_HEALTH,
|
|
74
|
+
value: 1.0,
|
|
75
|
+
source: SIGNAL_SOURCE,
|
|
76
|
+
timestamp: now,
|
|
77
|
+
metadata: {
|
|
78
|
+
breachCounter: result.breachCounter,
|
|
79
|
+
maxDeviation: result.maxDeviation,
|
|
80
|
+
envelopeHealth: 1.0,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
void engine.recordSignal(signal);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const timer = setInterval(runCheck, intervalMs);
|
|
87
|
+
const monitor = {
|
|
88
|
+
stop() {
|
|
89
|
+
if (!running)
|
|
90
|
+
return;
|
|
91
|
+
clearInterval(timer);
|
|
92
|
+
running = false;
|
|
93
|
+
},
|
|
94
|
+
getBreachHistory() {
|
|
95
|
+
return [...breachHistory];
|
|
96
|
+
},
|
|
97
|
+
getCheckCount() {
|
|
98
|
+
return checkCount;
|
|
99
|
+
},
|
|
100
|
+
isRunning() {
|
|
101
|
+
return running;
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
return monitor;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Stop an EnvelopeMonitor and release its interval.
|
|
108
|
+
*
|
|
109
|
+
* Convenience wrapper — equivalent to `monitor.stop()`.
|
|
110
|
+
*/
|
|
111
|
+
export function disconnectEnvelope(monitor) {
|
|
112
|
+
monitor.stop();
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=envelope-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope-integration.js","sourceRoot":"","sources":["../../src/paramesphere/envelope-integration.ts"],"names":[],"mappings":"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"}
|