@weavelogic/knowledge-graph-agent 0.3.0 → 0.4.0
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 +290 -3
- package/dist/_virtual/index10.js +2 -2
- package/dist/_virtual/index6.js +2 -2
- package/dist/_virtual/index7.js +2 -2
- package/dist/_virtual/index8.js +2 -2
- package/dist/_virtual/index9.js +2 -2
- package/dist/audit/config.d.ts +150 -0
- package/dist/audit/config.d.ts.map +1 -0
- package/dist/audit/config.js +111 -0
- package/dist/audit/config.js.map +1 -0
- package/dist/audit/index.d.ts +38 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/services/audit-chain.d.ts +276 -0
- package/dist/audit/services/audit-chain.d.ts.map +1 -0
- package/dist/audit/services/audit-chain.js +502 -0
- package/dist/audit/services/audit-chain.js.map +1 -0
- package/dist/audit/services/index.d.ts +11 -0
- package/dist/audit/services/index.d.ts.map +1 -0
- package/dist/audit/services/syndication.d.ts +334 -0
- package/dist/audit/services/syndication.d.ts.map +1 -0
- package/dist/audit/services/syndication.js +589 -0
- package/dist/audit/services/syndication.js.map +1 -0
- package/dist/audit/types.d.ts +453 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/cli/commands/audit.d.ts +21 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +621 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/vector.d.ts +14 -0
- package/dist/cli/commands/vector.d.ts.map +1 -0
- package/dist/cli/commands/vector.js +429 -0
- package/dist/cli/commands/vector.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +12 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +471 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/database/schemas/index.d.ts +85 -0
- package/dist/database/schemas/index.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/audit/checkpoint.d.ts +58 -0
- package/dist/mcp-server/tools/audit/checkpoint.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/checkpoint.js +73 -0
- package/dist/mcp-server/tools/audit/checkpoint.js.map +1 -0
- package/dist/mcp-server/tools/audit/index.d.ts +53 -0
- package/dist/mcp-server/tools/audit/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/index.js +12 -0
- package/dist/mcp-server/tools/audit/index.js.map +1 -0
- package/dist/mcp-server/tools/audit/query.d.ts +58 -0
- package/dist/mcp-server/tools/audit/query.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/query.js +125 -0
- package/dist/mcp-server/tools/audit/query.js.map +1 -0
- package/dist/mcp-server/tools/audit/sync.d.ts +58 -0
- package/dist/mcp-server/tools/audit/sync.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/sync.js +126 -0
- package/dist/mcp-server/tools/audit/sync.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +3 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/registry.js +90 -0
- package/dist/mcp-server/tools/registry.js.map +1 -1
- package/dist/mcp-server/tools/vector/index.d.ts +12 -0
- package/dist/mcp-server/tools/vector/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/index.js +12 -0
- package/dist/mcp-server/tools/vector/index.js.map +1 -0
- package/dist/mcp-server/tools/vector/search.d.ts +41 -0
- package/dist/mcp-server/tools/vector/search.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/search.js +224 -0
- package/dist/mcp-server/tools/vector/search.js.map +1 -0
- package/dist/mcp-server/tools/vector/trajectory.d.ts +39 -0
- package/dist/mcp-server/tools/vector/trajectory.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/trajectory.js +170 -0
- package/dist/mcp-server/tools/vector/trajectory.js.map +1 -0
- package/dist/mcp-server/tools/vector/upsert.d.ts +44 -0
- package/dist/mcp-server/tools/vector/upsert.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/upsert.js +175 -0
- package/dist/mcp-server/tools/vector/upsert.js.map +1 -0
- package/dist/mcp-server/tools/workflow/index.d.ts +29 -0
- package/dist/mcp-server/tools/workflow/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/index.js +12 -0
- package/dist/mcp-server/tools/workflow/index.js.map +1 -0
- package/dist/mcp-server/tools/workflow/list.d.ts +41 -0
- package/dist/mcp-server/tools/workflow/list.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/list.js +195 -0
- package/dist/mcp-server/tools/workflow/list.js.map +1 -0
- package/dist/mcp-server/tools/workflow/start.d.ts +40 -0
- package/dist/mcp-server/tools/workflow/start.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/start.js +165 -0
- package/dist/mcp-server/tools/workflow/start.js.map +1 -0
- package/dist/mcp-server/tools/workflow/status.d.ts +38 -0
- package/dist/mcp-server/tools/workflow/status.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/status.js +97 -0
- package/dist/mcp-server/tools/workflow/status.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/index.js +1 -1
- package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
- package/dist/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
- package/dist/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
- package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +1 -1
- package/dist/vector/config.d.ts +300 -0
- package/dist/vector/config.d.ts.map +1 -0
- package/dist/vector/config.js +124 -0
- package/dist/vector/config.js.map +1 -0
- package/dist/vector/index.d.ts +50 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/dist/vector/services/index.d.ts +13 -0
- package/dist/vector/services/index.d.ts.map +1 -0
- package/dist/vector/services/trajectory-tracker.d.ts +405 -0
- package/dist/vector/services/trajectory-tracker.d.ts.map +1 -0
- package/dist/vector/services/trajectory-tracker.js +445 -0
- package/dist/vector/services/trajectory-tracker.js.map +1 -0
- package/dist/vector/services/vector-store.d.ts +339 -0
- package/dist/vector/services/vector-store.d.ts.map +1 -0
- package/dist/vector/services/vector-store.js +748 -0
- package/dist/vector/services/vector-store.js.map +1 -0
- package/dist/vector/types.d.ts +677 -0
- package/dist/vector/types.d.ts.map +1 -0
- package/dist/workflow/adapters/goap-adapter.d.ts +196 -0
- package/dist/workflow/adapters/goap-adapter.d.ts.map +1 -0
- package/dist/workflow/adapters/goap-adapter.js +706 -0
- package/dist/workflow/adapters/goap-adapter.js.map +1 -0
- package/dist/workflow/adapters/index.d.ts +10 -0
- package/dist/workflow/adapters/index.d.ts.map +1 -0
- package/dist/workflow/config.d.ts +135 -0
- package/dist/workflow/config.d.ts.map +1 -0
- package/dist/workflow/config.js +92 -0
- package/dist/workflow/config.js.map +1 -0
- package/dist/workflow/handlers/index.d.ts +9 -0
- package/dist/workflow/handlers/index.d.ts.map +1 -0
- package/dist/workflow/handlers/webhook-handlers.d.ts +397 -0
- package/dist/workflow/handlers/webhook-handlers.d.ts.map +1 -0
- package/dist/workflow/handlers/webhook-handlers.js +454 -0
- package/dist/workflow/handlers/webhook-handlers.js.map +1 -0
- package/dist/workflow/index.d.ts +42 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/services/index.d.ts +9 -0
- package/dist/workflow/services/index.d.ts.map +1 -0
- package/dist/workflow/services/workflow-service.d.ts +318 -0
- package/dist/workflow/services/workflow-service.d.ts.map +1 -0
- package/dist/workflow/services/workflow-service.js +577 -0
- package/dist/workflow/services/workflow-service.js.map +1 -0
- package/dist/workflow/types.d.ts +470 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/workflows/realtime-collab.d.ts +245 -0
- package/dist/workflow/workflows/realtime-collab.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../src/audit/config.ts"],"sourcesContent":["/**\n * Exochain Audit Configuration\n *\n * Configuration for deterministic logging with DAG-BFT consensus.\n * Supports multiple backends: file, postgres, and memory.\n *\n * @module audit/config\n */\n\n/**\n * Storage backend types for audit chain.\n * - `file`: Local file-based storage with rotation support\n * - `postgres`: PostgreSQL database with schema isolation\n * - `memory`: In-memory storage for testing/development\n */\nexport type AuditBackend = 'file' | 'postgres' | 'memory';\n\n/**\n * Consensus mechanism types for achieving finality.\n * - `proof-of-learning`: Learning-based consensus for AI agents\n * - `byzantine`: Classical BFT consensus (2f+1 validators)\n * - `raft`: Leader-based consensus for simpler setups\n * - `gossip`: Epidemic-style eventual consistency\n * - `none`: No consensus, single-agent mode\n */\nexport type ConsensusType = 'proof-of-learning' | 'byzantine' | 'raft' | 'gossip' | 'none';\n\n/**\n * File backend configuration options.\n */\nexport interface FileBackendConfig {\n /** Directory for storing audit chain data */\n dataDir: string;\n /** Maximum file size in bytes before rotation (default: 10MB) */\n maxFileSize?: number;\n /** Number of events before rotating to new file */\n rotateAfterEvents?: number;\n}\n\n/**\n * PostgreSQL backend configuration options.\n */\nexport interface PostgresBackendConfig {\n /** PostgreSQL connection string */\n connectionString: string;\n /** Database schema for audit tables */\n schema: string;\n}\n\n/**\n * Audit chain configuration defining storage, consensus, and syndication settings.\n */\nexport interface AuditChainConfig {\n /** Storage backend type */\n backend: AuditBackend;\n /** Agent's DID (Decentralized Identifier) for event signing */\n agentDid: string;\n /** Ed25519 private key for signing (64-byte hex string) */\n privateKey?: string;\n /** Enable consensus mechanism for finality */\n enableConsensus: boolean;\n /** Type of consensus mechanism to use */\n consensusType: ConsensusType;\n /** Number of events between checkpoints */\n checkpointInterval: number;\n /** File backend configuration (required if backend is 'file') */\n file?: FileBackendConfig;\n /** PostgreSQL backend configuration (required if backend is 'postgres') */\n postgres?: PostgresBackendConfig;\n /** Peer endpoints for event syndication */\n peers?: string[];\n /** Enable automatic peer syndication */\n enableSyndication: boolean;\n /** Interval between syndication attempts in milliseconds */\n syndicationInterval?: number;\n}\n\n/**\n * Default checkpoint interval (every 100 events).\n */\nexport const DEFAULT_CHECKPOINT_INTERVAL = 100;\n\n/**\n * Default syndication interval (5 minutes).\n */\nexport const DEFAULT_SYNDICATION_INTERVAL = 5 * 60 * 1000;\n\n/**\n * Default maximum file size for file backend (10MB).\n */\nexport const DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;\n\n/**\n * Default number of events before file rotation.\n */\nexport const DEFAULT_ROTATE_AFTER_EVENTS = 10000;\n\n/**\n * Generate a default DID for the agent based on timestamp and random component.\n *\n * @returns A unique DID string in the format `did:exo:agent-{timestamp}{random}`\n *\n * @example\n * ```typescript\n * const did = generateDefaultDid();\n * // did:exo:agent-m1abc123xyz\n * ```\n */\nfunction generateDefaultDid(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `did:exo:agent-${timestamp}${random}`;\n}\n\n/**\n * Create audit chain configuration from environment variables.\n *\n * Environment variables:\n * - `EXOCHAIN_BACKEND`: Storage backend (file|postgres|memory)\n * - `EXOCHAIN_AGENT_DID`: Agent's decentralized identifier\n * - `EXOCHAIN_PRIVATE_KEY`: Ed25519 private key for signing\n * - `EXOCHAIN_ENABLE_CONSENSUS`: Enable consensus (true|false)\n * - `EXOCHAIN_CONSENSUS_TYPE`: Consensus mechanism type\n * - `EXOCHAIN_CHECKPOINT_INTERVAL`: Events between checkpoints\n * - `EXOCHAIN_ENABLE_SYNDICATION`: Enable peer syndication\n * - `EXOCHAIN_SYNDICATION_INTERVAL`: Syndication interval in ms\n * - `EXOCHAIN_PEER_ENDPOINTS`: Comma-separated peer URLs\n * - `EXOCHAIN_DATA_DIR`: Data directory for file backend\n * - `EXOCHAIN_MAX_FILE_SIZE`: Max file size for file backend\n * - `EXOCHAIN_ROTATE_AFTER_EVENTS`: Events before file rotation\n * - `DATABASE_URL`: PostgreSQL connection string\n * - `EXOCHAIN_SCHEMA`: PostgreSQL schema name\n *\n * @returns Fully populated AuditChainConfig\n *\n * @example\n * ```typescript\n * // Set environment variables\n * process.env.EXOCHAIN_BACKEND = 'file';\n * process.env.EXOCHAIN_DATA_DIR = './audit-data';\n *\n * const config = createAuditChainConfig();\n * ```\n */\nexport function createAuditChainConfig(): AuditChainConfig {\n const backend = (process.env.EXOCHAIN_BACKEND || 'memory') as AuditBackend;\n\n const baseConfig: AuditChainConfig = {\n backend,\n agentDid: process.env.EXOCHAIN_AGENT_DID || generateDefaultDid(),\n privateKey: process.env.EXOCHAIN_PRIVATE_KEY,\n enableConsensus: process.env.EXOCHAIN_ENABLE_CONSENSUS === 'true',\n consensusType: (process.env.EXOCHAIN_CONSENSUS_TYPE || 'none') as ConsensusType,\n checkpointInterval: parseInt(\n process.env.EXOCHAIN_CHECKPOINT_INTERVAL || String(DEFAULT_CHECKPOINT_INTERVAL),\n 10\n ),\n enableSyndication: process.env.EXOCHAIN_ENABLE_SYNDICATION === 'true',\n syndicationInterval: parseInt(\n process.env.EXOCHAIN_SYNDICATION_INTERVAL || String(DEFAULT_SYNDICATION_INTERVAL),\n 10\n ),\n peers: process.env.EXOCHAIN_PEER_ENDPOINTS?.split(',').filter(Boolean) || [],\n };\n\n switch (backend) {\n case 'file':\n return {\n ...baseConfig,\n file: {\n dataDir: process.env.EXOCHAIN_DATA_DIR || '.exochain',\n maxFileSize: parseInt(\n process.env.EXOCHAIN_MAX_FILE_SIZE || String(DEFAULT_MAX_FILE_SIZE),\n 10\n ),\n rotateAfterEvents: parseInt(\n process.env.EXOCHAIN_ROTATE_AFTER_EVENTS || String(DEFAULT_ROTATE_AFTER_EVENTS),\n 10\n ),\n },\n };\n case 'postgres':\n return {\n ...baseConfig,\n postgres: {\n connectionString: process.env.DATABASE_URL || 'postgres://localhost:5432/kg_agent',\n schema: process.env.EXOCHAIN_SCHEMA || 'exochain',\n },\n };\n default:\n return baseConfig;\n }\n}\n\n/**\n * Validation result for audit chain configuration.\n */\nexport interface ConfigValidationResult {\n /** Whether the configuration is valid */\n valid: boolean;\n /** List of validation error messages */\n errors: string[];\n}\n\n/**\n * Validate audit chain configuration for completeness and consistency.\n *\n * @param config - The configuration to validate\n * @returns Validation result with errors if invalid\n *\n * @example\n * ```typescript\n * const config = createAuditChainConfig();\n * const result = validateAuditChainConfig(config);\n *\n * if (!result.valid) {\n * console.error('Configuration errors:', result.errors);\n * }\n * ```\n */\nexport function validateAuditChainConfig(config: AuditChainConfig): ConfigValidationResult {\n const errors: string[] = [];\n\n // Required field validation\n if (!config.agentDid) {\n errors.push('Agent DID is required');\n } else if (!config.agentDid.startsWith('did:')) {\n errors.push('Agent DID must be a valid DID (starting with \"did:\")');\n }\n\n // Backend-specific validation\n if (config.backend === 'file') {\n if (!config.file?.dataDir) {\n errors.push('File data directory is required for file backend');\n }\n if (config.file?.maxFileSize !== undefined && config.file.maxFileSize <= 0) {\n errors.push('Max file size must be positive');\n }\n if (config.file?.rotateAfterEvents !== undefined && config.file.rotateAfterEvents <= 0) {\n errors.push('Rotate after events must be positive');\n }\n }\n\n if (config.backend === 'postgres') {\n if (!config.postgres?.connectionString) {\n errors.push('PostgreSQL connection string is required for postgres backend');\n }\n if (!config.postgres?.schema) {\n errors.push('PostgreSQL schema is required for postgres backend');\n }\n }\n\n // Consensus validation\n if (config.enableConsensus && config.consensusType === 'none') {\n errors.push('Consensus type must be specified when consensus is enabled');\n }\n\n // Syndication validation\n if (config.enableSyndication && (!config.peers || config.peers.length === 0)) {\n errors.push('At least one peer is required for syndication');\n }\n\n // Interval validation\n if (config.checkpointInterval <= 0) {\n errors.push('Checkpoint interval must be positive');\n }\n\n if (config.syndicationInterval !== undefined && config.syndicationInterval <= 0) {\n errors.push('Syndication interval must be positive');\n }\n\n // Private key validation (if provided)\n if (config.privateKey !== undefined) {\n if (!/^[0-9a-fA-F]{128}$/.test(config.privateKey)) {\n errors.push('Private key must be a 64-byte hex string (128 characters)');\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Default configuration created from environment variables.\n * This is a convenience export for simple use cases.\n */\nexport const defaultConfig = createAuditChainConfig();\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all audit-related functionality for deterministic logging
|
|
5
|
+
* with DAG-BFT consensus support. This module provides:
|
|
6
|
+
*
|
|
7
|
+
* - Configuration management for multiple storage backends
|
|
8
|
+
* - Type definitions for events, checkpoints, and synchronization
|
|
9
|
+
* - Utility functions for Hybrid Logical Clock operations
|
|
10
|
+
*
|
|
11
|
+
* @module audit
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import {
|
|
16
|
+
* createAuditChainConfig,
|
|
17
|
+
* validateAuditChainConfig,
|
|
18
|
+
* type LedgerEvent,
|
|
19
|
+
* type KnowledgeGraphEventPayload,
|
|
20
|
+
* createHLC,
|
|
21
|
+
* } from './audit/index.js';
|
|
22
|
+
*
|
|
23
|
+
* // Create and validate configuration
|
|
24
|
+
* const config = createAuditChainConfig();
|
|
25
|
+
* const { valid, errors } = validateAuditChainConfig(config);
|
|
26
|
+
*
|
|
27
|
+
* if (!valid) {
|
|
28
|
+
* throw new Error(`Invalid config: ${errors.join(', ')}`);
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* // Create an HLC for event ordering
|
|
32
|
+
* const hlc = createHLC();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export { type AuditBackend, type ConsensusType, type FileBackendConfig, type PostgresBackendConfig, type AuditChainConfig, type ConfigValidationResult, DEFAULT_CHECKPOINT_INTERVAL, DEFAULT_SYNDICATION_INTERVAL, DEFAULT_MAX_FILE_SIZE, DEFAULT_ROTATE_AFTER_EVENTS, createAuditChainConfig, validateAuditChainConfig, defaultConfig, } from './config.js';
|
|
36
|
+
export { type Blake3Hash, type Ed25519Signature, type Did, type HybridLogicalClock, type NodeCreatedPayload, type NodeUpdatedPayload, type NodeDeletedPayload, type EdgeCreatedPayload, type EdgeDeletedPayload, type QueryExecutedPayload, type WorkflowStartedPayload, type WorkflowCompletedPayload, type WorkflowStepCompletedPayload, type GapDetectedPayload, type TaskSpecGeneratedPayload, type ConflictDetectedPayload, type ConflictResolvedPayload, type SyncStartedPayload, type SyncCompletedPayload, type CheckpointCreatedPayload, type KnowledgeGraphEventPayload, type EventEnvelope, type LedgerEvent, type ValidatorSignature, type Checkpoint, type MerkleProof, type SyncRequest, type SyncResponse, type EventQueryOptions, type EventQueryResult, type ChainStatus, type ChainStats, type EventValidation, type ExtractPayload, type EventType, compareHLC, createHLC, mergeHLC, } from './types.js';
|
|
37
|
+
export { AuditChain, createAuditChain } from './services/index.js';
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,GAAG,EAGR,KAAK,kBAAkB,EAGvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAG7B,KAAK,0BAA0B,EAG/B,KAAK,aAAa,EAClB,KAAK,WAAW,EAGhB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,WAAW,EAGhB,KAAK,WAAW,EAChB,KAAK,YAAY,EAGjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAGrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EAGpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGd,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Chain Service
|
|
3
|
+
*
|
|
4
|
+
* Implements deterministic logging with:
|
|
5
|
+
* - DAG (Directed Acyclic Graph) structure for event ordering
|
|
6
|
+
* - Hybrid Logical Clocks (HLC) for distributed ordering
|
|
7
|
+
* - BLAKE3 hashing for event IDs
|
|
8
|
+
* - Ed25519 signatures for authenticity
|
|
9
|
+
*
|
|
10
|
+
* @module audit/services/audit-chain
|
|
11
|
+
*/
|
|
12
|
+
import type { Blake3Hash, KnowledgeGraphEventPayload, LedgerEvent, Checkpoint, MerkleProof, EventQueryOptions, EventQueryResult, ChainStats, EventValidation } from '../types.js';
|
|
13
|
+
import type { AuditChainConfig } from '../config.js';
|
|
14
|
+
/**
|
|
15
|
+
* Audit Chain class
|
|
16
|
+
*
|
|
17
|
+
* Provides:
|
|
18
|
+
* - Event creation and signing
|
|
19
|
+
* - DAG-based event storage
|
|
20
|
+
* - HLC-based ordering
|
|
21
|
+
* - Checkpoint creation
|
|
22
|
+
* - Event querying with Merkle proofs
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const chain = createAuditChain({ agentDid: 'did:key:abc123' });
|
|
27
|
+
*
|
|
28
|
+
* // Append an event
|
|
29
|
+
* const event = await chain.appendEvent({
|
|
30
|
+
* type: 'NodeCreated',
|
|
31
|
+
* nodeId: 'node-1',
|
|
32
|
+
* nodeType: 'Document',
|
|
33
|
+
* properties: { title: 'My Doc' }
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // Query events
|
|
37
|
+
* const result = await chain.queryEvents({ type: 'NodeCreated', limit: 10 });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare class AuditChain {
|
|
41
|
+
private config;
|
|
42
|
+
private events;
|
|
43
|
+
private tips;
|
|
44
|
+
private hlc;
|
|
45
|
+
private checkpoints;
|
|
46
|
+
private eventsSinceCheckpoint;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new AuditChain instance
|
|
49
|
+
*
|
|
50
|
+
* @param config - Partial configuration (merged with defaults)
|
|
51
|
+
*/
|
|
52
|
+
constructor(config?: Partial<AuditChainConfig>);
|
|
53
|
+
/**
|
|
54
|
+
* Tick the HLC and return new timestamp
|
|
55
|
+
*
|
|
56
|
+
* Implements the HLC tick algorithm:
|
|
57
|
+
* - If physical time has advanced, reset logical counter
|
|
58
|
+
* - Otherwise, increment logical counter
|
|
59
|
+
*
|
|
60
|
+
* @returns New HLC timestamp
|
|
61
|
+
*/
|
|
62
|
+
private tickHLC;
|
|
63
|
+
/**
|
|
64
|
+
* Update HLC based on received event
|
|
65
|
+
*
|
|
66
|
+
* Implements the HLC receive algorithm:
|
|
67
|
+
* - Take max of local, remote, and current time
|
|
68
|
+
* - Adjust logical counter appropriately
|
|
69
|
+
*
|
|
70
|
+
* @param received - HLC from received event
|
|
71
|
+
*/
|
|
72
|
+
private updateHLC;
|
|
73
|
+
/**
|
|
74
|
+
* Compare two HLCs
|
|
75
|
+
*
|
|
76
|
+
* @param a - First HLC
|
|
77
|
+
* @param b - Second HLC
|
|
78
|
+
* @returns Negative if a < b, positive if a > b, zero if equal
|
|
79
|
+
*/
|
|
80
|
+
private compareHLC;
|
|
81
|
+
/**
|
|
82
|
+
* Get current DAG tips (events with no children)
|
|
83
|
+
*
|
|
84
|
+
* Tips are the "leaf" events in the DAG that have not been
|
|
85
|
+
* referenced as parents by any other event.
|
|
86
|
+
*
|
|
87
|
+
* @returns Array of tip event IDs
|
|
88
|
+
*/
|
|
89
|
+
getTips(): Blake3Hash[];
|
|
90
|
+
/**
|
|
91
|
+
* Append an event to the chain
|
|
92
|
+
*
|
|
93
|
+
* Creates a new event with:
|
|
94
|
+
* - Current tips as parents (DAG structure)
|
|
95
|
+
* - New HLC timestamp
|
|
96
|
+
* - Signature for authenticity
|
|
97
|
+
*
|
|
98
|
+
* @param payload - Event payload to append
|
|
99
|
+
* @returns The created ledger event
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const event = await chain.appendEvent({
|
|
104
|
+
* type: 'NodeCreated',
|
|
105
|
+
* nodeId: 'doc-1',
|
|
106
|
+
* nodeType: 'Document',
|
|
107
|
+
* properties: { title: 'README' }
|
|
108
|
+
* });
|
|
109
|
+
* console.log('Event ID:', event.id);
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
appendEvent(payload: KnowledgeGraphEventPayload): Promise<LedgerEvent>;
|
|
113
|
+
/**
|
|
114
|
+
* Validate and insert an external event
|
|
115
|
+
*
|
|
116
|
+
* Performs validation:
|
|
117
|
+
* - Signature verification
|
|
118
|
+
* - Parent existence check
|
|
119
|
+
* - Causality verification (HLC ordering)
|
|
120
|
+
* - Event ID recomputation
|
|
121
|
+
*
|
|
122
|
+
* @param event - External event to validate and insert
|
|
123
|
+
* @returns Validation result with details
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const validation = await chain.validateAndInsert(externalEvent);
|
|
128
|
+
* if (validation.valid) {
|
|
129
|
+
* console.log('Event inserted successfully');
|
|
130
|
+
* } else {
|
|
131
|
+
* console.error('Validation failed:', validation.errors);
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
validateAndInsert(event: LedgerEvent): Promise<EventValidation>;
|
|
136
|
+
/**
|
|
137
|
+
* Create a checkpoint
|
|
138
|
+
*
|
|
139
|
+
* Checkpoints provide:
|
|
140
|
+
* - Periodic state snapshots
|
|
141
|
+
* - Efficient verification of chain integrity
|
|
142
|
+
* - Recovery points for sync
|
|
143
|
+
*
|
|
144
|
+
* @returns The created checkpoint
|
|
145
|
+
*/
|
|
146
|
+
createCheckpoint(): Promise<Checkpoint>;
|
|
147
|
+
/**
|
|
148
|
+
* Get the latest checkpoint
|
|
149
|
+
*
|
|
150
|
+
* @returns The most recent checkpoint, or null if none exist
|
|
151
|
+
*/
|
|
152
|
+
getLatestCheckpoint(): Checkpoint | null;
|
|
153
|
+
/**
|
|
154
|
+
* Get an event by ID
|
|
155
|
+
*
|
|
156
|
+
* @param eventId - Event ID to look up
|
|
157
|
+
* @returns The event, or null if not found
|
|
158
|
+
*/
|
|
159
|
+
getEvent(eventId: Blake3Hash): LedgerEvent | null;
|
|
160
|
+
/**
|
|
161
|
+
* Query events
|
|
162
|
+
*
|
|
163
|
+
* Supports filtering by:
|
|
164
|
+
* - Event type
|
|
165
|
+
* - Author DID
|
|
166
|
+
* - Time range (HLC)
|
|
167
|
+
* - With optional Merkle proofs
|
|
168
|
+
*
|
|
169
|
+
* @param options - Query options
|
|
170
|
+
* @returns Query result with matching events
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* // Get all NodeCreated events
|
|
175
|
+
* const result = await chain.queryEvents({
|
|
176
|
+
* type: 'NodeCreated',
|
|
177
|
+
* limit: 50,
|
|
178
|
+
* includeProof: true
|
|
179
|
+
* });
|
|
180
|
+
*
|
|
181
|
+
* for (const event of result.events) {
|
|
182
|
+
* console.log(event.envelope.payload);
|
|
183
|
+
* }
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
queryEvents(options: EventQueryOptions): Promise<EventQueryResult>;
|
|
187
|
+
/**
|
|
188
|
+
* Generate a Merkle proof for an event
|
|
189
|
+
*
|
|
190
|
+
* @param eventId - Event ID to generate proof for
|
|
191
|
+
* @returns Merkle proof structure
|
|
192
|
+
*/
|
|
193
|
+
private generateMerkleProof;
|
|
194
|
+
/**
|
|
195
|
+
* Verify a Merkle proof
|
|
196
|
+
*
|
|
197
|
+
* @param proof - Proof to verify
|
|
198
|
+
* @returns Whether the proof is valid
|
|
199
|
+
*/
|
|
200
|
+
verifyMerkleProof(proof: MerkleProof): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Get chain statistics
|
|
203
|
+
*
|
|
204
|
+
* @returns Current chain statistics
|
|
205
|
+
*/
|
|
206
|
+
getStats(): ChainStats;
|
|
207
|
+
/**
|
|
208
|
+
* Get configuration
|
|
209
|
+
*
|
|
210
|
+
* @returns Current configuration (copy)
|
|
211
|
+
*/
|
|
212
|
+
getConfig(): AuditChainConfig;
|
|
213
|
+
/**
|
|
214
|
+
* Clear all events (for testing)
|
|
215
|
+
*
|
|
216
|
+
* Resets the chain to initial state.
|
|
217
|
+
*/
|
|
218
|
+
clear(): void;
|
|
219
|
+
/**
|
|
220
|
+
* Export chain data
|
|
221
|
+
*
|
|
222
|
+
* Exports all events, checkpoints, and tips for backup or sync.
|
|
223
|
+
*
|
|
224
|
+
* @returns Exported chain data
|
|
225
|
+
*/
|
|
226
|
+
export(): {
|
|
227
|
+
events: LedgerEvent[];
|
|
228
|
+
checkpoints: Checkpoint[];
|
|
229
|
+
tips: Blake3Hash[];
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Import chain data
|
|
233
|
+
*
|
|
234
|
+
* Imports events from external source, validating each.
|
|
235
|
+
*
|
|
236
|
+
* @param data - Data to import
|
|
237
|
+
* @returns Import statistics
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```typescript
|
|
241
|
+
* const exported = sourceChain.export();
|
|
242
|
+
* const { imported, rejected } = await targetChain.import(exported);
|
|
243
|
+
* console.log(`Imported ${imported} events, rejected ${rejected}`);
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
import(data: {
|
|
247
|
+
events: LedgerEvent[];
|
|
248
|
+
checkpoints?: Checkpoint[];
|
|
249
|
+
}): Promise<{
|
|
250
|
+
imported: number;
|
|
251
|
+
rejected: number;
|
|
252
|
+
}>;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Create an audit chain instance
|
|
256
|
+
*
|
|
257
|
+
* Factory function for creating AuditChain instances.
|
|
258
|
+
*
|
|
259
|
+
* @param config - Optional configuration overrides
|
|
260
|
+
* @returns New AuditChain instance
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* // Create with defaults
|
|
265
|
+
* const chain = createAuditChain();
|
|
266
|
+
*
|
|
267
|
+
* // Create with custom config
|
|
268
|
+
* const chain = createAuditChain({
|
|
269
|
+
* agentDid: 'did:key:myagent',
|
|
270
|
+
* backend: 'sqlite',
|
|
271
|
+
* sqlitePath: './audit.db'
|
|
272
|
+
* });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
export declare function createAuditChain(config?: Partial<AuditChainConfig>): AuditChain;
|
|
276
|
+
//# sourceMappingURL=audit-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-chain.d.ts","sourceRoot":"","sources":["../../../src/audit/services/audit-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,UAAU,EAIV,0BAA0B,EAE1B,WAAW,EACX,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAoErD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,qBAAqB,CAAa;IAE1C;;;;OAIG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAqB9C;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO;IAef;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;IAyBjB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;;;;OAOG;IACH,OAAO,IAAI,UAAU,EAAE;IAIvB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,WAAW,CACf,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,WAAW,CAAC;IAuDvB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAkErE;;;;;;;;;OASG;IACG,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAsC7C;;;;OAIG;IACH,mBAAmB,IAAI,UAAU,GAAG,IAAI;IAIxC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAIjD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkDxE;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAM9C;;;;OAIG;IACH,QAAQ,IAAI,UAAU;IA0BtB;;;;OAIG;IACH,SAAS,IAAI,gBAAgB;IAI7B;;;;OAIG;IACH,KAAK,IAAI,IAAI;IASb;;;;;;OAMG;IACH,MAAM,IAAI;QACR,MAAM,EAAE,WAAW,EAAE,CAAC;QACtB,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,IAAI,EAAE,UAAU,EAAE,CAAC;KACpB;IAQD;;;;;;;;;;;;;;OAcG;IACG,MAAM,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,WAAW,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;KAC5B,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBpD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,UAAU,CAEZ"}
|