@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,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CHAIN Layer - Blockchain Anchoring
|
|
3
|
+
*
|
|
4
|
+
* Anchors proof hashes to Polygon blockchain for immutable verification.
|
|
5
|
+
* Supports batching via Merkle trees for cost efficiency.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { createLogger } from '../common/logger.js';
|
|
10
|
+
const logger = createLogger({ component: 'chain' });
|
|
11
|
+
/**
|
|
12
|
+
* Polygon network configuration
|
|
13
|
+
*/
|
|
14
|
+
export const POLYGON_NETWORKS = {
|
|
15
|
+
mainnet: {
|
|
16
|
+
rpcUrl: 'https://polygon-rpc.com',
|
|
17
|
+
chainId: 137,
|
|
18
|
+
blockExplorer: 'https://polygonscan.com',
|
|
19
|
+
name: 'Polygon Mainnet',
|
|
20
|
+
},
|
|
21
|
+
amoy: {
|
|
22
|
+
rpcUrl: 'https://rpc-amoy.polygon.technology',
|
|
23
|
+
chainId: 80002,
|
|
24
|
+
blockExplorer: 'https://amoy.polygonscan.com',
|
|
25
|
+
name: 'Polygon Amoy Testnet',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Compute SHA-256 hash of a string
|
|
30
|
+
*/
|
|
31
|
+
export async function sha256(data) {
|
|
32
|
+
const encoder = new TextEncoder();
|
|
33
|
+
const dataBuffer = encoder.encode(data);
|
|
34
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
|
|
35
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
36
|
+
return '0x' + hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Compute keccak256 hash (Ethereum-style)
|
|
40
|
+
* Note: In production, use ethers.keccak256
|
|
41
|
+
*/
|
|
42
|
+
export async function keccak256Concat(a, b) {
|
|
43
|
+
// For testing, use sha256 as a stand-in
|
|
44
|
+
// In production, replace with ethers.keccak256(ethers.concat([a, b]))
|
|
45
|
+
return sha256(a + b);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Compute Merkle root from a list of hashes
|
|
49
|
+
*/
|
|
50
|
+
export async function computeMerkleRoot(hashes) {
|
|
51
|
+
if (hashes.length === 0) {
|
|
52
|
+
throw new Error('Cannot compute Merkle root of empty list');
|
|
53
|
+
}
|
|
54
|
+
if (hashes.length === 1) {
|
|
55
|
+
return hashes[0];
|
|
56
|
+
}
|
|
57
|
+
let layer = [...hashes];
|
|
58
|
+
while (layer.length > 1) {
|
|
59
|
+
const nextLayer = [];
|
|
60
|
+
for (let i = 0; i < layer.length; i += 2) {
|
|
61
|
+
if (i + 1 < layer.length) {
|
|
62
|
+
// Hash pair together (sorted for deterministic ordering)
|
|
63
|
+
const [left, right] = [layer[i], layer[i + 1]].sort();
|
|
64
|
+
nextLayer.push(await keccak256Concat(left, right));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Odd element, promote to next layer
|
|
68
|
+
nextLayer.push(layer[i]);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
layer = nextLayer;
|
|
72
|
+
}
|
|
73
|
+
return layer[0];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compute Merkle proof for a specific leaf
|
|
77
|
+
*/
|
|
78
|
+
export async function computeMerkleProof(hashes, targetIndex) {
|
|
79
|
+
if (targetIndex < 0 || targetIndex >= hashes.length) {
|
|
80
|
+
throw new Error('Target index out of bounds');
|
|
81
|
+
}
|
|
82
|
+
const proof = [];
|
|
83
|
+
let layer = [...hashes];
|
|
84
|
+
let index = targetIndex;
|
|
85
|
+
while (layer.length > 1) {
|
|
86
|
+
const siblingIndex = index % 2 === 0 ? index + 1 : index - 1;
|
|
87
|
+
if (siblingIndex < layer.length) {
|
|
88
|
+
proof.push(layer[siblingIndex]);
|
|
89
|
+
}
|
|
90
|
+
// Build next layer
|
|
91
|
+
const nextLayer = [];
|
|
92
|
+
for (let i = 0; i < layer.length; i += 2) {
|
|
93
|
+
if (i + 1 < layer.length) {
|
|
94
|
+
const [left, right] = [layer[i], layer[i + 1]].sort();
|
|
95
|
+
nextLayer.push(await keccak256Concat(left, right));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
nextLayer.push(layer[i]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
layer = nextLayer;
|
|
102
|
+
index = Math.floor(index / 2);
|
|
103
|
+
}
|
|
104
|
+
return proof;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Verify a Merkle proof
|
|
108
|
+
*/
|
|
109
|
+
export async function verifyMerkleProof(leaf, proof, root) {
|
|
110
|
+
let current = leaf;
|
|
111
|
+
for (const sibling of proof) {
|
|
112
|
+
const [left, right] = [current, sibling].sort();
|
|
113
|
+
current = await keccak256Concat(left, right);
|
|
114
|
+
}
|
|
115
|
+
return current === root;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Mock ChainAnchorService for testing
|
|
119
|
+
* In production, use the full implementation with ethers.js
|
|
120
|
+
*/
|
|
121
|
+
export class MockChainAnchorService {
|
|
122
|
+
config;
|
|
123
|
+
batchCount = 0n;
|
|
124
|
+
batches = new Map();
|
|
125
|
+
proofToBatch = new Map();
|
|
126
|
+
constructor(config) {
|
|
127
|
+
this.config = config;
|
|
128
|
+
logger.info({ network: config.network }, 'MockChainAnchorService initialized');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Mock anchor batch - simulates blockchain anchoring
|
|
132
|
+
*/
|
|
133
|
+
async anchorBatch(proofs) {
|
|
134
|
+
if (proofs.length === 0) {
|
|
135
|
+
throw new Error('Cannot anchor empty batch');
|
|
136
|
+
}
|
|
137
|
+
const proofHashes = proofs.map((p) => p.proofHash);
|
|
138
|
+
const merkleRoot = await computeMerkleRoot(proofHashes);
|
|
139
|
+
this.batchCount += 1n;
|
|
140
|
+
const batchId = this.batchCount;
|
|
141
|
+
this.batches.set(batchId, {
|
|
142
|
+
merkleRoot,
|
|
143
|
+
proofHashes,
|
|
144
|
+
timestamp: new Date(),
|
|
145
|
+
});
|
|
146
|
+
for (const hash of proofHashes) {
|
|
147
|
+
this.proofToBatch.set(hash, batchId);
|
|
148
|
+
}
|
|
149
|
+
const networkConfig = POLYGON_NETWORKS[this.config.network];
|
|
150
|
+
const mockTxHash = `0x${Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString('hex')}`;
|
|
151
|
+
logger.info({
|
|
152
|
+
batchId: batchId.toString(),
|
|
153
|
+
proofCount: proofs.length,
|
|
154
|
+
merkleRoot,
|
|
155
|
+
}, 'Batch anchored (mock)');
|
|
156
|
+
return {
|
|
157
|
+
batchId,
|
|
158
|
+
transactionHash: mockTxHash,
|
|
159
|
+
blockNumber: Math.floor(Math.random() * 1000000) + 50000000,
|
|
160
|
+
merkleRoot,
|
|
161
|
+
proofCount: proofs.length,
|
|
162
|
+
explorerUrl: `${networkConfig.blockExplorer}/tx/${mockTxHash}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Mock verify proof
|
|
167
|
+
*/
|
|
168
|
+
async verifyProof(proofHash, merkleProof, batchId) {
|
|
169
|
+
const batch = this.batches.get(batchId);
|
|
170
|
+
if (!batch) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
return verifyMerkleProof(proofHash, merkleProof, batch.merkleRoot);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Mock get proof anchor info
|
|
177
|
+
*/
|
|
178
|
+
async getProofAnchor(proofHash) {
|
|
179
|
+
const batchId = this.proofToBatch.get(proofHash);
|
|
180
|
+
if (!batchId) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const batch = this.batches.get(batchId);
|
|
184
|
+
if (!batch) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
const networkConfig = POLYGON_NETWORKS[this.config.network];
|
|
188
|
+
return {
|
|
189
|
+
valid: true,
|
|
190
|
+
batchId,
|
|
191
|
+
merkleRoot: batch.merkleRoot,
|
|
192
|
+
anchoredAt: batch.timestamp,
|
|
193
|
+
explorerUrl: `${networkConfig.blockExplorer}/address/${this.config.contractAddress}`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get batch info
|
|
198
|
+
*/
|
|
199
|
+
getBatch(batchId) {
|
|
200
|
+
return this.batches.get(batchId);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get stats
|
|
204
|
+
*/
|
|
205
|
+
getStats() {
|
|
206
|
+
return {
|
|
207
|
+
batchCount: this.batchCount,
|
|
208
|
+
totalProofs: this.proofToBatch.size,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Create a chain anchor service
|
|
214
|
+
* Returns mock service by default; use createRealChainAnchor for production
|
|
215
|
+
*/
|
|
216
|
+
export function createChainAnchor(config) {
|
|
217
|
+
return new MockChainAnchorService(config);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Cognigate - Constrained Execution Runtime
|
|
3
3
|
*
|
|
4
4
|
* Executes approved intents within defined constraints and resource limits.
|
|
5
|
+
* Uses Node.js worker threads for actual sandboxing with memory limits.
|
|
5
6
|
*
|
|
6
7
|
* @packageDocumentation
|
|
7
8
|
*/
|
|
@@ -55,8 +56,12 @@ export type ExecutionHandler = (intent: Intent, context: Record<string, unknown>
|
|
|
55
56
|
*/
|
|
56
57
|
export declare class CognigateGateway {
|
|
57
58
|
private handlers;
|
|
59
|
+
private activeExecutions;
|
|
58
60
|
private defaultLimits;
|
|
59
|
-
|
|
61
|
+
private useSandbox;
|
|
62
|
+
constructor(defaultLimits?: Partial<ResourceLimits>, options?: {
|
|
63
|
+
useSandbox?: boolean;
|
|
64
|
+
});
|
|
60
65
|
/**
|
|
61
66
|
* Register an execution handler for an intent type
|
|
62
67
|
*/
|
|
@@ -66,7 +71,15 @@ export declare class CognigateGateway {
|
|
|
66
71
|
*/
|
|
67
72
|
execute(context: ExecutionContext): Promise<ExecutionResult>;
|
|
68
73
|
/**
|
|
69
|
-
*
|
|
74
|
+
* Execute handler in sandboxed worker thread with resource limits
|
|
75
|
+
*/
|
|
76
|
+
private executeInSandbox;
|
|
77
|
+
/**
|
|
78
|
+
* Get current memory usage in MB
|
|
79
|
+
*/
|
|
80
|
+
private getMemoryUsageMb;
|
|
81
|
+
/**
|
|
82
|
+
* Create a timeout promise that respects abort signal
|
|
70
83
|
*/
|
|
71
84
|
private timeout;
|
|
72
85
|
/**
|
|
@@ -75,11 +88,27 @@ export declare class CognigateGateway {
|
|
|
75
88
|
private emptyUsage;
|
|
76
89
|
/**
|
|
77
90
|
* Terminate an execution (kill switch)
|
|
91
|
+
* Immediately stops execution of the specified intent
|
|
92
|
+
*/
|
|
93
|
+
terminate(intentId: ID): Promise<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Get list of active execution IDs
|
|
78
96
|
*/
|
|
79
|
-
|
|
97
|
+
getActiveExecutions(): ID[];
|
|
98
|
+
/**
|
|
99
|
+
* Check if an execution is currently running
|
|
100
|
+
*/
|
|
101
|
+
isExecuting(intentId: ID): boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Gateway options
|
|
105
|
+
*/
|
|
106
|
+
export interface GatewayOptions {
|
|
107
|
+
/** Enable sandboxed execution via worker threads (default: true) */
|
|
108
|
+
useSandbox?: boolean;
|
|
80
109
|
}
|
|
81
110
|
/**
|
|
82
111
|
* Create a new Cognigate gateway instance
|
|
83
112
|
*/
|
|
84
|
-
export declare function createGateway(defaultLimits?: Partial<ResourceLimits
|
|
113
|
+
export declare function createGateway(defaultLimits?: Partial<ResourceLimits>, options?: GatewayOptions): CognigateGateway;
|
|
85
114
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cognigate/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cognigate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAI/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,EAAE,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAWtC;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,UAAU,CAAU;gBAEhB,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;IAavF;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAKpE;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA8HlE;;OAEG;YACW,gBAAgB;IAoH9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,OAAO;IAaf;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;;OAGG;IACG,SAAS,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB/C;;OAEG;IACH,mBAAmB,IAAI,EAAE,EAAE;IAI3B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO;CAGnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EACvC,OAAO,CAAC,EAAE,cAAc,GACvB,gBAAgB,CAElB"}
|
package/dist/cognigate/index.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* Cognigate - Constrained Execution Runtime
|
|
3
3
|
*
|
|
4
4
|
* Executes approved intents within defined constraints and resource limits.
|
|
5
|
+
* Uses Node.js worker threads for actual sandboxing with memory limits.
|
|
5
6
|
*
|
|
6
7
|
* @packageDocumentation
|
|
7
8
|
*/
|
|
9
|
+
import { Worker, isMainThread } from 'node:worker_threads';
|
|
8
10
|
import { createLogger } from '../common/logger.js';
|
|
9
11
|
const logger = createLogger({ component: 'cognigate' });
|
|
10
12
|
/**
|
|
@@ -12,8 +14,10 @@ const logger = createLogger({ component: 'cognigate' });
|
|
|
12
14
|
*/
|
|
13
15
|
export class CognigateGateway {
|
|
14
16
|
handlers = new Map();
|
|
17
|
+
activeExecutions = new Map();
|
|
15
18
|
defaultLimits;
|
|
16
|
-
|
|
19
|
+
useSandbox;
|
|
20
|
+
constructor(defaultLimits, options) {
|
|
17
21
|
this.defaultLimits = {
|
|
18
22
|
maxMemoryMb: 512,
|
|
19
23
|
maxCpuPercent: 50,
|
|
@@ -22,6 +26,8 @@ export class CognigateGateway {
|
|
|
22
26
|
maxFileSystemOps: 1000,
|
|
23
27
|
...defaultLimits,
|
|
24
28
|
};
|
|
29
|
+
// Enable sandbox by default in production, can be disabled for testing
|
|
30
|
+
this.useSandbox = options?.useSandbox ?? true;
|
|
25
31
|
}
|
|
26
32
|
/**
|
|
27
33
|
* Register an execution handler for an intent type
|
|
@@ -65,34 +71,56 @@ export class CognigateGateway {
|
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
73
|
// Execute with limits
|
|
74
|
+
const limits = { ...this.defaultLimits, ...context.resourceLimits };
|
|
75
|
+
const abortController = new AbortController();
|
|
76
|
+
// Track this execution for potential termination
|
|
77
|
+
this.activeExecutions.set(intent.id, {
|
|
78
|
+
worker: null,
|
|
79
|
+
abortController,
|
|
80
|
+
startTime: performance.now(),
|
|
81
|
+
});
|
|
68
82
|
try {
|
|
69
|
-
const limits = { ...this.defaultLimits, ...context.resourceLimits };
|
|
70
83
|
const execStart = performance.now();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
outputs
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
let outputs;
|
|
85
|
+
let resourceUsage;
|
|
86
|
+
if (this.useSandbox && isMainThread) {
|
|
87
|
+
// Execute in sandboxed worker thread with memory limits
|
|
88
|
+
const result = await this.executeInSandbox(handler, intent, limits, abortController.signal);
|
|
89
|
+
outputs = result.outputs;
|
|
90
|
+
resourceUsage = result.resourceUsage;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Direct execution (for testing or when already in worker)
|
|
94
|
+
outputs = await Promise.race([
|
|
95
|
+
handler(intent, intent.context),
|
|
96
|
+
this.timeout(limits.timeoutMs, abortController.signal),
|
|
97
|
+
]);
|
|
98
|
+
const execEnd = performance.now();
|
|
99
|
+
resourceUsage = {
|
|
100
|
+
memoryPeakMb: this.getMemoryUsageMb(),
|
|
84
101
|
cpuTimeMs: execEnd - execStart,
|
|
85
102
|
wallTimeMs: execEnd - execStart,
|
|
86
103
|
networkRequests: 0,
|
|
87
104
|
fileSystemOps: 0,
|
|
88
|
-
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const execEnd = performance.now();
|
|
108
|
+
logger.info({ intentId: intent.id, durationMs: execEnd - execStart, memoryMb: resourceUsage.memoryPeakMb }, 'Execution completed');
|
|
109
|
+
return {
|
|
110
|
+
intentId: intent.id,
|
|
111
|
+
success: true,
|
|
112
|
+
outputs,
|
|
113
|
+
resourceUsage,
|
|
89
114
|
startedAt,
|
|
90
115
|
completedAt: new Date().toISOString(),
|
|
91
116
|
};
|
|
92
117
|
}
|
|
93
118
|
catch (error) {
|
|
94
119
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
95
|
-
|
|
120
|
+
const isTimeout = errorMessage === 'Execution timeout';
|
|
121
|
+
const isTerminated = errorMessage === 'Execution terminated';
|
|
122
|
+
const isMemoryLimit = errorMessage.includes('memory limit');
|
|
123
|
+
logger.error({ intentId: intent.id, error: errorMessage, isTimeout, isTerminated, isMemoryLimit }, 'Execution failed');
|
|
96
124
|
return {
|
|
97
125
|
intentId: intent.id,
|
|
98
126
|
success: false,
|
|
@@ -103,12 +131,132 @@ export class CognigateGateway {
|
|
|
103
131
|
error: errorMessage,
|
|
104
132
|
};
|
|
105
133
|
}
|
|
134
|
+
finally {
|
|
135
|
+
// Clean up tracking
|
|
136
|
+
this.activeExecutions.delete(intent.id);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Execute handler in sandboxed worker thread with resource limits
|
|
141
|
+
*/
|
|
142
|
+
async executeInSandbox(handler, intent, limits, signal) {
|
|
143
|
+
return new Promise((resolve, reject) => {
|
|
144
|
+
const execStart = performance.now();
|
|
145
|
+
// Serialize the handler - note: only works with simple handlers
|
|
146
|
+
// For complex handlers, they should be registered by name and looked up
|
|
147
|
+
const handlerCode = handler.toString();
|
|
148
|
+
// Create worker with memory limits
|
|
149
|
+
const worker = new Worker(new URL('data:text/javascript,' + encodeURIComponent(`
|
|
150
|
+
import { parentPort, workerData } from 'node:worker_threads';
|
|
151
|
+
|
|
152
|
+
const { handlerCode, intent, context } = workerData;
|
|
153
|
+
|
|
154
|
+
// Reconstruct handler (limited to simple functions)
|
|
155
|
+
const handler = eval('(' + handlerCode + ')');
|
|
156
|
+
|
|
157
|
+
// Track memory before execution
|
|
158
|
+
const memBefore = process.memoryUsage();
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
const result = await handler(intent, context);
|
|
162
|
+
const memAfter = process.memoryUsage();
|
|
163
|
+
|
|
164
|
+
parentPort.postMessage({
|
|
165
|
+
success: true,
|
|
166
|
+
outputs: result,
|
|
167
|
+
memoryUsed: Math.max(0, (memAfter.heapUsed - memBefore.heapUsed) / 1024 / 1024)
|
|
168
|
+
});
|
|
169
|
+
} catch (error) {
|
|
170
|
+
parentPort.postMessage({
|
|
171
|
+
success: false,
|
|
172
|
+
error: error.message || 'Unknown error'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
`)), {
|
|
176
|
+
workerData: {
|
|
177
|
+
handlerCode,
|
|
178
|
+
intent,
|
|
179
|
+
context: intent.context,
|
|
180
|
+
},
|
|
181
|
+
resourceLimits: {
|
|
182
|
+
maxOldGenerationSizeMb: limits.maxMemoryMb,
|
|
183
|
+
maxYoungGenerationSizeMb: Math.floor(limits.maxMemoryMb / 4),
|
|
184
|
+
stackSizeMb: 4,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
// Track worker for termination
|
|
188
|
+
const execution = this.activeExecutions.get(intent.id);
|
|
189
|
+
if (execution) {
|
|
190
|
+
execution.worker = worker;
|
|
191
|
+
}
|
|
192
|
+
// Handle abort signal
|
|
193
|
+
const abortHandler = () => {
|
|
194
|
+
worker.terminate();
|
|
195
|
+
reject(new Error('Execution terminated'));
|
|
196
|
+
};
|
|
197
|
+
signal.addEventListener('abort', abortHandler, { once: true });
|
|
198
|
+
// Set timeout
|
|
199
|
+
const timeoutId = setTimeout(() => {
|
|
200
|
+
worker.terminate();
|
|
201
|
+
reject(new Error('Execution timeout'));
|
|
202
|
+
}, limits.timeoutMs);
|
|
203
|
+
// Handle worker messages
|
|
204
|
+
worker.on('message', (msg) => {
|
|
205
|
+
clearTimeout(timeoutId);
|
|
206
|
+
signal.removeEventListener('abort', abortHandler);
|
|
207
|
+
const execEnd = performance.now();
|
|
208
|
+
if (msg.success) {
|
|
209
|
+
resolve({
|
|
210
|
+
outputs: msg.outputs,
|
|
211
|
+
resourceUsage: {
|
|
212
|
+
memoryPeakMb: msg.memoryUsed || 0,
|
|
213
|
+
cpuTimeMs: execEnd - execStart,
|
|
214
|
+
wallTimeMs: execEnd - execStart,
|
|
215
|
+
networkRequests: 0,
|
|
216
|
+
fileSystemOps: 0,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
reject(new Error(msg.error));
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
// Handle worker errors (including memory limit exceeded)
|
|
225
|
+
worker.on('error', (error) => {
|
|
226
|
+
clearTimeout(timeoutId);
|
|
227
|
+
signal.removeEventListener('abort', abortHandler);
|
|
228
|
+
reject(new Error(error.message || 'Worker error'));
|
|
229
|
+
});
|
|
230
|
+
// Handle worker exit
|
|
231
|
+
worker.on('exit', (code) => {
|
|
232
|
+
if (code !== 0) {
|
|
233
|
+
clearTimeout(timeoutId);
|
|
234
|
+
signal.removeEventListener('abort', abortHandler);
|
|
235
|
+
reject(new Error(`Worker exited with code ${code} (may have exceeded memory limit)`));
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
});
|
|
106
239
|
}
|
|
107
240
|
/**
|
|
108
|
-
*
|
|
241
|
+
* Get current memory usage in MB
|
|
109
242
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
243
|
+
getMemoryUsageMb() {
|
|
244
|
+
const usage = process.memoryUsage();
|
|
245
|
+
return Math.round((usage.heapUsed / 1024 / 1024) * 100) / 100;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a timeout promise that respects abort signal
|
|
249
|
+
*/
|
|
250
|
+
timeout(ms, signal) {
|
|
251
|
+
return new Promise((_, reject) => {
|
|
252
|
+
const timeoutId = setTimeout(() => reject(new Error('Execution timeout')), ms);
|
|
253
|
+
if (signal) {
|
|
254
|
+
signal.addEventListener('abort', () => {
|
|
255
|
+
clearTimeout(timeoutId);
|
|
256
|
+
reject(new Error('Execution terminated'));
|
|
257
|
+
}, { once: true });
|
|
258
|
+
}
|
|
259
|
+
});
|
|
112
260
|
}
|
|
113
261
|
/**
|
|
114
262
|
* Create empty resource usage
|
|
@@ -124,16 +272,43 @@ export class CognigateGateway {
|
|
|
124
272
|
}
|
|
125
273
|
/**
|
|
126
274
|
* Terminate an execution (kill switch)
|
|
275
|
+
* Immediately stops execution of the specified intent
|
|
127
276
|
*/
|
|
128
277
|
async terminate(intentId) {
|
|
129
|
-
|
|
130
|
-
|
|
278
|
+
const execution = this.activeExecutions.get(intentId);
|
|
279
|
+
if (!execution) {
|
|
280
|
+
logger.warn({ intentId }, 'Terminate requested but no active execution found');
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
logger.warn({ intentId, runningFor: performance.now() - execution.startTime }, 'Terminating execution');
|
|
284
|
+
// Abort via signal (for direct execution)
|
|
285
|
+
execution.abortController.abort();
|
|
286
|
+
// Terminate worker if running in sandbox
|
|
287
|
+
if (execution.worker) {
|
|
288
|
+
await execution.worker.terminate();
|
|
289
|
+
}
|
|
290
|
+
// Clean up
|
|
291
|
+
this.activeExecutions.delete(intentId);
|
|
292
|
+
logger.info({ intentId }, 'Execution terminated successfully');
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get list of active execution IDs
|
|
297
|
+
*/
|
|
298
|
+
getActiveExecutions() {
|
|
299
|
+
return Array.from(this.activeExecutions.keys());
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check if an execution is currently running
|
|
303
|
+
*/
|
|
304
|
+
isExecuting(intentId) {
|
|
305
|
+
return this.activeExecutions.has(intentId);
|
|
131
306
|
}
|
|
132
307
|
}
|
|
133
308
|
/**
|
|
134
309
|
* Create a new Cognigate gateway instance
|
|
135
310
|
*/
|
|
136
|
-
export function createGateway(defaultLimits) {
|
|
137
|
-
return new CognigateGateway(defaultLimits);
|
|
311
|
+
export function createGateway(defaultLimits, options) {
|
|
312
|
+
return new CognigateGateway(defaultLimits, options);
|
|
138
313
|
}
|
|
139
314
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cognigate/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cognigate/index.ts"],"names":[],"mappings":"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"}
|