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
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Version Store (Task 29)
|
|
3
|
+
*
|
|
4
|
+
* JSONL-based append-only storage for agent definition versions.
|
|
5
|
+
* Supports save, list, get, rollback, and diff operations.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash, randomUUID, randomBytes } from 'crypto';
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, statSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { computeUnifiedDiff } from './version-diff.js';
|
|
11
|
+
import { parseJsonl } from '../utils/parse-jsonl.js';
|
|
12
|
+
function toStored(r) {
|
|
13
|
+
return {
|
|
14
|
+
id: r.id,
|
|
15
|
+
slug: r.slug,
|
|
16
|
+
version: r.version,
|
|
17
|
+
changelog: r.changelog,
|
|
18
|
+
deprecated: r.deprecated,
|
|
19
|
+
deprecatedBy: r.deprecatedBy,
|
|
20
|
+
content: r.content,
|
|
21
|
+
contentHash: r.contentHash,
|
|
22
|
+
capturedAt: r.capturedAt instanceof Date
|
|
23
|
+
? r.capturedAt.toISOString()
|
|
24
|
+
: String(r.capturedAt),
|
|
25
|
+
capturedBy: r.capturedBy,
|
|
26
|
+
isCurrent: r.isCurrent,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function fromStored(s) {
|
|
30
|
+
return {
|
|
31
|
+
id: s.id,
|
|
32
|
+
slug: s.slug,
|
|
33
|
+
version: s.version,
|
|
34
|
+
changelog: s.changelog,
|
|
35
|
+
deprecated: s.deprecated,
|
|
36
|
+
deprecatedBy: s.deprecatedBy,
|
|
37
|
+
content: s.content,
|
|
38
|
+
contentHash: s.contentHash,
|
|
39
|
+
capturedAt: new Date(s.capturedAt),
|
|
40
|
+
capturedBy: s.capturedBy,
|
|
41
|
+
isCurrent: s.isCurrent,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* JSONL-based agent version store.
|
|
46
|
+
*
|
|
47
|
+
* Each slug's versions are stored in `<dirPath>/versions.jsonl`, one JSON
|
|
48
|
+
* object per line. Rollback rewrites the file to update `isCurrent` flags.
|
|
49
|
+
*/
|
|
50
|
+
export class AgentVersionStore {
|
|
51
|
+
dirPath;
|
|
52
|
+
filePath;
|
|
53
|
+
constructor(dirPath) {
|
|
54
|
+
this.dirPath = dirPath;
|
|
55
|
+
if (!existsSync(dirPath)) {
|
|
56
|
+
mkdirSync(dirPath, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
this.filePath = join(dirPath, 'versions.jsonl');
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Persistence helpers
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
readAll() {
|
|
64
|
+
if (!existsSync(this.filePath)) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const stat = statSync(this.filePath);
|
|
68
|
+
if (stat.size > 10 * 1024 * 1024) {
|
|
69
|
+
throw new Error('Version store exceeds size limit; run compaction');
|
|
70
|
+
}
|
|
71
|
+
const raw = readFileSync(this.filePath, 'utf-8');
|
|
72
|
+
// Drop any record whose stored contentHash does not match the SHA-256 of
|
|
73
|
+
// its content. saveVersion advertises tamper-evidence by computing the
|
|
74
|
+
// hash; without this verification step, an attacker who can write the
|
|
75
|
+
// JSONL file can swap `content` with a poisoned agent prompt while
|
|
76
|
+
// leaving `contentHash` unchanged, and the next getCurrent() returns
|
|
77
|
+
// the tampered prompt verbatim into the LLM context.
|
|
78
|
+
const records = parseJsonl(raw);
|
|
79
|
+
const verified = [];
|
|
80
|
+
for (const r of records) {
|
|
81
|
+
if (typeof r?.content !== 'string' ||
|
|
82
|
+
typeof r?.contentHash !== 'string' ||
|
|
83
|
+
typeof r?.id !== 'string' ||
|
|
84
|
+
typeof r?.slug !== 'string' ||
|
|
85
|
+
typeof r?.version !== 'string' ||
|
|
86
|
+
typeof r?.changelog !== 'string' ||
|
|
87
|
+
typeof r?.capturedBy !== 'string' ||
|
|
88
|
+
typeof r?.capturedAt !== 'string')
|
|
89
|
+
continue;
|
|
90
|
+
const actual = createHash('sha256').update(r.content).digest('hex');
|
|
91
|
+
if (actual !== r.contentHash)
|
|
92
|
+
continue; // silently drop tampered record
|
|
93
|
+
verified.push(r);
|
|
94
|
+
}
|
|
95
|
+
return verified.map(fromStored);
|
|
96
|
+
}
|
|
97
|
+
writeAll(records) {
|
|
98
|
+
const lines = records.map((r) => JSON.stringify(toStored(r)));
|
|
99
|
+
const tmp = `${this.filePath}.${process.pid}.${randomBytes(8).toString('hex')}.tmp`;
|
|
100
|
+
writeFileSync(tmp, lines.join('\n') + '\n', 'utf-8');
|
|
101
|
+
renameSync(tmp, this.filePath);
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Public API
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
/**
|
|
107
|
+
* Save a new version for the given agent slug.
|
|
108
|
+
*
|
|
109
|
+
* Computes a SHA-256 hash of the content, marks all previous versions for
|
|
110
|
+
* the same slug as non-current, and appends the new record.
|
|
111
|
+
*/
|
|
112
|
+
saveVersion(slug, content, version, changelog, opts = {}) {
|
|
113
|
+
const MAX_CONTENT_BYTES = 512 * 1024;
|
|
114
|
+
if (Buffer.byteLength(content, 'utf-8') > MAX_CONTENT_BYTES) {
|
|
115
|
+
throw new Error(`content exceeds maximum allowed size (${MAX_CONTENT_BYTES} bytes)`);
|
|
116
|
+
}
|
|
117
|
+
const contentHash = createHash('sha256').update(content).digest('hex');
|
|
118
|
+
// SINGLE-WRITER CONTRACT: version-store is written only by the daemon process.
|
|
119
|
+
// Concurrent saveVersion() calls from multiple processes would race on readAll/writeAll.
|
|
120
|
+
// If multi-writer access is needed in future, introduce an advisory lock here.
|
|
121
|
+
const existing = this.readAll();
|
|
122
|
+
for (const rec of existing) {
|
|
123
|
+
if (rec.slug === slug && rec.isCurrent) {
|
|
124
|
+
rec.isCurrent = false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const record = {
|
|
128
|
+
id: randomUUID(),
|
|
129
|
+
slug,
|
|
130
|
+
version,
|
|
131
|
+
changelog,
|
|
132
|
+
deprecated: opts.deprecated ?? false,
|
|
133
|
+
deprecatedBy: opts.deprecatedBy,
|
|
134
|
+
content,
|
|
135
|
+
contentHash,
|
|
136
|
+
capturedAt: new Date(),
|
|
137
|
+
capturedBy: opts.capturedBy ?? 'system',
|
|
138
|
+
isCurrent: true,
|
|
139
|
+
};
|
|
140
|
+
existing.push(record);
|
|
141
|
+
this.writeAll(existing);
|
|
142
|
+
return record;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* List all versions for a slug, sorted by capturedAt DESC (newest first).
|
|
146
|
+
* Uses insertion order (line index) as a stable tiebreaker.
|
|
147
|
+
*/
|
|
148
|
+
listVersions(slug) {
|
|
149
|
+
const all = this.readAll();
|
|
150
|
+
const indexed = all.map((r, i) => ({ r, i }));
|
|
151
|
+
return indexed
|
|
152
|
+
.filter(({ r }) => r.slug === slug)
|
|
153
|
+
.sort((a, b) => {
|
|
154
|
+
const timeDiff = new Date(b.r.capturedAt).getTime() -
|
|
155
|
+
new Date(a.r.capturedAt).getTime();
|
|
156
|
+
return timeDiff !== 0 ? timeDiff : b.i - a.i;
|
|
157
|
+
})
|
|
158
|
+
.map(({ r }) => r);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get the current active version for a slug, or null.
|
|
162
|
+
*/
|
|
163
|
+
getCurrent(slug) {
|
|
164
|
+
const all = this.readAll();
|
|
165
|
+
const indexed = all.map((r, i) => ({ r, i }));
|
|
166
|
+
const matching = indexed.filter(({ r }) => r.slug === slug && r.isCurrent);
|
|
167
|
+
if (matching.length === 0)
|
|
168
|
+
return null;
|
|
169
|
+
// Return the most recent current record (insertion order as tiebreaker)
|
|
170
|
+
return matching.sort((a, b) => {
|
|
171
|
+
const timeDiff = new Date(b.r.capturedAt).getTime() -
|
|
172
|
+
new Date(a.r.capturedAt).getTime();
|
|
173
|
+
return timeDiff !== 0 ? timeDiff : b.i - a.i;
|
|
174
|
+
})[0].r;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get a specific version by slug and semver string, or null.
|
|
178
|
+
*/
|
|
179
|
+
getVersion(slug, version) {
|
|
180
|
+
return (this.readAll().find((r) => r.slug === slug && r.version === version) ?? null);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Roll back to a specific version.
|
|
184
|
+
*
|
|
185
|
+
* Marks the target version as current and all others for that slug as
|
|
186
|
+
* non-current. Rewrites the JSONL file.
|
|
187
|
+
*
|
|
188
|
+
* @throws Error if the target version does not exist.
|
|
189
|
+
*/
|
|
190
|
+
rollback(slug, toVersion) {
|
|
191
|
+
const all = this.readAll();
|
|
192
|
+
let target;
|
|
193
|
+
for (const rec of all) {
|
|
194
|
+
if (rec.slug === slug) {
|
|
195
|
+
if (rec.version === toVersion) {
|
|
196
|
+
rec.isCurrent = true;
|
|
197
|
+
target = rec;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
rec.isCurrent = false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (!target) {
|
|
205
|
+
throw new Error(`Version "${toVersion}" not found for agent "${slug}"`);
|
|
206
|
+
}
|
|
207
|
+
this.writeAll(all);
|
|
208
|
+
return target;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Compute a line-level diff between two versions of the same agent.
|
|
212
|
+
*
|
|
213
|
+
* @throws Error if either version does not exist.
|
|
214
|
+
*/
|
|
215
|
+
diff(slug, fromVersion, toVersion) {
|
|
216
|
+
const from = this.getVersion(slug, fromVersion);
|
|
217
|
+
if (!from) {
|
|
218
|
+
throw new Error(`Version "${fromVersion}" not found for agent "${slug}"`);
|
|
219
|
+
}
|
|
220
|
+
const to = this.getVersion(slug, toVersion);
|
|
221
|
+
if (!to) {
|
|
222
|
+
throw new Error(`Version "${toVersion}" not found for agent "${slug}"`);
|
|
223
|
+
}
|
|
224
|
+
const { additions, deletions, hunks } = computeUnifiedDiff(from.content, to.content);
|
|
225
|
+
return {
|
|
226
|
+
slug,
|
|
227
|
+
fromVersion,
|
|
228
|
+
toVersion,
|
|
229
|
+
additions,
|
|
230
|
+
deletions,
|
|
231
|
+
hunks,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=version-store.js.map
|
|
@@ -19,6 +19,8 @@ export const LOG_FILE = `${STATE_DIR}/autopilot-log.json`;
|
|
|
19
19
|
const MAX_HISTORY_ENTRIES = 50;
|
|
20
20
|
/** Maximum entries kept in the event log */
|
|
21
21
|
const MAX_LOG_ENTRIES = 1000;
|
|
22
|
+
/** Maximum bytes before refusing to load a state/log JSON file (10 MB) */
|
|
23
|
+
const MAX_STATE_FILE_BYTES = 10 * 1024 * 1024;
|
|
22
24
|
/** Allowlist for valid task sources */
|
|
23
25
|
export const VALID_TASK_SOURCES = new Set(['team-tasks', 'swarm-tasks', 'file-checklist']);
|
|
24
26
|
/** Terminal task statuses */
|
|
@@ -91,7 +93,7 @@ export function loadState() {
|
|
|
91
93
|
const filePath = path.resolve(STATE_FILE);
|
|
92
94
|
const defaults = getDefaultState();
|
|
93
95
|
try {
|
|
94
|
-
if (fs.existsSync(filePath)) {
|
|
96
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).size <= MAX_STATE_FILE_BYTES) {
|
|
95
97
|
const raw = safeJsonParse(fs.readFileSync(filePath, 'utf-8'));
|
|
96
98
|
const merged = { ...defaults, ...raw };
|
|
97
99
|
// Re-validate fields that could be tampered with
|
|
@@ -190,7 +192,7 @@ function compactLog(filePath) {
|
|
|
190
192
|
export function loadLog() {
|
|
191
193
|
const filePath = path.resolve(LOG_FILE);
|
|
192
194
|
try {
|
|
193
|
-
if (fs.existsSync(filePath)) {
|
|
195
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).size <= MAX_STATE_FILE_BYTES) {
|
|
194
196
|
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
195
197
|
// Backward compatible: support both old JSON-array form and the new
|
|
196
198
|
// append-only NDJSON form. Prefer NDJSON if the file looks line-based.
|
|
@@ -236,7 +238,10 @@ export function discoverTasks(sources) {
|
|
|
236
238
|
const files = fs.readdirSync(teamDir).filter((f) => f.endsWith('.json'));
|
|
237
239
|
for (const file of files) {
|
|
238
240
|
try {
|
|
239
|
-
const
|
|
241
|
+
const taskFilePath = path.join(teamDir, file);
|
|
242
|
+
if (fs.statSync(taskFilePath).size > MAX_STATE_FILE_BYTES)
|
|
243
|
+
continue;
|
|
244
|
+
const data = safeJsonParse(fs.readFileSync(taskFilePath, 'utf-8'));
|
|
240
245
|
tasks.push({
|
|
241
246
|
id: String(data.id || file.replace('.json', '')),
|
|
242
247
|
subject: String(data.subject || data.title || file),
|
|
@@ -254,7 +259,7 @@ export function discoverTasks(sources) {
|
|
|
254
259
|
if (source === 'swarm-tasks') {
|
|
255
260
|
const swarmFile = path.resolve('.monomind/swarm-tasks.json');
|
|
256
261
|
try {
|
|
257
|
-
if (fs.existsSync(swarmFile)) {
|
|
262
|
+
if (fs.existsSync(swarmFile) && fs.statSync(swarmFile).size <= MAX_STATE_FILE_BYTES) {
|
|
258
263
|
const data = safeJsonParse(fs.readFileSync(swarmFile, 'utf-8'));
|
|
259
264
|
const swarmTasks = Array.isArray(data) ? data : (data.tasks || []);
|
|
260
265
|
for (const t of swarmTasks) {
|
|
@@ -275,7 +280,7 @@ export function discoverTasks(sources) {
|
|
|
275
280
|
if (source === 'file-checklist') {
|
|
276
281
|
const checklistFile = path.resolve('.monomind/data/checklist.json');
|
|
277
282
|
try {
|
|
278
|
-
if (fs.existsSync(checklistFile)) {
|
|
283
|
+
if (fs.existsSync(checklistFile) && fs.statSync(checklistFile).size <= MAX_STATE_FILE_BYTES) {
|
|
279
284
|
const data = safeJsonParse(fs.readFileSync(checklistFile, 'utf-8'));
|
|
280
285
|
const items = Array.isArray(data) ? data : (data.items || []);
|
|
281
286
|
for (const item of items) {
|
|
@@ -23,9 +23,22 @@ export class BenchmarkRunner {
|
|
|
23
23
|
if (!fs.existsSync(resolved)) {
|
|
24
24
|
return benchmarks;
|
|
25
25
|
}
|
|
26
|
+
const MAX_BENCH_FILE_SIZE = 1 * 1024 * 1024; // 1 MB per benchmark file
|
|
26
27
|
const files = fs.readdirSync(resolved).filter((f) => f.endsWith('.json'));
|
|
27
28
|
for (const file of files) {
|
|
28
29
|
const filePath = path.join(resolved, file);
|
|
30
|
+
// Guard against OOM: reject symlinks and oversized files before reading
|
|
31
|
+
let stat;
|
|
32
|
+
try {
|
|
33
|
+
stat = fs.lstatSync(filePath);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (stat.isSymbolicLink())
|
|
39
|
+
continue;
|
|
40
|
+
if (stat.size > MAX_BENCH_FILE_SIZE)
|
|
41
|
+
continue;
|
|
29
42
|
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
30
43
|
try {
|
|
31
44
|
const parsed = JSON.parse(raw);
|
|
@@ -6,15 +6,17 @@
|
|
|
6
6
|
* Checks whether the output contains the expected substring.
|
|
7
7
|
*/
|
|
8
8
|
export function containsExpected(output, config) {
|
|
9
|
-
|
|
9
|
+
// Cap expected to prevent huge strings from inflating returned objects
|
|
10
|
+
const expected = typeof config.expected === 'string' ? config.expected.slice(0, 200) : '';
|
|
11
|
+
const found = output.includes(expected);
|
|
10
12
|
return {
|
|
11
13
|
type: 'contains_expected',
|
|
12
14
|
passed: found,
|
|
13
|
-
actual: found ?
|
|
14
|
-
expected
|
|
15
|
+
actual: found ? expected : null,
|
|
16
|
+
expected,
|
|
15
17
|
message: found
|
|
16
|
-
? `Output contains expected string "${
|
|
17
|
-
: `Output missing expected string "${
|
|
18
|
+
? `Output contains expected string "${expected}"`
|
|
19
|
+
: `Output missing expected string "${expected}"`,
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
@@ -38,16 +40,20 @@ export function lengthRange(output, config) {
|
|
|
38
40
|
*/
|
|
39
41
|
export function noHallucination(output, config) {
|
|
40
42
|
const lowerOutput = output.toLowerCase();
|
|
41
|
-
|
|
43
|
+
// Cap forbidden array to 200 entries to prevent unbounded O(n) scan
|
|
44
|
+
const forbidden = Array.isArray(config.forbidden) ? config.forbidden.slice(0, 200) : [];
|
|
45
|
+
const found = forbidden.filter((word) => typeof word === 'string' && lowerOutput.includes(word.toLowerCase()));
|
|
42
46
|
const passed = found.length === 0;
|
|
47
|
+
// Truncate reflected words to avoid inflated messages
|
|
48
|
+
const truncatedFound = found.map((w) => w.slice(0, 50));
|
|
43
49
|
return {
|
|
44
50
|
type: 'no_hallucination',
|
|
45
51
|
passed,
|
|
46
|
-
actual: found.length > 0 ?
|
|
52
|
+
actual: found.length > 0 ? truncatedFound : null,
|
|
47
53
|
expected: null,
|
|
48
54
|
message: passed
|
|
49
55
|
? 'No forbidden words found in output'
|
|
50
|
-
: `Forbidden words found: ${
|
|
56
|
+
: `Forbidden words found: ${truncatedFound.join(', ')}`,
|
|
51
57
|
};
|
|
52
58
|
}
|
|
53
59
|
/**
|
|
@@ -56,8 +62,13 @@ export function noHallucination(output, config) {
|
|
|
56
62
|
export function jsonValid(output) {
|
|
57
63
|
let passed = false;
|
|
58
64
|
let parsedType = null;
|
|
65
|
+
// Cap output before JSON.parse to prevent OOM on huge strings
|
|
66
|
+
const MAX_JSON_BYTES = 1 * 1024 * 1024; // 1 MB
|
|
67
|
+
const bounded = typeof output === 'string' && output.length > MAX_JSON_BYTES
|
|
68
|
+
? output.slice(0, MAX_JSON_BYTES)
|
|
69
|
+
: output;
|
|
59
70
|
try {
|
|
60
|
-
const parsed = JSON.parse(
|
|
71
|
+
const parsed = JSON.parse(bounded);
|
|
61
72
|
passed = true;
|
|
62
73
|
parsedType = typeof parsed;
|
|
63
74
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface BenchmarkResult {
|
|
2
|
+
name: string;
|
|
3
|
+
iterations: number;
|
|
4
|
+
meanMs: number;
|
|
5
|
+
medianMs: number;
|
|
6
|
+
p95Ms: number;
|
|
7
|
+
p99Ms: number;
|
|
8
|
+
minMs: number;
|
|
9
|
+
maxMs: number;
|
|
10
|
+
stdDev: number;
|
|
11
|
+
opsPerSecond: number;
|
|
12
|
+
targetMet: boolean;
|
|
13
|
+
targetMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface BenchmarkSuite {
|
|
16
|
+
name: string;
|
|
17
|
+
results: BenchmarkResult[];
|
|
18
|
+
totalDurationMs: number;
|
|
19
|
+
timestamp: string;
|
|
20
|
+
environment: {
|
|
21
|
+
nodeVersion: string;
|
|
22
|
+
platform: string;
|
|
23
|
+
arch: string;
|
|
24
|
+
cpuCount: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface BenchmarkConfig {
|
|
28
|
+
iterations: number;
|
|
29
|
+
warmupIterations: number;
|
|
30
|
+
targetMs?: number;
|
|
31
|
+
verbose?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function formatBenchmarkResult(result: BenchmarkResult): string;
|
|
34
|
+
export declare function runBenchmark(name: string, fn: () => Promise<void> | void, config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
35
|
+
export declare function benchmarkSONAAdaptation(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
36
|
+
export declare function benchmarkPatternLearning(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
37
|
+
export declare function benchmarkEWCConsolidation(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
38
|
+
export declare function benchmarkMemoryRetrieval(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
39
|
+
export declare function benchmarkEmbeddingGeneration(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
40
|
+
export declare function benchmarkMoERouting(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
41
|
+
export declare function benchmarkBatchCosine(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
42
|
+
export declare function benchmarkPretrainPipeline(config: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
43
|
+
export declare function runPretrainBenchmarkSuite(config?: Partial<BenchmarkConfig>): Promise<BenchmarkSuite>;
|
|
44
|
+
export default runPretrainBenchmarkSuite;
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|