monomind 1.11.13 → 1.12.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/generated/channel-intelligence-director.md +87 -0
- package/.claude/agents/generated/chief-growth-officer.md +88 -0
- package/.claude/agents/generated/content-seo-strategist.md +90 -0
- package/.claude/agents/generated/developer-community-strategist.md +91 -0
- package/.claude/agents/generated/outreach-partnership-strategist.md +90 -0
- package/.claude/agents/generated/social-media-strategist.md +91 -0
- package/.claude/agents/generated/video-visual-strategist.md +90 -0
- package/.claude/commands/mastermind/idea.md +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +13 -4
- package/.claude/helpers/control-start.cjs +5 -0
- package/.claude/helpers/event-logger.cjs +114 -0
- package/.claude/helpers/handlers/adr-draft-handler.cjs +19 -5
- package/.claude/helpers/handlers/agent-start-handler.cjs +13 -4
- package/.claude/helpers/handlers/compact-handler.cjs +2 -0
- package/.claude/helpers/handlers/edit-handler.cjs +1 -1
- package/.claude/helpers/handlers/gates-handler.cjs +3 -0
- package/.claude/helpers/handlers/graph-status-handler.cjs +14 -8
- package/.claude/helpers/handlers/loops-status-handler.cjs +5 -2
- package/.claude/helpers/handlers/route-handler.cjs +13 -6
- package/.claude/helpers/handlers/session-handler.cjs +11 -4
- package/.claude/helpers/handlers/session-restore-handler.cjs +21 -11
- package/.claude/helpers/handlers/task-handler.cjs +13 -5
- package/.claude/helpers/intelligence.cjs +7 -2
- package/.claude/helpers/loop-tracker.cjs +15 -3
- package/.claude/helpers/memory.cjs +6 -1
- package/.claude/helpers/router.cjs +5 -2
- package/.claude/helpers/session.cjs +2 -0
- package/.claude/helpers/statusline.cjs +10 -2
- package/.claude/helpers/utils/micro-agents.cjs +20 -4
- package/.claude/scheduled_tasks.lock +1 -1
- package/.claude/settings.json +92 -1
- package/.claude/skills/mastermind/_protocol.md +23 -13
- package/.claude/skills/mastermind/architect.md +6 -9
- package/.claude/skills/mastermind/build.md +3 -3
- package/.claude/skills/mastermind/content.md +3 -3
- package/.claude/skills/mastermind/createorg.md +2 -2
- package/.claude/skills/mastermind/finance.md +3 -3
- package/.claude/skills/mastermind/idea.md +5 -3
- package/.claude/skills/mastermind/marketing.md +3 -3
- package/.claude/skills/mastermind/monitor.md +2 -2
- package/.claude/skills/mastermind/release.md +3 -3
- package/.claude/skills/mastermind/research.md +3 -3
- package/.claude/skills/mastermind/review.md +3 -3
- package/.claude/skills/mastermind/runorg.md +153 -86
- package/.claude/skills/mastermind/sales.md +3 -3
- package/README.md +286 -129
- package/package.json +19 -2
- package/packages/@monomind/cli/README.md +286 -129
- package/packages/@monomind/cli/bundled-graph/dist/src/build.js +73 -0
- package/packages/@monomind/cli/bundled-graph/dist/src/cluster.js +120 -0
- package/packages/@monomind/cli/bundled-graph/package.json +57 -0
- package/packages/@monomind/cli/dist/src/agents/halt-signal.d.ts +25 -0
- package/packages/@monomind/cli/dist/src/agents/halt-signal.js +76 -0
- package/packages/@monomind/cli/dist/src/agents/index.d.ts +18 -0
- package/packages/@monomind/cli/dist/src/agents/index.js +13 -0
- package/packages/@monomind/cli/dist/src/agents/managed-agent.d.ts +41 -0
- package/packages/@monomind/cli/dist/src/agents/managed-agent.js +69 -0
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +23 -0
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +49 -0
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +22 -0
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +80 -0
- package/packages/@monomind/cli/dist/src/agents/registry-builder.js +2 -0
- package/packages/@monomind/cli/dist/src/agents/registry-query.d.ts +71 -0
- package/packages/@monomind/cli/dist/src/agents/registry-query.js +125 -0
- package/packages/@monomind/cli/dist/src/agents/score-decay.d.ts +19 -0
- package/packages/@monomind/cli/dist/src/agents/score-decay.js +22 -0
- package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.d.ts +13 -0
- package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.js +40 -0
- package/packages/@monomind/cli/dist/src/agents/specialization-scorer.d.ts +54 -0
- package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +212 -0
- package/packages/@monomind/cli/dist/src/agents/termination-watcher.d.ts +30 -0
- package/packages/@monomind/cli/dist/src/agents/termination-watcher.js +84 -0
- package/packages/@monomind/cli/dist/src/agents/trigger-index.d.ts +20 -0
- package/packages/@monomind/cli/dist/src/agents/trigger-index.js +38 -0
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +64 -0
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +308 -0
- package/packages/@monomind/cli/dist/src/agents/version-diff.d.ts +18 -0
- package/packages/@monomind/cli/dist/src/agents/version-diff.js +64 -0
- package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +60 -0
- package/packages/@monomind/cli/dist/src/agents/version-store.js +235 -0
- package/packages/@monomind/cli/dist/src/autopilot-state.js +10 -5
- package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +13 -0
- package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +20 -9
- package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.d.ts +45 -0
- package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.js +404 -0
- package/packages/@monomind/cli/dist/src/browser/actions.js +10 -3
- package/packages/@monomind/cli/dist/src/browser/browser.js +12 -2
- package/packages/@monomind/cli/dist/src/browser/cdp.js +21 -3
- package/packages/@monomind/cli/dist/src/browser/har.js +27 -5
- package/packages/@monomind/cli/dist/src/commands/agent-wasm.d.ts +14 -0
- package/packages/@monomind/cli/dist/src/commands/agent-wasm.js +333 -0
- package/packages/@monomind/cli/dist/src/commands/agent.js +11 -8
- package/packages/@monomind/cli/dist/src/commands/analyze.js +36 -21
- package/packages/@monomind/cli/dist/src/commands/autopilot.js +12 -4
- package/packages/@monomind/cli/dist/src/commands/benchmark.js +51 -8
- package/packages/@monomind/cli/dist/src/commands/browse.js +5 -2
- package/packages/@monomind/cli/dist/src/commands/claims.js +29 -11
- package/packages/@monomind/cli/dist/src/commands/cleanup.js +25 -5
- package/packages/@monomind/cli/dist/src/commands/config.js +15 -7
- package/packages/@monomind/cli/dist/src/commands/daemon.js +6 -0
- package/packages/@monomind/cli/dist/src/commands/deployment.js +34 -19
- package/packages/@monomind/cli/dist/src/commands/doctor.js +151 -20
- package/packages/@monomind/cli/dist/src/commands/guidance.js +15 -2
- package/packages/@monomind/cli/dist/src/commands/hive-mind.js +37 -14
- package/packages/@monomind/cli/dist/src/commands/hooks.js +42 -25
- package/packages/@monomind/cli/dist/src/commands/init.js +9 -4
- package/packages/@monomind/cli/dist/src/commands/issues.js +29 -26
- package/packages/@monomind/cli/dist/src/commands/mcp.js +11 -5
- package/packages/@monomind/cli/dist/src/commands/memory.js +10 -0
- package/packages/@monomind/cli/dist/src/commands/migrate.js +5 -5
- package/packages/@monomind/cli/dist/src/commands/monograph.js +18 -5
- package/packages/@monomind/cli/dist/src/commands/monovector/backup.js +8 -2
- package/packages/@monomind/cli/dist/src/commands/monovector/benchmark.js +20 -7
- package/packages/@monomind/cli/dist/src/commands/monovector/import.js +15 -0
- package/packages/@monomind/cli/dist/src/commands/monovector/migrate.js +4 -1
- package/packages/@monomind/cli/dist/src/commands/monovector/optimize.js +11 -0
- package/packages/@monomind/cli/dist/src/commands/monovector/setup.js +11 -1
- package/packages/@monomind/cli/dist/src/commands/neural.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/performance.js +20 -7
- package/packages/@monomind/cli/dist/src/commands/platforms.js +90 -8
- package/packages/@monomind/cli/dist/src/commands/plugins.js +12 -5
- package/packages/@monomind/cli/dist/src/commands/process.js +33 -10
- package/packages/@monomind/cli/dist/src/commands/progress.js +5 -3
- package/packages/@monomind/cli/dist/src/commands/providers.js +5 -5
- package/packages/@monomind/cli/dist/src/commands/replay.js +8 -2
- package/packages/@monomind/cli/dist/src/commands/route.js +27 -7
- package/packages/@monomind/cli/dist/src/commands/security.js +4 -0
- package/packages/@monomind/cli/dist/src/commands/session.js +12 -1
- package/packages/@monomind/cli/dist/src/commands/start.js +11 -4
- package/packages/@monomind/cli/dist/src/commands/status.js +7 -4
- package/packages/@monomind/cli/dist/src/commands/swarm.js +27 -13
- package/packages/@monomind/cli/dist/src/commands/task.js +26 -11
- package/packages/@monomind/cli/dist/src/commands/tokens.js +7 -2
- package/packages/@monomind/cli/dist/src/commands/transfer-store.js +36 -22
- package/packages/@monomind/cli/dist/src/commands/ui.js +68 -0
- package/packages/@monomind/cli/dist/src/commands/update.js +15 -3
- package/packages/@monomind/cli/dist/src/commands/workflow.js +39 -6
- package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +18 -7
- package/packages/@monomind/cli/dist/src/consensus/index.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/consensus/index.js +6 -0
- package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +25 -8
- package/packages/@monomind/cli/dist/src/context/context-provider.d.ts +44 -0
- package/packages/@monomind/cli/dist/src/context/context-provider.js +25 -0
- package/packages/@monomind/cli/dist/src/context/git-state-provider.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/context/git-state-provider.js +34 -0
- package/packages/@monomind/cli/dist/src/context/index.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/context/index.js +12 -0
- package/packages/@monomind/cli/dist/src/context/project-conventions-provider.d.ts +15 -0
- package/packages/@monomind/cli/dist/src/context/project-conventions-provider.js +19 -0
- package/packages/@monomind/cli/dist/src/context/prompt-assembler.d.ts +26 -0
- package/packages/@monomind/cli/dist/src/context/prompt-assembler.js +93 -0
- package/packages/@monomind/cli/dist/src/context/task-history-provider.d.ts +24 -0
- package/packages/@monomind/cli/dist/src/context/task-history-provider.js +32 -0
- package/packages/@monomind/cli/dist/src/context/user-preferences-provider.d.ts +14 -0
- package/packages/@monomind/cli/dist/src/context/user-preferences-provider.js +27 -0
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +31 -0
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +81 -0
- package/packages/@monomind/cli/dist/src/dlq/dlq-writer.d.ts +24 -0
- package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +65 -0
- package/packages/@monomind/cli/dist/src/dlq/index.d.ts +10 -0
- package/packages/@monomind/cli/dist/src/dlq/index.js +7 -0
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +33 -0
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +107 -0
- package/packages/@monomind/cli/dist/src/eval/dataset-runner.d.ts +23 -0
- package/packages/@monomind/cli/dist/src/eval/dataset-runner.js +59 -0
- package/packages/@monomind/cli/dist/src/eval/index.d.ts +10 -0
- package/packages/@monomind/cli/dist/src/eval/index.js +7 -0
- package/packages/@monomind/cli/dist/src/eval/trace-collector.d.ts +40 -0
- package/packages/@monomind/cli/dist/src/eval/trace-collector.js +102 -0
- package/packages/@monomind/cli/dist/src/index.js +7 -3
- package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.js +264 -0
- package/packages/@monomind/cli/dist/src/init/executor.js +14 -11
- package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +20 -4
- package/packages/@monomind/cli/dist/src/init/statusline-generator.js +33 -12
- package/packages/@monomind/cli/dist/src/interactive/interrupt.d.ts +22 -0
- package/packages/@monomind/cli/dist/src/interactive/interrupt.js +71 -0
- package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.d.ts +25 -0
- package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.js +48 -0
- package/packages/@monomind/cli/dist/src/mcp/tool-registry.d.ts +61 -0
- package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +246 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/a2a-tools.js +98 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +16 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +80 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +84 -22
- package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +35 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +82 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +37 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +49 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +45 -18
- package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +75 -25
- package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +32 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +91 -20
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +188 -29
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +25 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +11 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +148 -26
- package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +44 -9
- package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +45 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +7 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +15 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +61 -9
- package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +45 -14
- package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +15 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +14 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +52 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +40 -6
- package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +37 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.js +230 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +29 -6
- package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +26 -10
- package/packages/@monomind/cli/dist/src/memory/intelligence.js +80 -19
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +21 -2
- package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +67 -3
- package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +14 -4
- package/packages/@monomind/cli/dist/src/model/complexity-scorer.d.ts +21 -0
- package/packages/@monomind/cli/dist/src/model/complexity-scorer.js +106 -0
- package/packages/@monomind/cli/dist/src/model/index.d.ts +4 -0
- package/packages/@monomind/cli/dist/src/model/index.js +4 -0
- package/packages/@monomind/cli/dist/src/model/model-settings.d.ts +22 -0
- package/packages/@monomind/cli/dist/src/model/model-settings.js +33 -0
- package/packages/@monomind/cli/dist/src/model/model-tier-resolver.d.ts +24 -0
- package/packages/@monomind/cli/dist/src/model/model-tier-resolver.js +65 -0
- package/packages/@monomind/cli/dist/src/monovector/capabilities.d.ts +34 -0
- package/packages/@monomind/cli/dist/src/monovector/capabilities.js +37 -0
- package/packages/@monomind/cli/dist/src/monovector/command-outcomes.js +43 -7
- package/packages/@monomind/cli/dist/src/monovector/coverage-router.js +8 -4
- package/packages/@monomind/cli/dist/src/monovector/coverage-tools.js +6 -3
- package/packages/@monomind/cli/dist/src/monovector/diff-classifier.js +13 -0
- package/packages/@monomind/cli/dist/src/monovector/route-outcomes.d.ts +2 -1
- package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +46 -4
- package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/orchestration/index.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/orchestration/index.js +6 -0
- package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.d.ts +11 -0
- package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.js +31 -0
- package/packages/@monomind/cli/dist/src/orchestration/routing-modes.d.ts +68 -0
- package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +180 -0
- package/packages/@monomind/cli/dist/src/plugins/manager.js +8 -3
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +46 -2
- package/packages/@monomind/cli/dist/src/plugins/store/search.js +5 -4
- package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +188 -0
- package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +17 -3
- package/packages/@monomind/cli/dist/src/production/error-handler.js +3 -0
- package/packages/@monomind/cli/dist/src/production/monitoring.js +20 -3
- package/packages/@monomind/cli/dist/src/production/rate-limiter.js +13 -4
- package/packages/@monomind/cli/dist/src/production/retry.js +17 -9
- package/packages/@monomind/cli/dist/src/routing/embed-worker.js +6 -2
- package/packages/@monomind/cli/dist/src/routing/embedder.js +0 -0
- package/packages/@monomind/cli/dist/src/routing/llm-caller.js +13 -2
- package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +18 -3
- package/packages/@monomind/cli/dist/src/runtime/headless.d.ts +60 -0
- package/packages/@monomind/cli/dist/src/runtime/headless.js +284 -0
- package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.js +95 -0
- package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/services/claim-service.js +8 -0
- package/packages/@monomind/cli/dist/src/services/config-file-manager.js +14 -2
- package/packages/@monomind/cli/dist/src/services/container-worker-pool.d.ts +197 -0
- package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +623 -0
- package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +18 -2
- package/packages/@monomind/cli/dist/src/services/index.d.ts +13 -0
- package/packages/@monomind/cli/dist/src/services/index.js +11 -0
- package/packages/@monomind/cli/dist/src/services/worker-daemon.js +53 -12
- package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +201 -0
- package/packages/@monomind/cli/dist/src/services/worker-queue.js +594 -0
- package/packages/@monomind/cli/dist/src/swarm/communication-graph.d.ts +25 -0
- package/packages/@monomind/cli/dist/src/swarm/communication-graph.js +77 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +31 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +61 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +19 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +68 -0
- package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +0 -3
- package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +16 -1
- package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.js +205 -0
- package/packages/@monomind/cli/dist/src/transfer/export.js +8 -0
- package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +33 -3
- package/packages/@monomind/cli/dist/src/transfer/serialization/cfp.js +9 -3
- package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +37 -3
- package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +45 -3
- package/packages/@monomind/cli/dist/src/transfer/store/download.js +5 -0
- package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -1
- package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +8 -0
- package/packages/@monomind/cli/dist/src/transfer/store/registry.js +30 -5
- package/packages/@monomind/cli/dist/src/transfer/store/search.js +20 -5
- package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/packages/@monomind/cli/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/packages/@monomind/cli/dist/src/transfer/test-seraphine.js +105 -0
- package/packages/@monomind/cli/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/transfer/tests/test-store.js +214 -0
- package/packages/@monomind/cli/dist/src/update/checker.js +59 -7
- package/packages/@monomind/cli/dist/src/update/executor.js +50 -3
- package/packages/@monomind/cli/dist/src/update/index.js +18 -1
- package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +6 -0
- package/packages/@monomind/cli/dist/src/update/rate-limiter.js +79 -7
- package/packages/@monomind/cli/dist/src/update/validator.js +52 -1
- package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.d.ts +10 -0
- package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +82 -0
- package/packages/@monomind/cli/dist/src/workflow/context-resolver.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/workflow/context-resolver.js +23 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-builder.d.ts +17 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +129 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-executor.d.ts +9 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +116 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-types.d.ts +41 -0
- package/packages/@monomind/cli/dist/src/workflow/dag-types.js +8 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-parser.d.ts +12 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-parser.js +20 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +165 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +82 -0
- package/packages/@monomind/cli/dist/src/workflow/index.d.ts +13 -0
- package/packages/@monomind/cli/dist/src/workflow/index.js +11 -0
- package/packages/@monomind/cli/dist/src/workflow/template-engine.d.ts +11 -0
- package/packages/@monomind/cli/dist/src/workflow/template-engine.js +40 -0
- package/packages/@monomind/cli/dist/src/workflow/workflow-executor.d.ts +29 -0
- package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +227 -0
- package/packages/@monomind/cli/package.json +9 -10
- package/packages/@monomind/guidance/dist/adversarial.d.ts +284 -0
- package/packages/@monomind/guidance/dist/adversarial.js +572 -0
- package/packages/@monomind/guidance/dist/analyzer.d.ts +530 -0
- package/packages/@monomind/guidance/dist/analyzer.js +2518 -0
- package/packages/@monomind/guidance/dist/artifacts.d.ts +283 -0
- package/packages/@monomind/guidance/dist/artifacts.js +356 -0
- package/packages/@monomind/guidance/dist/authority.d.ts +290 -0
- package/packages/@monomind/guidance/dist/authority.js +558 -0
- package/packages/@monomind/guidance/dist/capabilities.d.ts +209 -0
- package/packages/@monomind/guidance/dist/capabilities.js +485 -0
- package/packages/@monomind/guidance/dist/coherence.d.ts +233 -0
- package/packages/@monomind/guidance/dist/coherence.js +372 -0
- package/packages/@monomind/guidance/dist/compiler.d.ts +87 -0
- package/packages/@monomind/guidance/dist/compiler.js +419 -0
- package/packages/@monomind/guidance/dist/conformance-kit.d.ts +225 -0
- package/packages/@monomind/guidance/dist/conformance-kit.js +629 -0
- package/packages/@monomind/guidance/dist/continue-gate.d.ts +214 -0
- package/packages/@monomind/guidance/dist/continue-gate.js +353 -0
- package/packages/@monomind/guidance/dist/crypto-utils.d.ts +17 -0
- package/packages/@monomind/guidance/dist/crypto-utils.js +24 -0
- package/packages/@monomind/guidance/dist/evolution.d.ts +282 -0
- package/packages/@monomind/guidance/dist/evolution.js +500 -0
- package/packages/@monomind/guidance/dist/gates.d.ts +79 -0
- package/packages/@monomind/guidance/dist/gates.js +302 -0
- package/packages/@monomind/guidance/dist/gateway.d.ts +206 -0
- package/packages/@monomind/guidance/dist/gateway.js +452 -0
- package/packages/@monomind/guidance/dist/generators.d.ts +153 -0
- package/packages/@monomind/guidance/dist/generators.js +682 -0
- package/packages/@monomind/guidance/dist/headless.d.ts +177 -0
- package/packages/@monomind/guidance/dist/headless.js +342 -0
- package/packages/@monomind/guidance/dist/hooks.d.ts +109 -0
- package/packages/@monomind/guidance/dist/hooks.js +347 -0
- package/packages/@monomind/guidance/dist/index.d.ts +205 -0
- package/packages/@monomind/guidance/dist/index.js +321 -0
- package/packages/@monomind/guidance/dist/ledger.d.ts +162 -0
- package/packages/@monomind/guidance/dist/ledger.js +375 -0
- package/packages/@monomind/guidance/dist/manifest-validator.d.ts +289 -0
- package/packages/@monomind/guidance/dist/manifest-validator.js +838 -0
- package/packages/@monomind/guidance/dist/memory-gate.d.ts +222 -0
- package/packages/@monomind/guidance/dist/memory-gate.js +382 -0
- package/packages/@monomind/guidance/dist/meta-governance.d.ts +265 -0
- package/packages/@monomind/guidance/dist/meta-governance.js +348 -0
- package/packages/@monomind/guidance/dist/optimizer.d.ts +104 -0
- package/packages/@monomind/guidance/dist/optimizer.js +329 -0
- package/packages/@monomind/guidance/dist/persistence.d.ts +189 -0
- package/packages/@monomind/guidance/dist/persistence.js +464 -0
- package/packages/@monomind/guidance/dist/proof.d.ts +185 -0
- package/packages/@monomind/guidance/dist/proof.js +238 -0
- package/packages/@monomind/guidance/dist/retriever.d.ts +116 -0
- package/packages/@monomind/guidance/dist/retriever.js +394 -0
- package/packages/@monomind/guidance/dist/ruvbot-integration.d.ts +370 -0
- package/packages/@monomind/guidance/dist/ruvbot-integration.js +738 -0
- package/packages/@monomind/guidance/dist/temporal.d.ts +426 -0
- package/packages/@monomind/guidance/dist/temporal.js +658 -0
- package/packages/@monomind/guidance/dist/trust.d.ts +283 -0
- package/packages/@monomind/guidance/dist/trust.js +473 -0
- package/packages/@monomind/guidance/dist/truth-anchors.d.ts +276 -0
- package/packages/@monomind/guidance/dist/truth-anchors.js +488 -0
- package/packages/@monomind/guidance/dist/types.d.ts +378 -0
- package/packages/@monomind/guidance/dist/types.js +10 -0
- package/packages/@monomind/guidance/dist/uncertainty.d.ts +372 -0
- package/packages/@monomind/guidance/dist/uncertainty.js +619 -0
- package/packages/@monomind/guidance/dist/wasm-kernel.d.ts +48 -0
- package/packages/@monomind/guidance/dist/wasm-kernel.js +158 -0
|
@@ -3,6 +3,46 @@
|
|
|
3
3
|
* Secure discovery mechanism for finding patterns in decentralized environment
|
|
4
4
|
*/
|
|
5
5
|
import * as crypto from 'crypto';
|
|
6
|
+
/** Maximum bytes read from any IPFS gateway response to prevent OOM */
|
|
7
|
+
const MAX_DISCOVERY_RESPONSE_BYTES = 10 * 1024 * 1024; // 10 MB
|
|
8
|
+
/**
|
|
9
|
+
* Read a fetch response body with a hard byte cap.
|
|
10
|
+
* Aborts the stream early if the limit is exceeded.
|
|
11
|
+
*/
|
|
12
|
+
async function readBodyCapped(response, maxBytes = MAX_DISCOVERY_RESPONSE_BYTES) {
|
|
13
|
+
const lengthHeader = response.headers.get('content-length');
|
|
14
|
+
if (lengthHeader) {
|
|
15
|
+
const declared = parseInt(lengthHeader, 10);
|
|
16
|
+
if (Number.isFinite(declared) && declared > maxBytes) {
|
|
17
|
+
throw new Error(`Response too large: ${declared} bytes (max ${maxBytes})`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const reader = response.body?.getReader();
|
|
21
|
+
if (!reader)
|
|
22
|
+
return '';
|
|
23
|
+
const chunks = [];
|
|
24
|
+
let total = 0;
|
|
25
|
+
while (true) {
|
|
26
|
+
const { done, value } = await reader.read();
|
|
27
|
+
if (done)
|
|
28
|
+
break;
|
|
29
|
+
if (value) {
|
|
30
|
+
total += value.byteLength;
|
|
31
|
+
if (total > maxBytes) {
|
|
32
|
+
await reader.cancel();
|
|
33
|
+
throw new Error(`Response too large: exceeded ${maxBytes} bytes`);
|
|
34
|
+
}
|
|
35
|
+
chunks.push(value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const combined = new Uint8Array(total);
|
|
39
|
+
let offset = 0;
|
|
40
|
+
for (const c of chunks) {
|
|
41
|
+
combined.set(c, offset);
|
|
42
|
+
offset += c.byteLength;
|
|
43
|
+
}
|
|
44
|
+
return new TextDecoder('utf-8').decode(combined);
|
|
45
|
+
}
|
|
6
46
|
import { DEFAULT_STORE_CONFIG, } from './registry.js';
|
|
7
47
|
/**
|
|
8
48
|
* Pattern Store Discovery Service
|
|
@@ -136,7 +176,8 @@ export class PatternDiscovery {
|
|
|
136
176
|
signal: AbortSignal.timeout(10000),
|
|
137
177
|
});
|
|
138
178
|
if (response.ok) {
|
|
139
|
-
const
|
|
179
|
+
const text = await readBodyCapped(response, 64 * 1024); // IPNS resolve is tiny
|
|
180
|
+
const data = JSON.parse(text);
|
|
140
181
|
const cid = data.Path?.replace('/ipfs/', '') || '';
|
|
141
182
|
if (cid) {
|
|
142
183
|
const resolution = {
|
|
@@ -226,7 +267,7 @@ export class PatternDiscovery {
|
|
|
226
267
|
signal: AbortSignal.timeout(30000),
|
|
227
268
|
});
|
|
228
269
|
if (response.ok) {
|
|
229
|
-
const text = await response
|
|
270
|
+
const text = await readBodyCapped(response);
|
|
230
271
|
try {
|
|
231
272
|
const registry = JSON.parse(text);
|
|
232
273
|
console.log(`[Discovery] Fetched registry with ${registry.patterns?.length || 0} patterns`);
|
|
@@ -257,7 +298,8 @@ export class PatternDiscovery {
|
|
|
257
298
|
signal: AbortSignal.timeout(15000),
|
|
258
299
|
});
|
|
259
300
|
if (response.ok) {
|
|
260
|
-
const
|
|
301
|
+
const altText = await readBodyCapped(response);
|
|
302
|
+
const registry = JSON.parse(altText);
|
|
261
303
|
console.log(`[Discovery] Fetched registry from ${altGateway}`);
|
|
262
304
|
return registry;
|
|
263
305
|
}
|
|
@@ -11,6 +11,7 @@ import { DEFAULT_STORE_CONFIG } from './registry.js';
|
|
|
11
11
|
* Handles secure download and verification of patterns
|
|
12
12
|
*/
|
|
13
13
|
const MAX_DOWNLOAD_CACHE = 500;
|
|
14
|
+
const MAX_PATTERN_FILE_BYTES = 50 * 1024 * 1024; // 50 MB — matches client.ts MAX_IPFS_RESPONSE_BYTES
|
|
14
15
|
const ALLOWED_GATEWAYS = new Set([
|
|
15
16
|
'https://w3s.link',
|
|
16
17
|
'https://dweb.link',
|
|
@@ -362,6 +363,10 @@ export class PatternDownloader {
|
|
|
362
363
|
async importPattern(filePath, strategy = 'merge') {
|
|
363
364
|
console.log(`[Download] Importing pattern with strategy: ${strategy}`);
|
|
364
365
|
try {
|
|
366
|
+
if (fs.statSync(filePath).size > MAX_PATTERN_FILE_BYTES) {
|
|
367
|
+
console.error(`[Download] Pattern file exceeds size limit (${MAX_PATTERN_FILE_BYTES} bytes)`);
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
365
370
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
366
371
|
const cfp = JSON.parse(content);
|
|
367
372
|
// In production: Import to local pattern store
|
|
@@ -137,13 +137,17 @@ export class PatternPublisher {
|
|
|
137
137
|
}
|
|
138
138
|
catch (error) {
|
|
139
139
|
console.error(`[Publish] Failed:`, error);
|
|
140
|
+
// Sanitize error message: strip control chars and cap length to prevent
|
|
141
|
+
// internal paths / stack traces from leaking into CLI output or logs.
|
|
142
|
+
const rawMsg = error instanceof Error ? error.message : String(error);
|
|
143
|
+
const safeMsg = rawMsg.replace(/[\x00-\x1f\x7f]/g, '?').slice(0, 256);
|
|
140
144
|
return {
|
|
141
145
|
success: false,
|
|
142
146
|
patternId: '',
|
|
143
147
|
cid: '',
|
|
144
148
|
registryCid: '',
|
|
145
149
|
gatewayUrl: '',
|
|
146
|
-
message: `Publish failed: ${
|
|
150
|
+
message: `Publish failed: ${safeMsg}`,
|
|
147
151
|
};
|
|
148
152
|
}
|
|
149
153
|
}
|
|
@@ -152,6 +156,14 @@ export class PatternPublisher {
|
|
|
152
156
|
*/
|
|
153
157
|
async signContent(content, privateKeyPath) {
|
|
154
158
|
const ed = await import('@noble/ed25519');
|
|
159
|
+
// Guard: cap key file size to prevent OOM on oversized or malicious files.
|
|
160
|
+
// A valid 32-byte Ed25519 seed encoded as hex is 64 chars; even with a
|
|
161
|
+
// newline and BOM the file should never exceed a few hundred bytes.
|
|
162
|
+
const MAX_KEY_FILE_BYTES = 4 * 1024; // 4 KB — generous upper bound
|
|
163
|
+
const keyFileStat = fs.statSync(privateKeyPath);
|
|
164
|
+
if (keyFileStat.size > MAX_KEY_FILE_BYTES) {
|
|
165
|
+
throw new Error(`Private key file exceeds size limit (${MAX_KEY_FILE_BYTES} bytes)`);
|
|
166
|
+
}
|
|
155
167
|
const keyHex = fs.readFileSync(privateKeyPath, 'utf-8').trim();
|
|
156
168
|
// Accept 64-char hex (32-byte seed) directly; otherwise derive via SHA-256
|
|
157
169
|
const privKeyBytes = keyHex.length === 64
|
|
@@ -37,6 +37,14 @@ export declare function removePatternFromRegistry(registry: PatternRegistry, pat
|
|
|
37
37
|
export declare function serializeRegistry(registry: PatternRegistry): string;
|
|
38
38
|
/**
|
|
39
39
|
* Deserialize registry from JSON
|
|
40
|
+
*
|
|
41
|
+
* Caps the input string length before parsing to prevent OOM on a malicious or
|
|
42
|
+
* oversized registry fetched from IPFS / Pinata. The in-flight body is already
|
|
43
|
+
* capped by readBodyWithLimit (50 MB), but deserializeRegistry is also called
|
|
44
|
+
* with locally-cached data, so we add a 10 MB guard here too.
|
|
45
|
+
*
|
|
46
|
+
* We also reject non-semver and suspiciously long version strings to prevent
|
|
47
|
+
* version fields being used as a side-channel for large-payload injection.
|
|
40
48
|
*/
|
|
41
49
|
export declare function deserializeRegistry(json: string): PatternRegistry;
|
|
42
50
|
/**
|
|
@@ -206,12 +206,26 @@ export function serializeRegistry(registry) {
|
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
208
|
* Deserialize registry from JSON
|
|
209
|
+
*
|
|
210
|
+
* Caps the input string length before parsing to prevent OOM on a malicious or
|
|
211
|
+
* oversized registry fetched from IPFS / Pinata. The in-flight body is already
|
|
212
|
+
* capped by readBodyWithLimit (50 MB), but deserializeRegistry is also called
|
|
213
|
+
* with locally-cached data, so we add a 10 MB guard here too.
|
|
214
|
+
*
|
|
215
|
+
* We also reject non-semver and suspiciously long version strings to prevent
|
|
216
|
+
* version fields being used as a side-channel for large-payload injection.
|
|
209
217
|
*/
|
|
210
218
|
export function deserializeRegistry(json) {
|
|
219
|
+
const MAX_JSON_BYTES = 10 * 1024 * 1024; // 10 MB
|
|
220
|
+
if (typeof json !== 'string' || json.length > MAX_JSON_BYTES) {
|
|
221
|
+
throw new Error(`Registry JSON too large: ${typeof json === 'string' ? json.length : typeof json} bytes (max ${MAX_JSON_BYTES})`);
|
|
222
|
+
}
|
|
211
223
|
const registry = JSON.parse(json);
|
|
212
|
-
// Validate version
|
|
213
|
-
if (!registry.version
|
|
214
|
-
|
|
224
|
+
// Validate version — must be a non-empty semver-like string (e.g. "1.0.0").
|
|
225
|
+
if (!registry.version || typeof registry.version !== 'string'
|
|
226
|
+
|| registry.version.length > 32
|
|
227
|
+
|| !/^\d+\.\d+\.\d+/.test(registry.version)) {
|
|
228
|
+
throw new Error('Invalid registry: missing or malformed version');
|
|
215
229
|
}
|
|
216
230
|
return registry;
|
|
217
231
|
}
|
|
@@ -266,9 +280,16 @@ export async function verifyRegistrySignature(registry) {
|
|
|
266
280
|
*/
|
|
267
281
|
export function mergeRegistries(local, remote) {
|
|
268
282
|
const merged = createRegistry(local.ipnsName);
|
|
283
|
+
// Cap combined input sizes to prevent OOM when merging a large remote registry.
|
|
284
|
+
// A remote registry fetched from IPFS could contain hundreds of thousands of
|
|
285
|
+
// entries; without a hard cap, patternMap grows unboundedly in memory.
|
|
286
|
+
const MAX_MERGE_PATTERNS = 10_000;
|
|
287
|
+
const MAX_MERGE_AUTHORS = 1_000;
|
|
269
288
|
// Combine patterns, preferring newer versions
|
|
270
289
|
const patternMap = new Map();
|
|
271
290
|
for (const pattern of [...local.patterns, ...remote.patterns]) {
|
|
291
|
+
if (patternMap.size >= MAX_MERGE_PATTERNS && !patternMap.has(pattern.name))
|
|
292
|
+
continue;
|
|
272
293
|
const existing = patternMap.get(pattern.name);
|
|
273
294
|
if (!existing || new Date(pattern.lastUpdated) > new Date(existing.lastUpdated)) {
|
|
274
295
|
patternMap.set(pattern.name, pattern);
|
|
@@ -278,6 +299,8 @@ export function mergeRegistries(local, remote) {
|
|
|
278
299
|
// Combine authors
|
|
279
300
|
const authorMap = new Map();
|
|
280
301
|
for (const author of [...local.authors, ...remote.authors]) {
|
|
302
|
+
if (authorMap.size >= MAX_MERGE_AUTHORS && !authorMap.has(author.id))
|
|
303
|
+
continue;
|
|
281
304
|
const existing = authorMap.get(author.id);
|
|
282
305
|
if (!existing || author.patterns > existing.patterns) {
|
|
283
306
|
authorMap.set(author.id, author);
|
|
@@ -294,8 +317,10 @@ export function mergeRegistries(local, remote) {
|
|
|
294
317
|
* Generate pattern ID from name
|
|
295
318
|
*/
|
|
296
319
|
export function generatePatternId(name) {
|
|
297
|
-
|
|
298
|
-
const
|
|
320
|
+
// Cap name before normalizing to prevent OOM from an extremely long input string
|
|
321
|
+
const safeName = typeof name === 'string' ? name.slice(0, 128) : '';
|
|
322
|
+
const normalized = safeName.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
323
|
+
const hash = crypto.createHash('sha256').update(safeName + Date.now()).digest('hex').slice(0, 8);
|
|
299
324
|
return `${normalized}-${hash}`;
|
|
300
325
|
}
|
|
301
326
|
//# sourceMappingURL=registry.js.map
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* Pattern Search Service
|
|
3
3
|
* Search and filter patterns from decentralized registry
|
|
4
4
|
*/
|
|
5
|
+
/** Maximum query string length to prevent O(n*m) regex/includes DoS */
|
|
6
|
+
const MAX_QUERY_LEN = 256;
|
|
7
|
+
/** Hard cap on page size to prevent huge slice allocations */
|
|
8
|
+
const MAX_PAGE_LIMIT = 200;
|
|
9
|
+
/** Hard cap on offset to prevent absurdly large slice calculations */
|
|
10
|
+
const MAX_OFFSET = 10_000;
|
|
11
|
+
/** Hard cap on suggestion partial string length */
|
|
12
|
+
const MAX_PARTIAL_LEN = 128;
|
|
13
|
+
/** Hard cap on similar-pattern limit */
|
|
14
|
+
const MAX_SIMILAR_LIMIT = 50;
|
|
5
15
|
/**
|
|
6
16
|
* Search patterns in registry
|
|
7
17
|
*/
|
|
@@ -9,7 +19,7 @@ export function searchPatterns(registry, options = {}) {
|
|
|
9
19
|
let patterns = [...registry.patterns];
|
|
10
20
|
// Text search
|
|
11
21
|
if (options.query) {
|
|
12
|
-
const query = options.query.toLowerCase();
|
|
22
|
+
const query = String(options.query).slice(0, MAX_QUERY_LEN).toLowerCase();
|
|
13
23
|
patterns = patterns.filter(p => p.name.toLowerCase().includes(query) ||
|
|
14
24
|
p.displayName.toLowerCase().includes(query) ||
|
|
15
25
|
p.description.toLowerCase().includes(query) ||
|
|
@@ -77,10 +87,12 @@ export function searchPatterns(registry, options = {}) {
|
|
|
77
87
|
}
|
|
78
88
|
return sortOrder === 'desc' ? -comparison : comparison;
|
|
79
89
|
});
|
|
80
|
-
// Pagination
|
|
90
|
+
// Pagination — cap limit and offset to prevent huge slice allocations
|
|
81
91
|
const total = patterns.length;
|
|
82
|
-
const
|
|
83
|
-
const
|
|
92
|
+
const rawLimit = typeof options.limit === 'number' && Number.isFinite(options.limit) ? options.limit : 20;
|
|
93
|
+
const limit = Math.min(Math.max(1, Math.floor(rawLimit)), MAX_PAGE_LIMIT);
|
|
94
|
+
const rawOffset = typeof options.offset === 'number' && Number.isFinite(options.offset) ? options.offset : 0;
|
|
95
|
+
const offset = Math.min(Math.max(0, Math.floor(rawOffset)), MAX_OFFSET);
|
|
84
96
|
const page = Math.floor(offset / limit) + 1;
|
|
85
97
|
patterns = patterns.slice(offset, offset + limit);
|
|
86
98
|
return {
|
|
@@ -144,6 +156,7 @@ export function getPatternsByCategory(registry, categoryId) {
|
|
|
144
156
|
* Get similar patterns (by tags and category)
|
|
145
157
|
*/
|
|
146
158
|
export function getSimilarPatterns(registry, pattern, limit = 5) {
|
|
159
|
+
limit = Math.min(Math.max(1, Math.floor(limit)), MAX_SIMILAR_LIMIT);
|
|
147
160
|
const scores = new Map();
|
|
148
161
|
for (const p of registry.patterns) {
|
|
149
162
|
if (p.id === pattern.id)
|
|
@@ -203,7 +216,9 @@ export function getTagCloud(registry) {
|
|
|
203
216
|
*/
|
|
204
217
|
export function getSearchSuggestions(registry, partial, limit = 10) {
|
|
205
218
|
const suggestions = new Set();
|
|
206
|
-
|
|
219
|
+
// Cap partial length to prevent O(n*m) DoS via enormous query strings
|
|
220
|
+
const query = String(partial).slice(0, MAX_PARTIAL_LEN).toLowerCase();
|
|
221
|
+
limit = Math.min(Math.max(1, Math.floor(limit)), MAX_SIMILAR_LIMIT);
|
|
207
222
|
// Add matching pattern names
|
|
208
223
|
for (const pattern of registry.patterns) {
|
|
209
224
|
if (pattern.name.toLowerCase().includes(query)) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Standalone Pattern Store Test
|
|
4
|
+
* Run this in any environment to verify the IPFS-based pattern store works
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx tsx standalone-test.ts
|
|
8
|
+
* # or
|
|
9
|
+
* npm run test:pattern-store
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=standalone-test.d.ts.map
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Standalone Pattern Store Test
|
|
4
|
+
* Run this in any environment to verify the IPFS-based pattern store works
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx tsx standalone-test.ts
|
|
8
|
+
* # or
|
|
9
|
+
* npm run test:pattern-store
|
|
10
|
+
*/
|
|
11
|
+
import { PatternStore, createDiscoveryService, searchPatterns, getFeaturedPatterns, getTrendingPatterns, getNewestPatterns, getCategoryStats, getTagCloud, getSearchSuggestions, } from '../index.js';
|
|
12
|
+
async function main() {
|
|
13
|
+
console.log('');
|
|
14
|
+
console.log('╔══════════════════════════════════════════════════════════════╗');
|
|
15
|
+
console.log('║ MONOMIND - STANDALONE PATTERN STORE TEST ║');
|
|
16
|
+
console.log('║ IPFS-Based Decentralized Pattern Marketplace ║');
|
|
17
|
+
console.log('╚══════════════════════════════════════════════════════════════╝');
|
|
18
|
+
console.log('');
|
|
19
|
+
let passed = 0;
|
|
20
|
+
let failed = 0;
|
|
21
|
+
// Test 1: Discovery Service Creation
|
|
22
|
+
console.log('▶ Test 1: Create Discovery Service');
|
|
23
|
+
try {
|
|
24
|
+
const discovery = createDiscoveryService();
|
|
25
|
+
const registries = discovery.listRegistries();
|
|
26
|
+
console.log(` ✅ Created service with ${registries.length} bootstrap registries`);
|
|
27
|
+
passed++;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
31
|
+
failed++;
|
|
32
|
+
}
|
|
33
|
+
// Test 2: Discover Registry
|
|
34
|
+
console.log('▶ Test 2: Discover Registry via IPNS');
|
|
35
|
+
let registry = null;
|
|
36
|
+
try {
|
|
37
|
+
const discovery = createDiscoveryService();
|
|
38
|
+
const result = await discovery.discoverRegistry();
|
|
39
|
+
if (result.success && result.registry) {
|
|
40
|
+
registry = result.registry;
|
|
41
|
+
console.log(` ✅ Discovered ${result.registry.patterns.length} patterns from ${result.source}`);
|
|
42
|
+
passed++;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
throw new Error(result.error || 'No registry');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
50
|
+
failed++;
|
|
51
|
+
}
|
|
52
|
+
if (!registry) {
|
|
53
|
+
console.log('\n❌ Cannot continue without registry\n');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// Test 3: Search Patterns
|
|
57
|
+
console.log('▶ Test 3: Search for "agent"');
|
|
58
|
+
try {
|
|
59
|
+
const results = searchPatterns(registry, { query: 'agent' });
|
|
60
|
+
console.log(` ✅ Found ${results.patterns.length} patterns matching "agent"`);
|
|
61
|
+
passed++;
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
65
|
+
failed++;
|
|
66
|
+
}
|
|
67
|
+
// Test 4: Get Featured Patterns
|
|
68
|
+
console.log('▶ Test 4: Get Featured Patterns');
|
|
69
|
+
try {
|
|
70
|
+
const featured = getFeaturedPatterns(registry);
|
|
71
|
+
console.log(` ✅ Found ${featured.length} featured patterns`);
|
|
72
|
+
if (featured.length > 0) {
|
|
73
|
+
console.log(` - ${featured[0].name} (${featured[0].id})`);
|
|
74
|
+
}
|
|
75
|
+
passed++;
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
79
|
+
failed++;
|
|
80
|
+
}
|
|
81
|
+
// Test 5: Get Trending Patterns
|
|
82
|
+
console.log('▶ Test 5: Get Trending Patterns');
|
|
83
|
+
try {
|
|
84
|
+
const trending = getTrendingPatterns(registry);
|
|
85
|
+
console.log(` ✅ Found ${trending.length} trending patterns`);
|
|
86
|
+
passed++;
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
90
|
+
failed++;
|
|
91
|
+
}
|
|
92
|
+
// Test 6: Get Newest Patterns
|
|
93
|
+
console.log('▶ Test 6: Get Newest Patterns');
|
|
94
|
+
try {
|
|
95
|
+
const newest = getNewestPatterns(registry);
|
|
96
|
+
console.log(` ✅ Found ${newest.length} newest patterns`);
|
|
97
|
+
passed++;
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
101
|
+
failed++;
|
|
102
|
+
}
|
|
103
|
+
// Test 7: Search with Filters
|
|
104
|
+
console.log('▶ Test 7: Search with Filters (verified only)');
|
|
105
|
+
try {
|
|
106
|
+
const results = searchPatterns(registry, { verified: true });
|
|
107
|
+
console.log(` ✅ Found ${results.patterns.length} verified patterns`);
|
|
108
|
+
passed++;
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
112
|
+
failed++;
|
|
113
|
+
}
|
|
114
|
+
// Test 8: Category Stats
|
|
115
|
+
console.log('▶ Test 8: Get Category Statistics');
|
|
116
|
+
try {
|
|
117
|
+
const stats = getCategoryStats(registry);
|
|
118
|
+
const count = Array.isArray(stats) ? stats.length : Object.keys(stats).length;
|
|
119
|
+
console.log(` ✅ Found ${count} categories with stats`);
|
|
120
|
+
passed++;
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
124
|
+
failed++;
|
|
125
|
+
}
|
|
126
|
+
// Test 9: Tag Cloud
|
|
127
|
+
console.log('▶ Test 9: Get Tag Cloud');
|
|
128
|
+
try {
|
|
129
|
+
const tags = getTagCloud(registry);
|
|
130
|
+
console.log(` ✅ Found ${tags.size} unique tags`);
|
|
131
|
+
passed++;
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
135
|
+
failed++;
|
|
136
|
+
}
|
|
137
|
+
// Test 10: Search Suggestions
|
|
138
|
+
console.log('▶ Test 10: Get Search Suggestions');
|
|
139
|
+
try {
|
|
140
|
+
const suggestions = getSearchSuggestions(registry, 'pat');
|
|
141
|
+
console.log(` ✅ Got ${suggestions.length} suggestions for "pat"`);
|
|
142
|
+
passed++;
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
146
|
+
failed++;
|
|
147
|
+
}
|
|
148
|
+
// Test 11: PatternStore Class
|
|
149
|
+
console.log('▶ Test 11: PatternStore Class API');
|
|
150
|
+
try {
|
|
151
|
+
const store = new PatternStore();
|
|
152
|
+
await store.initialize();
|
|
153
|
+
const stats = store.getStats();
|
|
154
|
+
console.log(` ✅ PatternStore initialized:`);
|
|
155
|
+
console.log(` Total Patterns: ${stats.totalPatterns}`);
|
|
156
|
+
console.log(` Total Downloads: ${stats.totalDownloads.toLocaleString()}`);
|
|
157
|
+
console.log(` Categories: ${stats.categories}`);
|
|
158
|
+
passed++;
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
console.log(` ❌ Failed: ${e.message}`);
|
|
162
|
+
failed++;
|
|
163
|
+
}
|
|
164
|
+
// Summary
|
|
165
|
+
console.log('');
|
|
166
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
167
|
+
console.log(' TEST RESULTS ');
|
|
168
|
+
console.log('═══════════════════════════════════════════════════════════════');
|
|
169
|
+
console.log('');
|
|
170
|
+
console.log(` Total: ${passed + failed}`);
|
|
171
|
+
console.log(` ✅ Passed: ${passed}`);
|
|
172
|
+
console.log(` ❌ Failed: ${failed}`);
|
|
173
|
+
console.log('');
|
|
174
|
+
if (failed === 0) {
|
|
175
|
+
console.log(' 🎉 All tests passed! Pattern Store is working correctly.');
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(' Available CLI Commands:');
|
|
178
|
+
console.log(' npx @monoes/cli patterns list');
|
|
179
|
+
console.log(' npx @monoes/cli patterns list --featured');
|
|
180
|
+
console.log(' npx @monoes/cli patterns search -q "agent"');
|
|
181
|
+
console.log(' npx @monoes/cli patterns info -n <pattern-id>');
|
|
182
|
+
console.log('');
|
|
183
|
+
}
|
|
184
|
+
process.exit(failed > 0 ? 1 : 0);
|
|
185
|
+
}
|
|
186
|
+
main().catch(err => {
|
|
187
|
+
console.error('Fatal error:', err);
|
|
188
|
+
process.exit(1);
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=standalone-test.js.map
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Seraphine Genesis Model
|
|
3
|
+
* Quick validation of the transfer pipeline
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
// Simple test without complex imports
|
|
11
|
+
async function test() {
|
|
12
|
+
console.log('');
|
|
13
|
+
console.log('╔══════════════════════════════════════════════════════════╗');
|
|
14
|
+
console.log('║ SERAPHINE GENESIS TEST SUITE ║');
|
|
15
|
+
console.log('╚══════════════════════════════════════════════════════════╝');
|
|
16
|
+
console.log('');
|
|
17
|
+
let passed = 0;
|
|
18
|
+
let failed = 0;
|
|
19
|
+
// Test 1: Types file exists
|
|
20
|
+
const typesPath = path.join(__dirname, 'types.ts');
|
|
21
|
+
if (fs.existsSync(typesPath)) {
|
|
22
|
+
console.log('✅ Test 1: Types module exists');
|
|
23
|
+
passed++;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log('❌ Test 1: Types module missing');
|
|
27
|
+
failed++;
|
|
28
|
+
}
|
|
29
|
+
// Test 2: Seraphine model exists
|
|
30
|
+
const seraphPath = path.join(__dirname, 'models', 'seraphine.ts');
|
|
31
|
+
if (fs.existsSync(seraphPath)) {
|
|
32
|
+
console.log('✅ Test 2: Seraphine model exists');
|
|
33
|
+
passed++;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('❌ Test 2: Seraphine model missing');
|
|
37
|
+
failed++;
|
|
38
|
+
}
|
|
39
|
+
// Test 3: CFP serializer exists
|
|
40
|
+
const cfpPath = path.join(__dirname, 'serialization', 'cfp.ts');
|
|
41
|
+
if (fs.existsSync(cfpPath)) {
|
|
42
|
+
console.log('✅ Test 3: CFP serializer exists');
|
|
43
|
+
passed++;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('❌ Test 3: CFP serializer missing');
|
|
47
|
+
failed++;
|
|
48
|
+
}
|
|
49
|
+
// Test 4: Anonymization module exists
|
|
50
|
+
const anonPath = path.join(__dirname, 'anonymization', 'index.ts');
|
|
51
|
+
if (fs.existsSync(anonPath)) {
|
|
52
|
+
console.log('✅ Test 4: Anonymization module exists');
|
|
53
|
+
passed++;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log('❌ Test 4: Anonymization module missing');
|
|
57
|
+
failed++;
|
|
58
|
+
}
|
|
59
|
+
// Test 5: IPFS upload module exists
|
|
60
|
+
const ipfsPath = path.join(__dirname, 'ipfs', 'upload.ts');
|
|
61
|
+
if (fs.existsSync(ipfsPath)) {
|
|
62
|
+
console.log('✅ Test 5: IPFS upload module exists');
|
|
63
|
+
passed++;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log('❌ Test 5: IPFS upload module missing');
|
|
67
|
+
failed++;
|
|
68
|
+
}
|
|
69
|
+
// Test 6: Export module exists
|
|
70
|
+
const exportPath = path.join(__dirname, 'export.ts');
|
|
71
|
+
if (fs.existsSync(exportPath)) {
|
|
72
|
+
console.log('✅ Test 6: Export module exists');
|
|
73
|
+
passed++;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log('❌ Test 6: Export module missing');
|
|
77
|
+
failed++;
|
|
78
|
+
}
|
|
79
|
+
// Test 7: Index module exists
|
|
80
|
+
const indexPath = path.join(__dirname, 'index.ts');
|
|
81
|
+
if (fs.existsSync(indexPath)) {
|
|
82
|
+
console.log('✅ Test 7: Index module exists');
|
|
83
|
+
passed++;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log('❌ Test 7: Index module missing');
|
|
87
|
+
failed++;
|
|
88
|
+
}
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
91
|
+
console.log(` Results: ${passed} passed, ${failed} failed`);
|
|
92
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
93
|
+
console.log('');
|
|
94
|
+
if (failed === 0) {
|
|
95
|
+
console.log('🎉 All module tests passed!');
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log('Next steps:');
|
|
98
|
+
console.log(' 1. Compile TypeScript: cd packages/@monoes/cli && npm run build');
|
|
99
|
+
console.log(' 2. Run deployment: npx ts-node src/transfer/deploy-seraphine.ts --to-ipfs');
|
|
100
|
+
console.log('');
|
|
101
|
+
}
|
|
102
|
+
process.exit(failed > 0 ? 1 : 0);
|
|
103
|
+
}
|
|
104
|
+
test().catch(console.error);
|
|
105
|
+
//# sourceMappingURL=test-seraphine.js.map
|