rust-kgdb 0.6.5 → 0.6.6
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/hypermind-agent.js +254 -0
- package/index.js +6 -0
- package/package.json +1 -1
package/hypermind-agent.js
CHANGED
|
@@ -1369,6 +1369,256 @@ class AgentScope {
|
|
|
1369
1369
|
}
|
|
1370
1370
|
}
|
|
1371
1371
|
|
|
1372
|
+
// ============================================================================
|
|
1373
|
+
// ComposedAgent - Agent with sandbox execution and witness generation
|
|
1374
|
+
// ============================================================================
|
|
1375
|
+
|
|
1376
|
+
/**
|
|
1377
|
+
* ComposedAgent - Agent with sandbox execution and witness generation
|
|
1378
|
+
* Built using AgentBuilder fluent API
|
|
1379
|
+
*/
|
|
1380
|
+
class ComposedAgent {
|
|
1381
|
+
constructor(config) {
|
|
1382
|
+
this.name = config.name
|
|
1383
|
+
this.tools = config.tools || []
|
|
1384
|
+
this.planner = config.planner || 'claude-sonnet-4'
|
|
1385
|
+
this.sandboxConfig = config.sandbox || { capabilities: ['ReadKG'], fuelLimit: 1000000 }
|
|
1386
|
+
this.hooks = config.hooks || {}
|
|
1387
|
+
this.sandbox = new WasmSandbox(this.sandboxConfig)
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
/**
|
|
1391
|
+
* Execute with natural language prompt
|
|
1392
|
+
* @param {string} prompt - Natural language query
|
|
1393
|
+
* @returns {Promise<Object>} - Execution result with witness
|
|
1394
|
+
*/
|
|
1395
|
+
async call(prompt) {
|
|
1396
|
+
const startTime = Date.now()
|
|
1397
|
+
const planId = `plan-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`
|
|
1398
|
+
|
|
1399
|
+
// Fire beforePlan hook
|
|
1400
|
+
if (this.hooks.beforePlan) {
|
|
1401
|
+
this.hooks.beforePlan({ prompt, agent: this.name })
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
// Create plan (in production, this would call LLM)
|
|
1405
|
+
const plan = {
|
|
1406
|
+
id: planId,
|
|
1407
|
+
steps: this.tools.map((tool, i) => ({
|
|
1408
|
+
step: i + 1,
|
|
1409
|
+
tool: tool.name || tool,
|
|
1410
|
+
input: prompt
|
|
1411
|
+
})),
|
|
1412
|
+
confidence: 0.95
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
// Fire afterPlan hook
|
|
1416
|
+
if (this.hooks.afterPlan) {
|
|
1417
|
+
this.hooks.afterPlan({ plan, agent: this.name })
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
// Fire beforeExecute hook
|
|
1421
|
+
if (this.hooks.beforeExecute) {
|
|
1422
|
+
this.hooks.beforeExecute({ plan, agent: this.name })
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
// Execute plan steps
|
|
1426
|
+
const results = []
|
|
1427
|
+
for (const step of plan.steps) {
|
|
1428
|
+
try {
|
|
1429
|
+
// Execute in sandbox
|
|
1430
|
+
const result = await this.sandbox.execute(step.tool, step.input)
|
|
1431
|
+
results.push({
|
|
1432
|
+
step: step,
|
|
1433
|
+
result: result,
|
|
1434
|
+
status: 'completed'
|
|
1435
|
+
})
|
|
1436
|
+
} catch (error) {
|
|
1437
|
+
results.push({
|
|
1438
|
+
step: step,
|
|
1439
|
+
error: error.message,
|
|
1440
|
+
status: 'failed'
|
|
1441
|
+
})
|
|
1442
|
+
if (this.hooks.onError) {
|
|
1443
|
+
this.hooks.onError({ step, error, agent: this.name })
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
const endTime = Date.now()
|
|
1449
|
+
|
|
1450
|
+
// Generate execution witness
|
|
1451
|
+
const witness = {
|
|
1452
|
+
witness_version: '1.0.0',
|
|
1453
|
+
timestamp: new Date().toISOString(),
|
|
1454
|
+
agent: this.name,
|
|
1455
|
+
model: this.planner,
|
|
1456
|
+
plan: {
|
|
1457
|
+
id: plan.id,
|
|
1458
|
+
steps: plan.steps.length,
|
|
1459
|
+
confidence: plan.confidence
|
|
1460
|
+
},
|
|
1461
|
+
execution: {
|
|
1462
|
+
tool_calls: results.map(r => ({
|
|
1463
|
+
tool: r.step.tool,
|
|
1464
|
+
status: r.status
|
|
1465
|
+
}))
|
|
1466
|
+
},
|
|
1467
|
+
sandbox_metrics: this.sandbox.getMetrics ? this.sandbox.getMetrics() : {},
|
|
1468
|
+
audit_log: this.sandbox.getAuditLog ? this.sandbox.getAuditLog() : [],
|
|
1469
|
+
proof_hash: this._generateProofHash(plan, results)
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1472
|
+
const response = {
|
|
1473
|
+
response: `Executed ${results.filter(r => r.status === 'completed').length}/${results.length} steps successfully`,
|
|
1474
|
+
plan,
|
|
1475
|
+
results,
|
|
1476
|
+
witness,
|
|
1477
|
+
metrics: {
|
|
1478
|
+
total_time_ms: endTime - startTime,
|
|
1479
|
+
tool_calls: results.length
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
// Fire afterExecute hook
|
|
1484
|
+
if (this.hooks.afterExecute) {
|
|
1485
|
+
this.hooks.afterExecute(response)
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
return response
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
_generateProofHash(plan, results) {
|
|
1492
|
+
// Simple hash generation - in production use crypto
|
|
1493
|
+
const data = JSON.stringify({ plan: plan.id, results: results.length, timestamp: Date.now() })
|
|
1494
|
+
let hash = 0
|
|
1495
|
+
for (let i = 0; i < data.length; i++) {
|
|
1496
|
+
const char = data.charCodeAt(i)
|
|
1497
|
+
hash = ((hash << 5) - hash) + char
|
|
1498
|
+
hash = hash & hash
|
|
1499
|
+
}
|
|
1500
|
+
return `sha256:${Math.abs(hash).toString(16).padStart(16, '0')}`
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
// ============================================================================
|
|
1505
|
+
// AgentBuilder - Fluent builder for agent composition
|
|
1506
|
+
// ============================================================================
|
|
1507
|
+
|
|
1508
|
+
/**
|
|
1509
|
+
* AgentBuilder - Fluent builder pattern for composing agents
|
|
1510
|
+
*
|
|
1511
|
+
* @example
|
|
1512
|
+
* const agent = new AgentBuilder('compliance-checker')
|
|
1513
|
+
* .withTool('kg.sparql.query')
|
|
1514
|
+
* .withTool('kg.datalog.infer')
|
|
1515
|
+
* .withPlanner('claude-sonnet-4')
|
|
1516
|
+
* .withPolicy({
|
|
1517
|
+
* maxExecutionTime: 30000,
|
|
1518
|
+
* allowedTools: ['kg.sparql.query'],
|
|
1519
|
+
* auditLevel: 'full'
|
|
1520
|
+
* })
|
|
1521
|
+
* .withSandbox({ capabilities: ['ReadKG'], fuelLimit: 1000000 })
|
|
1522
|
+
* .withHook('afterExecute', (data) => console.log(data))
|
|
1523
|
+
* .build()
|
|
1524
|
+
*/
|
|
1525
|
+
class AgentBuilder {
|
|
1526
|
+
constructor(name) {
|
|
1527
|
+
this._name = name
|
|
1528
|
+
this._tools = []
|
|
1529
|
+
this._planner = 'claude-sonnet-4'
|
|
1530
|
+
this._sandbox = { capabilities: ['ReadKG'], fuelLimit: 1000000 }
|
|
1531
|
+
this._hooks = {}
|
|
1532
|
+
this._policy = null
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
/**
|
|
1536
|
+
* Add tool to agent (from TOOL_REGISTRY)
|
|
1537
|
+
* @param {string} toolName - Tool name (e.g., 'kg.sparql.query')
|
|
1538
|
+
* @param {Function} [toolImpl] - Optional custom implementation
|
|
1539
|
+
* @returns {this} - Builder for chaining
|
|
1540
|
+
*/
|
|
1541
|
+
withTool(toolName, toolImpl) {
|
|
1542
|
+
this._tools.push({ name: toolName, impl: toolImpl })
|
|
1543
|
+
return this
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
/**
|
|
1547
|
+
* Set LLM planner model
|
|
1548
|
+
* @param {string} model - Model name (e.g., 'claude-sonnet-4', 'gpt-4o')
|
|
1549
|
+
* @returns {this} - Builder for chaining
|
|
1550
|
+
*/
|
|
1551
|
+
withPlanner(model) {
|
|
1552
|
+
this._planner = model
|
|
1553
|
+
return this
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
/**
|
|
1557
|
+
* Configure WASM sandbox
|
|
1558
|
+
* @param {Object} config - Sandbox configuration
|
|
1559
|
+
* @param {number} [config.maxMemory] - Maximum memory in bytes
|
|
1560
|
+
* @param {number} [config.maxExecTime] - Maximum execution time in ms
|
|
1561
|
+
* @param {string[]} [config.capabilities] - Capabilities: 'ReadKG', 'WriteKG', 'ExecuteTool'
|
|
1562
|
+
* @param {number} [config.fuelLimit] - Fuel limit for operations
|
|
1563
|
+
* @returns {this} - Builder for chaining
|
|
1564
|
+
*/
|
|
1565
|
+
withSandbox(config) {
|
|
1566
|
+
this._sandbox = { ...this._sandbox, ...config }
|
|
1567
|
+
return this
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1570
|
+
/**
|
|
1571
|
+
* Set governance policy
|
|
1572
|
+
* @param {Object} policy - Policy configuration
|
|
1573
|
+
* @param {number} [policy.maxExecutionTime] - Maximum execution time in ms
|
|
1574
|
+
* @param {string[]} [policy.allowedTools] - List of allowed tools
|
|
1575
|
+
* @param {string[]} [policy.deniedTools] - List of denied tools
|
|
1576
|
+
* @param {string} [policy.auditLevel] - Audit level: 'none', 'basic', 'full'
|
|
1577
|
+
* @returns {this} - Builder for chaining
|
|
1578
|
+
*/
|
|
1579
|
+
withPolicy(policy) {
|
|
1580
|
+
this._policy = policy
|
|
1581
|
+
return this
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
/**
|
|
1585
|
+
* Add execution hook
|
|
1586
|
+
* @param {string} event - Event name: 'beforePlan', 'afterPlan', 'beforeExecute', 'afterExecute', 'onError'
|
|
1587
|
+
* @param {Function} handler - Event handler function
|
|
1588
|
+
* @returns {this} - Builder for chaining
|
|
1589
|
+
*/
|
|
1590
|
+
withHook(event, handler) {
|
|
1591
|
+
this._hooks[event] = handler
|
|
1592
|
+
return this
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
/**
|
|
1596
|
+
* Build the composed agent
|
|
1597
|
+
* @returns {ComposedAgent} - Configured agent ready for execution
|
|
1598
|
+
*/
|
|
1599
|
+
build() {
|
|
1600
|
+
// Apply policy restrictions to tools if policy is set
|
|
1601
|
+
let tools = this._tools
|
|
1602
|
+
if (this._policy) {
|
|
1603
|
+
if (this._policy.allowedTools) {
|
|
1604
|
+
tools = tools.filter(t => this._policy.allowedTools.includes(t.name))
|
|
1605
|
+
}
|
|
1606
|
+
if (this._policy.deniedTools) {
|
|
1607
|
+
tools = tools.filter(t => !this._policy.deniedTools.includes(t.name))
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
return new ComposedAgent({
|
|
1612
|
+
name: this._name,
|
|
1613
|
+
tools: tools,
|
|
1614
|
+
planner: this._planner,
|
|
1615
|
+
sandbox: this._sandbox,
|
|
1616
|
+
hooks: this._hooks,
|
|
1617
|
+
policy: this._policy
|
|
1618
|
+
})
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1372
1622
|
// ============================================================================
|
|
1373
1623
|
// EXPORTS
|
|
1374
1624
|
// ============================================================================
|
|
@@ -1377,6 +1627,10 @@ module.exports = {
|
|
|
1377
1627
|
// Main Agent
|
|
1378
1628
|
HyperMindAgent,
|
|
1379
1629
|
|
|
1630
|
+
// Builder Pattern
|
|
1631
|
+
AgentBuilder,
|
|
1632
|
+
ComposedAgent,
|
|
1633
|
+
|
|
1380
1634
|
// Supporting Classes
|
|
1381
1635
|
MemoryManager,
|
|
1382
1636
|
DatalogRuleSet,
|
package/index.js
CHANGED
|
@@ -61,6 +61,9 @@ const {
|
|
|
61
61
|
getHyperMindBenchmarkSuite,
|
|
62
62
|
validateSparqlSyntax,
|
|
63
63
|
createPlanningContext,
|
|
64
|
+
// Builder Pattern (v0.6.5+) - Fluent Agent Composition
|
|
65
|
+
AgentBuilder,
|
|
66
|
+
ComposedAgent,
|
|
64
67
|
// Memory Layer (v0.5.13+) - GraphDB-Powered Agent Memory
|
|
65
68
|
AgentState,
|
|
66
69
|
AgentRuntime,
|
|
@@ -103,6 +106,9 @@ module.exports = {
|
|
|
103
106
|
getHyperMindBenchmarkSuite,
|
|
104
107
|
validateSparqlSyntax,
|
|
105
108
|
createPlanningContext,
|
|
109
|
+
// Builder Pattern (v0.6.5+) - Fluent Agent Composition
|
|
110
|
+
AgentBuilder,
|
|
111
|
+
ComposedAgent,
|
|
106
112
|
// Memory Layer (v0.5.13+) - GraphDB-Powered Agent Memory
|
|
107
113
|
AgentState,
|
|
108
114
|
AgentRuntime,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rust-kgdb",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "Production-grade Neuro-Symbolic AI Framework with Memory Hypergraph: +86.4% accuracy improvement over vanilla LLMs. High-performance knowledge graph (2.78µs lookups, 35x faster than RDFox). Features Memory Hypergraph (temporal scoring, rolling context window, idempotent responses), fraud detection, underwriting agents, WASM sandbox, type/category/proof theory, and W3C SPARQL 1.1 compliance.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|