@monoes/monomindcli 1.6.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/.claude/agents/academic/academic-anthropologist.md +126 -0
- package/.claude/agents/academic/academic-geographer.md +128 -0
- package/.claude/agents/academic/academic-historian.md +124 -0
- package/.claude/agents/academic/academic-narratologist.md +119 -0
- package/.claude/agents/academic/academic-psychologist.md +119 -0
- package/.claude/agents/analysis/analyze-code-quality.md +58 -0
- package/.claude/agents/analysis/code-analyzer.md +189 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +58 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +54 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +977 -0
- package/.claude/agents/consensus/performance-benchmarker.md +831 -0
- package/.claude/agents/consensus/quorum-manager.md +803 -0
- package/.claude/agents/consensus/security-manager.md +602 -0
- package/.claude/agents/core/coder.md +262 -0
- package/.claude/agents/core/planner.md +170 -0
- package/.claude/agents/core/researcher.md +192 -0
- package/.claude/agents/core/reviewer.md +327 -0
- package/.claude/agents/core/tester.md +318 -0
- package/.claude/agents/data/ml/data-ml-model.md +76 -0
- package/.claude/agents/design/design-brand-guardian.md +323 -0
- package/.claude/agents/design/design-image-prompt-engineer.md +237 -0
- package/.claude/agents/design/design-inclusive-visuals-specialist.md +72 -0
- package/.claude/agents/design/design-ui-designer.md +384 -0
- package/.claude/agents/design/design-ux-architect.md +470 -0
- package/.claude/agents/design/design-ux-researcher.md +330 -0
- package/.claude/agents/design/design-visual-storyteller.md +150 -0
- package/.claude/agents/design/design-whimsy-injector.md +439 -0
- package/.claude/agents/development/dev-backend-api.md +178 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +52 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +63 -0
- package/.claude/agents/engineering/engineering-ai-data-remediation-engineer.md +212 -0
- package/.claude/agents/engineering/engineering-ai-engineer.md +165 -0
- package/.claude/agents/engineering/engineering-autonomous-optimization-architect.md +108 -0
- package/.claude/agents/engineering/engineering-backend-architect.md +254 -0
- package/.claude/agents/engineering/engineering-code-reviewer.md +95 -0
- package/.claude/agents/engineering/engineering-data-engineer.md +307 -0
- package/.claude/agents/engineering/engineering-database-optimizer.md +200 -0
- package/.claude/agents/engineering/engineering-devops-automator.md +430 -0
- package/.claude/agents/engineering/engineering-embedded-firmware-engineer.md +174 -0
- package/.claude/agents/engineering/engineering-feishu-integration-developer.md +607 -0
- package/.claude/agents/engineering/engineering-frontend-developer.md +249 -0
- package/.claude/agents/engineering/engineering-git-workflow-master.md +108 -0
- package/.claude/agents/engineering/engineering-incident-response-commander.md +482 -0
- package/.claude/agents/engineering/engineering-mobile-app-builder.md +499 -0
- package/.claude/agents/engineering/engineering-rapid-prototyper.md +463 -0
- package/.claude/agents/engineering/engineering-security-engineer.md +303 -0
- package/.claude/agents/engineering/engineering-senior-developer.md +195 -0
- package/.claude/agents/engineering/engineering-software-architect.md +100 -0
- package/.claude/agents/engineering/engineering-solidity-smart-contract-engineer.md +528 -0
- package/.claude/agents/engineering/engineering-sre.md +114 -0
- package/.claude/agents/engineering/engineering-technical-writer.md +412 -0
- package/.claude/agents/engineering/engineering-threat-detection-engineer.md +540 -0
- package/.claude/agents/engineering/engineering-wechat-mini-program-developer.md +351 -0
- package/.claude/agents/game-development/blender/blender-addon-engineer.md +235 -0
- package/.claude/agents/game-development/game-audio-engineer.md +265 -0
- package/.claude/agents/game-development/game-designer.md +168 -0
- package/.claude/agents/game-development/godot/godot-gameplay-scripter.md +335 -0
- package/.claude/agents/game-development/godot/godot-multiplayer-engineer.md +298 -0
- package/.claude/agents/game-development/godot/godot-shader-developer.md +267 -0
- package/.claude/agents/game-development/level-designer.md +209 -0
- package/.claude/agents/game-development/narrative-designer.md +244 -0
- package/.claude/agents/game-development/roblox-studio/roblox-avatar-creator.md +298 -0
- package/.claude/agents/game-development/roblox-studio/roblox-experience-designer.md +306 -0
- package/.claude/agents/game-development/roblox-studio/roblox-systems-scripter.md +326 -0
- package/.claude/agents/game-development/technical-artist.md +230 -0
- package/.claude/agents/game-development/unity/unity-architect.md +272 -0
- package/.claude/agents/game-development/unity/unity-editor-tool-developer.md +311 -0
- package/.claude/agents/game-development/unity/unity-multiplayer-engineer.md +322 -0
- package/.claude/agents/game-development/unity/unity-shader-graph-artist.md +270 -0
- package/.claude/agents/game-development/unreal-engine/unreal-multiplayer-architect.md +314 -0
- package/.claude/agents/game-development/unreal-engine/unreal-systems-engineer.md +311 -0
- package/.claude/agents/game-development/unreal-engine/unreal-technical-artist.md +257 -0
- package/.claude/agents/game-development/unreal-engine/unreal-world-builder.md +274 -0
- package/.claude/agents/github/code-review-swarm.md +557 -0
- package/.claude/agents/github/github-modes.md +154 -0
- package/.claude/agents/github/issue-tracker.md +299 -0
- package/.claude/agents/github/multi-repo-swarm.md +525 -0
- package/.claude/agents/github/pr-manager.md +163 -0
- package/.claude/agents/github/project-board-sync.md +478 -0
- package/.claude/agents/github/release-manager.md +352 -0
- package/.claude/agents/github/release-swarm.md +597 -0
- package/.claude/agents/github/repo-architect.md +378 -0
- package/.claude/agents/github/swarm-issue.md +548 -0
- package/.claude/agents/github/swarm-pr.md +427 -0
- package/.claude/agents/github/sync-coordinator.md +423 -0
- package/.claude/agents/github/workflow-automation.md +640 -0
- package/.claude/agents/goal/agent.md +804 -0
- package/.claude/agents/goal/code-goal-planner.md +445 -0
- package/.claude/agents/goal/goal-planner.md +168 -0
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -0
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -0
- package/.claude/agents/hive-mind/scout-explorer.md +241 -0
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -0
- package/.claude/agents/hive-mind/worker-specialist.md +216 -0
- package/.claude/agents/marketing/marketing-ai-citation-strategist.md +171 -0
- package/.claude/agents/marketing/marketing-app-store-optimizer.md +322 -0
- package/.claude/agents/marketing/marketing-baidu-seo-specialist.md +227 -0
- package/.claude/agents/marketing/marketing-bilibili-content-strategist.md +200 -0
- package/.claude/agents/marketing/marketing-book-co-author.md +111 -0
- package/.claude/agents/marketing/marketing-carousel-growth-engine.md +200 -0
- package/.claude/agents/marketing/marketing-china-ecommerce-operator.md +284 -0
- package/.claude/agents/marketing/marketing-content-creator.md +54 -0
- package/.claude/agents/marketing/marketing-cross-border-ecommerce.md +260 -0
- package/.claude/agents/marketing/marketing-douyin-strategist.md +150 -0
- package/.claude/agents/marketing/marketing-growth-hacker.md +54 -0
- package/.claude/agents/marketing/marketing-instagram-curator.md +114 -0
- package/.claude/agents/marketing/marketing-kuaishou-strategist.md +224 -0
- package/.claude/agents/marketing/marketing-linkedin-content-creator.md +215 -0
- package/.claude/agents/marketing/marketing-livestream-commerce-coach.md +306 -0
- package/.claude/agents/marketing/marketing-podcast-strategist.md +278 -0
- package/.claude/agents/marketing/marketing-private-domain-operator.md +309 -0
- package/.claude/agents/marketing/marketing-reddit-community-builder.md +124 -0
- package/.claude/agents/marketing/marketing-seo-specialist.md +279 -0
- package/.claude/agents/marketing/marketing-short-video-editing-coach.md +413 -0
- package/.claude/agents/marketing/marketing-social-media-strategist.md +125 -0
- package/.claude/agents/marketing/marketing-tiktok-strategist.md +126 -0
- package/.claude/agents/marketing/marketing-twitter-engager.md +127 -0
- package/.claude/agents/marketing/marketing-wechat-official-account.md +146 -0
- package/.claude/agents/marketing/marketing-weibo-strategist.md +241 -0
- package/.claude/agents/marketing/marketing-xiaohongshu-specialist.md +139 -0
- package/.claude/agents/marketing/marketing-zhihu-strategist.md +163 -0
- package/.claude/agents/neural/safla-neural.md +74 -0
- package/.claude/agents/optimization/benchmark-suite.md +663 -0
- package/.claude/agents/optimization/load-balancer.md +429 -0
- package/.claude/agents/optimization/performance-monitor.md +670 -0
- package/.claude/agents/optimization/resource-allocator.md +672 -0
- package/.claude/agents/optimization/topology-optimizer.md +806 -0
- package/.claude/agents/paid-media/paid-media-auditor.md +71 -0
- package/.claude/agents/paid-media/paid-media-creative-strategist.md +71 -0
- package/.claude/agents/paid-media/paid-media-paid-social-strategist.md +71 -0
- package/.claude/agents/paid-media/paid-media-ppc-strategist.md +71 -0
- package/.claude/agents/paid-media/paid-media-programmatic-buyer.md +71 -0
- package/.claude/agents/paid-media/paid-media-search-query-analyst.md +71 -0
- package/.claude/agents/paid-media/paid-media-tracking-specialist.md +71 -0
- package/.claude/agents/payments/agentic-payments.md +126 -0
- package/.claude/agents/product/product-behavioral-nudge-engine.md +81 -0
- package/.claude/agents/product/product-feedback-synthesizer.md +119 -0
- package/.claude/agents/product/product-manager.md +469 -0
- package/.claude/agents/product/product-sprint-prioritizer.md +154 -0
- package/.claude/agents/product/product-trend-researcher.md +159 -0
- package/.claude/agents/project-management/project-management-experiment-tracker.md +199 -0
- package/.claude/agents/project-management/project-management-jira-workflow-steward.md +231 -0
- package/.claude/agents/project-management/project-management-project-shepherd.md +195 -0
- package/.claude/agents/project-management/project-management-studio-operations.md +201 -0
- package/.claude/agents/project-management/project-management-studio-producer.md +204 -0
- package/.claude/agents/project-management/project-manager-senior.md +136 -0
- package/.claude/agents/reasoning/agent.md +804 -0
- package/.claude/agents/reasoning/goal-planner.md +73 -0
- package/.claude/agents/sales/sales-account-strategist.md +228 -0
- package/.claude/agents/sales/sales-coach.md +272 -0
- package/.claude/agents/sales/sales-deal-strategist.md +181 -0
- package/.claude/agents/sales/sales-discovery-coach.md +226 -0
- package/.claude/agents/sales/sales-engineer.md +183 -0
- package/.claude/agents/sales/sales-outbound-strategist.md +202 -0
- package/.claude/agents/sales/sales-pipeline-analyst.md +268 -0
- package/.claude/agents/sales/sales-proposal-strategist.md +218 -0
- package/.claude/agents/schemas/architecture-output.json +43 -0
- package/.claude/agents/schemas/code-review-output.json +28 -0
- package/.claude/agents/schemas/generic-task-input.json +12 -0
- package/.claude/agents/schemas/implementation-output.json +18 -0
- package/.claude/agents/schemas/research-output.json +31 -0
- package/.claude/agents/schemas/security-audit-output.json +29 -0
- package/.claude/agents/schemas/test-report-output.json +29 -0
- package/.claude/agents/sona/sona-learning-optimizer.md +65 -0
- package/.claude/agents/sparc/architecture.md +453 -0
- package/.claude/agents/sparc/pseudocode.md +299 -0
- package/.claude/agents/sparc/refinement.md +504 -0
- package/.claude/agents/sparc/specification.md +258 -0
- package/.claude/agents/spatial-computing/macos-spatial-metal-engineer.md +338 -0
- package/.claude/agents/spatial-computing/terminal-integration-specialist.md +71 -0
- package/.claude/agents/spatial-computing/visionos-spatial-engineer.md +55 -0
- package/.claude/agents/specialized/accounts-payable-agent.md +186 -0
- package/.claude/agents/specialized/agentic-identity-trust.md +388 -0
- package/.claude/agents/specialized/agents-orchestrator.md +368 -0
- package/.claude/agents/specialized/automation-governance-architect.md +217 -0
- package/.claude/agents/specialized/blockchain-security-auditor.md +497 -0
- package/.claude/agents/specialized/compliance-auditor.md +159 -0
- package/.claude/agents/specialized/corporate-training-designer.md +193 -0
- package/.claude/agents/specialized/data-consolidation-agent.md +61 -0
- package/.claude/agents/specialized/government-digital-presales-consultant.md +364 -0
- package/.claude/agents/specialized/healthcare-marketing-compliance.md +396 -0
- package/.claude/agents/specialized/identity-graph-operator.md +261 -0
- package/.claude/agents/specialized/lsp-index-engineer.md +315 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +89 -0
- package/.claude/agents/specialized/recruitment-specialist.md +510 -0
- package/.claude/agents/specialized/report-distribution-agent.md +66 -0
- package/.claude/agents/specialized/sales-data-extraction-agent.md +68 -0
- package/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +89 -0
- package/.claude/agents/specialized/specialized-developer-advocate.md +318 -0
- package/.claude/agents/specialized/specialized-document-generator.md +56 -0
- package/.claude/agents/specialized/specialized-french-consulting-market.md +193 -0
- package/.claude/agents/specialized/specialized-korean-business-navigator.md +217 -0
- package/.claude/agents/specialized/specialized-mcp-builder.md +64 -0
- package/.claude/agents/specialized/specialized-model-qa.md +489 -0
- package/.claude/agents/specialized/specialized-salesforce-architect.md +181 -0
- package/.claude/agents/specialized/specialized-workflow-architect.md +598 -0
- package/.claude/agents/specialized/study-abroad-advisor.md +283 -0
- package/.claude/agents/specialized/supply-chain-strategist.md +583 -0
- package/.claude/agents/specialized/zk-steward.md +212 -0
- package/.claude/agents/sublinear/consensus-coordinator.md +333 -0
- package/.claude/agents/sublinear/matrix-optimizer.md +180 -0
- package/.claude/agents/sublinear/pagerank-analyzer.md +295 -0
- package/.claude/agents/sublinear/performance-optimizer.md +363 -0
- package/.claude/agents/sublinear/trading-predictor.md +242 -0
- package/.claude/agents/support/support-analytics-reporter.md +366 -0
- package/.claude/agents/support/support-executive-summary-generator.md +213 -0
- package/.claude/agents/support/support-finance-tracker.md +443 -0
- package/.claude/agents/support/support-infrastructure-maintainer.md +619 -0
- package/.claude/agents/support/support-legal-compliance-checker.md +589 -0
- package/.claude/agents/support/support-support-responder.md +586 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +364 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +318 -0
- package/.claude/agents/swarm/mesh-coordinator.md +363 -0
- package/.claude/agents/templates/automation-smart-agent.md +185 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +83 -0
- package/.claude/agents/templates/github-pr-manager.md +155 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +231 -0
- package/.claude/agents/templates/memory-coordinator.md +163 -0
- package/.claude/agents/templates/migration-plan.md +724 -0
- package/.claude/agents/templates/orchestrator-task.md +120 -0
- package/.claude/agents/templates/performance-analyzer.md +179 -0
- package/.claude/agents/templates/sparc-coordinator.md +163 -0
- package/.claude/agents/testing/production-validator.md +374 -0
- package/.claude/agents/testing/tdd-london-swarm.md +241 -0
- package/.claude/agents/testing/testing-accessibility-auditor.md +322 -0
- package/.claude/agents/testing/testing-api-tester.md +307 -0
- package/.claude/agents/testing/testing-evidence-collector.md +211 -0
- package/.claude/agents/testing/testing-performance-benchmarker.md +269 -0
- package/.claude/agents/testing/testing-reality-checker.md +237 -0
- package/.claude/agents/testing/testing-test-results-analyzer.md +306 -0
- package/.claude/agents/testing/testing-tool-evaluator.md +395 -0
- package/.claude/agents/testing/testing-workflow-optimizer.md +451 -0
- package/.claude/agents/v3/integration-architect.md +338 -0
- package/.claude/agents/v3/memory-specialist.md +298 -0
- package/.claude/agents/v3/performance-engineer.md +387 -0
- package/.claude/agents/v3/queen-coordinator.md +67 -0
- package/.claude/agents/v3/security-architect.md +154 -0
- package/.claude/commands/agents/README.md +10 -0
- package/.claude/commands/agents/agent-capabilities.md +21 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +26 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/browse.md +27 -0
- package/.claude/commands/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +550 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +355 -0
- package/.claude/commands/github/release-swarm.md +590 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +381 -0
- package/.claude/commands/github/swarm-issue.md +482 -0
- package/.claude/commands/github/swarm-pr.md +310 -0
- package/.claude/commands/github/sync-coordinator.md +301 -0
- package/.claude/commands/github/workflow-automation.md +468 -0
- package/.claude/commands/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +58 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/list-agents.md +17 -0
- package/.claude/commands/mastermind.md +121 -0
- package/.claude/commands/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/metrics.md +11 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/monobrain-help.md +103 -0
- package/.claude/commands/monobrain-memory.md +107 -0
- package/.claude/commands/monobrain-swarm.md +205 -0
- package/.claude/commands/monomind-do.md +276 -0
- package/.claude/commands/monomind-idea.md +269 -0
- package/.claude/commands/monomind-repeat.md +95 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/ask.md +97 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/code.md +89 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debug.md +83 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/devops.md +109 -0
- package/.claude/commands/sparc/docs-writer.md +80 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/integration.md +83 -0
- package/.claude/commands/sparc/mcp.md +117 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/security-review.md +80 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/sparc.md +111 -0
- package/.claude/commands/sparc/spec-pseudocode.md +80 -0
- package/.claude/commands/sparc/supabase-admin.md +348 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/tutorial.md +79 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/commands/sparc.md +166 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +27 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/tokens.md +13 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +74 -0
- package/.claude/commands/training/neural-train.md +25 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/ts.md +9 -0
- package/.claude/commands/use-agent.md +67 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/helpers/README.md +105 -0
- package/.claude/helpers/auto-memory-hook.mjs +369 -0
- package/.claude/helpers/context-persistence-hook.mjs +1988 -0
- package/.claude/helpers/extras-registry.json +3028 -0
- package/.claude/helpers/graphify-freshen.cjs +109 -0
- package/.claude/helpers/hook-handler.cjs +1446 -0
- package/.claude/helpers/intelligence.cjs +227 -0
- package/.claude/helpers/learning-service.mjs +1144 -0
- package/.claude/helpers/memory-palace.cjs +401 -0
- package/.claude/helpers/memory.cjs +84 -0
- package/.claude/helpers/metrics-db.mjs +488 -0
- package/.claude/helpers/router.cjs +306 -0
- package/.claude/helpers/session.cjs +125 -0
- package/.claude/helpers/skill-registry.json +961 -0
- package/.claude/helpers/statusline.cjs +1276 -0
- package/.claude/helpers/swarm-hooks.sh +761 -0
- package/.claude/helpers/toggle-statusline.cjs +58 -0
- package/.claude/helpers/token-tracker.cjs +934 -0
- package/.claude/skills/agent-browser-testing/SKILL.md +312 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
- package/.claude/skills/github-code-review/SKILL.md +1148 -0
- package/.claude/skills/github-multi-repo/SKILL.md +916 -0
- package/.claude/skills/github-project-management/SKILL.md +1250 -0
- package/.claude/skills/github-release-management/SKILL.md +1124 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1111 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +709 -0
- package/.claude/skills/hooks-automation/SKILL.md +1200 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/performance-analysis/SKILL.md +560 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -0
- package/.claude/skills/specialagent/SKILL.md +208 -0
- package/.claude/skills/stream-chain/SKILL.md +560 -0
- package/.claude/skills/swarm-advanced/SKILL.md +970 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/v3-cli-modernization/SKILL.md +941 -0
- package/.claude/skills/v3-core-implementation/SKILL.md +867 -0
- package/.claude/skills/v3-ddd-architecture/SKILL.md +451 -0
- package/.claude/skills/v3-integration-deep/SKILL.md +258 -0
- package/.claude/skills/v3-mcp-optimization/SKILL.md +816 -0
- package/.claude/skills/v3-memory-unification/SKILL.md +180 -0
- package/.claude/skills/v3-performance-optimization/SKILL.md +408 -0
- package/.claude/skills/v3-security-overhaul/SKILL.md +91 -0
- package/.claude/skills/v3-swarm-coordination/SKILL.md +433 -0
- package/.claude/skills/verification-quality/SKILL.md +674 -0
- package/README.md +687 -0
- package/bin/cli.js +156 -0
- package/bin/mcp-server.js +189 -0
- package/bin/preinstall.cjs +2 -0
- package/dist/src/agents/halt-signal.d.ts +25 -0
- package/dist/src/agents/halt-signal.d.ts.map +1 -0
- package/dist/src/agents/halt-signal.js +50 -0
- package/dist/src/agents/halt-signal.js.map +1 -0
- package/dist/src/agents/index.d.ts +18 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +13 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/managed-agent.d.ts +41 -0
- package/dist/src/agents/managed-agent.d.ts.map +1 -0
- package/dist/src/agents/managed-agent.js +66 -0
- package/dist/src/agents/managed-agent.js.map +1 -0
- package/dist/src/agents/prompt-experiment.d.ts +22 -0
- package/dist/src/agents/prompt-experiment.d.ts.map +1 -0
- package/dist/src/agents/prompt-experiment.js +49 -0
- package/dist/src/agents/prompt-experiment.js.map +1 -0
- package/dist/src/agents/prompt-version-manager.d.ts +19 -0
- package/dist/src/agents/prompt-version-manager.d.ts.map +1 -0
- package/dist/src/agents/prompt-version-manager.js +58 -0
- package/dist/src/agents/prompt-version-manager.js.map +1 -0
- package/dist/src/agents/registry-builder.d.ts +36 -0
- package/dist/src/agents/registry-builder.d.ts.map +1 -0
- package/dist/src/agents/registry-builder.js +200 -0
- package/dist/src/agents/registry-builder.js.map +1 -0
- package/dist/src/agents/registry-query.d.ts +71 -0
- package/dist/src/agents/registry-query.d.ts.map +1 -0
- package/dist/src/agents/registry-query.js +125 -0
- package/dist/src/agents/registry-query.js.map +1 -0
- package/dist/src/agents/score-decay.d.ts +19 -0
- package/dist/src/agents/score-decay.d.ts.map +1 -0
- package/dist/src/agents/score-decay.js +22 -0
- package/dist/src/agents/score-decay.js.map +1 -0
- package/dist/src/agents/shared-instructions-loader.d.ts +13 -0
- package/dist/src/agents/shared-instructions-loader.d.ts.map +1 -0
- package/dist/src/agents/shared-instructions-loader.js +40 -0
- package/dist/src/agents/shared-instructions-loader.js.map +1 -0
- package/dist/src/agents/specialization-scorer.d.ts +54 -0
- package/dist/src/agents/specialization-scorer.d.ts.map +1 -0
- package/dist/src/agents/specialization-scorer.js +204 -0
- package/dist/src/agents/specialization-scorer.js.map +1 -0
- package/dist/src/agents/termination-watcher.d.ts +30 -0
- package/dist/src/agents/termination-watcher.d.ts.map +1 -0
- package/dist/src/agents/termination-watcher.js +84 -0
- package/dist/src/agents/termination-watcher.js.map +1 -0
- package/dist/src/agents/trigger-index.d.ts +20 -0
- package/dist/src/agents/trigger-index.d.ts.map +1 -0
- package/dist/src/agents/trigger-index.js +38 -0
- package/dist/src/agents/trigger-index.js.map +1 -0
- package/dist/src/agents/trigger-scanner.d.ts +62 -0
- package/dist/src/agents/trigger-scanner.d.ts.map +1 -0
- package/dist/src/agents/trigger-scanner.js +260 -0
- package/dist/src/agents/trigger-scanner.js.map +1 -0
- package/dist/src/agents/version-diff.d.ts +18 -0
- package/dist/src/agents/version-diff.d.ts.map +1 -0
- package/dist/src/agents/version-diff.js +64 -0
- package/dist/src/agents/version-diff.js.map +1 -0
- package/dist/src/agents/version-store.d.ts +61 -0
- package/dist/src/agents/version-store.d.ts.map +1 -0
- package/dist/src/agents/version-store.js +212 -0
- package/dist/src/agents/version-store.js.map +1 -0
- package/dist/src/autopilot-state.d.ts +77 -0
- package/dist/src/autopilot-state.d.ts.map +1 -0
- package/dist/src/autopilot-state.js +279 -0
- package/dist/src/autopilot-state.js.map +1 -0
- package/dist/src/benchmarks/benchmark-runner.d.ts +82 -0
- package/dist/src/benchmarks/benchmark-runner.d.ts.map +1 -0
- package/dist/src/benchmarks/benchmark-runner.js +261 -0
- package/dist/src/benchmarks/benchmark-runner.js.map +1 -0
- package/dist/src/benchmarks/metric-evaluators.d.ts +35 -0
- package/dist/src/benchmarks/metric-evaluators.d.ts.map +1 -0
- package/dist/src/benchmarks/metric-evaluators.js +91 -0
- package/dist/src/benchmarks/metric-evaluators.js.map +1 -0
- 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 +404 -0
- package/dist/src/benchmarks/pretrain/index.js.map +1 -0
- package/dist/src/commands/agent-wasm.d.ts +14 -0
- package/dist/src/commands/agent-wasm.d.ts.map +1 -0
- package/dist/src/commands/agent-wasm.js +333 -0
- package/dist/src/commands/agent-wasm.js.map +1 -0
- package/dist/src/commands/agent.d.ts +8 -0
- package/dist/src/commands/agent.d.ts.map +1 -0
- package/dist/src/commands/agent.js +941 -0
- package/dist/src/commands/agent.js.map +1 -0
- package/dist/src/commands/analyze.d.ts +19 -0
- package/dist/src/commands/analyze.d.ts.map +1 -0
- package/dist/src/commands/analyze.js +2048 -0
- package/dist/src/commands/analyze.js.map +1 -0
- package/dist/src/commands/appliance-advanced.d.ts +9 -0
- package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
- package/dist/src/commands/appliance-advanced.js +215 -0
- package/dist/src/commands/appliance-advanced.js.map +1 -0
- package/dist/src/commands/appliance.d.ts +8 -0
- package/dist/src/commands/appliance.d.ts.map +1 -0
- package/dist/src/commands/appliance.js +406 -0
- package/dist/src/commands/appliance.js.map +1 -0
- package/dist/src/commands/autopilot.d.ts +15 -0
- package/dist/src/commands/autopilot.d.ts.map +1 -0
- package/dist/src/commands/autopilot.js +362 -0
- package/dist/src/commands/autopilot.js.map +1 -0
- package/dist/src/commands/benchmark.d.ts +10 -0
- package/dist/src/commands/benchmark.d.ts.map +1 -0
- package/dist/src/commands/benchmark.js +460 -0
- package/dist/src/commands/benchmark.js.map +1 -0
- package/dist/src/commands/claims.d.ts +10 -0
- package/dist/src/commands/claims.d.ts.map +1 -0
- package/dist/src/commands/claims.js +624 -0
- package/dist/src/commands/claims.js.map +1 -0
- package/dist/src/commands/cleanup.d.ts +13 -0
- package/dist/src/commands/cleanup.d.ts.map +1 -0
- package/dist/src/commands/cleanup.js +218 -0
- package/dist/src/commands/cleanup.js.map +1 -0
- package/dist/src/commands/completions.d.ts +10 -0
- package/dist/src/commands/completions.d.ts.map +1 -0
- package/dist/src/commands/completions.js +539 -0
- package/dist/src/commands/completions.js.map +1 -0
- package/dist/src/commands/config.d.ts +8 -0
- package/dist/src/commands/config.d.ts.map +1 -0
- package/dist/src/commands/config.js +428 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/daemon.d.ts +8 -0
- package/dist/src/commands/daemon.d.ts.map +1 -0
- package/dist/src/commands/daemon.js +669 -0
- package/dist/src/commands/daemon.js.map +1 -0
- package/dist/src/commands/deployment.d.ts +10 -0
- package/dist/src/commands/deployment.d.ts.map +1 -0
- package/dist/src/commands/deployment.js +672 -0
- package/dist/src/commands/deployment.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +10 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +619 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/embeddings.d.ts +18 -0
- package/dist/src/commands/embeddings.d.ts.map +1 -0
- package/dist/src/commands/embeddings.js +1576 -0
- package/dist/src/commands/embeddings.js.map +1 -0
- package/dist/src/commands/guidance.d.ts +8 -0
- package/dist/src/commands/guidance.d.ts.map +1 -0
- package/dist/src/commands/guidance.js +560 -0
- package/dist/src/commands/guidance.js.map +1 -0
- package/dist/src/commands/hive-mind.d.ts +11 -0
- package/dist/src/commands/hive-mind.d.ts.map +1 -0
- package/dist/src/commands/hive-mind.js +1237 -0
- package/dist/src/commands/hive-mind.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +8 -0
- package/dist/src/commands/hooks.d.ts.map +1 -0
- package/dist/src/commands/hooks.js +4442 -0
- package/dist/src/commands/hooks.js.map +1 -0
- package/dist/src/commands/index.d.ts +117 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +391 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/init.d.ts +8 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +817 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/issues.d.ts +21 -0
- package/dist/src/commands/issues.d.ts.map +1 -0
- package/dist/src/commands/issues.js +567 -0
- package/dist/src/commands/issues.js.map +1 -0
- package/dist/src/commands/mcp.d.ts +11 -0
- package/dist/src/commands/mcp.d.ts.map +1 -0
- package/dist/src/commands/mcp.js +718 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/commands/memory.d.ts +8 -0
- package/dist/src/commands/memory.d.ts.map +1 -0
- package/dist/src/commands/memory.js +1565 -0
- package/dist/src/commands/memory.js.map +1 -0
- package/dist/src/commands/migrate.d.ts +8 -0
- package/dist/src/commands/migrate.d.ts.map +1 -0
- package/dist/src/commands/migrate.js +742 -0
- package/dist/src/commands/migrate.js.map +1 -0
- package/dist/src/commands/neural.d.ts +10 -0
- package/dist/src/commands/neural.d.ts.map +1 -0
- package/dist/src/commands/neural.js +1454 -0
- package/dist/src/commands/neural.js.map +1 -0
- package/dist/src/commands/performance.d.ts +10 -0
- package/dist/src/commands/performance.d.ts.map +1 -0
- package/dist/src/commands/performance.js +579 -0
- package/dist/src/commands/performance.js.map +1 -0
- package/dist/src/commands/plugins.d.ts +11 -0
- package/dist/src/commands/plugins.d.ts.map +1 -0
- package/dist/src/commands/plugins.js +820 -0
- package/dist/src/commands/plugins.js.map +1 -0
- package/dist/src/commands/process.d.ts +10 -0
- package/dist/src/commands/process.d.ts.map +1 -0
- package/dist/src/commands/process.js +695 -0
- package/dist/src/commands/process.js.map +1 -0
- package/dist/src/commands/progress.d.ts +11 -0
- package/dist/src/commands/progress.d.ts.map +1 -0
- package/dist/src/commands/progress.js +259 -0
- package/dist/src/commands/progress.js.map +1 -0
- package/dist/src/commands/providers.d.ts +10 -0
- package/dist/src/commands/providers.d.ts.map +1 -0
- package/dist/src/commands/providers.js +359 -0
- package/dist/src/commands/providers.js.map +1 -0
- package/dist/src/commands/replay.d.ts +8 -0
- package/dist/src/commands/replay.d.ts.map +1 -0
- package/dist/src/commands/replay.js +60 -0
- package/dist/src/commands/replay.js.map +1 -0
- package/dist/src/commands/route.d.ts +16 -0
- package/dist/src/commands/route.d.ts.map +1 -0
- package/dist/src/commands/route.js +907 -0
- package/dist/src/commands/route.js.map +1 -0
- package/dist/src/commands/ruvector/backup.d.ts +11 -0
- package/dist/src/commands/ruvector/backup.d.ts.map +1 -0
- package/dist/src/commands/ruvector/backup.js +746 -0
- package/dist/src/commands/ruvector/backup.js.map +1 -0
- package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
- package/dist/src/commands/ruvector/benchmark.d.ts.map +1 -0
- package/dist/src/commands/ruvector/benchmark.js +489 -0
- package/dist/src/commands/ruvector/benchmark.js.map +1 -0
- package/dist/src/commands/ruvector/import.d.ts +18 -0
- package/dist/src/commands/ruvector/import.d.ts.map +1 -0
- package/dist/src/commands/ruvector/import.js +349 -0
- package/dist/src/commands/ruvector/import.js.map +1 -0
- package/dist/src/commands/ruvector/index.d.ts +29 -0
- package/dist/src/commands/ruvector/index.d.ts.map +1 -0
- package/dist/src/commands/ruvector/index.js +129 -0
- package/dist/src/commands/ruvector/index.js.map +1 -0
- package/dist/src/commands/ruvector/init.d.ts +11 -0
- package/dist/src/commands/ruvector/init.d.ts.map +1 -0
- package/dist/src/commands/ruvector/init.js +466 -0
- package/dist/src/commands/ruvector/init.js.map +1 -0
- package/dist/src/commands/ruvector/migrate.d.ts +11 -0
- package/dist/src/commands/ruvector/migrate.d.ts.map +1 -0
- package/dist/src/commands/ruvector/migrate.js +497 -0
- package/dist/src/commands/ruvector/migrate.js.map +1 -0
- package/dist/src/commands/ruvector/optimize.d.ts +11 -0
- package/dist/src/commands/ruvector/optimize.d.ts.map +1 -0
- package/dist/src/commands/ruvector/optimize.js +504 -0
- package/dist/src/commands/ruvector/optimize.js.map +1 -0
- package/dist/src/commands/ruvector/setup.d.ts +18 -0
- package/dist/src/commands/ruvector/setup.d.ts.map +1 -0
- package/dist/src/commands/ruvector/setup.js +765 -0
- package/dist/src/commands/ruvector/setup.js.map +1 -0
- package/dist/src/commands/ruvector/status.d.ts +11 -0
- package/dist/src/commands/ruvector/status.d.ts.map +1 -0
- package/dist/src/commands/ruvector/status.js +478 -0
- package/dist/src/commands/ruvector/status.js.map +1 -0
- package/dist/src/commands/security.d.ts +10 -0
- package/dist/src/commands/security.d.ts.map +1 -0
- package/dist/src/commands/security.js +794 -0
- package/dist/src/commands/security.js.map +1 -0
- package/dist/src/commands/session.d.ts +8 -0
- package/dist/src/commands/session.d.ts.map +1 -0
- package/dist/src/commands/session.js +750 -0
- package/dist/src/commands/session.js.map +1 -0
- package/dist/src/commands/start.d.ts +8 -0
- package/dist/src/commands/start.d.ts.map +1 -0
- package/dist/src/commands/start.js +418 -0
- package/dist/src/commands/start.js.map +1 -0
- package/dist/src/commands/status.d.ts +8 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/src/commands/status.js +591 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/swarm.d.ts +8 -0
- package/dist/src/commands/swarm.d.ts.map +1 -0
- package/dist/src/commands/swarm.js +801 -0
- package/dist/src/commands/swarm.js.map +1 -0
- package/dist/src/commands/task.d.ts +8 -0
- package/dist/src/commands/task.d.ts.map +1 -0
- package/dist/src/commands/task.js +671 -0
- package/dist/src/commands/task.js.map +1 -0
- package/dist/src/commands/tokens.d.ts +8 -0
- package/dist/src/commands/tokens.d.ts.map +1 -0
- package/dist/src/commands/tokens.js +107 -0
- package/dist/src/commands/tokens.js.map +1 -0
- package/dist/src/commands/transfer-store.d.ts +13 -0
- package/dist/src/commands/transfer-store.d.ts.map +1 -0
- package/dist/src/commands/transfer-store.js +428 -0
- package/dist/src/commands/transfer-store.js.map +1 -0
- package/dist/src/commands/ui.js +68 -0
- package/dist/src/commands/update.d.ts +8 -0
- package/dist/src/commands/update.d.ts.map +1 -0
- package/dist/src/commands/update.js +276 -0
- package/dist/src/commands/update.js.map +1 -0
- package/dist/src/commands/workflow.d.ts +8 -0
- package/dist/src/commands/workflow.d.ts.map +1 -0
- package/dist/src/commands/workflow.js +617 -0
- package/dist/src/commands/workflow.js.map +1 -0
- 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 +186 -0
- package/dist/src/config-adapter.js.map +1 -0
- package/dist/src/consensus/audit-writer.d.ts +50 -0
- package/dist/src/consensus/audit-writer.d.ts.map +1 -0
- package/dist/src/consensus/audit-writer.js +109 -0
- package/dist/src/consensus/audit-writer.js.map +1 -0
- package/dist/src/consensus/index.d.ts +7 -0
- package/dist/src/consensus/index.d.ts.map +1 -0
- package/dist/src/consensus/index.js +6 -0
- package/dist/src/consensus/index.js.map +1 -0
- package/dist/src/consensus/vote-signer.d.ts +39 -0
- package/dist/src/consensus/vote-signer.d.ts.map +1 -0
- package/dist/src/consensus/vote-signer.js +63 -0
- package/dist/src/consensus/vote-signer.js.map +1 -0
- package/dist/src/context/context-provider.d.ts +44 -0
- package/dist/src/context/context-provider.d.ts.map +1 -0
- package/dist/src/context/context-provider.js +25 -0
- package/dist/src/context/context-provider.js.map +1 -0
- package/dist/src/context/git-state-provider.d.ts +12 -0
- package/dist/src/context/git-state-provider.d.ts.map +1 -0
- package/dist/src/context/git-state-provider.js +34 -0
- package/dist/src/context/git-state-provider.js.map +1 -0
- package/dist/src/context/index.d.ts +12 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +12 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/project-conventions-provider.d.ts +15 -0
- package/dist/src/context/project-conventions-provider.d.ts.map +1 -0
- package/dist/src/context/project-conventions-provider.js +19 -0
- package/dist/src/context/project-conventions-provider.js.map +1 -0
- package/dist/src/context/prompt-assembler.d.ts +26 -0
- package/dist/src/context/prompt-assembler.d.ts.map +1 -0
- package/dist/src/context/prompt-assembler.js +93 -0
- package/dist/src/context/prompt-assembler.js.map +1 -0
- package/dist/src/context/task-history-provider.d.ts +24 -0
- package/dist/src/context/task-history-provider.d.ts.map +1 -0
- package/dist/src/context/task-history-provider.js +32 -0
- package/dist/src/context/task-history-provider.js.map +1 -0
- package/dist/src/context/user-preferences-provider.d.ts +14 -0
- package/dist/src/context/user-preferences-provider.d.ts.map +1 -0
- package/dist/src/context/user-preferences-provider.js +27 -0
- package/dist/src/context/user-preferences-provider.js.map +1 -0
- package/dist/src/dlq/dlq-reader.d.ts +29 -0
- package/dist/src/dlq/dlq-reader.d.ts.map +1 -0
- package/dist/src/dlq/dlq-reader.js +64 -0
- package/dist/src/dlq/dlq-reader.js.map +1 -0
- package/dist/src/dlq/dlq-replayer.d.ts +20 -0
- package/dist/src/dlq/dlq-replayer.d.ts.map +1 -0
- package/dist/src/dlq/dlq-replayer.js +56 -0
- package/dist/src/dlq/dlq-replayer.js.map +1 -0
- package/dist/src/dlq/dlq-writer.d.ts +24 -0
- package/dist/src/dlq/dlq-writer.d.ts.map +1 -0
- package/dist/src/dlq/dlq-writer.js +43 -0
- package/dist/src/dlq/dlq-writer.js.map +1 -0
- package/dist/src/dlq/index.d.ts +10 -0
- package/dist/src/dlq/index.d.ts.map +1 -0
- package/dist/src/dlq/index.js +7 -0
- package/dist/src/dlq/index.js.map +1 -0
- package/dist/src/eval/dataset-manager.d.ts +33 -0
- package/dist/src/eval/dataset-manager.d.ts.map +1 -0
- package/dist/src/eval/dataset-manager.js +97 -0
- package/dist/src/eval/dataset-manager.js.map +1 -0
- package/dist/src/eval/dataset-runner.d.ts +23 -0
- package/dist/src/eval/dataset-runner.d.ts.map +1 -0
- package/dist/src/eval/dataset-runner.js +59 -0
- package/dist/src/eval/dataset-runner.js.map +1 -0
- package/dist/src/eval/index.d.ts +10 -0
- package/dist/src/eval/index.d.ts.map +1 -0
- package/dist/src/eval/index.js +7 -0
- package/dist/src/eval/index.js.map +1 -0
- package/dist/src/eval/trace-collector.d.ts +40 -0
- package/dist/src/eval/trace-collector.d.ts.map +1 -0
- package/dist/src/eval/trace-collector.js +82 -0
- package/dist/src/eval/trace-collector.js.map +1 -0
- package/dist/src/graph/enrich.mjs +362 -0
- package/dist/src/index.d.ts +82 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +578 -0
- package/dist/src/index.js.map +1 -0
- 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 +264 -0
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -0
- 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 +522 -0
- package/dist/src/init/claudemd-generator.js.map +1 -0
- package/dist/src/init/executor.d.ts +38 -0
- package/dist/src/init/executor.d.ts.map +1 -0
- package/dist/src/init/executor.js +1919 -0
- package/dist/src/init/executor.js.map +1 -0
- 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 +1222 -0
- package/dist/src/init/helpers-generator.js.map +1 -0
- package/dist/src/init/index.d.ts +13 -0
- package/dist/src/init/index.d.ts.map +1 -0
- package/dist/src/init/index.js +15 -0
- package/dist/src/init/index.js.map +1 -0
- package/dist/src/init/mcp-generator.d.ts +26 -0
- package/dist/src/init/mcp-generator.d.ts.map +1 -0
- package/dist/src/init/mcp-generator.js +99 -0
- package/dist/src/init/mcp-generator.js.map +1 -0
- package/dist/src/init/settings-generator.d.ts +14 -0
- package/dist/src/init/settings-generator.d.ts.map +1 -0
- package/dist/src/init/settings-generator.js +392 -0
- package/dist/src/init/settings-generator.js.map +1 -0
- package/dist/src/init/statusline-generator.d.ts +25 -0
- package/dist/src/init/statusline-generator.d.ts.map +1 -0
- package/dist/src/init/statusline-generator.js +1157 -0
- package/dist/src/init/statusline-generator.js.map +1 -0
- package/dist/src/init/types.d.ts +291 -0
- package/dist/src/init/types.d.ts.map +1 -0
- package/dist/src/init/types.js +258 -0
- package/dist/src/init/types.js.map +1 -0
- package/dist/src/interactive/interrupt.d.ts +22 -0
- package/dist/src/interactive/interrupt.d.ts.map +1 -0
- package/dist/src/interactive/interrupt.js +66 -0
- package/dist/src/interactive/interrupt.js.map +1 -0
- package/dist/src/mcp/deprecation-injector.d.ts +25 -0
- package/dist/src/mcp/deprecation-injector.d.ts.map +1 -0
- package/dist/src/mcp/deprecation-injector.js +48 -0
- package/dist/src/mcp/deprecation-injector.js.map +1 -0
- package/dist/src/mcp/tool-registry.d.ts +61 -0
- package/dist/src/mcp/tool-registry.d.ts.map +1 -0
- package/dist/src/mcp/tool-registry.js +212 -0
- package/dist/src/mcp/tool-registry.js.map +1 -0
- 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 +261 -0
- package/dist/src/mcp-client.js.map +1 -0
- package/dist/src/mcp-server.d.ts +163 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +682 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/dist/src/mcp-tools/a2a-tools.d.ts +14 -0
- package/dist/src/mcp-tools/a2a-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/a2a-tools.js +244 -0
- package/dist/src/mcp-tools/a2a-tools.js.map +1 -0
- package/dist/src/mcp-tools/agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/agent-tools.js +564 -0
- package/dist/src/mcp-tools/agent-tools.js.map +1 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/agentdb-tools.js +569 -0
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/analyze-tools.js +317 -0
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
- 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 +131 -0
- package/dist/src/mcp-tools/auto-install.js.map +1 -0
- package/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
- package/dist/src/mcp-tools/autopilot-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/autopilot-tools.js +227 -0
- package/dist/src/mcp-tools/autopilot-tools.js.map +1 -0
- package/dist/src/mcp-tools/browser-tools.d.ts +13 -0
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/browser-tools.js +550 -0
- package/dist/src/mcp-tools/browser-tools.js.map +1 -0
- package/dist/src/mcp-tools/claims-tools.d.ts +12 -0
- package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/claims-tools.js +747 -0
- package/dist/src/mcp-tools/claims-tools.js.map +1 -0
- package/dist/src/mcp-tools/config-tools.d.ts +8 -0
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/config-tools.js +353 -0
- package/dist/src/mcp-tools/config-tools.js.map +1 -0
- package/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/coordination-tools.js +673 -0
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -0
- package/dist/src/mcp-tools/daa-tools.d.ts +13 -0
- package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/daa-tools.js +473 -0
- package/dist/src/mcp-tools/daa-tools.js.map +1 -0
- package/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/embeddings-tools.js +782 -0
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -0
- package/dist/src/mcp-tools/github-tools.d.ts +9 -0
- package/dist/src/mcp-tools/github-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/github-tools.js +472 -0
- package/dist/src/mcp-tools/github-tools.js.map +1 -0
- package/dist/src/mcp-tools/graphify-tools.d.ts +73 -0
- package/dist/src/mcp-tools/graphify-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/graphify-tools.js +1235 -0
- package/dist/src/mcp-tools/graphify-tools.js.map +1 -0
- package/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/guidance-tools.js +618 -0
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/hive-mind-tools.js +877 -0
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +44 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.js +3397 -0
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -0
- package/dist/src/mcp-tools/index.d.ts +38 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -0
- package/dist/src/mcp-tools/index.js +40 -0
- package/dist/src/mcp-tools/index.js.map +1 -0
- package/dist/src/mcp-tools/memory-tools.d.ts +14 -0
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/memory-tools.js +514 -0
- package/dist/src/mcp-tools/memory-tools.js.map +1 -0
- package/dist/src/mcp-tools/neural-tools.d.ts +16 -0
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/neural-tools.js +634 -0
- package/dist/src/mcp-tools/neural-tools.js.map +1 -0
- package/dist/src/mcp-tools/performance-tools.d.ts +16 -0
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/performance-tools.js +643 -0
- package/dist/src/mcp-tools/performance-tools.js.map +1 -0
- package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
- package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/progress-tools.js +348 -0
- package/dist/src/mcp-tools/progress-tools.js.map +1 -0
- package/dist/src/mcp-tools/request-tracker.d.ts +17 -0
- package/dist/src/mcp-tools/request-tracker.d.ts.map +1 -0
- package/dist/src/mcp-tools/request-tracker.js +27 -0
- package/dist/src/mcp-tools/request-tracker.js.map +1 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/ruvllm-tools.js +284 -0
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
- package/dist/src/mcp-tools/security-tools.d.ts +18 -0
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/security-tools.js +434 -0
- package/dist/src/mcp-tools/security-tools.js.map +1 -0
- package/dist/src/mcp-tools/session-tools.d.ts +8 -0
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/session-tools.js +338 -0
- package/dist/src/mcp-tools/session-tools.js.map +1 -0
- package/dist/src/mcp-tools/swarm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/swarm-tools.js +289 -0
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -0
- package/dist/src/mcp-tools/system-tools.d.ts +13 -0
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/system-tools.js +551 -0
- package/dist/src/mcp-tools/system-tools.js.map +1 -0
- package/dist/src/mcp-tools/task-tools.d.ts +8 -0
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/task-tools.js +406 -0
- package/dist/src/mcp-tools/task-tools.js.map +1 -0
- package/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/terminal-tools.js +260 -0
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -0
- package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/transfer-tools.js +396 -0
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -0
- package/dist/src/mcp-tools/types.d.ts +37 -0
- package/dist/src/mcp-tools/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/types.js +14 -0
- package/dist/src/mcp-tools/types.js.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +230 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.js +562 -0
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
- 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 +601 -0
- package/dist/src/memory/ewc-consolidation.js.map +1 -0
- 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 +1023 -0
- package/dist/src/memory/intelligence.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts +409 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1561 -0
- package/dist/src/memory/memory-bridge.js.map +1 -0
- package/dist/src/memory/memory-initializer.d.ts +414 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -0
- package/dist/src/memory/memory-initializer.js +2222 -0
- package/dist/src/memory/memory-initializer.js.map +1 -0
- 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 +633 -0
- package/dist/src/memory/sona-optimizer.js.map +1 -0
- package/dist/src/model/complexity-scorer.d.ts +21 -0
- package/dist/src/model/complexity-scorer.d.ts.map +1 -0
- package/dist/src/model/complexity-scorer.js +106 -0
- package/dist/src/model/complexity-scorer.js.map +1 -0
- package/dist/src/model/index.d.ts +4 -0
- package/dist/src/model/index.d.ts.map +1 -0
- package/dist/src/model/index.js +4 -0
- package/dist/src/model/index.js.map +1 -0
- package/dist/src/model/model-settings.d.ts +22 -0
- package/dist/src/model/model-settings.d.ts.map +1 -0
- package/dist/src/model/model-settings.js +33 -0
- package/dist/src/model/model-settings.js.map +1 -0
- package/dist/src/model/model-tier-resolver.d.ts +24 -0
- package/dist/src/model/model-tier-resolver.d.ts.map +1 -0
- package/dist/src/model/model-tier-resolver.js +65 -0
- package/dist/src/model/model-tier-resolver.js.map +1 -0
- package/dist/src/orchestration/index.d.ts +7 -0
- package/dist/src/orchestration/index.d.ts.map +1 -0
- package/dist/src/orchestration/index.js +6 -0
- package/dist/src/orchestration/index.js.map +1 -0
- package/dist/src/orchestration/mode-dispatcher.d.ts +11 -0
- package/dist/src/orchestration/mode-dispatcher.d.ts.map +1 -0
- package/dist/src/orchestration/mode-dispatcher.js +31 -0
- package/dist/src/orchestration/mode-dispatcher.js.map +1 -0
- package/dist/src/orchestration/routing-modes.d.ts +68 -0
- package/dist/src/orchestration/routing-modes.d.ts.map +1 -0
- package/dist/src/orchestration/routing-modes.js +150 -0
- package/dist/src/orchestration/routing-modes.js.map +1 -0
- package/dist/src/output.d.ts +133 -0
- package/dist/src/output.d.ts.map +1 -0
- package/dist/src/output.js +514 -0
- package/dist/src/output.js.map +1 -0
- package/dist/src/parser.d.ts +51 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +425 -0
- package/dist/src/parser.js.map +1 -0
- 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 +400 -0
- package/dist/src/plugins/manager.js.map +1 -0
- 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 +841 -0
- package/dist/src/plugins/store/discovery.js.map +1 -0
- 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 +141 -0
- package/dist/src/plugins/store/index.js.map +1 -0
- 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 +230 -0
- package/dist/src/plugins/store/search.js.map +1 -0
- 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/store/types.js +7 -0
- package/dist/src/plugins/store/types.js.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -0
- package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/dist/src/plugins/tests/standalone-test.d.ts.map +1 -0
- package/dist/src/plugins/tests/standalone-test.js +188 -0
- package/dist/src/plugins/tests/standalone-test.js.map +1 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts.map +1 -0
- package/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -0
- 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 +241 -0
- package/dist/src/production/circuit-breaker.js.map +1 -0
- 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 +299 -0
- package/dist/src/production/error-handler.js.map +1 -0
- package/dist/src/production/index.d.ts +23 -0
- package/dist/src/production/index.d.ts.map +1 -0
- package/dist/src/production/index.js +18 -0
- package/dist/src/production/index.js.map +1 -0
- 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 +356 -0
- package/dist/src/production/monitoring.js.map +1 -0
- 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 +201 -0
- package/dist/src/production/rate-limiter.js.map +1 -0
- 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 +179 -0
- package/dist/src/production/retry.js.map +1 -0
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +501 -0
- package/dist/src/prompt.js.map +1 -0
- 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 +284 -0
- package/dist/src/runtime/headless.js.map +1 -0
- 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 +316 -0
- package/dist/src/ruvector/agent-wasm.js.map +1 -0
- 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 +277 -0
- package/dist/src/ruvector/ast-analyzer.js.map +1 -0
- 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 +529 -0
- package/dist/src/ruvector/coverage-router.js.map +1 -0
- package/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-tools.js +157 -0
- package/dist/src/ruvector/coverage-tools.js.map +1 -0
- 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 +698 -0
- package/dist/src/ruvector/diff-classifier.js.map +1 -0
- 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 +529 -0
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -0
- 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 +643 -0
- package/dist/src/ruvector/flash-attention.js.map +1 -0
- 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 +929 -0
- package/dist/src/ruvector/graph-analyzer.js.map +1 -0
- 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 +76 -0
- package/dist/src/ruvector/index.js.map +1 -0
- 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 +455 -0
- package/dist/src/ruvector/lora-adapter.js.map +1 -0
- 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 +488 -0
- package/dist/src/ruvector/model-router.js.map +1 -0
- 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 +626 -0
- package/dist/src/ruvector/moe-router.js.map +1 -0
- 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 +681 -0
- package/dist/src/ruvector/q-learning-router.js.map +1 -0
- 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 +363 -0
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
- 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 +178 -0
- package/dist/src/ruvector/semantic-router.js.map +1 -0
- 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 +243 -0
- package/dist/src/ruvector/vector-db.js.map +1 -0
- 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 +95 -0
- package/dist/src/services/agentic-flow-bridge.js.map +1 -0
- 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 +818 -0
- package/dist/src/services/claim-service.js.map +1 -0
- package/dist/src/services/config-file-manager.d.ts +37 -0
- package/dist/src/services/config-file-manager.d.ts.map +1 -0
- package/dist/src/services/config-file-manager.js +224 -0
- package/dist/src/services/config-file-manager.js.map +1 -0
- 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 +583 -0
- package/dist/src/services/container-worker-pool.js.map +1 -0
- 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 +1024 -0
- package/dist/src/services/headless-worker-executor.js.map +1 -0
- package/dist/src/services/index.d.ts +13 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +11 -0
- package/dist/src/services/index.js.map +1 -0
- 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 +146 -0
- package/dist/src/services/registry-api.js.map +1 -0
- 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 +688 -0
- package/dist/src/services/ruvector-training.js.map +1 -0
- package/dist/src/services/worker-daemon.d.ts +245 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +999 -0
- package/dist/src/services/worker-daemon.js.map +1 -0
- 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 +513 -0
- package/dist/src/services/worker-queue.js.map +1 -0
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +200 -0
- package/dist/src/suggest.js.map +1 -0
- package/dist/src/swarm/communication-graph.d.ts +25 -0
- package/dist/src/swarm/communication-graph.d.ts.map +1 -0
- package/dist/src/swarm/communication-graph.js +77 -0
- package/dist/src/swarm/communication-graph.js.map +1 -0
- package/dist/src/swarm/flow-enforcer.d.ts +29 -0
- package/dist/src/swarm/flow-enforcer.d.ts.map +1 -0
- package/dist/src/swarm/flow-enforcer.js +49 -0
- package/dist/src/swarm/flow-enforcer.js.map +1 -0
- package/dist/src/swarm/flow-visualizer.d.ts +16 -0
- package/dist/src/swarm/flow-visualizer.d.ts.map +1 -0
- package/dist/src/swarm/flow-visualizer.js +44 -0
- package/dist/src/swarm/flow-visualizer.js.map +1 -0
- package/dist/src/transfer/anonymization/index.d.ts +25 -0
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -0
- package/dist/src/transfer/anonymization/index.js +175 -0
- package/dist/src/transfer/anonymization/index.js.map +1 -0
- package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/dist/src/transfer/deploy-seraphine.d.ts.map +1 -0
- package/dist/src/transfer/deploy-seraphine.js +205 -0
- package/dist/src/transfer/deploy-seraphine.js.map +1 -0
- 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 +113 -0
- package/dist/src/transfer/export.js.map +1 -0
- package/dist/src/transfer/index.d.ts +12 -0
- package/dist/src/transfer/index.d.ts.map +1 -0
- package/dist/src/transfer/index.js +31 -0
- package/dist/src/transfer/index.js.map +1 -0
- 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 +307 -0
- package/dist/src/transfer/ipfs/client.js.map +1 -0
- 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 +411 -0
- package/dist/src/transfer/ipfs/upload.js.map +1 -0
- 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 +373 -0
- package/dist/src/transfer/models/seraphine.js.map +1 -0
- 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 +183 -0
- package/dist/src/transfer/serialization/cfp.js.map +1 -0
- 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 +272 -0
- package/dist/src/transfer/storage/gcs.js.map +1 -0
- package/dist/src/transfer/storage/index.d.ts +6 -0
- package/dist/src/transfer/storage/index.d.ts.map +1 -0
- package/dist/src/transfer/storage/index.js +6 -0
- package/dist/src/transfer/storage/index.js.map +1 -0
- 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 +382 -0
- package/dist/src/transfer/store/discovery.js.map +1 -0
- 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 +334 -0
- package/dist/src/transfer/store/download.js.map +1 -0
- 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 +153 -0
- package/dist/src/transfer/store/index.js.map +1 -0
- 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 +294 -0
- package/dist/src/transfer/store/publish.js.map +1 -0
- package/dist/src/transfer/store/registry.d.ts +58 -0
- package/dist/src/transfer/store/registry.d.ts.map +1 -0
- package/dist/src/transfer/store/registry.js +285 -0
- package/dist/src/transfer/store/registry.js.map +1 -0
- 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 +232 -0
- package/dist/src/transfer/store/search.js.map +1 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts.map +1 -0
- package/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -0
- package/dist/src/transfer/store/types.d.ts +193 -0
- package/dist/src/transfer/store/types.d.ts.map +1 -0
- package/dist/src/transfer/store/types.js +6 -0
- package/dist/src/transfer/store/types.js.map +1 -0
- package/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/dist/src/transfer/test-seraphine.d.ts.map +1 -0
- package/dist/src/transfer/test-seraphine.js +105 -0
- package/dist/src/transfer/test-seraphine.js.map +1 -0
- package/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/dist/src/transfer/tests/test-store.d.ts.map +1 -0
- package/dist/src/transfer/tests/test-store.js +214 -0
- package/dist/src/transfer/tests/test-store.js.map +1 -0
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/transfer/types.js +6 -0
- package/dist/src/transfer/types.js.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 +38 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/ui/.monomind/data/pending-insights.jsonl +0 -0
- package/dist/src/ui/.monomind/data/ranked-context.json +5 -0
- package/dist/src/ui/.monomind/sessions/current.json +13 -0
- package/dist/src/ui/collector.mjs +517 -0
- package/dist/src/ui/dashboard.html +4409 -0
- package/dist/src/ui/server.mjs +909 -0
- 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 +185 -0
- package/dist/src/update/checker.js.map +1 -0
- 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 +181 -0
- package/dist/src/update/executor.js.map +1 -0
- 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 +64 -0
- package/dist/src/update/index.js.map +1 -0
- 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 +96 -0
- package/dist/src/update/rate-limiter.js.map +1 -0
- 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 +118 -0
- package/dist/src/update/validator.js.map +1 -0
- package/dist/src/workflow/condition-evaluator.d.ts +10 -0
- package/dist/src/workflow/condition-evaluator.d.ts.map +1 -0
- package/dist/src/workflow/condition-evaluator.js +48 -0
- package/dist/src/workflow/condition-evaluator.js.map +1 -0
- package/dist/src/workflow/context-resolver.d.ts +12 -0
- package/dist/src/workflow/context-resolver.d.ts.map +1 -0
- package/dist/src/workflow/context-resolver.js +23 -0
- package/dist/src/workflow/context-resolver.js.map +1 -0
- package/dist/src/workflow/dag-builder.d.ts +17 -0
- package/dist/src/workflow/dag-builder.d.ts.map +1 -0
- package/dist/src/workflow/dag-builder.js +113 -0
- package/dist/src/workflow/dag-builder.js.map +1 -0
- package/dist/src/workflow/dag-executor.d.ts +9 -0
- package/dist/src/workflow/dag-executor.d.ts.map +1 -0
- package/dist/src/workflow/dag-executor.js +78 -0
- package/dist/src/workflow/dag-executor.js.map +1 -0
- package/dist/src/workflow/dag-types.d.ts +41 -0
- package/dist/src/workflow/dag-types.d.ts.map +1 -0
- package/dist/src/workflow/dag-types.js +8 -0
- package/dist/src/workflow/dag-types.js.map +1 -0
- package/dist/src/workflow/dsl-parser.d.ts +12 -0
- package/dist/src/workflow/dsl-parser.d.ts.map +1 -0
- package/dist/src/workflow/dsl-parser.js +20 -0
- package/dist/src/workflow/dsl-parser.js.map +1 -0
- package/dist/src/workflow/dsl-schema.d.ts +162 -0
- package/dist/src/workflow/dsl-schema.d.ts.map +1 -0
- package/dist/src/workflow/dsl-schema.js +78 -0
- package/dist/src/workflow/dsl-schema.js.map +1 -0
- package/dist/src/workflow/index.d.ts +13 -0
- package/dist/src/workflow/index.d.ts.map +1 -0
- package/dist/src/workflow/index.js +11 -0
- package/dist/src/workflow/index.js.map +1 -0
- package/dist/src/workflow/template-engine.d.ts +11 -0
- package/dist/src/workflow/template-engine.d.ts.map +1 -0
- package/dist/src/workflow/template-engine.js +33 -0
- package/dist/src/workflow/template-engine.js.map +1 -0
- package/dist/src/workflow/workflow-executor.d.ts +29 -0
- package/dist/src/workflow/workflow-executor.d.ts.map +1 -0
- package/dist/src/workflow/workflow-executor.js +146 -0
- package/dist/src/workflow/workflow-executor.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,1576 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Embeddings Command
|
|
3
|
+
* Vector embeddings, semantic search, similarity operations
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Multiple providers: OpenAI, Transformers.js, Agentic-Flow, Mock
|
|
7
|
+
* - Document chunking with overlap
|
|
8
|
+
* - L2/L1/minmax/zscore normalization
|
|
9
|
+
* - Hyperbolic embeddings (Poincaré ball)
|
|
10
|
+
* - Neural substrate integration
|
|
11
|
+
* - Persistent SQLite cache
|
|
12
|
+
*
|
|
13
|
+
* github.com/nokhodian/monomind
|
|
14
|
+
*/
|
|
15
|
+
import { output } from '../output.js';
|
|
16
|
+
// Dynamic imports for embeddings package
|
|
17
|
+
async function getEmbeddings() {
|
|
18
|
+
try {
|
|
19
|
+
return await import('@monoes/embeddings');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Generate subcommand - REAL implementation
|
|
26
|
+
const generateCommand = {
|
|
27
|
+
name: 'generate',
|
|
28
|
+
description: 'Generate embeddings for text',
|
|
29
|
+
options: [
|
|
30
|
+
{ name: 'text', short: 't', type: 'string', description: 'Text to embed', required: true },
|
|
31
|
+
{ name: 'provider', short: 'p', type: 'string', description: 'Provider: openai, transformers, agentic-flow, local', default: 'local' },
|
|
32
|
+
{ name: 'model', short: 'm', type: 'string', description: 'Model to use' },
|
|
33
|
+
{ name: 'output', short: 'o', type: 'string', description: 'Output format: json, array, preview', default: 'preview' },
|
|
34
|
+
],
|
|
35
|
+
examples: [
|
|
36
|
+
{ command: 'monomind embeddings generate -t "Hello world"', description: 'Generate embedding' },
|
|
37
|
+
{ command: 'monomind embeddings generate -t "Test" -o json', description: 'Output as JSON' },
|
|
38
|
+
],
|
|
39
|
+
action: async (ctx) => {
|
|
40
|
+
const text = ctx.flags.text;
|
|
41
|
+
const provider = ctx.flags.provider || 'local';
|
|
42
|
+
const outputFormat = ctx.flags.output || 'preview';
|
|
43
|
+
if (!text) {
|
|
44
|
+
output.printError('Text is required');
|
|
45
|
+
return { success: false, exitCode: 1 };
|
|
46
|
+
}
|
|
47
|
+
output.writeln();
|
|
48
|
+
output.writeln(output.bold('Generate Embedding'));
|
|
49
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
50
|
+
const spinner = output.createSpinner({ text: `Generating with ${provider}...`, spinner: 'dots' });
|
|
51
|
+
spinner.start();
|
|
52
|
+
try {
|
|
53
|
+
// Use real embedding generator
|
|
54
|
+
const { generateEmbedding, loadEmbeddingModel } = await import('../memory/memory-initializer.js');
|
|
55
|
+
const startTime = Date.now();
|
|
56
|
+
const modelInfo = await loadEmbeddingModel({ verbose: false });
|
|
57
|
+
const result = await generateEmbedding(text);
|
|
58
|
+
const duration = Date.now() - startTime;
|
|
59
|
+
spinner.succeed(`Embedding generated in ${duration}ms`);
|
|
60
|
+
if (outputFormat === 'json') {
|
|
61
|
+
output.printJson({
|
|
62
|
+
text: text.substring(0, 100),
|
|
63
|
+
embedding: result.embedding,
|
|
64
|
+
dimensions: result.dimensions,
|
|
65
|
+
model: result.model,
|
|
66
|
+
duration
|
|
67
|
+
});
|
|
68
|
+
return { success: true, data: result };
|
|
69
|
+
}
|
|
70
|
+
if (outputFormat === 'array') {
|
|
71
|
+
output.writeln(JSON.stringify(result.embedding));
|
|
72
|
+
return { success: true, data: result };
|
|
73
|
+
}
|
|
74
|
+
// Preview format (default)
|
|
75
|
+
const preview = result.embedding.slice(0, 8).map(v => v.toFixed(6));
|
|
76
|
+
output.writeln();
|
|
77
|
+
output.printBox([
|
|
78
|
+
`Provider: ${provider}`,
|
|
79
|
+
`Model: ${result.model} (${modelInfo.modelName})`,
|
|
80
|
+
`Dimensions: ${result.dimensions}`,
|
|
81
|
+
`Text: "${text.substring(0, 40)}${text.length > 40 ? '...' : ''}"`,
|
|
82
|
+
`Generation time: ${duration}ms`,
|
|
83
|
+
``,
|
|
84
|
+
`Vector preview (first 8 of ${result.dimensions}):`,
|
|
85
|
+
`[${preview.join(', ')}, ...]`,
|
|
86
|
+
].join('\n'), 'Result');
|
|
87
|
+
return { success: true, data: result };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
spinner.fail('Embedding generation failed');
|
|
91
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
92
|
+
return { success: false, exitCode: 1 };
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
// Search subcommand - REAL implementation using sql.js
|
|
97
|
+
const searchCommand = {
|
|
98
|
+
name: 'search',
|
|
99
|
+
description: 'Semantic similarity search',
|
|
100
|
+
options: [
|
|
101
|
+
{ name: 'query', short: 'q', type: 'string', description: 'Search query', required: true },
|
|
102
|
+
{ name: 'collection', short: 'c', type: 'string', description: 'Namespace to search', default: 'default' },
|
|
103
|
+
{ name: 'limit', short: 'l', type: 'number', description: 'Max results', default: '10' },
|
|
104
|
+
{ name: 'threshold', short: 't', type: 'number', description: 'Similarity threshold (0-1)', default: '0.5' },
|
|
105
|
+
{ name: 'db-path', type: 'string', description: 'Database path', default: '.swarm/memory.db' },
|
|
106
|
+
],
|
|
107
|
+
examples: [
|
|
108
|
+
{ command: 'monomind embeddings search -q "error handling"', description: 'Search for similar' },
|
|
109
|
+
{ command: 'monomind embeddings search -q "test" -l 5', description: 'Limit results' },
|
|
110
|
+
],
|
|
111
|
+
action: async (ctx) => {
|
|
112
|
+
const query = ctx.flags.query;
|
|
113
|
+
const namespace = ctx.flags.collection || 'default';
|
|
114
|
+
const limit = parseInt(ctx.flags.limit || '10', 10);
|
|
115
|
+
const threshold = parseFloat(ctx.flags.threshold || '0.5');
|
|
116
|
+
const dbPath = ctx.flags['db-path'] || '.swarm/memory.db';
|
|
117
|
+
if (!query) {
|
|
118
|
+
output.printError('Query is required');
|
|
119
|
+
return { success: false, exitCode: 1 };
|
|
120
|
+
}
|
|
121
|
+
output.writeln();
|
|
122
|
+
output.writeln(output.bold('Semantic Search'));
|
|
123
|
+
output.writeln(output.dim('─'.repeat(60)));
|
|
124
|
+
const spinner = output.createSpinner({ text: 'Searching...', spinner: 'dots' });
|
|
125
|
+
spinner.start();
|
|
126
|
+
try {
|
|
127
|
+
const fs = await import('fs');
|
|
128
|
+
const path = await import('path');
|
|
129
|
+
const fullDbPath = path.resolve(process.cwd(), dbPath);
|
|
130
|
+
// Check if database exists
|
|
131
|
+
if (!fs.existsSync(fullDbPath)) {
|
|
132
|
+
spinner.fail('Database not found');
|
|
133
|
+
output.printWarning(`No database at ${fullDbPath}`);
|
|
134
|
+
output.printInfo('Run: monomind memory init');
|
|
135
|
+
return { success: false, exitCode: 1 };
|
|
136
|
+
}
|
|
137
|
+
// Load sql.js
|
|
138
|
+
const initSqlJs = (await import('sql.js')).default;
|
|
139
|
+
const SQL = await initSqlJs();
|
|
140
|
+
const fileBuffer = fs.readFileSync(fullDbPath);
|
|
141
|
+
const db = new SQL.Database(fileBuffer);
|
|
142
|
+
const startTime = Date.now();
|
|
143
|
+
// Generate embedding for query
|
|
144
|
+
const { generateEmbedding } = await import('../memory/memory-initializer.js');
|
|
145
|
+
const queryResult = await generateEmbedding(query);
|
|
146
|
+
const queryEmbedding = queryResult.embedding;
|
|
147
|
+
// Get all entries with embeddings from database
|
|
148
|
+
const entries = db.exec(`
|
|
149
|
+
SELECT id, key, namespace, content, embedding, embedding_dimensions
|
|
150
|
+
FROM memory_entries
|
|
151
|
+
WHERE status = 'active'
|
|
152
|
+
AND embedding IS NOT NULL
|
|
153
|
+
${namespace !== 'all' ? `AND namespace = '${namespace}'` : ''}
|
|
154
|
+
LIMIT 1000
|
|
155
|
+
`);
|
|
156
|
+
const results = [];
|
|
157
|
+
if (entries[0]?.values) {
|
|
158
|
+
for (const row of entries[0].values) {
|
|
159
|
+
const [id, key, ns, content, embeddingJson] = row;
|
|
160
|
+
if (!embeddingJson)
|
|
161
|
+
continue;
|
|
162
|
+
try {
|
|
163
|
+
const embedding = JSON.parse(embeddingJson);
|
|
164
|
+
// Calculate cosine similarity
|
|
165
|
+
const similarity = cosineSimilarity(queryEmbedding, embedding);
|
|
166
|
+
if (similarity >= threshold) {
|
|
167
|
+
results.push({
|
|
168
|
+
score: similarity,
|
|
169
|
+
id: id.substring(0, 10),
|
|
170
|
+
key: key || id.substring(0, 15),
|
|
171
|
+
content: (content || '').substring(0, 45) + ((content || '').length > 45 ? '...' : ''),
|
|
172
|
+
namespace: ns || 'default'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Skip entries with invalid embeddings
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Also search entries without embeddings using keyword match
|
|
182
|
+
if (results.length < limit) {
|
|
183
|
+
const keywordEntries = db.exec(`
|
|
184
|
+
SELECT id, key, namespace, content
|
|
185
|
+
FROM memory_entries
|
|
186
|
+
WHERE status = 'active'
|
|
187
|
+
AND (content LIKE '%${query.replace(/'/g, "''")}%' OR key LIKE '%${query.replace(/'/g, "''")}%')
|
|
188
|
+
${namespace !== 'all' ? `AND namespace = '${namespace}'` : ''}
|
|
189
|
+
LIMIT ${limit - results.length}
|
|
190
|
+
`);
|
|
191
|
+
if (keywordEntries[0]?.values) {
|
|
192
|
+
for (const row of keywordEntries[0].values) {
|
|
193
|
+
const [id, key, ns, content] = row;
|
|
194
|
+
// Avoid duplicates
|
|
195
|
+
if (!results.some(r => r.id === id.substring(0, 10))) {
|
|
196
|
+
results.push({
|
|
197
|
+
score: 0.5, // Keyword match base score
|
|
198
|
+
id: id.substring(0, 10),
|
|
199
|
+
key: key || id.substring(0, 15),
|
|
200
|
+
content: (content || '').substring(0, 45) + ((content || '').length > 45 ? '...' : ''),
|
|
201
|
+
namespace: ns || 'default'
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Sort by score descending
|
|
208
|
+
results.sort((a, b) => b.score - a.score);
|
|
209
|
+
const topResults = results.slice(0, limit);
|
|
210
|
+
const searchTime = Date.now() - startTime;
|
|
211
|
+
db.close();
|
|
212
|
+
spinner.succeed(`Found ${topResults.length} matches (${searchTime}ms)`);
|
|
213
|
+
if (topResults.length === 0) {
|
|
214
|
+
output.writeln();
|
|
215
|
+
output.printWarning('No matches found');
|
|
216
|
+
output.printInfo(`Try: monomind memory store -k "key" --value "your data"`);
|
|
217
|
+
return { success: true, data: [] };
|
|
218
|
+
}
|
|
219
|
+
output.writeln();
|
|
220
|
+
output.printTable({
|
|
221
|
+
columns: [
|
|
222
|
+
{ key: 'score', header: 'Score', width: 10 },
|
|
223
|
+
{ key: 'key', header: 'Key', width: 18 },
|
|
224
|
+
{ key: 'content', header: 'Content', width: 42 },
|
|
225
|
+
],
|
|
226
|
+
data: topResults.map(r => ({
|
|
227
|
+
score: r.score >= 0.8 ? output.success(r.score.toFixed(2)) :
|
|
228
|
+
r.score >= 0.6 ? output.warning(r.score.toFixed(2)) :
|
|
229
|
+
output.dim(r.score.toFixed(2)),
|
|
230
|
+
key: r.key,
|
|
231
|
+
content: r.content
|
|
232
|
+
})),
|
|
233
|
+
});
|
|
234
|
+
output.writeln();
|
|
235
|
+
output.writeln(output.dim(`Searched ${namespace} namespace (${queryResult.model}, ${searchTime}ms)`));
|
|
236
|
+
return { success: true, data: topResults };
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
spinner.fail('Search failed');
|
|
240
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
241
|
+
return { success: false, exitCode: 1 };
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Optimized cosine similarity
|
|
247
|
+
* V8 JIT-friendly - ~0.5μs per 384-dim vector comparison
|
|
248
|
+
*/
|
|
249
|
+
function cosineSimilarity(a, b) {
|
|
250
|
+
const len = Math.min(a.length, b.length);
|
|
251
|
+
if (len === 0)
|
|
252
|
+
return 0;
|
|
253
|
+
let dot = 0, normA = 0, normB = 0;
|
|
254
|
+
// Simple loop - V8 optimizes this well
|
|
255
|
+
for (let i = 0; i < len; i++) {
|
|
256
|
+
const ai = a[i], bi = b[i];
|
|
257
|
+
dot += ai * bi;
|
|
258
|
+
normA += ai * ai;
|
|
259
|
+
normB += bi * bi;
|
|
260
|
+
}
|
|
261
|
+
const mag = Math.sqrt(normA * normB);
|
|
262
|
+
return mag === 0 ? 0 : dot / mag;
|
|
263
|
+
}
|
|
264
|
+
// Compare subcommand - REAL similarity computation
|
|
265
|
+
const compareCommand = {
|
|
266
|
+
name: 'compare',
|
|
267
|
+
description: 'Compare similarity between texts',
|
|
268
|
+
options: [
|
|
269
|
+
{ name: 'text1', type: 'string', description: 'First text', required: true },
|
|
270
|
+
{ name: 'text2', type: 'string', description: 'Second text', required: true },
|
|
271
|
+
{ name: 'metric', short: 'm', type: 'string', description: 'Metric: cosine, euclidean, dot', default: 'cosine' },
|
|
272
|
+
],
|
|
273
|
+
examples: [
|
|
274
|
+
{ command: 'monomind embeddings compare --text1 "Hello" --text2 "Hi there"', description: 'Compare texts' },
|
|
275
|
+
],
|
|
276
|
+
action: async (ctx) => {
|
|
277
|
+
const text1 = ctx.flags.text1;
|
|
278
|
+
const text2 = ctx.flags.text2;
|
|
279
|
+
const metric = ctx.flags.metric || 'cosine';
|
|
280
|
+
if (!text1 || !text2) {
|
|
281
|
+
output.printError('Both text1 and text2 are required');
|
|
282
|
+
return { success: false, exitCode: 1 };
|
|
283
|
+
}
|
|
284
|
+
output.writeln();
|
|
285
|
+
output.writeln(output.bold('Text Similarity (Real)'));
|
|
286
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
287
|
+
const spinner = output.createSpinner({ text: 'Generating embeddings...', spinner: 'dots' });
|
|
288
|
+
spinner.start();
|
|
289
|
+
try {
|
|
290
|
+
const { generateEmbedding } = await import('../memory/memory-initializer.js');
|
|
291
|
+
// Generate real embeddings for both texts
|
|
292
|
+
const startTime = Date.now();
|
|
293
|
+
const [emb1, emb2] = await Promise.all([
|
|
294
|
+
generateEmbedding(text1),
|
|
295
|
+
generateEmbedding(text2),
|
|
296
|
+
]);
|
|
297
|
+
const embedTime = Date.now() - startTime;
|
|
298
|
+
spinner.setText('Computing similarity...');
|
|
299
|
+
// Compute real similarity based on metric
|
|
300
|
+
let similarity;
|
|
301
|
+
switch (metric) {
|
|
302
|
+
case 'euclidean': {
|
|
303
|
+
// Euclidean distance (converted to similarity: 1 / (1 + distance))
|
|
304
|
+
let sumSq = 0;
|
|
305
|
+
for (let i = 0; i < emb1.embedding.length; i++) {
|
|
306
|
+
const diff = emb1.embedding[i] - emb2.embedding[i];
|
|
307
|
+
sumSq += diff * diff;
|
|
308
|
+
}
|
|
309
|
+
const distance = Math.sqrt(sumSq);
|
|
310
|
+
similarity = 1 / (1 + distance);
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
case 'dot': {
|
|
314
|
+
// Dot product
|
|
315
|
+
let dot = 0;
|
|
316
|
+
for (let i = 0; i < emb1.embedding.length; i++) {
|
|
317
|
+
dot += emb1.embedding[i] * emb2.embedding[i];
|
|
318
|
+
}
|
|
319
|
+
similarity = dot;
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
case 'cosine':
|
|
323
|
+
default: {
|
|
324
|
+
// Cosine similarity
|
|
325
|
+
similarity = cosineSimilarity(emb1.embedding, emb2.embedding);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
spinner.succeed(`Comparison complete (${embedTime}ms)`);
|
|
329
|
+
output.writeln();
|
|
330
|
+
output.printBox([
|
|
331
|
+
`Text 1: "${text1.substring(0, 30)}${text1.length > 30 ? '...' : ''}"`,
|
|
332
|
+
`Text 2: "${text2.substring(0, 30)}${text2.length > 30 ? '...' : ''}"`,
|
|
333
|
+
``,
|
|
334
|
+
`Model: ${emb1.model} (${emb1.dimensions}-dim)`,
|
|
335
|
+
`Metric: ${metric}`,
|
|
336
|
+
`Similarity: ${similarity > 0.8 ? output.success(similarity.toFixed(4)) : similarity > 0.5 ? output.warning(similarity.toFixed(4)) : output.dim(similarity.toFixed(4))}`,
|
|
337
|
+
``,
|
|
338
|
+
`Interpretation: ${similarity > 0.8 ? 'Highly similar' : similarity > 0.5 ? 'Moderately similar' : 'Dissimilar'}`,
|
|
339
|
+
].join('\n'), 'Result');
|
|
340
|
+
return { success: true, data: { similarity, metric, embedTime } };
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
spinner.fail('Comparison failed');
|
|
344
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
345
|
+
return { success: false, exitCode: 1 };
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
// Collections subcommand - REAL implementation using sql.js
|
|
350
|
+
const collectionsCommand = {
|
|
351
|
+
name: 'collections',
|
|
352
|
+
description: 'Manage embedding collections (namespaces)',
|
|
353
|
+
options: [
|
|
354
|
+
{ name: 'action', short: 'a', type: 'string', description: 'Action: list, stats', default: 'list' },
|
|
355
|
+
{ name: 'name', short: 'n', type: 'string', description: 'Namespace name' },
|
|
356
|
+
{ name: 'db-path', type: 'string', description: 'Database path', default: '.swarm/memory.db' },
|
|
357
|
+
],
|
|
358
|
+
examples: [
|
|
359
|
+
{ command: 'monomind embeddings collections', description: 'List collections' },
|
|
360
|
+
{ command: 'monomind embeddings collections -a stats', description: 'Show detailed stats' },
|
|
361
|
+
],
|
|
362
|
+
action: async (ctx) => {
|
|
363
|
+
const action = ctx.flags.action || 'list';
|
|
364
|
+
const dbPath = ctx.flags['db-path'] || '.swarm/memory.db';
|
|
365
|
+
output.writeln();
|
|
366
|
+
output.writeln(output.bold('Embedding Collections (Namespaces)'));
|
|
367
|
+
output.writeln(output.dim('─'.repeat(60)));
|
|
368
|
+
try {
|
|
369
|
+
const fs = await import('fs');
|
|
370
|
+
const path = await import('path');
|
|
371
|
+
const fullDbPath = path.resolve(process.cwd(), dbPath);
|
|
372
|
+
// Check if database exists
|
|
373
|
+
if (!fs.existsSync(fullDbPath)) {
|
|
374
|
+
output.printWarning('No database found');
|
|
375
|
+
output.printInfo('Run: monomind memory init');
|
|
376
|
+
output.writeln();
|
|
377
|
+
output.writeln(output.dim('No collections yet - initialize memory first'));
|
|
378
|
+
return { success: true, data: [] };
|
|
379
|
+
}
|
|
380
|
+
// Load sql.js and query real data
|
|
381
|
+
const initSqlJs = (await import('sql.js')).default;
|
|
382
|
+
const SQL = await initSqlJs();
|
|
383
|
+
const fileBuffer = fs.readFileSync(fullDbPath);
|
|
384
|
+
const db = new SQL.Database(fileBuffer);
|
|
385
|
+
// Get collection stats from database
|
|
386
|
+
const statsQuery = db.exec(`
|
|
387
|
+
SELECT
|
|
388
|
+
namespace,
|
|
389
|
+
COUNT(*) as total_entries,
|
|
390
|
+
SUM(CASE WHEN embedding IS NOT NULL THEN 1 ELSE 0 END) as with_embeddings,
|
|
391
|
+
AVG(embedding_dimensions) as avg_dimensions,
|
|
392
|
+
SUM(LENGTH(content)) as total_content_size
|
|
393
|
+
FROM memory_entries
|
|
394
|
+
WHERE status = 'active'
|
|
395
|
+
GROUP BY namespace
|
|
396
|
+
ORDER BY total_entries DESC
|
|
397
|
+
`);
|
|
398
|
+
// Get vector index info
|
|
399
|
+
const indexQuery = db.exec(`SELECT name, dimensions, hnsw_m FROM vector_indexes`);
|
|
400
|
+
const collections = [];
|
|
401
|
+
if (statsQuery[0]?.values) {
|
|
402
|
+
for (const row of statsQuery[0].values) {
|
|
403
|
+
const [namespace, total, withEmbeddings, avgDims, contentSize] = row;
|
|
404
|
+
collections.push({
|
|
405
|
+
name: namespace || 'default',
|
|
406
|
+
vectors: withEmbeddings.toLocaleString(),
|
|
407
|
+
total: total.toLocaleString(),
|
|
408
|
+
dimensions: avgDims ? Math.round(avgDims).toString() : '-',
|
|
409
|
+
index: withEmbeddings > 0 ? 'HNSW' : 'None',
|
|
410
|
+
size: formatBytes(contentSize || 0)
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
db.close();
|
|
415
|
+
if (collections.length === 0) {
|
|
416
|
+
output.printWarning('No collections found');
|
|
417
|
+
output.writeln();
|
|
418
|
+
output.writeln(output.dim('Store some data first:'));
|
|
419
|
+
output.writeln(output.highlight(' monomind memory store -k "key" --value "data"'));
|
|
420
|
+
return { success: true, data: [] };
|
|
421
|
+
}
|
|
422
|
+
output.printTable({
|
|
423
|
+
columns: [
|
|
424
|
+
{ key: 'name', header: 'Namespace', width: 18 },
|
|
425
|
+
{ key: 'total', header: 'Entries', width: 10 },
|
|
426
|
+
{ key: 'vectors', header: 'Vectors', width: 10 },
|
|
427
|
+
{ key: 'dimensions', header: 'Dims', width: 8 },
|
|
428
|
+
{ key: 'index', header: 'Index', width: 8 },
|
|
429
|
+
{ key: 'size', header: 'Size', width: 10 },
|
|
430
|
+
],
|
|
431
|
+
data: collections,
|
|
432
|
+
});
|
|
433
|
+
output.writeln();
|
|
434
|
+
output.writeln(output.dim(`Database: ${fullDbPath}`));
|
|
435
|
+
return { success: true, data: collections };
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
439
|
+
return { success: false, exitCode: 1 };
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
};
|
|
443
|
+
// Helper: Format bytes to human readable
|
|
444
|
+
function formatBytes(bytes) {
|
|
445
|
+
if (bytes === 0)
|
|
446
|
+
return '0 B';
|
|
447
|
+
const k = 1024;
|
|
448
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
449
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
450
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
|
|
451
|
+
}
|
|
452
|
+
// Index subcommand - REAL HNSW stats
|
|
453
|
+
const indexCommand = {
|
|
454
|
+
name: 'index',
|
|
455
|
+
description: 'Manage HNSW indexes',
|
|
456
|
+
options: [
|
|
457
|
+
{ name: 'action', short: 'a', type: 'string', description: 'Action: build, rebuild, status, optimize', default: 'status' },
|
|
458
|
+
{ name: 'collection', short: 'c', type: 'string', description: 'Collection/namespace name' },
|
|
459
|
+
{ name: 'ef-construction', type: 'number', description: 'HNSW ef_construction parameter', default: '200' },
|
|
460
|
+
{ name: 'm', type: 'number', description: 'HNSW M parameter', default: '16' },
|
|
461
|
+
],
|
|
462
|
+
examples: [
|
|
463
|
+
{ command: 'monomind embeddings index', description: 'Show index status' },
|
|
464
|
+
{ command: 'monomind embeddings index -a build -c documents', description: 'Build index' },
|
|
465
|
+
{ command: 'monomind embeddings index -a optimize -c patterns', description: 'Optimize index' },
|
|
466
|
+
],
|
|
467
|
+
action: async (ctx) => {
|
|
468
|
+
const action = ctx.flags.action || 'status';
|
|
469
|
+
const collection = ctx.flags.collection;
|
|
470
|
+
const efConstruction = parseInt(ctx.flags['ef-construction'] || '200', 10);
|
|
471
|
+
const m = parseInt(ctx.flags.m || '16', 10);
|
|
472
|
+
output.writeln();
|
|
473
|
+
output.writeln(output.bold(`HNSW Index: ${action}`));
|
|
474
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
475
|
+
try {
|
|
476
|
+
const { getHNSWStatus, getHNSWIndex, searchHNSWIndex, generateEmbedding } = await import('../memory/memory-initializer.js');
|
|
477
|
+
// Get real HNSW status
|
|
478
|
+
const status = getHNSWStatus();
|
|
479
|
+
if (action === 'status') {
|
|
480
|
+
output.writeln();
|
|
481
|
+
output.printTable({
|
|
482
|
+
columns: [
|
|
483
|
+
{ key: 'metric', header: 'Metric', width: 24 },
|
|
484
|
+
{ key: 'value', header: 'Value', width: 30 },
|
|
485
|
+
],
|
|
486
|
+
data: [
|
|
487
|
+
{ metric: 'HNSW Available', value: status.available ? output.success('Yes (@ruvector/core)') : output.warning('No') },
|
|
488
|
+
{ metric: 'Index Initialized', value: status.initialized ? output.success('Yes') : output.dim('No') },
|
|
489
|
+
{ metric: 'Vector Count', value: status.entryCount.toLocaleString() },
|
|
490
|
+
{ metric: 'Dimensions', value: String(status.dimensions) },
|
|
491
|
+
{ metric: 'Distance Metric', value: 'Cosine' },
|
|
492
|
+
{ metric: 'HNSW M', value: String(m) },
|
|
493
|
+
{ metric: 'ef_construction', value: String(efConstruction) },
|
|
494
|
+
],
|
|
495
|
+
});
|
|
496
|
+
if (status.available && status.entryCount > 0) {
|
|
497
|
+
// Run a quick benchmark to show actual performance
|
|
498
|
+
output.writeln();
|
|
499
|
+
output.writeln(output.dim('Running quick performance test...'));
|
|
500
|
+
const testQuery = await generateEmbedding('test performance query');
|
|
501
|
+
const start = performance.now();
|
|
502
|
+
const results = await searchHNSWIndex(testQuery.embedding, { k: 10 });
|
|
503
|
+
const searchTime = performance.now() - start;
|
|
504
|
+
// Estimate brute force time (0.5μs per comparison)
|
|
505
|
+
const bruteForceEstimate = status.entryCount * 0.0005;
|
|
506
|
+
const speedup = bruteForceEstimate / (searchTime / 1000);
|
|
507
|
+
output.writeln();
|
|
508
|
+
output.printBox([
|
|
509
|
+
`Performance (n=${status.entryCount}):`,
|
|
510
|
+
` HNSW Search: ${searchTime.toFixed(2)}ms`,
|
|
511
|
+
` Brute Force Est: ${(bruteForceEstimate * 1000).toFixed(2)}ms`,
|
|
512
|
+
` Speedup: ~${Math.round(speedup)}x`,
|
|
513
|
+
` Results: ${results?.length || 0} matches`,
|
|
514
|
+
].join('\n'), 'Search Performance');
|
|
515
|
+
}
|
|
516
|
+
else if (!status.available) {
|
|
517
|
+
output.writeln();
|
|
518
|
+
output.printWarning('@ruvector/core not available');
|
|
519
|
+
output.printInfo('Install: npm install @ruvector/core');
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
output.writeln();
|
|
523
|
+
output.printInfo('Index is empty. Store some entries to populate it.');
|
|
524
|
+
output.printInfo('Run: monomind memory store -k "key" --value "text"');
|
|
525
|
+
}
|
|
526
|
+
return { success: true, data: status };
|
|
527
|
+
}
|
|
528
|
+
// Build/Rebuild action
|
|
529
|
+
if (action === 'build' || action === 'rebuild') {
|
|
530
|
+
if (!collection) {
|
|
531
|
+
output.printError('Collection is required for build/rebuild');
|
|
532
|
+
return { success: false, exitCode: 1 };
|
|
533
|
+
}
|
|
534
|
+
const spinner = output.createSpinner({ text: `${action}ing index for ${collection}...`, spinner: 'dots' });
|
|
535
|
+
spinner.start();
|
|
536
|
+
// Force rebuild if requested
|
|
537
|
+
const index = await getHNSWIndex({ forceRebuild: action === 'rebuild' });
|
|
538
|
+
if (!index) {
|
|
539
|
+
spinner.fail('@ruvector/core not available');
|
|
540
|
+
output.printInfo('Install: npm install @ruvector/core');
|
|
541
|
+
return { success: false, exitCode: 1 };
|
|
542
|
+
}
|
|
543
|
+
spinner.succeed(`Index ${action} complete`);
|
|
544
|
+
const newStatus = getHNSWStatus();
|
|
545
|
+
output.writeln();
|
|
546
|
+
output.printBox([
|
|
547
|
+
`Collection: ${collection}`,
|
|
548
|
+
`Action: ${action}`,
|
|
549
|
+
`Vectors: ${newStatus.entryCount}`,
|
|
550
|
+
`Dimensions: ${newStatus.dimensions}`,
|
|
551
|
+
`M: ${m}`,
|
|
552
|
+
`ef_construction: ${efConstruction}`,
|
|
553
|
+
].join('\n'), 'Index Built');
|
|
554
|
+
return { success: true, data: newStatus };
|
|
555
|
+
}
|
|
556
|
+
// Optimize action
|
|
557
|
+
if (action === 'optimize') {
|
|
558
|
+
output.printInfo('HNSW index is optimized automatically during search');
|
|
559
|
+
output.printInfo('No manual optimization required');
|
|
560
|
+
return { success: true };
|
|
561
|
+
}
|
|
562
|
+
output.printError(`Unknown action: ${action}`);
|
|
563
|
+
return { success: false, exitCode: 1 };
|
|
564
|
+
}
|
|
565
|
+
catch (error) {
|
|
566
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
567
|
+
return { success: false, exitCode: 1 };
|
|
568
|
+
}
|
|
569
|
+
},
|
|
570
|
+
};
|
|
571
|
+
// Init subcommand - Initialize ONNX models and hyperbolic config
|
|
572
|
+
const initCommand = {
|
|
573
|
+
name: 'init',
|
|
574
|
+
description: 'Initialize embedding subsystem with ONNX model and hyperbolic config',
|
|
575
|
+
options: [
|
|
576
|
+
{ name: 'model', short: 'm', type: 'string', description: 'ONNX model ID', default: 'Xenova/all-MiniLM-L6-v2' },
|
|
577
|
+
{ name: 'hyperbolic', type: 'boolean', description: 'Enable hyperbolic (Poincaré ball) embeddings', default: 'true' },
|
|
578
|
+
{ name: 'curvature', short: 'c', type: 'string', description: 'Poincaré ball curvature (use --curvature=-1 for negative)', default: '-1' },
|
|
579
|
+
{ name: 'download', short: 'd', type: 'boolean', description: 'Download model during init', default: 'true' },
|
|
580
|
+
{ name: 'cache-size', type: 'string', description: 'LRU cache entries', default: '256' },
|
|
581
|
+
{ name: 'force', short: 'f', type: 'boolean', description: 'Overwrite existing configuration', default: 'false' },
|
|
582
|
+
],
|
|
583
|
+
examples: [
|
|
584
|
+
{ command: 'monomind embeddings init', description: 'Initialize with defaults' },
|
|
585
|
+
{ command: 'monomind embeddings init --model Xenova/all-mpnet-base-v2', description: 'Use higher quality model' },
|
|
586
|
+
{ command: 'monomind embeddings init --no-hyperbolic', description: 'Euclidean only' },
|
|
587
|
+
{ command: 'monomind embeddings init --curvature=-0.5', description: 'Custom curvature (use = for negative)' },
|
|
588
|
+
{ command: 'monomind embeddings init --force', description: 'Overwrite existing config' },
|
|
589
|
+
],
|
|
590
|
+
action: async (ctx) => {
|
|
591
|
+
const model = ctx.flags.model || 'Xenova/all-MiniLM-L6-v2';
|
|
592
|
+
const hyperbolic = ctx.flags.hyperbolic !== false;
|
|
593
|
+
const download = ctx.flags.download !== false;
|
|
594
|
+
const force = ctx.flags.force === true;
|
|
595
|
+
// Parse curvature - handle both kebab-case and direct value
|
|
596
|
+
const curvatureRaw = ctx.flags.curvature || '-1';
|
|
597
|
+
const curvature = parseFloat(curvatureRaw);
|
|
598
|
+
// Parse cache-size - check both kebab-case and camelCase
|
|
599
|
+
const cacheSizeRaw = (ctx.flags['cache-size'] || ctx.flags.cacheSize || '256');
|
|
600
|
+
const cacheSize = parseInt(cacheSizeRaw, 10);
|
|
601
|
+
output.writeln();
|
|
602
|
+
output.writeln(output.bold('Initialize Embedding Subsystem'));
|
|
603
|
+
output.writeln(output.dim('─'.repeat(55)));
|
|
604
|
+
try {
|
|
605
|
+
const fs = await import('fs');
|
|
606
|
+
const path = await import('path');
|
|
607
|
+
// Create directories
|
|
608
|
+
const configDir = path.join(process.cwd(), '.monomind');
|
|
609
|
+
const modelDir = path.join(configDir, 'models');
|
|
610
|
+
const configPath = path.join(configDir, 'embeddings.json');
|
|
611
|
+
// Check for existing config
|
|
612
|
+
if (fs.existsSync(configPath) && !force) {
|
|
613
|
+
output.printWarning('Embeddings already initialized');
|
|
614
|
+
output.printInfo(`Config exists: ${configPath}`);
|
|
615
|
+
output.writeln();
|
|
616
|
+
output.writeln(output.dim('Use --force to overwrite existing configuration'));
|
|
617
|
+
return { success: false, exitCode: 1 };
|
|
618
|
+
}
|
|
619
|
+
const spinner = output.createSpinner({ text: 'Initializing...', spinner: 'dots' });
|
|
620
|
+
spinner.start();
|
|
621
|
+
if (!fs.existsSync(configDir)) {
|
|
622
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
623
|
+
}
|
|
624
|
+
if (!fs.existsSync(modelDir)) {
|
|
625
|
+
fs.mkdirSync(modelDir, { recursive: true });
|
|
626
|
+
}
|
|
627
|
+
// Download model if requested
|
|
628
|
+
if (download) {
|
|
629
|
+
spinner.setText(`Downloading ONNX model: ${model}...`);
|
|
630
|
+
const embeddings = await getEmbeddings();
|
|
631
|
+
if (embeddings) {
|
|
632
|
+
await embeddings.downloadEmbeddingModel(model, modelDir, (p) => {
|
|
633
|
+
spinner.setText(`Downloading ${model}... ${p.percent.toFixed(0)}%`);
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
// Embeddings package not available — skip download
|
|
638
|
+
await new Promise(r => setTimeout(r, 500));
|
|
639
|
+
output.writeln(output.dim(' (Skipped — @monoes/embeddings not installed)'));
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
// Write embeddings config
|
|
643
|
+
spinner.setText('Writing configuration...');
|
|
644
|
+
const dimension = model.includes('mpnet') ? 768 : 384;
|
|
645
|
+
const config = {
|
|
646
|
+
model,
|
|
647
|
+
modelPath: modelDir,
|
|
648
|
+
dimension,
|
|
649
|
+
cacheSize,
|
|
650
|
+
hyperbolic: {
|
|
651
|
+
enabled: hyperbolic,
|
|
652
|
+
curvature,
|
|
653
|
+
epsilon: 1e-15,
|
|
654
|
+
maxNorm: 1 - 1e-5,
|
|
655
|
+
},
|
|
656
|
+
neural: {
|
|
657
|
+
enabled: true,
|
|
658
|
+
driftThreshold: 0.3,
|
|
659
|
+
decayRate: 0.01,
|
|
660
|
+
},
|
|
661
|
+
initialized: new Date().toISOString(),
|
|
662
|
+
};
|
|
663
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
664
|
+
spinner.succeed('Embedding subsystem initialized');
|
|
665
|
+
output.writeln();
|
|
666
|
+
output.printTable({
|
|
667
|
+
columns: [
|
|
668
|
+
{ key: 'setting', header: 'Setting', width: 18 },
|
|
669
|
+
{ key: 'value', header: 'Value', width: 40 },
|
|
670
|
+
],
|
|
671
|
+
data: [
|
|
672
|
+
{ setting: 'Model', value: model },
|
|
673
|
+
{ setting: 'Dimension', value: String(dimension) },
|
|
674
|
+
{ setting: 'Cache Size', value: String(cacheSize) + ' entries' },
|
|
675
|
+
{ setting: 'Hyperbolic', value: hyperbolic ? `${output.success('Enabled')} (c=${curvature})` : output.dim('Disabled') },
|
|
676
|
+
{ setting: 'Neural Substrate', value: output.success('Enabled') },
|
|
677
|
+
{ setting: 'Model Path', value: modelDir },
|
|
678
|
+
{ setting: 'Config', value: configPath },
|
|
679
|
+
],
|
|
680
|
+
});
|
|
681
|
+
output.writeln();
|
|
682
|
+
if (hyperbolic) {
|
|
683
|
+
output.printBox([
|
|
684
|
+
'Hyperbolic Embeddings (Poincaré Ball):',
|
|
685
|
+
'• Better for hierarchical data (trees, taxonomies)',
|
|
686
|
+
'• Exponential capacity in low dimensions',
|
|
687
|
+
'• Distance preserves hierarchy structure',
|
|
688
|
+
'',
|
|
689
|
+
'Use: embeddings hyperbolic -a convert',
|
|
690
|
+
].join('\n'), 'Hyperbolic Space');
|
|
691
|
+
}
|
|
692
|
+
output.writeln();
|
|
693
|
+
output.writeln(output.dim('Next steps:'));
|
|
694
|
+
output.printList([
|
|
695
|
+
'embeddings generate -t "test text" - Test embedding generation',
|
|
696
|
+
'embeddings search -q "query" - Semantic search',
|
|
697
|
+
'memory store -k key --value text - Store with auto-embedding',
|
|
698
|
+
]);
|
|
699
|
+
return { success: true, data: config };
|
|
700
|
+
}
|
|
701
|
+
catch (error) {
|
|
702
|
+
output.printError('Initialization failed: ' + (error instanceof Error ? error.message : String(error)));
|
|
703
|
+
return { success: false, exitCode: 1 };
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
};
|
|
707
|
+
// Providers subcommand
|
|
708
|
+
const providersCommand = {
|
|
709
|
+
name: 'providers',
|
|
710
|
+
description: 'List available embedding providers',
|
|
711
|
+
options: [],
|
|
712
|
+
examples: [
|
|
713
|
+
{ command: 'monomind embeddings providers', description: 'List providers' },
|
|
714
|
+
],
|
|
715
|
+
action: async () => {
|
|
716
|
+
output.writeln();
|
|
717
|
+
output.writeln(output.bold('Embedding Providers'));
|
|
718
|
+
output.writeln(output.dim('─'.repeat(70)));
|
|
719
|
+
output.printTable({
|
|
720
|
+
columns: [
|
|
721
|
+
{ key: 'provider', header: 'Provider', width: 18 },
|
|
722
|
+
{ key: 'model', header: 'Model', width: 25 },
|
|
723
|
+
{ key: 'dims', header: 'Dims', width: 8 },
|
|
724
|
+
{ key: 'type', header: 'Type', width: 10 },
|
|
725
|
+
{ key: 'status', header: 'Status', width: 12 },
|
|
726
|
+
],
|
|
727
|
+
data: [
|
|
728
|
+
{ provider: 'OpenAI', model: 'text-embedding-3-small', dims: '1536', type: 'Cloud', status: output.success('Ready') },
|
|
729
|
+
{ provider: 'OpenAI', model: 'text-embedding-3-large', dims: '3072', type: 'Cloud', status: output.success('Ready') },
|
|
730
|
+
{ provider: 'Transformers.js', model: 'Xenova/all-MiniLM-L6-v2', dims: '384', type: 'Local', status: output.success('Ready') },
|
|
731
|
+
{ provider: 'Agentic Flow', model: 'ONNX optimized', dims: '384', type: 'Local', status: output.success('Ready') },
|
|
732
|
+
{ provider: 'Mock', model: 'mock-embedding', dims: '384', type: 'Dev', status: output.dim('Dev only') },
|
|
733
|
+
],
|
|
734
|
+
});
|
|
735
|
+
output.writeln();
|
|
736
|
+
output.writeln(output.dim('Agentic Flow provider uses WASM SIMD for 75x faster inference'));
|
|
737
|
+
return { success: true };
|
|
738
|
+
},
|
|
739
|
+
};
|
|
740
|
+
// Chunk subcommand
|
|
741
|
+
const chunkCommand = {
|
|
742
|
+
name: 'chunk',
|
|
743
|
+
description: 'Chunk text for embedding with overlap',
|
|
744
|
+
options: [
|
|
745
|
+
{ name: 'text', short: 't', type: 'string', description: 'Text to chunk', required: true },
|
|
746
|
+
{ name: 'max-size', short: 's', type: 'number', description: 'Max chunk size in chars', default: '512' },
|
|
747
|
+
{ name: 'overlap', short: 'o', type: 'number', description: 'Overlap between chunks', default: '50' },
|
|
748
|
+
{ name: 'strategy', type: 'string', description: 'Strategy: character, sentence, paragraph, token', default: 'sentence' },
|
|
749
|
+
{ name: 'file', short: 'f', type: 'string', description: 'File to chunk (instead of text)' },
|
|
750
|
+
],
|
|
751
|
+
examples: [
|
|
752
|
+
{ command: 'monomind embeddings chunk -t "Long text..." -s 256', description: 'Chunk with 256 char limit' },
|
|
753
|
+
{ command: 'monomind embeddings chunk -f doc.txt --strategy paragraph', description: 'Chunk file by paragraph' },
|
|
754
|
+
],
|
|
755
|
+
action: async (ctx) => {
|
|
756
|
+
const embeddings = await getEmbeddings();
|
|
757
|
+
const text = ctx.flags.text || '';
|
|
758
|
+
const maxSize = parseInt(ctx.flags['max-size'] || '512', 10);
|
|
759
|
+
const overlap = parseInt(ctx.flags.overlap || '50', 10);
|
|
760
|
+
const strategy = ctx.flags.strategy || 'sentence';
|
|
761
|
+
output.writeln();
|
|
762
|
+
output.writeln(output.bold('Document Chunking'));
|
|
763
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
764
|
+
if (!embeddings) {
|
|
765
|
+
output.printWarning('@monoes/embeddings not installed, showing preview');
|
|
766
|
+
output.writeln();
|
|
767
|
+
output.printBox([
|
|
768
|
+
`Strategy: ${strategy}`,
|
|
769
|
+
`Max Size: ${maxSize} chars`,
|
|
770
|
+
`Overlap: ${overlap} chars`,
|
|
771
|
+
``,
|
|
772
|
+
`Estimated chunks: ${Math.ceil(text.length / (maxSize - overlap))}`,
|
|
773
|
+
].join('\n'), 'Chunking Preview');
|
|
774
|
+
return { success: true };
|
|
775
|
+
}
|
|
776
|
+
const result = embeddings.chunkText(text, { maxChunkSize: maxSize, overlap, strategy: strategy });
|
|
777
|
+
output.writeln();
|
|
778
|
+
output.printTable({
|
|
779
|
+
columns: [
|
|
780
|
+
{ key: 'idx', header: '#', width: 5 },
|
|
781
|
+
{ key: 'length', header: 'Chars', width: 8 },
|
|
782
|
+
{ key: 'tokens', header: 'Tokens', width: 8 },
|
|
783
|
+
{ key: 'preview', header: 'Preview', width: 45 },
|
|
784
|
+
],
|
|
785
|
+
data: result.chunks.map((c, i) => ({
|
|
786
|
+
idx: String(i + 1),
|
|
787
|
+
length: String(c.length),
|
|
788
|
+
tokens: String(c.tokenCount),
|
|
789
|
+
preview: c.text.substring(0, 42) + (c.text.length > 42 ? '...' : ''),
|
|
790
|
+
})),
|
|
791
|
+
});
|
|
792
|
+
output.writeln();
|
|
793
|
+
output.writeln(output.dim(`Total: ${result.totalChunks} chunks from ${result.originalLength} chars`));
|
|
794
|
+
return { success: true };
|
|
795
|
+
},
|
|
796
|
+
};
|
|
797
|
+
// Normalize subcommand
|
|
798
|
+
const normalizeCommand = {
|
|
799
|
+
name: 'normalize',
|
|
800
|
+
description: 'Normalize embedding vectors',
|
|
801
|
+
options: [
|
|
802
|
+
{ name: 'type', short: 't', type: 'string', description: 'Type: l2, l1, minmax, zscore', default: 'l2' },
|
|
803
|
+
{ name: 'input', short: 'i', type: 'string', description: 'Input embedding (JSON array)' },
|
|
804
|
+
{ name: 'check', short: 'c', type: 'boolean', description: 'Check if already normalized' },
|
|
805
|
+
],
|
|
806
|
+
examples: [
|
|
807
|
+
{ command: 'monomind embeddings normalize -i "[0.5, 0.3, 0.8]" -t l2', description: 'L2 normalize' },
|
|
808
|
+
{ command: 'monomind embeddings normalize --check -i "[...]"', description: 'Check if normalized' },
|
|
809
|
+
],
|
|
810
|
+
action: async (ctx) => {
|
|
811
|
+
const type = ctx.flags.type || 'l2';
|
|
812
|
+
const check = ctx.flags.check;
|
|
813
|
+
output.writeln();
|
|
814
|
+
output.writeln(output.bold('Embedding Normalization'));
|
|
815
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
816
|
+
output.printTable({
|
|
817
|
+
columns: [
|
|
818
|
+
{ key: 'type', header: 'Type', width: 12 },
|
|
819
|
+
{ key: 'formula', header: 'Formula', width: 30 },
|
|
820
|
+
{ key: 'use', header: 'Best For', width: 25 },
|
|
821
|
+
],
|
|
822
|
+
data: [
|
|
823
|
+
{ type: output.success('L2'), formula: 'v / ||v||₂', use: 'Cosine similarity' },
|
|
824
|
+
{ type: 'L1', formula: 'v / ||v||₁', use: 'Sparse vectors' },
|
|
825
|
+
{ type: 'Min-Max', formula: '(v - min) / (max - min)', use: 'Bounded range [0,1]' },
|
|
826
|
+
{ type: 'Z-Score', formula: '(v - μ) / σ', use: 'Statistical analysis' },
|
|
827
|
+
],
|
|
828
|
+
});
|
|
829
|
+
output.writeln();
|
|
830
|
+
output.writeln(output.dim(`Selected: ${type.toUpperCase()} normalization`));
|
|
831
|
+
output.writeln(output.dim('Most embedding models pre-normalize with L2'));
|
|
832
|
+
return { success: true };
|
|
833
|
+
},
|
|
834
|
+
};
|
|
835
|
+
// Hyperbolic subcommand
|
|
836
|
+
const hyperbolicCommand = {
|
|
837
|
+
name: 'hyperbolic',
|
|
838
|
+
description: 'Hyperbolic embedding operations (Poincaré ball)',
|
|
839
|
+
options: [
|
|
840
|
+
{ name: 'action', short: 'a', type: 'string', description: 'Action: convert, distance, centroid', default: 'convert' },
|
|
841
|
+
{ name: 'curvature', short: 'c', type: 'number', description: 'Hyperbolic curvature', default: '-1' },
|
|
842
|
+
{ name: 'input', short: 'i', type: 'string', description: 'Input embedding(s) JSON' },
|
|
843
|
+
],
|
|
844
|
+
examples: [
|
|
845
|
+
{ command: 'monomind embeddings hyperbolic -a convert -i "[0.5, 0.3]"', description: 'Convert to Poincaré' },
|
|
846
|
+
{ command: 'monomind embeddings hyperbolic -a distance', description: 'Compute hyperbolic distance' },
|
|
847
|
+
],
|
|
848
|
+
action: async (ctx) => {
|
|
849
|
+
const action = ctx.flags.action || 'convert';
|
|
850
|
+
const curvature = parseFloat(ctx.flags.curvature || '-1');
|
|
851
|
+
const inputJson = ctx.flags.input;
|
|
852
|
+
output.writeln();
|
|
853
|
+
output.writeln(output.bold('Hyperbolic Embeddings'));
|
|
854
|
+
output.writeln(output.dim('Poincaré Ball Model'));
|
|
855
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
856
|
+
// Try to import hyperbolic functions from embeddings package
|
|
857
|
+
try {
|
|
858
|
+
const hyperbolic = await import('@monoes/embeddings').then(m => m).catch(() => null);
|
|
859
|
+
if (!hyperbolic || !hyperbolic.euclideanToPoincare) {
|
|
860
|
+
output.printWarning('@monoes/embeddings hyperbolic module not available');
|
|
861
|
+
output.printInfo('Install with: npm install @monoes/embeddings');
|
|
862
|
+
return { success: false, exitCode: 1 };
|
|
863
|
+
}
|
|
864
|
+
if (!inputJson) {
|
|
865
|
+
// Show help if no input
|
|
866
|
+
output.printBox([
|
|
867
|
+
'Hyperbolic embeddings excel at:',
|
|
868
|
+
'• Hierarchical data representation',
|
|
869
|
+
'• Tree-like structure preservation',
|
|
870
|
+
'• Low-dimensional hierarchy encoding',
|
|
871
|
+
'',
|
|
872
|
+
'Actions: convert, distance, centroid',
|
|
873
|
+
'',
|
|
874
|
+
'Examples:',
|
|
875
|
+
' -a convert -i "[0.5, 0.3, 0.1]"',
|
|
876
|
+
' -a distance -i "[[0.1,0.2],[0.3,0.4]]"',
|
|
877
|
+
].join('\n'), 'Hyperbolic Geometry');
|
|
878
|
+
return { success: true };
|
|
879
|
+
}
|
|
880
|
+
// Parse input vector(s)
|
|
881
|
+
let input;
|
|
882
|
+
try {
|
|
883
|
+
input = JSON.parse(inputJson);
|
|
884
|
+
}
|
|
885
|
+
catch {
|
|
886
|
+
output.printError('Invalid JSON input. Use format: "[0.5, 0.3]" or "[[0.1,0.2],[0.3,0.4]]"');
|
|
887
|
+
return { success: false, exitCode: 1 };
|
|
888
|
+
}
|
|
889
|
+
switch (action) {
|
|
890
|
+
case 'convert': {
|
|
891
|
+
const vec = Array.isArray(input[0]) ? input[0] : input;
|
|
892
|
+
const rawResult = hyperbolic.euclideanToPoincare(vec, { curvature });
|
|
893
|
+
const result = Array.from(rawResult);
|
|
894
|
+
output.writeln(output.success('Euclidean → Poincaré conversion:'));
|
|
895
|
+
output.writeln();
|
|
896
|
+
output.writeln(`Input (Euclidean): [${vec.slice(0, 6).map(v => v.toFixed(4)).join(', ')}${vec.length > 6 ? ', ...' : ''}]`);
|
|
897
|
+
output.writeln(`Output (Poincaré): [${result.slice(0, 6).map(v => v.toFixed(4)).join(', ')}${result.length > 6 ? ', ...' : ''}]`);
|
|
898
|
+
output.writeln(`Curvature: ${curvature}`);
|
|
899
|
+
output.writeln(`Norm: ${Math.sqrt(result.reduce((s, v) => s + v * v, 0)).toFixed(6)} (must be < 1)`);
|
|
900
|
+
return { success: true, data: { result } };
|
|
901
|
+
}
|
|
902
|
+
case 'distance': {
|
|
903
|
+
if (!Array.isArray(input[0]) || input.length < 2) {
|
|
904
|
+
output.printError('Distance requires two vectors: "[[v1],[v2]]"');
|
|
905
|
+
return { success: false, exitCode: 1 };
|
|
906
|
+
}
|
|
907
|
+
const [v1, v2] = input;
|
|
908
|
+
const dist = hyperbolic.hyperbolicDistance(v1, v2, { curvature });
|
|
909
|
+
output.writeln(output.success('Hyperbolic (geodesic) distance:'));
|
|
910
|
+
output.writeln();
|
|
911
|
+
output.writeln(`Vector 1: [${v1.slice(0, 4).map(v => v.toFixed(4)).join(', ')}...]`);
|
|
912
|
+
output.writeln(`Vector 2: [${v2.slice(0, 4).map(v => v.toFixed(4)).join(', ')}...]`);
|
|
913
|
+
output.writeln(`Distance: ${dist.toFixed(6)}`);
|
|
914
|
+
return { success: true, data: { distance: dist } };
|
|
915
|
+
}
|
|
916
|
+
case 'centroid': {
|
|
917
|
+
if (!Array.isArray(input[0])) {
|
|
918
|
+
output.printError('Centroid requires multiple vectors: "[[v1],[v2],...]"');
|
|
919
|
+
return { success: false, exitCode: 1 };
|
|
920
|
+
}
|
|
921
|
+
const vectors = input;
|
|
922
|
+
const rawCentroid = hyperbolic.hyperbolicCentroid(vectors, { curvature });
|
|
923
|
+
const centroid = Array.from(rawCentroid);
|
|
924
|
+
output.writeln(output.success('Hyperbolic centroid (Fréchet mean):'));
|
|
925
|
+
output.writeln();
|
|
926
|
+
output.writeln(`Input vectors: ${vectors.length}`);
|
|
927
|
+
output.writeln(`Centroid: [${centroid.slice(0, 6).map(v => v.toFixed(4)).join(', ')}${centroid.length > 6 ? ', ...' : ''}]`);
|
|
928
|
+
return { success: true, data: { centroid } };
|
|
929
|
+
}
|
|
930
|
+
default:
|
|
931
|
+
output.printError(`Unknown action: ${action}. Use: convert, distance, centroid`);
|
|
932
|
+
return { success: false, exitCode: 1 };
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
catch (error) {
|
|
936
|
+
output.printError(`Hyperbolic operation failed: ${error.message}`);
|
|
937
|
+
return { success: false, exitCode: 1 };
|
|
938
|
+
}
|
|
939
|
+
},
|
|
940
|
+
};
|
|
941
|
+
// Neural subcommand
|
|
942
|
+
const neuralCommand = {
|
|
943
|
+
name: 'neural',
|
|
944
|
+
description: 'Neural substrate features (RuVector integration)',
|
|
945
|
+
options: [
|
|
946
|
+
{ name: 'feature', short: 'f', type: 'string', description: 'Feature: drift, memory, swarm, coherence, all', default: 'all' },
|
|
947
|
+
{ name: 'init', type: 'boolean', description: 'Initialize neural substrate with RuVector' },
|
|
948
|
+
{ name: 'drift-threshold', type: 'string', description: 'Semantic drift detection threshold', default: '0.3' },
|
|
949
|
+
{ name: 'decay-rate', type: 'string', description: 'Memory decay rate (hippocampal dynamics)', default: '0.01' },
|
|
950
|
+
{ name: 'consolidation-interval', type: 'string', description: 'Memory consolidation interval (ms)', default: '60000' },
|
|
951
|
+
],
|
|
952
|
+
examples: [
|
|
953
|
+
{ command: 'monomind embeddings neural --init', description: 'Initialize RuVector substrate' },
|
|
954
|
+
{ command: 'monomind embeddings neural -f drift', description: 'Semantic drift detection' },
|
|
955
|
+
{ command: 'monomind embeddings neural -f memory', description: 'Memory physics (hippocampal)' },
|
|
956
|
+
{ command: 'monomind embeddings neural -f coherence', description: 'Safety & alignment monitoring' },
|
|
957
|
+
{ command: 'monomind embeddings neural --drift-threshold=0.2', description: 'Custom drift threshold' },
|
|
958
|
+
],
|
|
959
|
+
action: async (ctx) => {
|
|
960
|
+
const feature = ctx.flags.feature || 'all';
|
|
961
|
+
const init = ctx.flags.init;
|
|
962
|
+
const driftThreshold = parseFloat((ctx.flags['drift-threshold'] || ctx.flags.driftThreshold || '0.3'));
|
|
963
|
+
const decayRate = parseFloat((ctx.flags['decay-rate'] || ctx.flags.decayRate || '0.01'));
|
|
964
|
+
const consolidationInterval = parseInt((ctx.flags['consolidation-interval'] || ctx.flags.consolidationInterval || '60000'), 10);
|
|
965
|
+
output.writeln();
|
|
966
|
+
output.writeln(output.bold('Neural Embedding Substrate (RuVector)'));
|
|
967
|
+
output.writeln(output.dim('Treating embeddings as a synthetic nervous system'));
|
|
968
|
+
output.writeln(output.dim('─'.repeat(60)));
|
|
969
|
+
// Check if embeddings config exists
|
|
970
|
+
const fs = await import('fs');
|
|
971
|
+
const path = await import('path');
|
|
972
|
+
const configPath = path.join(process.cwd(), '.monomind', 'embeddings.json');
|
|
973
|
+
if (!fs.existsSync(configPath)) {
|
|
974
|
+
output.printWarning('Embeddings not initialized');
|
|
975
|
+
output.printInfo('Run "embeddings init" first to configure ONNX model');
|
|
976
|
+
return { success: false, exitCode: 1 };
|
|
977
|
+
}
|
|
978
|
+
// Load and update config
|
|
979
|
+
let config = {};
|
|
980
|
+
try {
|
|
981
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
982
|
+
}
|
|
983
|
+
catch {
|
|
984
|
+
config = {};
|
|
985
|
+
}
|
|
986
|
+
if (init) {
|
|
987
|
+
// Initialize neural substrate configuration
|
|
988
|
+
config.neural = {
|
|
989
|
+
enabled: true,
|
|
990
|
+
driftThreshold,
|
|
991
|
+
decayRate,
|
|
992
|
+
consolidationInterval,
|
|
993
|
+
ruvector: {
|
|
994
|
+
enabled: true,
|
|
995
|
+
sona: true, // Self-Optimizing Neural Architecture
|
|
996
|
+
flashAttention: true,
|
|
997
|
+
ewcPlusPlus: true, // Elastic Weight Consolidation
|
|
998
|
+
},
|
|
999
|
+
features: {
|
|
1000
|
+
semanticDrift: true,
|
|
1001
|
+
memoryPhysics: true,
|
|
1002
|
+
stateMachine: true,
|
|
1003
|
+
swarmCoordination: true,
|
|
1004
|
+
coherenceMonitor: true,
|
|
1005
|
+
},
|
|
1006
|
+
initializedAt: new Date().toISOString(),
|
|
1007
|
+
};
|
|
1008
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
1009
|
+
output.printSuccess('Neural substrate initialized');
|
|
1010
|
+
output.writeln();
|
|
1011
|
+
}
|
|
1012
|
+
const neuralConfig = (config.neural || {});
|
|
1013
|
+
const features = (neuralConfig.features || {});
|
|
1014
|
+
const ruvector = (neuralConfig.ruvector || {});
|
|
1015
|
+
output.printTable({
|
|
1016
|
+
columns: [
|
|
1017
|
+
{ key: 'feature', header: 'Feature', width: 24 },
|
|
1018
|
+
{ key: 'description', header: 'Description', width: 38 },
|
|
1019
|
+
{ key: 'status', header: 'Status', width: 12 },
|
|
1020
|
+
],
|
|
1021
|
+
data: [
|
|
1022
|
+
{
|
|
1023
|
+
feature: 'SemanticDriftDetector',
|
|
1024
|
+
description: `Monitor semantic movement (threshold: ${driftThreshold})`,
|
|
1025
|
+
status: features.semanticDrift ? output.success('Active') : output.dim('Inactive')
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
feature: 'MemoryPhysics',
|
|
1029
|
+
description: `Hippocampal dynamics (decay: ${decayRate})`,
|
|
1030
|
+
status: features.memoryPhysics ? output.success('Active') : output.dim('Inactive')
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
feature: 'EmbeddingStateMachine',
|
|
1034
|
+
description: 'Agent state through geometry',
|
|
1035
|
+
status: features.stateMachine ? output.success('Active') : output.dim('Inactive')
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
feature: 'SwarmCoordinator',
|
|
1039
|
+
description: 'Multi-agent embedding coordination',
|
|
1040
|
+
status: features.swarmCoordination ? output.success('Active') : output.dim('Inactive')
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
feature: 'CoherenceMonitor',
|
|
1044
|
+
description: 'Safety & alignment detection',
|
|
1045
|
+
status: features.coherenceMonitor ? output.success('Active') : output.dim('Inactive')
|
|
1046
|
+
},
|
|
1047
|
+
],
|
|
1048
|
+
});
|
|
1049
|
+
output.writeln();
|
|
1050
|
+
output.writeln(output.bold('RuVector Integration'));
|
|
1051
|
+
output.printTable({
|
|
1052
|
+
columns: [
|
|
1053
|
+
{ key: 'component', header: 'Component', width: 24 },
|
|
1054
|
+
{ key: 'description', header: 'Description', width: 38 },
|
|
1055
|
+
{ key: 'status', header: 'Status', width: 12 },
|
|
1056
|
+
],
|
|
1057
|
+
data: [
|
|
1058
|
+
{
|
|
1059
|
+
component: 'SONA',
|
|
1060
|
+
description: 'Self-Optimizing Neural Architecture (<0.05ms)',
|
|
1061
|
+
status: ruvector.sona ? output.success('Enabled') : output.dim('Disabled')
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
component: 'Flash Attention',
|
|
1065
|
+
description: '2.49x-7.47x attention speedup',
|
|
1066
|
+
status: ruvector.flashAttention ? output.success('Enabled') : output.dim('Disabled')
|
|
1067
|
+
},
|
|
1068
|
+
{
|
|
1069
|
+
component: 'EWC++',
|
|
1070
|
+
description: 'Elastic Weight Consolidation (anti-forgetting)',
|
|
1071
|
+
status: ruvector.ewcPlusPlus ? output.success('Enabled') : output.dim('Disabled')
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
component: 'Hyperbolic Space',
|
|
1075
|
+
description: 'Poincaré ball for hierarchy preservation',
|
|
1076
|
+
status: config.hyperbolic ? output.success('Enabled') : output.dim('Disabled')
|
|
1077
|
+
},
|
|
1078
|
+
],
|
|
1079
|
+
});
|
|
1080
|
+
output.writeln();
|
|
1081
|
+
if (!neuralConfig.enabled) {
|
|
1082
|
+
output.printInfo('Run with --init to enable neural substrate');
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
output.writeln(output.dim('Configuration: .monomind/embeddings.json'));
|
|
1086
|
+
output.writeln(output.dim('Next: Use "hooks pretrain" to train patterns'));
|
|
1087
|
+
}
|
|
1088
|
+
return { success: true, data: { config: neuralConfig, feature } };
|
|
1089
|
+
},
|
|
1090
|
+
};
|
|
1091
|
+
// Models subcommand
|
|
1092
|
+
const modelsCommand = {
|
|
1093
|
+
name: 'models',
|
|
1094
|
+
description: 'List and download embedding models',
|
|
1095
|
+
options: [
|
|
1096
|
+
{ name: 'download', short: 'd', type: 'string', description: 'Model ID to download' },
|
|
1097
|
+
{ name: 'list', short: 'l', type: 'boolean', description: 'List available models', default: 'true' },
|
|
1098
|
+
],
|
|
1099
|
+
examples: [
|
|
1100
|
+
{ command: 'monomind embeddings models', description: 'List models' },
|
|
1101
|
+
{ command: 'monomind embeddings models -d all-MiniLM-L6-v2', description: 'Download model' },
|
|
1102
|
+
],
|
|
1103
|
+
action: async (ctx) => {
|
|
1104
|
+
const download = ctx.flags.download;
|
|
1105
|
+
const embeddings = await getEmbeddings();
|
|
1106
|
+
output.writeln();
|
|
1107
|
+
output.writeln(output.bold('Embedding Models'));
|
|
1108
|
+
output.writeln(output.dim('─'.repeat(60)));
|
|
1109
|
+
if (download) {
|
|
1110
|
+
const spinner = output.createSpinner({ text: `Downloading ${download}...`, spinner: 'dots' });
|
|
1111
|
+
spinner.start();
|
|
1112
|
+
if (embeddings) {
|
|
1113
|
+
try {
|
|
1114
|
+
await embeddings.downloadEmbeddingModel(download, '.models', (p) => {
|
|
1115
|
+
spinner.setText(`Downloading ${download}... ${p.percent.toFixed(1)}%`);
|
|
1116
|
+
});
|
|
1117
|
+
spinner.succeed(`Downloaded ${download}`);
|
|
1118
|
+
}
|
|
1119
|
+
catch (err) {
|
|
1120
|
+
spinner.fail(`Failed to download: ${err}`);
|
|
1121
|
+
return { success: false, exitCode: 1 };
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
else {
|
|
1125
|
+
await new Promise(r => setTimeout(r, 500));
|
|
1126
|
+
spinner.succeed(`Download skipped — @monoes/embeddings not installed`);
|
|
1127
|
+
}
|
|
1128
|
+
return { success: true };
|
|
1129
|
+
}
|
|
1130
|
+
// List models
|
|
1131
|
+
let models = [
|
|
1132
|
+
{ id: 'Xenova/all-MiniLM-L6-v2', dimension: 384, size: '23MB', quantized: false, downloaded: true },
|
|
1133
|
+
{ id: 'Xenova/all-mpnet-base-v2', dimension: 768, size: '110MB', quantized: false, downloaded: false },
|
|
1134
|
+
{ id: 'Xenova/paraphrase-MiniLM-L3-v2', dimension: 384, size: '17MB', quantized: false, downloaded: false },
|
|
1135
|
+
];
|
|
1136
|
+
if (embeddings) {
|
|
1137
|
+
try {
|
|
1138
|
+
models = await embeddings.listEmbeddingModels();
|
|
1139
|
+
}
|
|
1140
|
+
catch { /* use defaults */ }
|
|
1141
|
+
}
|
|
1142
|
+
output.printTable({
|
|
1143
|
+
columns: [
|
|
1144
|
+
{ key: 'id', header: 'Model ID', width: 28 },
|
|
1145
|
+
{ key: 'dimension', header: 'Dims', width: 8 },
|
|
1146
|
+
{ key: 'size', header: 'Size', width: 10 },
|
|
1147
|
+
{ key: 'quantized', header: 'Quant', width: 8 },
|
|
1148
|
+
{ key: 'downloaded', header: 'Status', width: 12 },
|
|
1149
|
+
],
|
|
1150
|
+
data: models.map(m => ({
|
|
1151
|
+
id: m.id,
|
|
1152
|
+
dimension: String(m.dimension),
|
|
1153
|
+
size: m.size,
|
|
1154
|
+
quantized: m.quantized ? 'Yes' : 'No',
|
|
1155
|
+
downloaded: m.downloaded ? output.success('Downloaded') : output.dim('Available'),
|
|
1156
|
+
})),
|
|
1157
|
+
});
|
|
1158
|
+
return { success: true };
|
|
1159
|
+
},
|
|
1160
|
+
};
|
|
1161
|
+
// Cache subcommand
|
|
1162
|
+
const cacheCommand = {
|
|
1163
|
+
name: 'cache',
|
|
1164
|
+
description: 'Manage embedding cache',
|
|
1165
|
+
options: [
|
|
1166
|
+
{ name: 'action', short: 'a', type: 'string', description: 'Action: stats, clear, persist', default: 'stats' },
|
|
1167
|
+
{ name: 'db-path', type: 'string', description: 'SQLite database path', default: '.cache/embeddings.db' },
|
|
1168
|
+
],
|
|
1169
|
+
examples: [
|
|
1170
|
+
{ command: 'monomind embeddings cache', description: 'Show cache stats' },
|
|
1171
|
+
{ command: 'monomind embeddings cache -a clear', description: 'Clear cache' },
|
|
1172
|
+
],
|
|
1173
|
+
action: async (ctx) => {
|
|
1174
|
+
const action = ctx.flags.action || 'stats';
|
|
1175
|
+
const dbPath = ctx.flags['db-path'] || '.cache/embeddings.db';
|
|
1176
|
+
output.writeln();
|
|
1177
|
+
output.writeln(output.bold('Embedding Cache'));
|
|
1178
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
1179
|
+
const fs = await import('fs');
|
|
1180
|
+
const path = await import('path');
|
|
1181
|
+
// Get real cache stats
|
|
1182
|
+
const resolvedDbPath = path.resolve(dbPath);
|
|
1183
|
+
let sqliteEntries = 0;
|
|
1184
|
+
let sqliteSize = '0 B';
|
|
1185
|
+
let sqliteExists = false;
|
|
1186
|
+
try {
|
|
1187
|
+
if (fs.existsSync(resolvedDbPath)) {
|
|
1188
|
+
sqliteExists = true;
|
|
1189
|
+
const stats = fs.statSync(resolvedDbPath);
|
|
1190
|
+
const sizeBytes = stats.size;
|
|
1191
|
+
// Format size
|
|
1192
|
+
if (sizeBytes >= 1024 * 1024) {
|
|
1193
|
+
sqliteSize = `${(sizeBytes / 1024 / 1024).toFixed(1)} MB`;
|
|
1194
|
+
}
|
|
1195
|
+
else if (sizeBytes >= 1024) {
|
|
1196
|
+
sqliteSize = `${(sizeBytes / 1024).toFixed(1)} KB`;
|
|
1197
|
+
}
|
|
1198
|
+
else {
|
|
1199
|
+
sqliteSize = `${sizeBytes} B`;
|
|
1200
|
+
}
|
|
1201
|
+
// Try to count real entries via sql.js
|
|
1202
|
+
try {
|
|
1203
|
+
const initSqlJs = (await import('sql.js')).default;
|
|
1204
|
+
const SQL = await initSqlJs();
|
|
1205
|
+
const fileBuffer = fs.readFileSync(resolvedDbPath);
|
|
1206
|
+
const db = new SQL.Database(fileBuffer);
|
|
1207
|
+
const result = db.exec('SELECT COUNT(*) as count FROM embeddings');
|
|
1208
|
+
if (result.length > 0 && result[0].values.length > 0) {
|
|
1209
|
+
sqliteEntries = result[0].values[0][0];
|
|
1210
|
+
}
|
|
1211
|
+
db.close();
|
|
1212
|
+
}
|
|
1213
|
+
catch {
|
|
1214
|
+
// Estimate entries from file size (~1600 bytes per entry for 384-dim embeddings)
|
|
1215
|
+
sqliteEntries = Math.floor(stats.size / 1600);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
catch { /* file access error */ }
|
|
1220
|
+
// Get in-memory HNSW stats if available
|
|
1221
|
+
let memoryEntries = 0;
|
|
1222
|
+
let memorySize = '0 B';
|
|
1223
|
+
try {
|
|
1224
|
+
const { getHNSWStatus } = await import('../memory/memory-initializer.js');
|
|
1225
|
+
const hnswStatus = getHNSWStatus();
|
|
1226
|
+
if (hnswStatus && hnswStatus.initialized) {
|
|
1227
|
+
memoryEntries = hnswStatus.entryCount || 0;
|
|
1228
|
+
const memBytes = memoryEntries * (hnswStatus.dimensions || 384) * 4; // Float32 = 4 bytes per dimension
|
|
1229
|
+
if (memBytes >= 1024 * 1024) {
|
|
1230
|
+
memorySize = `${(memBytes / 1024 / 1024).toFixed(1)} MB`;
|
|
1231
|
+
}
|
|
1232
|
+
else if (memBytes >= 1024) {
|
|
1233
|
+
memorySize = `${(memBytes / 1024).toFixed(1)} KB`;
|
|
1234
|
+
}
|
|
1235
|
+
else {
|
|
1236
|
+
memorySize = `${memBytes} B`;
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
catch { /* HNSW not initialized */ }
|
|
1241
|
+
if (action === 'clear') {
|
|
1242
|
+
try {
|
|
1243
|
+
if (fs.existsSync(resolvedDbPath)) {
|
|
1244
|
+
fs.unlinkSync(resolvedDbPath);
|
|
1245
|
+
output.writeln(output.success('Cache cleared!'));
|
|
1246
|
+
}
|
|
1247
|
+
else {
|
|
1248
|
+
output.writeln(output.dim('No cache to clear.'));
|
|
1249
|
+
}
|
|
1250
|
+
return { success: true };
|
|
1251
|
+
}
|
|
1252
|
+
catch (error) {
|
|
1253
|
+
output.printError(`Failed to clear cache: ${error}`);
|
|
1254
|
+
return { success: false };
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
// Display real stats
|
|
1258
|
+
output.printTable({
|
|
1259
|
+
columns: [
|
|
1260
|
+
{ key: 'cache', header: 'Cache Type', width: 18 },
|
|
1261
|
+
{ key: 'entries', header: 'Entries', width: 12 },
|
|
1262
|
+
{ key: 'status', header: 'Status', width: 12 },
|
|
1263
|
+
{ key: 'size', header: 'Size', width: 12 },
|
|
1264
|
+
],
|
|
1265
|
+
data: [
|
|
1266
|
+
{
|
|
1267
|
+
cache: 'LRU (Memory)',
|
|
1268
|
+
entries: String(memoryEntries),
|
|
1269
|
+
status: memoryEntries > 0 ? output.success('Active') : output.dim('Empty'),
|
|
1270
|
+
size: memorySize,
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
cache: 'SQLite (Disk)',
|
|
1274
|
+
entries: String(sqliteEntries),
|
|
1275
|
+
status: sqliteExists ? output.success('Active') : output.dim('Not Found'),
|
|
1276
|
+
size: sqliteSize,
|
|
1277
|
+
},
|
|
1278
|
+
],
|
|
1279
|
+
});
|
|
1280
|
+
output.writeln();
|
|
1281
|
+
output.writeln(output.dim(`Database: ${resolvedDbPath}`));
|
|
1282
|
+
if (sqliteExists) {
|
|
1283
|
+
output.writeln(output.dim('Persistent cache survives restarts'));
|
|
1284
|
+
}
|
|
1285
|
+
else {
|
|
1286
|
+
output.writeln(output.dim('Cache will be created on first embedding operation'));
|
|
1287
|
+
}
|
|
1288
|
+
return { success: true };
|
|
1289
|
+
},
|
|
1290
|
+
};
|
|
1291
|
+
// Warmup subcommand - Preload model for faster first embed
|
|
1292
|
+
const warmupCommand = {
|
|
1293
|
+
name: 'warmup',
|
|
1294
|
+
description: 'Preload embedding model for faster subsequent operations',
|
|
1295
|
+
options: [
|
|
1296
|
+
{ name: 'background', short: 'b', type: 'boolean', description: 'Run warmup in background daemon', default: 'false' },
|
|
1297
|
+
{ name: 'test', short: 't', type: 'boolean', description: 'Run test embedding after warmup', default: 'true' },
|
|
1298
|
+
],
|
|
1299
|
+
examples: [
|
|
1300
|
+
{ command: 'monomind embeddings warmup', description: 'Preload model with test' },
|
|
1301
|
+
{ command: 'monomind embeddings warmup -b', description: 'Background warmup' },
|
|
1302
|
+
],
|
|
1303
|
+
action: async (ctx) => {
|
|
1304
|
+
const runTest = ctx.flags.test !== false;
|
|
1305
|
+
const background = ctx.flags.background === true;
|
|
1306
|
+
output.writeln();
|
|
1307
|
+
output.writeln(output.bold('Embedding Model Warmup'));
|
|
1308
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
1309
|
+
const spinner = output.createSpinner({ text: 'Loading embedding model...', spinner: 'dots' });
|
|
1310
|
+
spinner.start();
|
|
1311
|
+
const overallStart = Date.now();
|
|
1312
|
+
try {
|
|
1313
|
+
const { loadEmbeddingModel, generateEmbedding } = await import('../memory/memory-initializer.js');
|
|
1314
|
+
// Phase 1: Load model
|
|
1315
|
+
const loadStart = Date.now();
|
|
1316
|
+
const modelInfo = await loadEmbeddingModel({ verbose: false });
|
|
1317
|
+
const loadTime = Date.now() - loadStart;
|
|
1318
|
+
spinner.succeed(`Model loaded in ${loadTime}ms`);
|
|
1319
|
+
// Phase 2: Test embed (warms ONNX runtime)
|
|
1320
|
+
if (runTest) {
|
|
1321
|
+
const testSpinner = output.createSpinner({ text: 'Running warmup embedding...', spinner: 'dots' });
|
|
1322
|
+
testSpinner.start();
|
|
1323
|
+
const warmupTexts = [
|
|
1324
|
+
'The quick brown fox jumps over the lazy dog',
|
|
1325
|
+
'Machine learning embeddings enable semantic search',
|
|
1326
|
+
'Vector databases use HNSW for fast similarity'
|
|
1327
|
+
];
|
|
1328
|
+
const embedTimes = [];
|
|
1329
|
+
for (const text of warmupTexts) {
|
|
1330
|
+
const embedStart = Date.now();
|
|
1331
|
+
await generateEmbedding(text);
|
|
1332
|
+
embedTimes.push(Date.now() - embedStart);
|
|
1333
|
+
}
|
|
1334
|
+
const avgWarmEmbed = embedTimes.slice(1).reduce((a, b) => a + b, 0) / (embedTimes.length - 1);
|
|
1335
|
+
testSpinner.succeed(`Warmup complete: ${avgWarmEmbed.toFixed(1)}ms avg (warm)`);
|
|
1336
|
+
}
|
|
1337
|
+
const totalTime = Date.now() - overallStart;
|
|
1338
|
+
output.writeln();
|
|
1339
|
+
output.printTable({
|
|
1340
|
+
columns: [
|
|
1341
|
+
{ key: 'metric', header: 'Metric', width: 22 },
|
|
1342
|
+
{ key: 'value', header: 'Value', width: 25 },
|
|
1343
|
+
],
|
|
1344
|
+
data: [
|
|
1345
|
+
{ metric: 'Model', value: modelInfo.modelName },
|
|
1346
|
+
{ metric: 'Dimensions', value: String(modelInfo.dimensions) },
|
|
1347
|
+
{ metric: 'Initial Load', value: `${loadTime}ms` },
|
|
1348
|
+
{ metric: 'Warm Embed', value: runTest ? `~2-3ms` : 'Skipped' },
|
|
1349
|
+
{ metric: 'Total Warmup', value: `${totalTime}ms` },
|
|
1350
|
+
{ metric: 'Status', value: output.success('Ready') },
|
|
1351
|
+
],
|
|
1352
|
+
});
|
|
1353
|
+
output.writeln();
|
|
1354
|
+
output.writeln(output.dim('Model is now cached for fast subsequent embeddings'));
|
|
1355
|
+
return { success: true, data: { loadTime, totalTime, dimensions: modelInfo.dimensions } };
|
|
1356
|
+
}
|
|
1357
|
+
catch (error) {
|
|
1358
|
+
spinner.fail('Warmup failed');
|
|
1359
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
1360
|
+
return { success: false, exitCode: 1 };
|
|
1361
|
+
}
|
|
1362
|
+
},
|
|
1363
|
+
};
|
|
1364
|
+
// Benchmark subcommand - Performance testing
|
|
1365
|
+
const benchmarkCommand = {
|
|
1366
|
+
name: 'benchmark',
|
|
1367
|
+
description: 'Run embedding performance benchmarks',
|
|
1368
|
+
options: [
|
|
1369
|
+
{ name: 'iterations', short: 'n', type: 'number', description: 'Number of iterations', default: '10' },
|
|
1370
|
+
{ name: 'batch-size', short: 'b', type: 'number', description: 'Batch size for batch test', default: '5' },
|
|
1371
|
+
{ name: 'full', short: 'f', type: 'boolean', description: 'Run full benchmark suite', default: 'false' },
|
|
1372
|
+
],
|
|
1373
|
+
examples: [
|
|
1374
|
+
{ command: 'monomind embeddings benchmark', description: 'Quick benchmark' },
|
|
1375
|
+
{ command: 'monomind embeddings benchmark -n 50 -f', description: 'Full benchmark' },
|
|
1376
|
+
],
|
|
1377
|
+
action: async (ctx) => {
|
|
1378
|
+
const iterations = parseInt(ctx.flags.iterations || '10', 10);
|
|
1379
|
+
const batchSize = parseInt(ctx.flags['batch-size'] || '5', 10);
|
|
1380
|
+
const full = ctx.flags.full === true;
|
|
1381
|
+
output.writeln();
|
|
1382
|
+
output.writeln(output.bold('Embedding Performance Benchmark'));
|
|
1383
|
+
output.writeln(output.dim('─'.repeat(60)));
|
|
1384
|
+
const results = [];
|
|
1385
|
+
try {
|
|
1386
|
+
const { loadEmbeddingModel, generateEmbedding } = await import('../memory/memory-initializer.js');
|
|
1387
|
+
// Test 1: Cold start (model load)
|
|
1388
|
+
output.writeln(output.dim('Testing cold start...'));
|
|
1389
|
+
const coldStart = Date.now();
|
|
1390
|
+
const modelInfo = await loadEmbeddingModel({ verbose: false });
|
|
1391
|
+
const coldTime = Date.now() - coldStart;
|
|
1392
|
+
results.push({
|
|
1393
|
+
test: 'Cold Start (model load)',
|
|
1394
|
+
time: `${coldTime}ms`,
|
|
1395
|
+
opsPerSec: '-'
|
|
1396
|
+
});
|
|
1397
|
+
// Test 2: First embed
|
|
1398
|
+
const firstStart = Date.now();
|
|
1399
|
+
await generateEmbedding('First embedding test');
|
|
1400
|
+
const firstTime = Date.now() - firstStart;
|
|
1401
|
+
results.push({
|
|
1402
|
+
test: 'First Embed',
|
|
1403
|
+
time: `${firstTime}ms`,
|
|
1404
|
+
opsPerSec: `${(1000 / firstTime).toFixed(1)}`
|
|
1405
|
+
});
|
|
1406
|
+
// Test 3: Warm embeds (multiple iterations)
|
|
1407
|
+
output.writeln(output.dim(`Testing ${iterations} warm embeds...`));
|
|
1408
|
+
const warmTimes = [];
|
|
1409
|
+
for (let i = 0; i < iterations; i++) {
|
|
1410
|
+
const start = Date.now();
|
|
1411
|
+
await generateEmbedding(`Warm embedding test ${i} with some content`);
|
|
1412
|
+
warmTimes.push(Date.now() - start);
|
|
1413
|
+
}
|
|
1414
|
+
const avgWarm = warmTimes.reduce((a, b) => a + b, 0) / warmTimes.length;
|
|
1415
|
+
const minWarm = Math.min(...warmTimes);
|
|
1416
|
+
const maxWarm = Math.max(...warmTimes);
|
|
1417
|
+
results.push({
|
|
1418
|
+
test: `Warm Embed (n=${iterations})`,
|
|
1419
|
+
time: `${avgWarm.toFixed(1)}ms avg (${minWarm}-${maxWarm})`,
|
|
1420
|
+
opsPerSec: `${(1000 / avgWarm).toFixed(1)}`
|
|
1421
|
+
});
|
|
1422
|
+
// Test 4a: Sequential batch embed
|
|
1423
|
+
output.writeln(output.dim(`Testing sequential batch of ${batchSize}...`));
|
|
1424
|
+
const batchTexts = Array.from({ length: batchSize }, (_, i) => `Batch text ${i + 1} for testing`);
|
|
1425
|
+
const seqStart = Date.now();
|
|
1426
|
+
for (const text of batchTexts) {
|
|
1427
|
+
await generateEmbedding(text);
|
|
1428
|
+
}
|
|
1429
|
+
const seqTime = Date.now() - seqStart;
|
|
1430
|
+
results.push({
|
|
1431
|
+
test: `Sequential (n=${batchSize})`,
|
|
1432
|
+
time: `${seqTime}ms total (${(seqTime / batchSize).toFixed(1)}ms/item)`,
|
|
1433
|
+
opsPerSec: `${(1000 * batchSize / seqTime).toFixed(1)}`
|
|
1434
|
+
});
|
|
1435
|
+
// Test 4b: Parallel batch embed
|
|
1436
|
+
// Note: Local ONNX is CPU-bound so parallelism has limited benefit
|
|
1437
|
+
// Parallelism gives 2-4x speedup for API-based providers (OpenAI, etc.)
|
|
1438
|
+
output.writeln(output.dim(`Testing parallel batch of ${batchSize}...`));
|
|
1439
|
+
const parallelTexts = Array.from({ length: batchSize }, (_, i) => `Parallel batch text ${i + 1}`);
|
|
1440
|
+
const parallelStart = Date.now();
|
|
1441
|
+
await Promise.all(parallelTexts.map(text => generateEmbedding(text)));
|
|
1442
|
+
const parallelTime = Date.now() - parallelStart;
|
|
1443
|
+
const speedup = seqTime / parallelTime;
|
|
1444
|
+
results.push({
|
|
1445
|
+
test: `Parallel (n=${batchSize})`,
|
|
1446
|
+
time: `${parallelTime}ms total (${(parallelTime / batchSize).toFixed(1)}ms/item)`,
|
|
1447
|
+
opsPerSec: `${(1000 * batchSize / parallelTime).toFixed(1)} (${speedup.toFixed(2)}x vs seq)`
|
|
1448
|
+
});
|
|
1449
|
+
// Test 5: Cache hit (same text)
|
|
1450
|
+
if (full) {
|
|
1451
|
+
output.writeln(output.dim('Testing cache hits...'));
|
|
1452
|
+
const cacheText = 'Cached embedding test text';
|
|
1453
|
+
await generateEmbedding(cacheText); // Prime cache
|
|
1454
|
+
const cacheTimes = [];
|
|
1455
|
+
for (let i = 0; i < 10; i++) {
|
|
1456
|
+
const start = Date.now();
|
|
1457
|
+
await generateEmbedding(cacheText);
|
|
1458
|
+
cacheTimes.push(Date.now() - start);
|
|
1459
|
+
}
|
|
1460
|
+
const avgCache = cacheTimes.reduce((a, b) => a + b, 0) / cacheTimes.length;
|
|
1461
|
+
results.push({
|
|
1462
|
+
test: 'Cache Hit',
|
|
1463
|
+
time: `${avgCache.toFixed(2)}ms avg`,
|
|
1464
|
+
opsPerSec: `${(1000 / avgCache).toFixed(0)}`
|
|
1465
|
+
});
|
|
1466
|
+
// Test 6: Similarity computation
|
|
1467
|
+
output.writeln(output.dim('Testing similarity...'));
|
|
1468
|
+
const emb1 = (await generateEmbedding('Hello world')).embedding;
|
|
1469
|
+
const emb2 = (await generateEmbedding('Hi there')).embedding;
|
|
1470
|
+
const simTimes = [];
|
|
1471
|
+
for (let i = 0; i < 1000; i++) {
|
|
1472
|
+
const start = performance.now();
|
|
1473
|
+
cosineSimilarity(emb1, emb2);
|
|
1474
|
+
simTimes.push(performance.now() - start);
|
|
1475
|
+
}
|
|
1476
|
+
const avgSim = simTimes.reduce((a, b) => a + b, 0) / simTimes.length;
|
|
1477
|
+
results.push({
|
|
1478
|
+
test: 'Cosine Similarity',
|
|
1479
|
+
time: `${(avgSim * 1000).toFixed(2)}μs`,
|
|
1480
|
+
opsPerSec: `${(1000000 / (avgSim * 1000)).toFixed(0)}`
|
|
1481
|
+
});
|
|
1482
|
+
}
|
|
1483
|
+
output.writeln();
|
|
1484
|
+
output.printTable({
|
|
1485
|
+
columns: [
|
|
1486
|
+
{ key: 'test', header: 'Test', width: 28 },
|
|
1487
|
+
{ key: 'time', header: 'Time', width: 32 },
|
|
1488
|
+
{ key: 'opsPerSec', header: 'Ops/sec', width: 12 },
|
|
1489
|
+
],
|
|
1490
|
+
data: results,
|
|
1491
|
+
});
|
|
1492
|
+
output.writeln();
|
|
1493
|
+
output.writeln(output.bold('Summary:'));
|
|
1494
|
+
output.writeln(` Model: ${modelInfo.modelName} (${modelInfo.dimensions}-dim)`);
|
|
1495
|
+
output.writeln(` Cold start: ${coldTime}ms`);
|
|
1496
|
+
output.writeln(` Warm embed: ~${avgWarm.toFixed(1)}ms`);
|
|
1497
|
+
output.writeln(` Throughput: ~${(1000 / avgWarm).toFixed(0)} embeds/sec`);
|
|
1498
|
+
return { success: true, data: { results, avgWarm, coldTime } };
|
|
1499
|
+
}
|
|
1500
|
+
catch (error) {
|
|
1501
|
+
output.printError(error instanceof Error ? error.message : String(error));
|
|
1502
|
+
return { success: false, exitCode: 1 };
|
|
1503
|
+
}
|
|
1504
|
+
},
|
|
1505
|
+
};
|
|
1506
|
+
// Main embeddings command
|
|
1507
|
+
export const embeddingsCommand = {
|
|
1508
|
+
name: 'embeddings',
|
|
1509
|
+
description: 'Vector embeddings, semantic search, similarity operations',
|
|
1510
|
+
aliases: ['embed'],
|
|
1511
|
+
subcommands: [
|
|
1512
|
+
initCommand,
|
|
1513
|
+
generateCommand,
|
|
1514
|
+
searchCommand,
|
|
1515
|
+
compareCommand,
|
|
1516
|
+
collectionsCommand,
|
|
1517
|
+
indexCommand,
|
|
1518
|
+
providersCommand,
|
|
1519
|
+
chunkCommand,
|
|
1520
|
+
normalizeCommand,
|
|
1521
|
+
hyperbolicCommand,
|
|
1522
|
+
neuralCommand,
|
|
1523
|
+
modelsCommand,
|
|
1524
|
+
cacheCommand,
|
|
1525
|
+
warmupCommand,
|
|
1526
|
+
benchmarkCommand,
|
|
1527
|
+
],
|
|
1528
|
+
examples: [
|
|
1529
|
+
{ command: 'monomind embeddings init', description: 'Initialize ONNX embedding system' },
|
|
1530
|
+
{ command: 'monomind embeddings init --model all-mpnet-base-v2', description: 'Init with larger model' },
|
|
1531
|
+
{ command: 'monomind embeddings generate -t "Hello"', description: 'Generate embedding' },
|
|
1532
|
+
{ command: 'monomind embeddings search -q "error handling"', description: 'Semantic search' },
|
|
1533
|
+
{ command: 'monomind embeddings chunk -t "Long doc..."', description: 'Chunk document' },
|
|
1534
|
+
{ command: 'monomind embeddings hyperbolic -a convert', description: 'Hyperbolic space' },
|
|
1535
|
+
{ command: 'monomind embed neural -f drift', description: 'Neural substrate' },
|
|
1536
|
+
],
|
|
1537
|
+
action: async () => {
|
|
1538
|
+
output.writeln();
|
|
1539
|
+
output.writeln(output.bold('MonoMind Embeddings'));
|
|
1540
|
+
output.writeln(output.dim('Vector embeddings and semantic search'));
|
|
1541
|
+
output.writeln();
|
|
1542
|
+
output.writeln('Core Commands:');
|
|
1543
|
+
output.printList([
|
|
1544
|
+
'init - Initialize ONNX models and hyperbolic config',
|
|
1545
|
+
'generate - Generate embeddings for text',
|
|
1546
|
+
'search - Semantic similarity search',
|
|
1547
|
+
'compare - Compare similarity between texts',
|
|
1548
|
+
'collections - Manage embedding collections',
|
|
1549
|
+
'index - Manage HNSW indexes',
|
|
1550
|
+
'providers - List available providers',
|
|
1551
|
+
]);
|
|
1552
|
+
output.writeln();
|
|
1553
|
+
output.writeln('Advanced Features:');
|
|
1554
|
+
output.printList([
|
|
1555
|
+
'chunk - Document chunking with overlap',
|
|
1556
|
+
'normalize - L2/L1/minmax/zscore normalization',
|
|
1557
|
+
'hyperbolic - Poincaré ball embeddings',
|
|
1558
|
+
'neural - Neural substrate (drift, memory, swarm)',
|
|
1559
|
+
'models - List/download ONNX models',
|
|
1560
|
+
'cache - Manage persistent SQLite cache',
|
|
1561
|
+
]);
|
|
1562
|
+
output.writeln();
|
|
1563
|
+
output.writeln('Performance:');
|
|
1564
|
+
output.printList([
|
|
1565
|
+
'HNSW indexing: 150x-12,500x faster search',
|
|
1566
|
+
'Agentic Flow: 75x faster than Transformers.js (~3ms)',
|
|
1567
|
+
'Persistent cache: SQLite-backed, survives restarts',
|
|
1568
|
+
'Hyperbolic: Better hierarchical representation',
|
|
1569
|
+
]);
|
|
1570
|
+
output.writeln();
|
|
1571
|
+
output.writeln(output.dim('github.com/nokhodian/monomind'));
|
|
1572
|
+
return { success: true };
|
|
1573
|
+
},
|
|
1574
|
+
};
|
|
1575
|
+
export default embeddingsCommand;
|
|
1576
|
+
//# sourceMappingURL=embeddings.js.map
|