kynjal-cli 4.0.0 → 4.0.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/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
- package/dist/src/appliance/gguf-engine.js +286 -525
- package/dist/src/appliance/gguf-engine.js.map +1 -1
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
- package/dist/src/appliance/ruvllm-bridge.js +203 -403
- package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-builder.js +154 -208
- package/dist/src/appliance/rvfa-builder.js.map +1 -1
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-distribution.js +260 -423
- package/dist/src/appliance/rvfa-distribution.js.map +1 -1
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-format.js +128 -200
- package/dist/src/appliance/rvfa-format.js.map +1 -1
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-runner.js +168 -304
- package/dist/src/appliance/rvfa-runner.js.map +1 -1
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-signing.js +173 -295
- package/dist/src/appliance/rvfa-signing.js.map +1 -1
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
- package/dist/src/benchmarks/pretrain/index.js +331 -542
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent.js +574 -697
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.js +1218 -1548
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/appliance-advanced.js +158 -267
- package/dist/src/commands/appliance-advanced.js.map +1 -1
- package/dist/src/commands/appliance.js +318 -493
- package/dist/src/commands/appliance.js.map +1 -1
- package/dist/src/commands/benchmark.js +372 -523
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/claims.js +274 -364
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.js +113 -157
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/completions.js +477 -118
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +237 -303
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.js +487 -596
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.js +194 -275
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.js +504 -686
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +1293 -1543
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/guidance.js +449 -596
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.js +854 -938
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.js +3112 -3519
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +115 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +126 -308
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.js +788 -940
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.js +383 -558
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.js +493 -605
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.js +833 -1026
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +282 -347
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.js +1289 -1563
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.js +497 -643
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.js +668 -841
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.js +392 -447
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.js +162 -256
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +150 -220
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/route.js +520 -665
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +505 -651
- package/dist/src/commands/ruvector/backup.js.map +1 -1
- package/dist/src/commands/ruvector/benchmark.js +349 -401
- package/dist/src/commands/ruvector/benchmark.js.map +1 -1
- package/dist/src/commands/ruvector/import.js +224 -266
- package/dist/src/commands/ruvector/import.js.map +1 -1
- package/dist/src/commands/ruvector/index.js +37 -75
- package/dist/src/commands/ruvector/index.js.map +1 -1
- package/dist/src/commands/ruvector/init.js +336 -359
- package/dist/src/commands/ruvector/init.js.map +1 -1
- package/dist/src/commands/ruvector/migrate.js +335 -322
- package/dist/src/commands/ruvector/migrate.js.map +1 -1
- package/dist/src/commands/ruvector/optimize.js +375 -431
- package/dist/src/commands/ruvector/optimize.js.map +1 -1
- package/dist/src/commands/ruvector/setup.js +703 -117
- package/dist/src/commands/ruvector/setup.js.map +1 -1
- package/dist/src/commands/ruvector/status.js +364 -419
- package/dist/src/commands/ruvector/status.js.map +1 -1
- package/dist/src/commands/security.js +485 -608
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.js +504 -626
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.js +267 -364
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.js +380 -486
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +408 -488
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.js +423 -538
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/transfer-store.js +322 -412
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.js +196 -291
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.js +386 -486
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.d.ts.map +1 -0
- package/dist/src/config-adapter.js +38 -39
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/index.d.ts +77 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +309 -411
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
- package/dist/src/infrastructure/in-memory-repositories.js +246 -507
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts +25 -0
- package/dist/src/init/claudemd-generator.d.ts.map +1 -0
- package/dist/src/init/claudemd-generator.js +368 -78
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.d.ts.map +1 -0
- package/dist/src/init/executor.js +1307 -996
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +60 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -0
- package/dist/src/init/helpers-generator.js +657 -12
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/index.d.ts +1 -1
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +1 -1
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/mcp-generator.js +33 -37
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.js +76 -77
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +801 -3
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +76 -59
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.d.ts.map +1 -0
- package/dist/src/mcp-client.js +81 -125
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +161 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +470 -757
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +391 -492
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +332 -533
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +172 -236
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
- package/dist/src/mcp-tools/auto-install.js +80 -142
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +252 -375
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +473 -565
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +197 -272
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +500 -572
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +286 -364
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +582 -693
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +260 -311
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +350 -505
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +315 -412
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +420 -480
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +204 -278
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +297 -429
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +185 -234
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +207 -260
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +276 -325
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +270 -336
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +148 -196
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +186 -333
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +31 -0
- package/dist/src/mcp-tools/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +405 -450
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts +295 -0
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
- package/dist/src/memory/ewc-consolidation.js +190 -303
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +338 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -0
- package/dist/src/memory/intelligence.js +569 -794
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +407 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1170 -1640
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +412 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -0
- package/dist/src/memory/memory-initializer.js +1836 -1851
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +227 -0
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
- package/dist/src/memory/sona-optimizer.js +199 -329
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/output.d.ts +2 -2
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +242 -272
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts +51 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +140 -187
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +285 -521
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts +88 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -0
- package/dist/src/plugins/store/discovery.js +271 -358
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.d.ts.map +1 -0
- package/dist/src/plugins/store/index.js +48 -105
- package/dist/src/plugins/store/index.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.d.ts.map +1 -0
- package/dist/src/plugins/store/search.js +69 -107
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +274 -0
- package/dist/src/plugins/store/types.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
- package/dist/src/plugins/tests/standalone-test.js +172 -223
- package/dist/src/plugins/tests/standalone-test.js.map +1 -1
- package/dist/src/plugins/tests/test-plugin-store.js +190 -228
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.d.ts.map +1 -0
- package/dist/src/production/circuit-breaker.js +62 -126
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.d.ts.map +1 -0
- package/dist/src/production/error-handler.js +86 -156
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.d.ts.map +1 -0
- package/dist/src/production/monitoring.js +139 -220
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.d.ts.map +1 -0
- package/dist/src/production/rate-limiter.js +74 -93
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.d.ts.map +1 -0
- package/dist/src/production/retry.js +75 -167
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +436 -560
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.d.ts.map +1 -0
- package/dist/src/runtime/headless.js +197 -286
- package/dist/src/runtime/headless.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.d.ts +182 -0
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/agent-wasm.js +156 -351
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +145 -232
- package/dist/src/ruvector/ast-analyzer.js.map +1 -1
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +287 -419
- package/dist/src/ruvector/coverage-router.js.map +1 -1
- package/dist/src/ruvector/coverage-tools.js +56 -101
- package/dist/src/ruvector/coverage-tools.js.map +1 -1
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +324 -451
- package/dist/src/ruvector/diff-classifier.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
- package/dist/src/ruvector/enhanced-model-router.js +260 -336
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/flash-attention.d.ts +195 -0
- package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
- package/dist/src/ruvector/flash-attention.js +223 -254
- package/dist/src/ruvector/flash-attention.js.map +1 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +486 -680
- package/dist/src/ruvector/graph-analyzer.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +40 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +36 -106
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/lora-adapter.d.ts +218 -0
- package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
- package/dist/src/ruvector/lora-adapter.js +155 -248
- package/dist/src/ruvector/lora-adapter.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +220 -0
- package/dist/src/ruvector/model-router.d.ts.map +1 -0
- package/dist/src/ruvector/model-router.js +175 -248
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/moe-router.d.ts +206 -0
- package/dist/src/ruvector/moe-router.d.ts.map +1 -0
- package/dist/src/ruvector/moe-router.js +228 -286
- package/dist/src/ruvector/moe-router.js.map +1 -1
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +257 -338
- package/dist/src/ruvector/q-learning-router.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/ruvllm-wasm.js +270 -434
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
- package/dist/src/ruvector/semantic-router.js +60 -67
- package/dist/src/ruvector/semantic-router.js.map +1 -1
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +119 -205
- package/dist/src/ruvector/vector-db.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
- package/dist/src/services/agentic-flow-bridge.js +32 -105
- package/dist/src/services/agentic-flow-bridge.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.d.ts.map +1 -0
- package/dist/src/services/claim-service.js +615 -940
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/container-worker-pool.d.ts +197 -0
- package/dist/src/services/container-worker-pool.d.ts.map +1 -0
- package/dist/src/services/container-worker-pool.js +398 -666
- package/dist/src/services/container-worker-pool.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts +304 -0
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
- package/dist/src/services/headless-worker-executor.js +441 -467
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/index.d.ts +4 -4
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +4 -4
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.d.ts.map +1 -0
- package/dist/src/services/registry-api.js +92 -200
- package/dist/src/services/registry-api.js.map +1 -1
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.d.ts.map +1 -0
- package/dist/src/services/ruvector-training.js +257 -337
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts +228 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +591 -849
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.d.ts.map +1 -0
- package/dist/src/services/worker-queue.js +331 -548
- package/dist/src/services/worker-queue.js.map +1 -1
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +45 -55
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.js +29 -37
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/deploy-seraphine.js +128 -155
- package/dist/src/transfer/deploy-seraphine.js.map +1 -1
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.d.ts.map +1 -0
- package/dist/src/transfer/export.js +84 -142
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/index.d.ts +1 -1
- package/dist/src/transfer/index.d.ts.map +1 -1
- package/dist/src/transfer/index.js +0 -2
- package/dist/src/transfer/index.js.map +1 -1
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/client.js +187 -337
- package/dist/src/transfer/ipfs/client.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/upload.js +288 -434
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
- package/dist/src/transfer/models/seraphine.js +55 -55
- package/dist/src/transfer/models/seraphine.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
- package/dist/src/transfer/serialization/cfp.js +30 -31
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
- package/dist/src/transfer/storage/gcs.js +165 -232
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.d.ts.map +1 -0
- package/dist/src/transfer/store/discovery.js +239 -349
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.d.ts.map +1 -0
- package/dist/src/transfer/store/download.js +243 -365
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.d.ts.map +1 -0
- package/dist/src/transfer/store/index.js +63 -130
- package/dist/src/transfer/store/index.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.d.ts.map +1 -0
- package/dist/src/transfer/store/publish.js +184 -258
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.js +50 -72
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.d.ts.map +1 -0
- package/dist/src/transfer/store/search.js +64 -96
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/transfer/store/tests/standalone-test.js +174 -231
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
- package/dist/src/transfer/test-seraphine.js +95 -130
- package/dist/src/transfer/test-seraphine.js.map +1 -1
- package/dist/src/transfer/tests/test-store.js +194 -239
- package/dist/src/transfer/tests/test-store.js.map +1 -1
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/types.d.ts +198 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +26 -55
- package/dist/src/types.js.map +1 -1
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.d.ts.map +1 -0
- package/dist/src/update/checker.js +106 -183
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts +32 -0
- package/dist/src/update/executor.d.ts.map +1 -0
- package/dist/src/update/executor.js +135 -198
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +38 -85
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -0
- package/dist/src/update/rate-limiter.js +19 -31
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.d.ts.map +1 -0
- package/dist/src/update/validator.js +38 -64
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -3,64 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Tool definitions for collective intelligence and swarm coordination.
|
|
5
5
|
*/
|
|
6
|
-
var __assign = (this && this.__assign) || function () {
|
|
7
|
-
__assign = Object.assign || function(t) {
|
|
8
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
-
s = arguments[i];
|
|
10
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
-
t[p] = s[p];
|
|
12
|
-
}
|
|
13
|
-
return t;
|
|
14
|
-
};
|
|
15
|
-
return __assign.apply(this, arguments);
|
|
16
|
-
};
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (_) try {
|
|
33
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
6
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
54
7
|
import { join } from 'node:path';
|
|
55
8
|
// Storage paths
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
9
|
+
const STORAGE_DIR = '.claude-flow';
|
|
10
|
+
const HIVE_DIR = 'hive-mind';
|
|
11
|
+
const HIVE_FILE = 'state.json';
|
|
59
12
|
/**
|
|
60
13
|
* Calculate required votes for a given strategy and total node count.
|
|
61
14
|
*/
|
|
62
|
-
function calculateRequiredVotes(strategy, totalNodes, quorumPreset) {
|
|
63
|
-
if (quorumPreset === void 0) { quorumPreset = 'majority'; }
|
|
15
|
+
function calculateRequiredVotes(strategy, totalNodes, quorumPreset = 'majority') {
|
|
64
16
|
if (totalNodes <= 0)
|
|
65
17
|
return 1;
|
|
66
18
|
switch (strategy) {
|
|
@@ -93,8 +45,7 @@ function calculateRequiredVotes(strategy, totalNodes, quorumPreset) {
|
|
|
93
45
|
*/
|
|
94
46
|
function detectByzantineVoters(pending, currentProposal, voterId, newVote) {
|
|
95
47
|
// Check if voter cast opposite votes on proposals of the same type
|
|
96
|
-
for (
|
|
97
|
-
var p = pending_1[_i];
|
|
48
|
+
for (const p of pending) {
|
|
98
49
|
if (p.proposalId === currentProposal.proposalId)
|
|
99
50
|
continue;
|
|
100
51
|
if (p.type !== currentProposal.type)
|
|
@@ -110,9 +61,9 @@ function detectByzantineVoters(pending, currentProposal, voterId, newVote) {
|
|
|
110
61
|
* Returns 'approved', 'rejected', or null if still pending.
|
|
111
62
|
*/
|
|
112
63
|
function tryResolveProposal(proposal, totalNodes) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
64
|
+
const votesFor = Object.values(proposal.votes).filter(v => v).length;
|
|
65
|
+
const votesAgainst = Object.values(proposal.votes).filter(v => !v).length;
|
|
66
|
+
const required = calculateRequiredVotes(proposal.strategy, totalNodes, proposal.quorumPreset);
|
|
116
67
|
if (votesFor >= required)
|
|
117
68
|
return 'approved';
|
|
118
69
|
if (votesAgainst >= required)
|
|
@@ -122,8 +73,8 @@ function tryResolveProposal(proposal, totalNodes) {
|
|
|
122
73
|
return 'rejected';
|
|
123
74
|
}
|
|
124
75
|
// Check if it's impossible to reach quorum (remaining potential votes can't tip it)
|
|
125
|
-
|
|
126
|
-
|
|
76
|
+
const totalVotes = Object.keys(proposal.votes).length;
|
|
77
|
+
const remaining = totalNodes - totalVotes;
|
|
127
78
|
if (votesFor + remaining < required && votesAgainst + remaining < required) {
|
|
128
79
|
// Deadlock: neither side can win -- reject
|
|
129
80
|
return 'rejected';
|
|
@@ -137,20 +88,20 @@ function getHivePath() {
|
|
|
137
88
|
return join(getHiveDir(), HIVE_FILE);
|
|
138
89
|
}
|
|
139
90
|
function ensureHiveDir() {
|
|
140
|
-
|
|
91
|
+
const dir = getHiveDir();
|
|
141
92
|
if (!existsSync(dir)) {
|
|
142
93
|
mkdirSync(dir, { recursive: true });
|
|
143
94
|
}
|
|
144
95
|
}
|
|
145
96
|
function loadHiveState() {
|
|
146
97
|
try {
|
|
147
|
-
|
|
98
|
+
const path = getHivePath();
|
|
148
99
|
if (existsSync(path)) {
|
|
149
|
-
|
|
100
|
+
const data = readFileSync(path, 'utf-8');
|
|
150
101
|
return JSON.parse(data);
|
|
151
102
|
}
|
|
152
103
|
}
|
|
153
|
-
catch
|
|
104
|
+
catch {
|
|
154
105
|
// Return default state on error
|
|
155
106
|
}
|
|
156
107
|
return {
|
|
@@ -160,7 +111,7 @@ function loadHiveState() {
|
|
|
160
111
|
consensus: { pending: [], history: [] },
|
|
161
112
|
sharedMemory: {},
|
|
162
113
|
createdAt: new Date().toISOString(),
|
|
163
|
-
updatedAt: new Date().toISOString()
|
|
114
|
+
updatedAt: new Date().toISOString(),
|
|
164
115
|
};
|
|
165
116
|
}
|
|
166
117
|
function saveHiveState(state) {
|
|
@@ -171,23 +122,23 @@ function saveHiveState(state) {
|
|
|
171
122
|
// Import agent store helpers for spawn functionality
|
|
172
123
|
import { existsSync as agentStoreExists, readFileSync as readAgentStore, writeFileSync as writeAgentStore, mkdirSync as mkdirAgentStore } from 'node:fs';
|
|
173
124
|
function loadAgentStore() {
|
|
174
|
-
|
|
125
|
+
const storePath = join(process.cwd(), '.claude-flow', 'agents.json');
|
|
175
126
|
try {
|
|
176
127
|
if (agentStoreExists(storePath)) {
|
|
177
128
|
return JSON.parse(readAgentStore(storePath, 'utf-8'));
|
|
178
129
|
}
|
|
179
130
|
}
|
|
180
|
-
catch
|
|
131
|
+
catch { /* ignore */ }
|
|
181
132
|
return { agents: {} };
|
|
182
133
|
}
|
|
183
134
|
function saveAgentStore(store) {
|
|
184
|
-
|
|
135
|
+
const storeDir = join(process.cwd(), '.claude-flow');
|
|
185
136
|
if (!agentStoreExists(storeDir)) {
|
|
186
137
|
mkdirAgentStore(storeDir, { recursive: true });
|
|
187
138
|
}
|
|
188
139
|
writeAgentStore(join(storeDir, 'agents.json'), JSON.stringify(store, null, 2), 'utf-8');
|
|
189
140
|
}
|
|
190
|
-
export
|
|
141
|
+
export const hiveMindTools = [
|
|
191
142
|
{
|
|
192
143
|
name: 'hive-mind_spawn',
|
|
193
144
|
description: 'Spawn workers and automatically join them to the hive-mind (combines agent/spawn + hive-mind/join)',
|
|
@@ -195,60 +146,57 @@ export var hiveMindTools = [
|
|
|
195
146
|
inputSchema: {
|
|
196
147
|
type: 'object',
|
|
197
148
|
properties: {
|
|
198
|
-
count: { type: 'number', description: 'Number of workers to spawn (default: 1)',
|
|
199
|
-
role: { type: 'string',
|
|
200
|
-
agentType: { type: 'string', description: 'Agent type for spawned workers',
|
|
201
|
-
prefix: { type: 'string', description: 'Prefix for worker IDs',
|
|
202
|
-
}
|
|
149
|
+
count: { type: 'number', description: 'Number of workers to spawn (default: 1)', default: 1 },
|
|
150
|
+
role: { type: 'string', enum: ['worker', 'specialist', 'scout'], description: 'Worker role in hive', default: 'worker' },
|
|
151
|
+
agentType: { type: 'string', description: 'Agent type for spawned workers', default: 'worker' },
|
|
152
|
+
prefix: { type: 'string', description: 'Prefix for worker IDs', default: 'hive-worker' },
|
|
153
|
+
},
|
|
203
154
|
},
|
|
204
|
-
handler:
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (!state.workers.includes(agentId)) {
|
|
232
|
-
state.workers.push(agentId);
|
|
233
|
-
}
|
|
234
|
-
spawnedWorkers.push({
|
|
235
|
-
agentId: agentId,
|
|
236
|
-
role: role,
|
|
237
|
-
joinedAt: new Date().toISOString()
|
|
238
|
-
});
|
|
155
|
+
handler: async (input) => {
|
|
156
|
+
const state = loadHiveState();
|
|
157
|
+
if (!state.initialized) {
|
|
158
|
+
return { success: false, error: 'Hive-mind not initialized. Run hive-mind/init first.' };
|
|
159
|
+
}
|
|
160
|
+
const count = Math.min(Math.max(1, input.count || 1), 20); // Cap at 20
|
|
161
|
+
const role = input.role || 'worker';
|
|
162
|
+
const agentType = input.agentType || 'worker';
|
|
163
|
+
const prefix = input.prefix || 'hive-worker';
|
|
164
|
+
const agentStore = loadAgentStore();
|
|
165
|
+
const spawnedWorkers = [];
|
|
166
|
+
for (let i = 0; i < count; i++) {
|
|
167
|
+
const agentId = `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
168
|
+
// Create agent record (like agent/spawn)
|
|
169
|
+
agentStore.agents[agentId] = {
|
|
170
|
+
agentId,
|
|
171
|
+
agentType,
|
|
172
|
+
status: 'idle',
|
|
173
|
+
health: 1.0,
|
|
174
|
+
taskCount: 0,
|
|
175
|
+
config: { role, hiveRole: role },
|
|
176
|
+
createdAt: new Date().toISOString(),
|
|
177
|
+
domain: 'hive-mind',
|
|
178
|
+
};
|
|
179
|
+
// Join to hive-mind (like hive-mind/join)
|
|
180
|
+
if (!state.workers.includes(agentId)) {
|
|
181
|
+
state.workers.push(agentId);
|
|
239
182
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
183
|
+
spawnedWorkers.push({
|
|
184
|
+
agentId,
|
|
185
|
+
role,
|
|
186
|
+
joinedAt: new Date().toISOString(),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
saveAgentStore(agentStore);
|
|
190
|
+
saveHiveState(state);
|
|
191
|
+
return {
|
|
192
|
+
success: true,
|
|
193
|
+
spawned: count,
|
|
194
|
+
workers: spawnedWorkers,
|
|
195
|
+
totalWorkers: state.workers.length,
|
|
196
|
+
hiveStatus: 'active',
|
|
197
|
+
message: `Spawned ${count} worker(s) and joined them to the hive-mind`,
|
|
198
|
+
};
|
|
199
|
+
},
|
|
252
200
|
},
|
|
253
201
|
{
|
|
254
202
|
name: 'hive-mind_init',
|
|
@@ -257,43 +205,40 @@ export var hiveMindTools = [
|
|
|
257
205
|
inputSchema: {
|
|
258
206
|
type: 'object',
|
|
259
207
|
properties: {
|
|
260
|
-
topology: { type: 'string',
|
|
261
|
-
queenId: { type: 'string', description: 'Initial queen agent ID' }
|
|
262
|
-
}
|
|
208
|
+
topology: { type: 'string', enum: ['mesh', 'hierarchical', 'ring', 'star'], description: 'Network topology' },
|
|
209
|
+
queenId: { type: 'string', description: 'Initial queen agent ID' },
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
handler: async (input) => {
|
|
213
|
+
const state = loadHiveState();
|
|
214
|
+
const hiveId = `hive-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
215
|
+
const queenId = input.queenId || `queen-${Date.now()}`;
|
|
216
|
+
state.initialized = true;
|
|
217
|
+
state.topology = input.topology || 'mesh';
|
|
218
|
+
state.createdAt = new Date().toISOString();
|
|
219
|
+
state.queen = {
|
|
220
|
+
agentId: queenId,
|
|
221
|
+
electedAt: new Date().toISOString(),
|
|
222
|
+
term: 1,
|
|
223
|
+
};
|
|
224
|
+
saveHiveState(state);
|
|
225
|
+
return {
|
|
226
|
+
success: true,
|
|
227
|
+
hiveId,
|
|
228
|
+
topology: state.topology,
|
|
229
|
+
consensus: input.consensus || 'byzantine',
|
|
230
|
+
queenId,
|
|
231
|
+
status: 'initialized',
|
|
232
|
+
config: {
|
|
233
|
+
topology: state.topology,
|
|
234
|
+
consensus: input.consensus || 'byzantine',
|
|
235
|
+
maxAgents: input.maxAgents || 15,
|
|
236
|
+
persist: input.persist !== false,
|
|
237
|
+
memoryBackend: input.memoryBackend || 'hybrid',
|
|
238
|
+
},
|
|
239
|
+
createdAt: state.createdAt,
|
|
240
|
+
};
|
|
263
241
|
},
|
|
264
|
-
handler: function (input) { return __awaiter(void 0, void 0, void 0, function () {
|
|
265
|
-
var state, hiveId, queenId;
|
|
266
|
-
return __generator(this, function (_a) {
|
|
267
|
-
state = loadHiveState();
|
|
268
|
-
hiveId = "hive-" + Date.now() + "-" + Math.random().toString(36).slice(2, 8);
|
|
269
|
-
queenId = input.queenId || "queen-" + Date.now();
|
|
270
|
-
state.initialized = true;
|
|
271
|
-
state.topology = input.topology || 'mesh';
|
|
272
|
-
state.createdAt = new Date().toISOString();
|
|
273
|
-
state.queen = {
|
|
274
|
-
agentId: queenId,
|
|
275
|
-
electedAt: new Date().toISOString(),
|
|
276
|
-
term: 1
|
|
277
|
-
};
|
|
278
|
-
saveHiveState(state);
|
|
279
|
-
return [2 /*return*/, {
|
|
280
|
-
success: true,
|
|
281
|
-
hiveId: hiveId,
|
|
282
|
-
topology: state.topology,
|
|
283
|
-
consensus: input.consensus || 'byzantine',
|
|
284
|
-
queenId: queenId,
|
|
285
|
-
status: 'initialized',
|
|
286
|
-
config: {
|
|
287
|
-
topology: state.topology,
|
|
288
|
-
consensus: input.consensus || 'byzantine',
|
|
289
|
-
maxAgents: input.maxAgents || 15,
|
|
290
|
-
persist: input.persist !== false,
|
|
291
|
-
memoryBackend: input.memoryBackend || 'hybrid'
|
|
292
|
-
},
|
|
293
|
-
createdAt: state.createdAt
|
|
294
|
-
}];
|
|
295
|
-
});
|
|
296
|
-
}); }
|
|
297
242
|
},
|
|
298
243
|
{
|
|
299
244
|
name: 'hive-mind_status',
|
|
@@ -302,93 +247,96 @@ export var hiveMindTools = [
|
|
|
302
247
|
inputSchema: {
|
|
303
248
|
type: 'object',
|
|
304
249
|
properties: {
|
|
305
|
-
verbose: { type: 'boolean', description: 'Include detailed information' }
|
|
306
|
-
}
|
|
250
|
+
verbose: { type: 'boolean', description: 'Include detailed information' },
|
|
251
|
+
},
|
|
307
252
|
},
|
|
308
|
-
handler:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
completedTaskCount++;
|
|
329
|
-
}
|
|
253
|
+
handler: async (input) => {
|
|
254
|
+
const state = loadHiveState();
|
|
255
|
+
const uptime = state.createdAt ? Date.now() - new Date(state.createdAt).getTime() : 0;
|
|
256
|
+
// Load agent store once for all workers
|
|
257
|
+
const agentStore = loadAgentStore();
|
|
258
|
+
// Compute real task metrics from task store
|
|
259
|
+
const taskStorePath = join(process.cwd(), '.claude-flow', 'tasks', 'store.json');
|
|
260
|
+
let pendingTaskCount = 0;
|
|
261
|
+
let activeTaskCount = 0;
|
|
262
|
+
let completedTaskCount = 0;
|
|
263
|
+
try {
|
|
264
|
+
if (existsSync(taskStorePath)) {
|
|
265
|
+
const taskStore = JSON.parse(readFileSync(taskStorePath, 'utf-8'));
|
|
266
|
+
for (const task of Object.values(taskStore.tasks || {})) {
|
|
267
|
+
if (task.status === 'pending')
|
|
268
|
+
pendingTaskCount++;
|
|
269
|
+
else if (task.status === 'in_progress')
|
|
270
|
+
activeTaskCount++;
|
|
271
|
+
else if (task.status === 'completed')
|
|
272
|
+
completedTaskCount++;
|
|
330
273
|
}
|
|
331
274
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
275
|
+
}
|
|
276
|
+
catch { /* ignore */ }
|
|
277
|
+
const workerCount = Math.max(1, state.workers.length);
|
|
278
|
+
const realLoad = activeTaskCount / workerCount;
|
|
279
|
+
const status = {
|
|
280
|
+
// CLI expected fields
|
|
281
|
+
hiveId: `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
282
|
+
status: state.initialized ? 'active' : 'offline',
|
|
283
|
+
topology: state.topology,
|
|
284
|
+
consensus: 'byzantine', // Default consensus type
|
|
285
|
+
queen: state.queen ? {
|
|
286
|
+
id: state.queen.agentId,
|
|
287
|
+
agentId: state.queen.agentId,
|
|
288
|
+
status: 'active',
|
|
289
|
+
load: Math.round(realLoad * 1000) / 1000,
|
|
290
|
+
tasksQueued: pendingTaskCount,
|
|
291
|
+
electedAt: state.queen.electedAt,
|
|
292
|
+
term: state.queen.term,
|
|
293
|
+
} : { id: 'N/A', status: 'offline', load: 0, tasksQueued: 0 },
|
|
294
|
+
workers: state.workers.map(w => {
|
|
295
|
+
const agent = agentStore.agents[w];
|
|
296
|
+
return {
|
|
297
|
+
id: w,
|
|
298
|
+
type: agent?.agentType || 'worker',
|
|
299
|
+
status: agent?.status || 'unknown',
|
|
300
|
+
currentTask: agent?.currentTask || null,
|
|
301
|
+
tasksCompleted: agent?.taskCount || 0,
|
|
302
|
+
};
|
|
303
|
+
}),
|
|
304
|
+
metrics: {
|
|
305
|
+
totalTasks: pendingTaskCount + activeTaskCount + completedTaskCount,
|
|
306
|
+
completedTasks: completedTaskCount,
|
|
307
|
+
activeTasks: activeTaskCount,
|
|
308
|
+
pendingTasks: pendingTaskCount,
|
|
309
|
+
failedTasks: 0,
|
|
310
|
+
consensusRounds: state.consensus.history.length,
|
|
311
|
+
memoryUsage: `${Object.keys(state.sharedMemory).length * 2} KB`,
|
|
312
|
+
},
|
|
313
|
+
health: {
|
|
314
|
+
overall: 'healthy',
|
|
315
|
+
queen: state.queen ? 'healthy' : 'unhealthy',
|
|
316
|
+
workers: state.workers.length > 0 ? 'healthy' : 'degraded',
|
|
317
|
+
consensus: 'healthy',
|
|
318
|
+
memory: 'healthy',
|
|
319
|
+
},
|
|
320
|
+
// Additional fields
|
|
321
|
+
id: `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
322
|
+
initialized: state.initialized,
|
|
323
|
+
workerCount: state.workers.length,
|
|
324
|
+
pendingConsensus: state.consensus.pending.length,
|
|
325
|
+
sharedMemoryKeys: Object.keys(state.sharedMemory).length,
|
|
326
|
+
uptime,
|
|
327
|
+
createdAt: state.createdAt,
|
|
328
|
+
updatedAt: state.updatedAt,
|
|
329
|
+
};
|
|
330
|
+
if (input.verbose) {
|
|
331
|
+
return {
|
|
332
|
+
...status,
|
|
333
|
+
workerDetails: state.workers,
|
|
334
|
+
consensusHistory: state.consensus.history.slice(-10),
|
|
335
|
+
sharedMemory: state.sharedMemory,
|
|
385
336
|
};
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
return [2 /*return*/, status];
|
|
390
|
-
});
|
|
391
|
-
}); }
|
|
337
|
+
}
|
|
338
|
+
return status;
|
|
339
|
+
},
|
|
392
340
|
},
|
|
393
341
|
{
|
|
394
342
|
name: 'hive-mind_join',
|
|
@@ -398,31 +346,28 @@ export var hiveMindTools = [
|
|
|
398
346
|
type: 'object',
|
|
399
347
|
properties: {
|
|
400
348
|
agentId: { type: 'string', description: 'Agent ID to join' },
|
|
401
|
-
role: { type: 'string',
|
|
349
|
+
role: { type: 'string', enum: ['worker', 'specialist', 'scout'], description: 'Agent role in hive' },
|
|
402
350
|
},
|
|
403
|
-
required: ['agentId']
|
|
351
|
+
required: ['agentId'],
|
|
352
|
+
},
|
|
353
|
+
handler: async (input) => {
|
|
354
|
+
const state = loadHiveState();
|
|
355
|
+
const agentId = input.agentId;
|
|
356
|
+
if (!state.initialized) {
|
|
357
|
+
return { success: false, error: 'Hive-mind not initialized' };
|
|
358
|
+
}
|
|
359
|
+
if (!state.workers.includes(agentId)) {
|
|
360
|
+
state.workers.push(agentId);
|
|
361
|
+
saveHiveState(state);
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
success: true,
|
|
365
|
+
agentId,
|
|
366
|
+
role: input.role || 'worker',
|
|
367
|
+
totalWorkers: state.workers.length,
|
|
368
|
+
joinedAt: new Date().toISOString(),
|
|
369
|
+
};
|
|
404
370
|
},
|
|
405
|
-
handler: function (input) { return __awaiter(void 0, void 0, void 0, function () {
|
|
406
|
-
var state, agentId;
|
|
407
|
-
return __generator(this, function (_a) {
|
|
408
|
-
state = loadHiveState();
|
|
409
|
-
agentId = input.agentId;
|
|
410
|
-
if (!state.initialized) {
|
|
411
|
-
return [2 /*return*/, { success: false, error: 'Hive-mind not initialized' }];
|
|
412
|
-
}
|
|
413
|
-
if (!state.workers.includes(agentId)) {
|
|
414
|
-
state.workers.push(agentId);
|
|
415
|
-
saveHiveState(state);
|
|
416
|
-
}
|
|
417
|
-
return [2 /*return*/, {
|
|
418
|
-
success: true,
|
|
419
|
-
agentId: agentId,
|
|
420
|
-
role: input.role || 'worker',
|
|
421
|
-
totalWorkers: state.workers.length,
|
|
422
|
-
joinedAt: new Date().toISOString()
|
|
423
|
-
}];
|
|
424
|
-
});
|
|
425
|
-
}); }
|
|
426
371
|
},
|
|
427
372
|
{
|
|
428
373
|
name: 'hive-mind_leave',
|
|
@@ -431,29 +376,26 @@ export var hiveMindTools = [
|
|
|
431
376
|
inputSchema: {
|
|
432
377
|
type: 'object',
|
|
433
378
|
properties: {
|
|
434
|
-
agentId: { type: 'string', description: 'Agent ID to remove' }
|
|
379
|
+
agentId: { type: 'string', description: 'Agent ID to remove' },
|
|
435
380
|
},
|
|
436
|
-
required: ['agentId']
|
|
381
|
+
required: ['agentId'],
|
|
382
|
+
},
|
|
383
|
+
handler: async (input) => {
|
|
384
|
+
const state = loadHiveState();
|
|
385
|
+
const agentId = input.agentId;
|
|
386
|
+
const index = state.workers.indexOf(agentId);
|
|
387
|
+
if (index > -1) {
|
|
388
|
+
state.workers.splice(index, 1);
|
|
389
|
+
saveHiveState(state);
|
|
390
|
+
return {
|
|
391
|
+
success: true,
|
|
392
|
+
agentId,
|
|
393
|
+
leftAt: new Date().toISOString(),
|
|
394
|
+
remainingWorkers: state.workers.length,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
return { success: false, agentId, error: 'Agent not in hive' };
|
|
437
398
|
},
|
|
438
|
-
handler: function (input) { return __awaiter(void 0, void 0, void 0, function () {
|
|
439
|
-
var state, agentId, index;
|
|
440
|
-
return __generator(this, function (_a) {
|
|
441
|
-
state = loadHiveState();
|
|
442
|
-
agentId = input.agentId;
|
|
443
|
-
index = state.workers.indexOf(agentId);
|
|
444
|
-
if (index > -1) {
|
|
445
|
-
state.workers.splice(index, 1);
|
|
446
|
-
saveHiveState(state);
|
|
447
|
-
return [2 /*return*/, {
|
|
448
|
-
success: true,
|
|
449
|
-
agentId: agentId,
|
|
450
|
-
leftAt: new Date().toISOString(),
|
|
451
|
-
remainingWorkers: state.workers.length
|
|
452
|
-
}];
|
|
453
|
-
}
|
|
454
|
-
return [2 /*return*/, { success: false, agentId: agentId, error: 'Agent not in hive' }];
|
|
455
|
-
});
|
|
456
|
-
}); }
|
|
457
399
|
},
|
|
458
400
|
{
|
|
459
401
|
name: 'hive-mind_consensus',
|
|
@@ -462,250 +404,249 @@ export var hiveMindTools = [
|
|
|
462
404
|
inputSchema: {
|
|
463
405
|
type: 'object',
|
|
464
406
|
properties: {
|
|
465
|
-
action: { type: 'string',
|
|
407
|
+
action: { type: 'string', enum: ['propose', 'vote', 'status', 'list'], description: 'Consensus action' },
|
|
466
408
|
proposalId: { type: 'string', description: 'Proposal ID (for vote/status)' },
|
|
467
409
|
type: { type: 'string', description: 'Proposal type (for propose)' },
|
|
468
410
|
value: { description: 'Proposal value (for propose)' },
|
|
469
411
|
vote: { type: 'boolean', description: 'Vote (true=for, false=against)' },
|
|
470
412
|
voterId: { type: 'string', description: 'Voter agent ID' },
|
|
471
|
-
strategy: { type: 'string',
|
|
472
|
-
quorumPreset: { type: 'string',
|
|
413
|
+
strategy: { type: 'string', enum: ['bft', 'raft', 'quorum'], description: 'Consensus strategy (default: raft)' },
|
|
414
|
+
quorumPreset: { type: 'string', enum: ['unanimous', 'majority', 'supermajority'], description: 'Quorum threshold preset (for quorum strategy, default: majority)' },
|
|
473
415
|
term: { type: 'number', description: 'Term number (for raft strategy)' },
|
|
474
|
-
timeoutMs: { type: 'number', description: 'Timeout in ms for raft re-proposal (default: 30000)' }
|
|
416
|
+
timeoutMs: { type: 'number', description: 'Timeout in ms for raft re-proposal (default: 30000)' },
|
|
475
417
|
},
|
|
476
|
-
required: ['action']
|
|
418
|
+
required: ['action'],
|
|
477
419
|
},
|
|
478
|
-
handler:
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
existingProposalId: existingTermProposal.proposalId,
|
|
499
|
-
term: term_1
|
|
500
|
-
}];
|
|
501
|
-
}
|
|
420
|
+
handler: async (input) => {
|
|
421
|
+
const state = loadHiveState();
|
|
422
|
+
const action = input.action;
|
|
423
|
+
const strategy = input.strategy || 'raft';
|
|
424
|
+
const totalNodes = state.workers.length || 1;
|
|
425
|
+
if (action === 'propose') {
|
|
426
|
+
const proposalId = `proposal-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
427
|
+
const quorumPreset = input.quorumPreset || 'majority';
|
|
428
|
+
const term = input.term || (state.queen?.term ?? 1);
|
|
429
|
+
const timeoutMs = input.timeoutMs || 30000;
|
|
430
|
+
// Raft: check if there's already a pending proposal for this term
|
|
431
|
+
if (strategy === 'raft') {
|
|
432
|
+
const existingTermProposal = state.consensus.pending.find(p => p.strategy === 'raft' && p.term === term && p.status === 'pending');
|
|
433
|
+
if (existingTermProposal) {
|
|
434
|
+
return {
|
|
435
|
+
action,
|
|
436
|
+
error: `Raft term ${term} already has a pending proposal: ${existingTermProposal.proposalId}. Wait for resolution or use a higher term.`,
|
|
437
|
+
existingProposalId: existingTermProposal.proposalId,
|
|
438
|
+
term,
|
|
439
|
+
};
|
|
502
440
|
}
|
|
503
|
-
required = calculateRequiredVotes(strategy, totalNodes, quorumPreset);
|
|
504
|
-
proposal = {
|
|
505
|
-
proposalId: proposalId,
|
|
506
|
-
type: input.type || 'general',
|
|
507
|
-
value: input.value,
|
|
508
|
-
proposedBy: input.voterId || 'system',
|
|
509
|
-
proposedAt: new Date().toISOString(),
|
|
510
|
-
votes: {},
|
|
511
|
-
status: 'pending',
|
|
512
|
-
strategy: strategy,
|
|
513
|
-
term: strategy === 'raft' ? term_1 : undefined,
|
|
514
|
-
quorumPreset: strategy === 'quorum' ? quorumPreset : undefined,
|
|
515
|
-
byzantineVoters: strategy === 'bft' ? [] : undefined,
|
|
516
|
-
timeoutAt: strategy === 'raft' ? new Date(Date.now() + timeoutMs).toISOString() : undefined
|
|
517
|
-
};
|
|
518
|
-
state.consensus.pending.push(proposal);
|
|
519
|
-
saveHiveState(state);
|
|
520
|
-
return [2 /*return*/, {
|
|
521
|
-
action: action,
|
|
522
|
-
proposalId: proposalId,
|
|
523
|
-
type: proposal.type,
|
|
524
|
-
strategy: strategy,
|
|
525
|
-
status: 'pending',
|
|
526
|
-
required: required,
|
|
527
|
-
totalNodes: totalNodes,
|
|
528
|
-
term: proposal.term,
|
|
529
|
-
quorumPreset: proposal.quorumPreset,
|
|
530
|
-
timeoutAt: proposal.timeoutAt
|
|
531
|
-
}];
|
|
532
441
|
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
}
|
|
586
|
-
// Quorum: reject double-vote
|
|
587
|
-
return [2 /*return*/, {
|
|
588
|
-
action: action,
|
|
589
|
-
error: "Voter " + voterId + " has already voted on this proposal",
|
|
590
|
-
proposalId: proposal_1.proposalId
|
|
591
|
-
}];
|
|
442
|
+
const required = calculateRequiredVotes(strategy, totalNodes, quorumPreset);
|
|
443
|
+
const proposal = {
|
|
444
|
+
proposalId,
|
|
445
|
+
type: input.type || 'general',
|
|
446
|
+
value: input.value,
|
|
447
|
+
proposedBy: input.voterId || 'system',
|
|
448
|
+
proposedAt: new Date().toISOString(),
|
|
449
|
+
votes: {},
|
|
450
|
+
status: 'pending',
|
|
451
|
+
strategy,
|
|
452
|
+
term: strategy === 'raft' ? term : undefined,
|
|
453
|
+
quorumPreset: strategy === 'quorum' ? quorumPreset : undefined,
|
|
454
|
+
byzantineVoters: strategy === 'bft' ? [] : undefined,
|
|
455
|
+
timeoutAt: strategy === 'raft' ? new Date(Date.now() + timeoutMs).toISOString() : undefined,
|
|
456
|
+
};
|
|
457
|
+
state.consensus.pending.push(proposal);
|
|
458
|
+
saveHiveState(state);
|
|
459
|
+
return {
|
|
460
|
+
action,
|
|
461
|
+
proposalId,
|
|
462
|
+
type: proposal.type,
|
|
463
|
+
strategy,
|
|
464
|
+
status: 'pending',
|
|
465
|
+
required,
|
|
466
|
+
totalNodes,
|
|
467
|
+
term: proposal.term,
|
|
468
|
+
quorumPreset: proposal.quorumPreset,
|
|
469
|
+
timeoutAt: proposal.timeoutAt,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
if (action === 'vote') {
|
|
473
|
+
const proposal = state.consensus.pending.find(p => p.proposalId === input.proposalId);
|
|
474
|
+
if (!proposal) {
|
|
475
|
+
return { action, error: 'Proposal not found or already resolved' };
|
|
476
|
+
}
|
|
477
|
+
const voterId = input.voterId;
|
|
478
|
+
if (!voterId) {
|
|
479
|
+
return { action, error: 'voterId is required for voting' };
|
|
480
|
+
}
|
|
481
|
+
const voteValue = input.vote;
|
|
482
|
+
const proposalStrategy = proposal.strategy || 'raft';
|
|
483
|
+
const required = calculateRequiredVotes(proposalStrategy, totalNodes, proposal.quorumPreset);
|
|
484
|
+
// Prevent double-voting
|
|
485
|
+
if (voterId in proposal.votes) {
|
|
486
|
+
const previousVote = proposal.votes[voterId];
|
|
487
|
+
if (previousVote === voteValue) {
|
|
488
|
+
return {
|
|
489
|
+
action,
|
|
490
|
+
error: `Voter ${voterId} has already cast the same vote on this proposal`,
|
|
491
|
+
proposalId: proposal.proposalId,
|
|
492
|
+
existingVote: previousVote,
|
|
493
|
+
};
|
|
592
494
|
}
|
|
593
|
-
//
|
|
495
|
+
// Conflicting vote from same voter
|
|
594
496
|
if (proposalStrategy === 'bft') {
|
|
595
|
-
|
|
596
|
-
if (
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
proposal_1.byzantineVoters.push(voterId);
|
|
601
|
-
}
|
|
602
|
-
saveHiveState(state);
|
|
603
|
-
return [2 /*return*/, {
|
|
604
|
-
action: action,
|
|
605
|
-
proposalId: proposal_1.proposalId,
|
|
606
|
-
voterId: voterId,
|
|
607
|
-
byzantineDetected: true,
|
|
608
|
-
message: "Byzantine behavior detected: voter " + voterId + " cast conflicting votes across proposals of same type. Vote rejected.",
|
|
609
|
-
byzantineVoters: proposal_1.byzantineVoters,
|
|
610
|
-
status: proposal_1.status
|
|
611
|
-
}];
|
|
497
|
+
// BFT: detect as Byzantine behavior
|
|
498
|
+
if (!proposal.byzantineVoters)
|
|
499
|
+
proposal.byzantineVoters = [];
|
|
500
|
+
if (!proposal.byzantineVoters.includes(voterId)) {
|
|
501
|
+
proposal.byzantineVoters.push(voterId);
|
|
612
502
|
}
|
|
503
|
+
// Remove their vote entirely -- Byzantine voter is excluded
|
|
504
|
+
delete proposal.votes[voterId];
|
|
505
|
+
saveHiveState(state);
|
|
506
|
+
return {
|
|
507
|
+
action,
|
|
508
|
+
proposalId: proposal.proposalId,
|
|
509
|
+
voterId,
|
|
510
|
+
byzantineDetected: true,
|
|
511
|
+
message: `Byzantine behavior detected: voter ${voterId} attempted conflicting vote. Vote invalidated.`,
|
|
512
|
+
byzantineVoters: proposal.byzantineVoters,
|
|
513
|
+
status: proposal.status,
|
|
514
|
+
};
|
|
613
515
|
}
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
proposal_1.status = resolution;
|
|
623
|
-
state.consensus.history.push({
|
|
624
|
-
proposalId: proposal_1.proposalId,
|
|
625
|
-
type: proposal_1.type,
|
|
626
|
-
result: resolution,
|
|
627
|
-
votes: { "for": votesFor, against: votesAgainst },
|
|
628
|
-
decidedAt: new Date().toISOString(),
|
|
629
|
-
strategy: proposalStrategy,
|
|
630
|
-
term: proposal_1.term,
|
|
631
|
-
byzantineDetected: ((_c = proposal_1.byzantineVoters) === null || _c === void 0 ? void 0 : _c.length) ? proposal_1.byzantineVoters : undefined
|
|
632
|
-
});
|
|
633
|
-
state.consensus.pending = state.consensus.pending.filter(function (p) { return p.proposalId !== proposal_1.proposalId; });
|
|
516
|
+
if (proposalStrategy === 'raft') {
|
|
517
|
+
// Raft: only one vote per node per term, reject the change
|
|
518
|
+
return {
|
|
519
|
+
action,
|
|
520
|
+
error: `Raft: voter ${voterId} already voted in term ${proposal.term}. Cannot change vote.`,
|
|
521
|
+
proposalId: proposal.proposalId,
|
|
522
|
+
term: proposal.term,
|
|
523
|
+
};
|
|
634
524
|
}
|
|
635
|
-
|
|
636
|
-
return
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
strategy: proposalStrategy,
|
|
642
|
-
votesFor: votesFor,
|
|
643
|
-
votesAgainst: votesAgainst,
|
|
644
|
-
required: required,
|
|
645
|
-
totalNodes: totalNodes,
|
|
646
|
-
resolved: resolved,
|
|
647
|
-
result: resolved ? resolution : undefined,
|
|
648
|
-
status: proposal_1.status,
|
|
649
|
-
term: proposal_1.term,
|
|
650
|
-
byzantineVoters: ((_d = proposal_1.byzantineVoters) === null || _d === void 0 ? void 0 : _d.length) ? proposal_1.byzantineVoters : undefined
|
|
651
|
-
}];
|
|
525
|
+
// Quorum: reject double-vote
|
|
526
|
+
return {
|
|
527
|
+
action,
|
|
528
|
+
error: `Voter ${voterId} has already voted on this proposal`,
|
|
529
|
+
proposalId: proposal.proposalId,
|
|
530
|
+
};
|
|
652
531
|
}
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
if (
|
|
658
|
-
|
|
532
|
+
// BFT: check for cross-proposal Byzantine behavior
|
|
533
|
+
if (proposalStrategy === 'bft') {
|
|
534
|
+
const isByzantine = detectByzantineVoters(state.consensus.pending, proposal, voterId, voteValue);
|
|
535
|
+
if (isByzantine) {
|
|
536
|
+
if (!proposal.byzantineVoters)
|
|
537
|
+
proposal.byzantineVoters = [];
|
|
538
|
+
if (!proposal.byzantineVoters.includes(voterId)) {
|
|
539
|
+
proposal.byzantineVoters.push(voterId);
|
|
659
540
|
}
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
votesAgainst = Object.values(proposal.votes).filter(function (v) { return !v; }).length;
|
|
664
|
-
proposalStrategy = proposal.strategy || 'raft';
|
|
665
|
-
required = calculateRequiredVotes(proposalStrategy, totalNodes, proposal.quorumPreset);
|
|
666
|
-
timedOut = false;
|
|
667
|
-
if (proposalStrategy === 'raft' && proposal.timeoutAt) {
|
|
668
|
-
timedOut = new Date().getTime() > new Date(proposal.timeoutAt).getTime();
|
|
669
|
-
}
|
|
670
|
-
return [2 /*return*/, {
|
|
671
|
-
action: action,
|
|
541
|
+
saveHiveState(state);
|
|
542
|
+
return {
|
|
543
|
+
action,
|
|
672
544
|
proposalId: proposal.proposalId,
|
|
673
|
-
|
|
674
|
-
|
|
545
|
+
voterId,
|
|
546
|
+
byzantineDetected: true,
|
|
547
|
+
message: `Byzantine behavior detected: voter ${voterId} cast conflicting votes across proposals of same type. Vote rejected.`,
|
|
548
|
+
byzantineVoters: proposal.byzantineVoters,
|
|
675
549
|
status: proposal.status,
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
totalVotes: Object.keys(proposal.votes).length,
|
|
679
|
-
required: required,
|
|
680
|
-
totalNodes: totalNodes,
|
|
681
|
-
resolved: false,
|
|
682
|
-
term: proposal.term,
|
|
683
|
-
quorumPreset: proposal.quorumPreset,
|
|
684
|
-
byzantineVoters: ((_e = proposal.byzantineVoters) === null || _e === void 0 ? void 0 : _e.length) ? proposal.byzantineVoters : undefined,
|
|
685
|
-
timedOut: timedOut,
|
|
686
|
-
timeoutAt: proposal.timeoutAt,
|
|
687
|
-
hint: timedOut ? "Raft timeout reached. Re-propose with term " + ((proposal.term || 1) + 1) + "." : undefined
|
|
688
|
-
}];
|
|
550
|
+
};
|
|
551
|
+
}
|
|
689
552
|
}
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
}
|
|
553
|
+
// Record the vote
|
|
554
|
+
proposal.votes[voterId] = voteValue;
|
|
555
|
+
const votesFor = Object.values(proposal.votes).filter(v => v).length;
|
|
556
|
+
const votesAgainst = Object.values(proposal.votes).filter(v => !v).length;
|
|
557
|
+
// Try to resolve
|
|
558
|
+
const resolution = tryResolveProposal(proposal, totalNodes);
|
|
559
|
+
let resolved = false;
|
|
560
|
+
if (resolution !== null) {
|
|
561
|
+
resolved = true;
|
|
562
|
+
proposal.status = resolution;
|
|
563
|
+
state.consensus.history.push({
|
|
564
|
+
proposalId: proposal.proposalId,
|
|
565
|
+
type: proposal.type,
|
|
566
|
+
result: resolution,
|
|
567
|
+
votes: { for: votesFor, against: votesAgainst },
|
|
568
|
+
decidedAt: new Date().toISOString(),
|
|
569
|
+
strategy: proposalStrategy,
|
|
570
|
+
term: proposal.term,
|
|
571
|
+
byzantineDetected: proposal.byzantineVoters?.length ? proposal.byzantineVoters : undefined,
|
|
572
|
+
});
|
|
573
|
+
state.consensus.pending = state.consensus.pending.filter(p => p.proposalId !== proposal.proposalId);
|
|
705
574
|
}
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
575
|
+
saveHiveState(state);
|
|
576
|
+
return {
|
|
577
|
+
action,
|
|
578
|
+
proposalId: proposal.proposalId,
|
|
579
|
+
voterId,
|
|
580
|
+
vote: voteValue,
|
|
581
|
+
strategy: proposalStrategy,
|
|
582
|
+
votesFor,
|
|
583
|
+
votesAgainst,
|
|
584
|
+
required,
|
|
585
|
+
totalNodes,
|
|
586
|
+
resolved,
|
|
587
|
+
result: resolved ? resolution : undefined,
|
|
588
|
+
status: proposal.status,
|
|
589
|
+
term: proposal.term,
|
|
590
|
+
byzantineVoters: proposal.byzantineVoters?.length ? proposal.byzantineVoters : undefined,
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
if (action === 'status') {
|
|
594
|
+
const proposal = state.consensus.pending.find(p => p.proposalId === input.proposalId);
|
|
595
|
+
if (!proposal) {
|
|
596
|
+
// Check history
|
|
597
|
+
const historical = state.consensus.history.find(h => h.proposalId === input.proposalId);
|
|
598
|
+
if (historical) {
|
|
599
|
+
return { action, ...historical, historical: true, resolved: true };
|
|
600
|
+
}
|
|
601
|
+
return { action, error: 'Proposal not found' };
|
|
602
|
+
}
|
|
603
|
+
const votesFor = Object.values(proposal.votes).filter(v => v).length;
|
|
604
|
+
const votesAgainst = Object.values(proposal.votes).filter(v => !v).length;
|
|
605
|
+
const proposalStrategy = proposal.strategy || 'raft';
|
|
606
|
+
const required = calculateRequiredVotes(proposalStrategy, totalNodes, proposal.quorumPreset);
|
|
607
|
+
// Raft: check timeout
|
|
608
|
+
let timedOut = false;
|
|
609
|
+
if (proposalStrategy === 'raft' && proposal.timeoutAt) {
|
|
610
|
+
timedOut = new Date().getTime() > new Date(proposal.timeoutAt).getTime();
|
|
611
|
+
}
|
|
612
|
+
return {
|
|
613
|
+
action,
|
|
614
|
+
proposalId: proposal.proposalId,
|
|
615
|
+
type: proposal.type,
|
|
616
|
+
strategy: proposalStrategy,
|
|
617
|
+
status: proposal.status,
|
|
618
|
+
votesFor,
|
|
619
|
+
votesAgainst,
|
|
620
|
+
totalVotes: Object.keys(proposal.votes).length,
|
|
621
|
+
required,
|
|
622
|
+
totalNodes,
|
|
623
|
+
resolved: false,
|
|
624
|
+
term: proposal.term,
|
|
625
|
+
quorumPreset: proposal.quorumPreset,
|
|
626
|
+
byzantineVoters: proposal.byzantineVoters?.length ? proposal.byzantineVoters : undefined,
|
|
627
|
+
timedOut,
|
|
628
|
+
timeoutAt: proposal.timeoutAt,
|
|
629
|
+
hint: timedOut ? `Raft timeout reached. Re-propose with term ${(proposal.term || 1) + 1}.` : undefined,
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
if (action === 'list') {
|
|
633
|
+
return {
|
|
634
|
+
action,
|
|
635
|
+
pending: state.consensus.pending.map(p => ({
|
|
636
|
+
proposalId: p.proposalId,
|
|
637
|
+
type: p.type,
|
|
638
|
+
strategy: p.strategy || 'raft',
|
|
639
|
+
proposedAt: p.proposedAt,
|
|
640
|
+
totalVotes: Object.keys(p.votes).length,
|
|
641
|
+
required: calculateRequiredVotes(p.strategy || 'raft', totalNodes, p.quorumPreset),
|
|
642
|
+
term: p.term,
|
|
643
|
+
status: p.status,
|
|
644
|
+
})),
|
|
645
|
+
recentHistory: state.consensus.history.slice(-5),
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
return { action, error: 'Unknown action' };
|
|
649
|
+
},
|
|
709
650
|
},
|
|
710
651
|
{
|
|
711
652
|
name: 'hive-mind_broadcast',
|
|
@@ -715,39 +656,37 @@ export var hiveMindTools = [
|
|
|
715
656
|
type: 'object',
|
|
716
657
|
properties: {
|
|
717
658
|
message: { type: 'string', description: 'Message to broadcast' },
|
|
718
|
-
priority: { type: 'string',
|
|
719
|
-
fromId: { type: 'string', description: 'Sender agent ID' }
|
|
659
|
+
priority: { type: 'string', enum: ['low', 'normal', 'high', 'critical'], description: 'Message priority' },
|
|
660
|
+
fromId: { type: 'string', description: 'Sender agent ID' },
|
|
720
661
|
},
|
|
721
|
-
required: ['message']
|
|
662
|
+
required: ['message'],
|
|
722
663
|
},
|
|
723
|
-
handler:
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
timestamp: new Date().toISOString()
|
|
738
|
-
});
|
|
739
|
-
// Keep only last 100 broadcasts
|
|
740
|
-
state.sharedMemory.broadcasts = messages.slice(-100);
|
|
741
|
-
saveHiveState(state);
|
|
742
|
-
return [2 /*return*/, {
|
|
743
|
-
success: true,
|
|
744
|
-
messageId: messageId,
|
|
745
|
-
recipients: state.workers.length,
|
|
746
|
-
priority: input.priority || 'normal',
|
|
747
|
-
broadcastAt: new Date().toISOString()
|
|
748
|
-
}];
|
|
664
|
+
handler: async (input) => {
|
|
665
|
+
const state = loadHiveState();
|
|
666
|
+
if (!state.initialized) {
|
|
667
|
+
return { success: false, error: 'Hive-mind not initialized' };
|
|
668
|
+
}
|
|
669
|
+
const messageId = `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
670
|
+
// Store in shared memory
|
|
671
|
+
const messages = state.sharedMemory.broadcasts || [];
|
|
672
|
+
messages.push({
|
|
673
|
+
messageId,
|
|
674
|
+
message: input.message,
|
|
675
|
+
priority: input.priority || 'normal',
|
|
676
|
+
fromId: input.fromId || 'system',
|
|
677
|
+
timestamp: new Date().toISOString(),
|
|
749
678
|
});
|
|
750
|
-
|
|
679
|
+
// Keep only last 100 broadcasts
|
|
680
|
+
state.sharedMemory.broadcasts = messages.slice(-100);
|
|
681
|
+
saveHiveState(state);
|
|
682
|
+
return {
|
|
683
|
+
success: true,
|
|
684
|
+
messageId,
|
|
685
|
+
recipients: state.workers.length,
|
|
686
|
+
priority: input.priority || 'normal',
|
|
687
|
+
broadcastAt: new Date().toISOString(),
|
|
688
|
+
};
|
|
689
|
+
},
|
|
751
690
|
},
|
|
752
691
|
{
|
|
753
692
|
name: 'hive-mind_shutdown',
|
|
@@ -756,59 +695,56 @@ export var hiveMindTools = [
|
|
|
756
695
|
inputSchema: {
|
|
757
696
|
type: 'object',
|
|
758
697
|
properties: {
|
|
759
|
-
graceful: { type: 'boolean', description: 'Graceful shutdown (wait for pending tasks)',
|
|
760
|
-
force: { type: 'boolean', description: 'Force immediate shutdown',
|
|
761
|
-
}
|
|
698
|
+
graceful: { type: 'boolean', description: 'Graceful shutdown (wait for pending tasks)', default: true },
|
|
699
|
+
force: { type: 'boolean', description: 'Force immediate shutdown', default: false },
|
|
700
|
+
},
|
|
762
701
|
},
|
|
763
|
-
handler:
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
workerId = _a[_i];
|
|
787
|
-
if (agentStore.agents[workerId]) {
|
|
788
|
-
delete agentStore.agents[workerId];
|
|
789
|
-
}
|
|
702
|
+
handler: async (input) => {
|
|
703
|
+
const state = loadHiveState();
|
|
704
|
+
if (!state.initialized) {
|
|
705
|
+
return { success: false, error: 'Hive-mind not initialized or already shut down' };
|
|
706
|
+
}
|
|
707
|
+
const graceful = input.graceful !== false;
|
|
708
|
+
const force = input.force === true;
|
|
709
|
+
const workerCount = state.workers.length;
|
|
710
|
+
const pendingConsensus = state.consensus.pending.length;
|
|
711
|
+
// If graceful and there are pending consensus items, warn (unless forced)
|
|
712
|
+
if (graceful && pendingConsensus > 0 && !force) {
|
|
713
|
+
return {
|
|
714
|
+
success: false,
|
|
715
|
+
error: `Cannot gracefully shutdown with ${pendingConsensus} pending consensus items. Use force: true to override.`,
|
|
716
|
+
pendingConsensus,
|
|
717
|
+
workerCount,
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
// Clear workers from agent store
|
|
721
|
+
const agentStore = loadAgentStore();
|
|
722
|
+
for (const workerId of state.workers) {
|
|
723
|
+
if (agentStore.agents[workerId]) {
|
|
724
|
+
delete agentStore.agents[workerId];
|
|
790
725
|
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
726
|
+
}
|
|
727
|
+
saveAgentStore(agentStore);
|
|
728
|
+
// Reset hive state
|
|
729
|
+
const shutdownTime = new Date().toISOString();
|
|
730
|
+
const previousQueen = state.queen?.agentId;
|
|
731
|
+
state.initialized = false;
|
|
732
|
+
state.queen = undefined;
|
|
733
|
+
state.workers = [];
|
|
734
|
+
state.consensus.pending = [];
|
|
735
|
+
// Keep history for reference
|
|
736
|
+
state.sharedMemory = {};
|
|
737
|
+
saveHiveState(state);
|
|
738
|
+
return {
|
|
739
|
+
success: true,
|
|
740
|
+
shutdownAt: shutdownTime,
|
|
741
|
+
graceful,
|
|
742
|
+
workersTerminated: workerCount,
|
|
743
|
+
previousQueen,
|
|
744
|
+
consensusCleared: pendingConsensus,
|
|
745
|
+
message: `Hive-mind shutdown complete. ${workerCount} workers terminated.`,
|
|
746
|
+
};
|
|
747
|
+
},
|
|
812
748
|
},
|
|
813
749
|
{
|
|
814
750
|
name: 'hive-mind_memory',
|
|
@@ -817,62 +753,59 @@ export var hiveMindTools = [
|
|
|
817
753
|
inputSchema: {
|
|
818
754
|
type: 'object',
|
|
819
755
|
properties: {
|
|
820
|
-
action: { type: 'string',
|
|
756
|
+
action: { type: 'string', enum: ['get', 'set', 'delete', 'list'], description: 'Memory action' },
|
|
821
757
|
key: { type: 'string', description: 'Memory key' },
|
|
822
|
-
value: { description: 'Value to store (for set)' }
|
|
758
|
+
value: { description: 'Value to store (for set)' },
|
|
823
759
|
},
|
|
824
|
-
required: ['action']
|
|
760
|
+
required: ['action'],
|
|
761
|
+
},
|
|
762
|
+
handler: async (input) => {
|
|
763
|
+
const state = loadHiveState();
|
|
764
|
+
const action = input.action;
|
|
765
|
+
const key = input.key;
|
|
766
|
+
if (action === 'get') {
|
|
767
|
+
if (!key)
|
|
768
|
+
return { action, error: 'Key required' };
|
|
769
|
+
return {
|
|
770
|
+
action,
|
|
771
|
+
key,
|
|
772
|
+
value: state.sharedMemory[key],
|
|
773
|
+
exists: key in state.sharedMemory,
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
if (action === 'set') {
|
|
777
|
+
if (!key)
|
|
778
|
+
return { action, error: 'Key required' };
|
|
779
|
+
state.sharedMemory[key] = input.value;
|
|
780
|
+
saveHiveState(state);
|
|
781
|
+
return {
|
|
782
|
+
action,
|
|
783
|
+
key,
|
|
784
|
+
success: true,
|
|
785
|
+
updatedAt: new Date().toISOString(),
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
if (action === 'delete') {
|
|
789
|
+
if (!key)
|
|
790
|
+
return { action, error: 'Key required' };
|
|
791
|
+
const existed = key in state.sharedMemory;
|
|
792
|
+
delete state.sharedMemory[key];
|
|
793
|
+
saveHiveState(state);
|
|
794
|
+
return {
|
|
795
|
+
action,
|
|
796
|
+
key,
|
|
797
|
+
deleted: existed,
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
if (action === 'list') {
|
|
801
|
+
return {
|
|
802
|
+
action,
|
|
803
|
+
keys: Object.keys(state.sharedMemory),
|
|
804
|
+
count: Object.keys(state.sharedMemory).length,
|
|
805
|
+
};
|
|
806
|
+
}
|
|
807
|
+
return { action, error: 'Unknown action' };
|
|
825
808
|
},
|
|
826
|
-
handler: function (input) { return __awaiter(void 0, void 0, void 0, function () {
|
|
827
|
-
var state, action, key, existed;
|
|
828
|
-
return __generator(this, function (_a) {
|
|
829
|
-
state = loadHiveState();
|
|
830
|
-
action = input.action;
|
|
831
|
-
key = input.key;
|
|
832
|
-
if (action === 'get') {
|
|
833
|
-
if (!key)
|
|
834
|
-
return [2 /*return*/, { action: action, error: 'Key required' }];
|
|
835
|
-
return [2 /*return*/, {
|
|
836
|
-
action: action,
|
|
837
|
-
key: key,
|
|
838
|
-
value: state.sharedMemory[key],
|
|
839
|
-
exists: key in state.sharedMemory
|
|
840
|
-
}];
|
|
841
|
-
}
|
|
842
|
-
if (action === 'set') {
|
|
843
|
-
if (!key)
|
|
844
|
-
return [2 /*return*/, { action: action, error: 'Key required' }];
|
|
845
|
-
state.sharedMemory[key] = input.value;
|
|
846
|
-
saveHiveState(state);
|
|
847
|
-
return [2 /*return*/, {
|
|
848
|
-
action: action,
|
|
849
|
-
key: key,
|
|
850
|
-
success: true,
|
|
851
|
-
updatedAt: new Date().toISOString()
|
|
852
|
-
}];
|
|
853
|
-
}
|
|
854
|
-
if (action === 'delete') {
|
|
855
|
-
if (!key)
|
|
856
|
-
return [2 /*return*/, { action: action, error: 'Key required' }];
|
|
857
|
-
existed = key in state.sharedMemory;
|
|
858
|
-
delete state.sharedMemory[key];
|
|
859
|
-
saveHiveState(state);
|
|
860
|
-
return [2 /*return*/, {
|
|
861
|
-
action: action,
|
|
862
|
-
key: key,
|
|
863
|
-
deleted: existed
|
|
864
|
-
}];
|
|
865
|
-
}
|
|
866
|
-
if (action === 'list') {
|
|
867
|
-
return [2 /*return*/, {
|
|
868
|
-
action: action,
|
|
869
|
-
keys: Object.keys(state.sharedMemory),
|
|
870
|
-
count: Object.keys(state.sharedMemory).length
|
|
871
|
-
}];
|
|
872
|
-
}
|
|
873
|
-
return [2 /*return*/, { action: action, error: 'Unknown action' }];
|
|
874
|
-
});
|
|
875
|
-
}); }
|
|
876
809
|
},
|
|
877
810
|
];
|
|
878
811
|
//# sourceMappingURL=hive-mind-tools.js.map
|