@monoes/monomindcli 1.11.14 → 1.13.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/master.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 +24 -10
- package/.claude/helpers/handlers/session-handler.cjs +11 -4
- package/.claude/helpers/handlers/session-restore-handler.cjs +35 -19
- package/.claude/helpers/handlers/task-handler.cjs +13 -5
- package/.claude/helpers/hook-handler.cjs +40 -0
- package/.claude/helpers/intelligence.cjs +130 -53
- package/.claude/helpers/loop-tracker.cjs +15 -3
- package/.claude/helpers/memory-palace.cjs +461 -0
- package/.claude/helpers/memory.cjs +138 -14
- package/.claude/helpers/metrics-db.mjs +87 -0
- package/.claude/helpers/router.cjs +300 -42
- package/.claude/helpers/session.cjs +89 -30
- package/.claude/helpers/statusline.cjs +148 -4
- package/.claude/helpers/toggle-statusline.cjs +73 -0
- package/.claude/helpers/token-tracker.cjs +934 -0
- package/.claude/helpers/utils/micro-agents.cjs +20 -4
- package/.claude/helpers/utils/monograph.cjs +39 -4
- package/.claude/helpers/utils/telemetry.cjs +3 -3
- package/.claude/skills/mastermind/_protocol.md +25 -15
- package/.claude/skills/mastermind/architect.md +3 -3
- package/.claude/skills/mastermind/autodev.md +4 -2
- package/.claude/skills/mastermind/idea.md +10 -0
- package/.claude/skills/mastermind/ops.md +3 -3
- package/.claude/skills/mastermind/runorg.md +153 -86
- package/dist/src/agents/registry-builder.d.ts.map +1 -1
- package/dist/src/agents/registry-builder.js +2 -0
- package/dist/src/agents/registry-builder.js.map +1 -1
- package/dist/src/autopilot-state.d.ts.map +1 -1
- package/dist/src/autopilot-state.js +10 -5
- package/dist/src/autopilot-state.js.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.d.ts.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.js +13 -0
- package/dist/src/benchmarks/benchmark-runner.js.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.d.ts.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.js +20 -9
- package/dist/src/benchmarks/metric-evaluators.js.map +1 -1
- package/dist/src/browser/actions.d.ts.map +1 -1
- package/dist/src/browser/actions.js +10 -3
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/browser.d.ts.map +1 -1
- package/dist/src/browser/browser.js +12 -2
- package/dist/src/browser/browser.js.map +1 -1
- package/dist/src/browser/cdp.d.ts.map +1 -1
- package/dist/src/browser/cdp.js +21 -3
- package/dist/src/browser/cdp.js.map +1 -1
- package/dist/src/browser/har.d.ts.map +1 -1
- package/dist/src/browser/har.js +27 -5
- package/dist/src/browser/har.js.map +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +11 -8
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +36 -21
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/autopilot.d.ts.map +1 -1
- package/dist/src/commands/autopilot.js +12 -4
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/benchmark.d.ts.map +1 -1
- package/dist/src/commands/benchmark.js +51 -8
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/browse.d.ts.map +1 -1
- package/dist/src/commands/browse.js +5 -2
- package/dist/src/commands/browse.js.map +1 -1
- package/dist/src/commands/claims.d.ts.map +1 -1
- package/dist/src/commands/claims.js +29 -11
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +25 -5
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +15 -7
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.d.ts.map +1 -1
- package/dist/src/commands/daemon.js +6 -0
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.d.ts.map +1 -1
- package/dist/src/commands/deployment.js +34 -19
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +133 -15
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/guidance.d.ts.map +1 -1
- package/dist/src/commands/guidance.js +15 -2
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +37 -14
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +42 -25
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +9 -4
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.d.ts.map +1 -1
- package/dist/src/commands/issues.js +29 -26
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +11 -5
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +10 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +5 -5
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +18 -5
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/monovector/backup.d.ts.map +1 -1
- package/dist/src/commands/monovector/backup.js +8 -2
- package/dist/src/commands/monovector/backup.js.map +1 -1
- package/dist/src/commands/monovector/benchmark.d.ts.map +1 -1
- package/dist/src/commands/monovector/benchmark.js +20 -7
- package/dist/src/commands/monovector/benchmark.js.map +1 -1
- package/dist/src/commands/monovector/import.d.ts.map +1 -1
- package/dist/src/commands/monovector/import.js +15 -0
- package/dist/src/commands/monovector/import.js.map +1 -1
- package/dist/src/commands/monovector/migrate.d.ts.map +1 -1
- package/dist/src/commands/monovector/migrate.js +4 -1
- package/dist/src/commands/monovector/migrate.js.map +1 -1
- package/dist/src/commands/monovector/optimize.d.ts.map +1 -1
- package/dist/src/commands/monovector/optimize.js +11 -0
- package/dist/src/commands/monovector/optimize.js.map +1 -1
- package/dist/src/commands/monovector/setup.d.ts.map +1 -1
- package/dist/src/commands/monovector/setup.js +11 -1
- package/dist/src/commands/monovector/setup.js.map +1 -1
- package/dist/src/commands/neural.js +1 -1
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.d.ts.map +1 -1
- package/dist/src/commands/performance.js +20 -7
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/platforms.d.ts.map +1 -1
- package/dist/src/commands/platforms.js +90 -8
- package/dist/src/commands/platforms.js.map +1 -1
- package/dist/src/commands/plugins.d.ts.map +1 -1
- package/dist/src/commands/plugins.js +12 -5
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.d.ts.map +1 -1
- package/dist/src/commands/process.js +33 -10
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.d.ts.map +1 -1
- package/dist/src/commands/progress.js +5 -3
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +5 -5
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/replay.d.ts.map +1 -1
- package/dist/src/commands/replay.js +8 -2
- package/dist/src/commands/replay.js.map +1 -1
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +27 -7
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +4 -0
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.d.ts.map +1 -1
- package/dist/src/commands/session.js +12 -1
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +11 -4
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +7 -4
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +27 -13
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.d.ts.map +1 -1
- package/dist/src/commands/task.js +26 -11
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/tokens.d.ts.map +1 -1
- package/dist/src/commands/tokens.js +7 -2
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/transfer-store.d.ts.map +1 -1
- package/dist/src/commands/transfer-store.js +36 -22
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +15 -3
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.d.ts.map +1 -1
- package/dist/src/commands/workflow.js +39 -6
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js +18 -7
- package/dist/src/consensus/audit-writer.js.map +1 -1
- package/dist/src/consensus/vote-signer.d.ts.map +1 -1
- package/dist/src/consensus/vote-signer.js +25 -8
- package/dist/src/consensus/vote-signer.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +14 -11
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/shared-instructions-generator.d.ts.map +1 -1
- package/dist/src/init/shared-instructions-generator.js +20 -4
- package/dist/src/init/shared-instructions-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +36 -15
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/mcp-tools/a2a-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/a2a-tools.js +98 -13
- package/dist/src/mcp-tools/a2a-tools.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +16 -3
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +80 -17
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +84 -22
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +35 -7
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +82 -17
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +37 -4
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +49 -7
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +45 -18
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +75 -25
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.js +32 -10
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +91 -20
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +188 -29
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +25 -7
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.js +11 -2
- package/dist/src/mcp-tools/monograph-compat.js.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +476 -62
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +44 -9
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +45 -10
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +7 -4
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/request-tracker.d.ts.map +1 -1
- package/dist/src/mcp-tools/request-tracker.js +15 -1
- package/dist/src/mcp-tools/request-tracker.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +61 -9
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +45 -14
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +15 -3
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +14 -7
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +52 -10
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +40 -6
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +37 -4
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +29 -6
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
- package/dist/src/memory/ewc-consolidation.js +26 -10
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +80 -19
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +21 -2
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +67 -3
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +14 -4
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/monovector/command-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/command-outcomes.js +43 -7
- package/dist/src/monovector/command-outcomes.js.map +1 -1
- package/dist/src/monovector/coverage-router.d.ts.map +1 -1
- package/dist/src/monovector/coverage-router.js +8 -4
- package/dist/src/monovector/coverage-router.js.map +1 -1
- package/dist/src/monovector/coverage-tools.d.ts.map +1 -1
- package/dist/src/monovector/coverage-tools.js +6 -3
- package/dist/src/monovector/coverage-tools.js.map +1 -1
- package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
- package/dist/src/monovector/diff-classifier.js +13 -0
- package/dist/src/monovector/diff-classifier.js.map +1 -1
- package/dist/src/monovector/route-outcomes.d.ts +2 -1
- package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/route-outcomes.js +46 -4
- package/dist/src/monovector/route-outcomes.js.map +1 -1
- package/dist/src/plugins/manager.d.ts.map +1 -1
- package/dist/src/plugins/manager.js +8 -3
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +46 -2
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts.map +1 -1
- package/dist/src/plugins/store/search.js +5 -4
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts.map +1 -1
- package/dist/src/production/circuit-breaker.js +17 -3
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts.map +1 -1
- package/dist/src/production/error-handler.js +3 -0
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts.map +1 -1
- package/dist/src/production/monitoring.js +20 -3
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts.map +1 -1
- package/dist/src/production/rate-limiter.js +13 -4
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts.map +1 -1
- package/dist/src/production/retry.js +17 -9
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/routing/embed-worker.js +6 -2
- package/dist/src/routing/embed-worker.js.map +1 -1
- package/dist/src/routing/embedder.d.ts.map +1 -1
- package/dist/src/routing/embedder.js +0 -0
- package/dist/src/routing/embedder.js.map +1 -1
- package/dist/src/routing/llm-caller.d.ts.map +1 -1
- package/dist/src/routing/llm-caller.js +13 -2
- package/dist/src/routing/llm-caller.js.map +1 -1
- package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
- package/dist/src/routing/route-layer-factory.js +18 -3
- package/dist/src/routing/route-layer-factory.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +1 -0
- package/dist/src/services/claim-service.d.ts.map +1 -1
- package/dist/src/services/claim-service.js +8 -0
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/config-file-manager.d.ts.map +1 -1
- package/dist/src/services/config-file-manager.js +14 -2
- package/dist/src/services/config-file-manager.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -1
- package/dist/src/services/headless-worker-executor.js +18 -2
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts.map +1 -1
- package/dist/src/services/worker-daemon.js +348 -17
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +0 -3
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
- package/dist/src/transfer/anonymization/index.js +16 -1
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/export.d.ts.map +1 -1
- package/dist/src/transfer/export.js +8 -0
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -1
- package/dist/src/transfer/ipfs/upload.js +33 -3
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -1
- package/dist/src/transfer/serialization/cfp.js +8 -2
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -1
- package/dist/src/transfer/storage/gcs.js +37 -3
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts.map +1 -1
- package/dist/src/transfer/store/discovery.js +45 -3
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts.map +1 -1
- package/dist/src/transfer/store/download.js +5 -0
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts.map +1 -1
- package/dist/src/transfer/store/publish.js +13 -1
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.d.ts +8 -0
- package/dist/src/transfer/store/registry.d.ts.map +1 -1
- package/dist/src/transfer/store/registry.js +30 -5
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts.map +1 -1
- package/dist/src/transfer/store/search.js +20 -5
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/ui/collector.mjs +39 -5
- package/dist/src/ui/dashboard.html +1603 -1284
- package/dist/src/ui/orgs.html +722 -12
- package/dist/src/ui/server.mjs +717 -136
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +59 -7
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts.map +1 -1
- package/dist/src/update/executor.js +50 -3
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +18 -1
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +6 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -1
- package/dist/src/update/rate-limiter.js +79 -7
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts.map +1 -1
- package/dist/src/update/validator.js +52 -1
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -3
- package/dist/src/ui/data/mastermind-events.jsonl +0 -59
|
@@ -88,7 +88,8 @@ module.exports = {
|
|
|
88
88
|
var neuralEnabled = true;
|
|
89
89
|
try {
|
|
90
90
|
var settingsPath = path.join(CWD, '.claude', 'settings.json');
|
|
91
|
-
|
|
91
|
+
var MAX_SETTINGS = 256 * 1024; // 256 KiB
|
|
92
|
+
if (fs.existsSync(settingsPath) && (function() { try { return fs.statSync(settingsPath).size <= MAX_SETTINGS; } catch(_) { return false; } }())) {
|
|
92
93
|
var settingsData = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
93
94
|
if (settingsData.monomind && settingsData.monomind.neural && settingsData.monomind.neural.enabled === false) {
|
|
94
95
|
neuralEnabled = false;
|
|
@@ -215,7 +216,8 @@ module.exports = {
|
|
|
215
216
|
fs.writeFileSync(updateCheckFile, JSON.stringify({ timestamp: new Date().toISOString() }), 'utf-8');
|
|
216
217
|
try {
|
|
217
218
|
var localPkg = path.join(CWD, 'packages/@monomind/cli/package.json');
|
|
218
|
-
|
|
219
|
+
var MAX_PKG = 64 * 1024; // 64 KiB
|
|
220
|
+
if (fs.existsSync(localPkg) && (function() { try { return fs.statSync(localPkg).size <= MAX_PKG; } catch(_) { return false; } }())) {
|
|
219
221
|
var localVer = JSON.parse(fs.readFileSync(localPkg, 'utf-8')).version;
|
|
220
222
|
if (localVer) {
|
|
221
223
|
var spawnFn = require('child_process').spawn;
|
|
@@ -225,9 +227,9 @@ module.exports = {
|
|
|
225
227
|
});
|
|
226
228
|
child.on('error', function() {});
|
|
227
229
|
var out = '';
|
|
228
|
-
child.stdout.on('data', function(d) { out += d; });
|
|
230
|
+
child.stdout.on('data', function(d) { if (out.length < 256) out += d; });
|
|
229
231
|
child.on('close', function() {
|
|
230
|
-
var current = out.trim();
|
|
232
|
+
var current = out.trim().slice(0, 64);
|
|
231
233
|
var pendingUpdatePath = path.join(CWD, '.monomind', 'pending-update.json');
|
|
232
234
|
if (current && current !== localVer) {
|
|
233
235
|
try {
|
|
@@ -248,7 +250,8 @@ module.exports = {
|
|
|
248
250
|
}
|
|
249
251
|
try {
|
|
250
252
|
var pendingUpdate = path.join(CWD, '.monomind', 'pending-update.json');
|
|
251
|
-
|
|
253
|
+
var MAX_UPD = 4096; // 4 KiB
|
|
254
|
+
if (fs.existsSync(pendingUpdate) && (function() { try { return fs.statSync(pendingUpdate).size <= MAX_UPD; } catch(_) { return false; } }())) {
|
|
252
255
|
var upd = JSON.parse(fs.readFileSync(pendingUpdate, 'utf-8'));
|
|
253
256
|
if (upd && upd.from && upd.to && upd.from !== upd.to) {
|
|
254
257
|
console.log('[UPDATE_AVAILABLE] @monomind/cli ' + upd.from + ' → ' + upd.to + ' (run: npx monomind update)');
|
|
@@ -263,16 +266,22 @@ module.exports = {
|
|
|
263
266
|
var daemonRunning = false;
|
|
264
267
|
if (fs.existsSync(daemonPid)) {
|
|
265
268
|
try {
|
|
266
|
-
var
|
|
267
|
-
|
|
268
|
-
|
|
269
|
+
var MAX_PID = 32; // 32 bytes — enough for any pid
|
|
270
|
+
if (fs.statSync(daemonPid).size <= MAX_PID) {
|
|
271
|
+
var pid = parseInt(fs.readFileSync(daemonPid, 'utf-8').trim(), 10);
|
|
272
|
+
if (Number.isInteger(pid) && pid > 0 && pid < 4194304) {
|
|
273
|
+
process.kill(pid, 0);
|
|
274
|
+
daemonRunning = true;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
269
277
|
} catch (e) { /* pid stale */ }
|
|
270
278
|
}
|
|
271
279
|
if (!daemonRunning) {
|
|
272
280
|
var daemonCfg = {};
|
|
273
281
|
try {
|
|
274
282
|
var cfgPath = path.join(CWD, 'monomind.config.json');
|
|
275
|
-
|
|
283
|
+
var MAX_CFG = 256 * 1024; // 256 KiB
|
|
284
|
+
if (fs.existsSync(cfgPath) && fs.statSync(cfgPath).size <= MAX_CFG) daemonCfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8')).daemon || {};
|
|
276
285
|
} catch (e) {}
|
|
277
286
|
if (daemonCfg.autoStart) {
|
|
278
287
|
var spawn = require('child_process').spawn;
|
|
@@ -282,8 +291,11 @@ module.exports = {
|
|
|
282
291
|
daemonChild.on('error', function() {});
|
|
283
292
|
daemonChild.unref();
|
|
284
293
|
console.log('[DAEMON_AUTOSTART] Background daemon started (pid ' + daemonChild.pid + ')');
|
|
285
|
-
}
|
|
286
|
-
|
|
294
|
+
}
|
|
295
|
+
// Daemon not running + no autoStart: emit only if this project has a config
|
|
296
|
+
// (i.e. daemon was intentionally set up). Avoids noisy output in daemon-less projects.
|
|
297
|
+
else if (fs.existsSync(path.join(CWD, 'monomind.config.json'))) {
|
|
298
|
+
console.log('[DAEMON_STOPPED] Run `npx monomind daemon start` to enable background workers');
|
|
287
299
|
}
|
|
288
300
|
}
|
|
289
301
|
} catch (e) { /* non-fatal */ }
|
|
@@ -309,7 +321,8 @@ module.exports = {
|
|
|
309
321
|
// Registry Surfacing (SR-001) — show agent count.
|
|
310
322
|
try {
|
|
311
323
|
var regPath = path.join(CWD, '.monomind', 'registry.json');
|
|
312
|
-
|
|
324
|
+
var MAX_REG = 512 * 1024; // 512 KiB
|
|
325
|
+
if (fs.existsSync(regPath) && (function() { try { return fs.statSync(regPath).size <= MAX_REG; } catch(_) { return false; } }())) {
|
|
313
326
|
var reg = JSON.parse(fs.readFileSync(regPath, 'utf-8'));
|
|
314
327
|
var agentCount = (reg.agents || []).length;
|
|
315
328
|
if (agentCount > 0) {
|
|
@@ -318,11 +331,13 @@ module.exports = {
|
|
|
318
331
|
}
|
|
319
332
|
} catch (e) { /* non-fatal */ }
|
|
320
333
|
|
|
321
|
-
// Monomind Control UI Status — only probe when a daemon
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
|
|
325
|
-
|
|
334
|
+
// Monomind Control UI Status — only probe when a daemon.pid file exists,
|
|
335
|
+
// meaning the daemon was intentionally started in this project. This avoids
|
|
336
|
+
// printing "[CONTROL_UI] offline" noise on every session in projects that
|
|
337
|
+
// never run the daemon. The broader "monomind.config.json" check is dropped
|
|
338
|
+
// because that file is present in the dev repo itself and in any initialized
|
|
339
|
+
// project, making the old condition nearly always true.
|
|
340
|
+
var _controlUiShouldProbe = fs.existsSync(path.join(CWD, '.monomind', 'daemon.pid'));
|
|
326
341
|
if (_controlUiShouldProbe) {
|
|
327
342
|
try {
|
|
328
343
|
var http = require('http');
|
|
@@ -334,7 +349,8 @@ module.exports = {
|
|
|
334
349
|
res.resume();
|
|
335
350
|
});
|
|
336
351
|
req.on('error', function() {
|
|
337
|
-
|
|
352
|
+
// Only warn when daemon was previously running (pid file exists but server is gone)
|
|
353
|
+
console.log('[CONTROL_UI] offline — restart with: npx monomind mcp start');
|
|
338
354
|
});
|
|
339
355
|
req.setTimeout(800, function() { req.destroy(); });
|
|
340
356
|
} catch (e) { /* non-fatal */ }
|
|
@@ -344,7 +360,7 @@ module.exports = {
|
|
|
344
360
|
try {
|
|
345
361
|
var dispatchDir = path.join(CWD, '.monomind', 'worker-dispatch');
|
|
346
362
|
if (fs.existsSync(dispatchDir)) {
|
|
347
|
-
var pendingFiles = fs.readdirSync(dispatchDir).filter(function(f) { return f.startsWith('pending-'); });
|
|
363
|
+
var pendingFiles = fs.readdirSync(dispatchDir).filter(function(f) { return f.startsWith('pending-'); }).slice(0, 500);
|
|
348
364
|
if (pendingFiles.length > 0) {
|
|
349
365
|
console.log('[WORKER_RESUME] ' + pendingFiles.length + ' worker dispatch(es) pending from prior session');
|
|
350
366
|
}
|
|
@@ -172,7 +172,7 @@ module.exports = {
|
|
|
172
172
|
const remaining = fs.readdirSync(regDir).filter(f => f.endsWith('.json')).length;
|
|
173
173
|
const _actPath = path.join(CWD, '.monomind', 'metrics', 'swarm-activity.json');
|
|
174
174
|
let _prevLastActive = 0;
|
|
175
|
-
try { _prevLastActive = (JSON.parse(fs.readFileSync(_actPath, 'utf-8'))?.swarm?.lastActive) || 0; } catch { /* ignore */ }
|
|
175
|
+
try { var _actSt = fs.statSync(_actPath); if (_actSt.size < 65536) { _prevLastActive = (JSON.parse(fs.readFileSync(_actPath, 'utf-8'))?.swarm?.lastActive) || 0; } } catch { /* ignore */ }
|
|
176
176
|
fs.writeFileSync(_actPath, JSON.stringify({
|
|
177
177
|
timestamp: new Date().toISOString(),
|
|
178
178
|
swarm: {
|
|
@@ -217,7 +217,8 @@ module.exports = {
|
|
|
217
217
|
try {
|
|
218
218
|
var haltFile = path.join(CWD, 'data', 'halt-signals.jsonl');
|
|
219
219
|
if (fs.existsSync(haltFile)) {
|
|
220
|
-
var
|
|
220
|
+
var haltSt = fs.statSync(haltFile);
|
|
221
|
+
var haltLines = haltSt.size < 1048576 ? fs.readFileSync(haltFile, 'utf-8').trim().split('\n').filter(Boolean) : [];
|
|
221
222
|
if (haltLines.length > 0) {
|
|
222
223
|
console.warn('[HALT_DETECTED] ' + haltLines.length + ' halt signal(s) present');
|
|
223
224
|
}
|
|
@@ -298,8 +299,11 @@ module.exports = {
|
|
|
298
299
|
var settingsPath = path.join(CWD, '.claude', 'settings.json');
|
|
299
300
|
var adrCfg = {};
|
|
300
301
|
if (fs.existsSync(settingsPath)) {
|
|
301
|
-
var
|
|
302
|
-
|
|
302
|
+
var settingsSt = fs.statSync(settingsPath);
|
|
303
|
+
if (settingsSt.size < 524288) {
|
|
304
|
+
var s = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
305
|
+
adrCfg = (s.monomind && s.monomind.adr) || {};
|
|
306
|
+
}
|
|
303
307
|
}
|
|
304
308
|
if (adrCfg.autoGenerate) {
|
|
305
309
|
var taskAgent = hookInput.agentSlug || hookInput.agent_slug || '';
|
|
@@ -307,7 +311,11 @@ module.exports = {
|
|
|
307
311
|
var isArchitectLevel = ['architect', 'system-architect', 'software-architect'].includes(taskAgent)
|
|
308
312
|
|| /\b(architecture|design decision|adr|trade-?off|migration strategy)\b/.test(taskDescAdr);
|
|
309
313
|
if (isArchitectLevel && taskDescAdr.length > 30) {
|
|
310
|
-
|
|
314
|
+
// Guard adrCfg.directory against path traversal outside CWD
|
|
315
|
+
var rawAdrDir = typeof adrCfg.directory === 'string' ? adrCfg.directory : 'docs/adrs';
|
|
316
|
+
var resolvedAdrDir = path.resolve(CWD, rawAdrDir);
|
|
317
|
+
if (!resolvedAdrDir.startsWith(CWD + path.sep) && resolvedAdrDir !== CWD) { throw new Error('adr.directory outside project'); }
|
|
318
|
+
var adrDir = resolvedAdrDir;
|
|
311
319
|
fs.mkdirSync(adrDir, { recursive: true });
|
|
312
320
|
var adrNum = (fs.readdirSync(adrDir).filter(function(f) { return f.endsWith('.md'); }).length + 1)
|
|
313
321
|
.toString().padStart(4, '0');
|
|
@@ -288,6 +288,46 @@ const handlers = {
|
|
|
288
288
|
var tool = hCtx.toolName || '';
|
|
289
289
|
if (tool === 'Grep') _recordGraphTelemetry('grep_call');
|
|
290
290
|
else if (tool === 'Glob') _recordGraphTelemetry('glob_call');
|
|
291
|
+
|
|
292
|
+
// Monograph symbol hint: when the Grep pattern looks like a plain symbol name
|
|
293
|
+
// (no regex metacharacters), look it up directly in the graph index and print
|
|
294
|
+
// the file:line so the LLM may skip or narrow the Grep.
|
|
295
|
+
// Session-level cache prevents repeated identical DB lookups across Grep bursts.
|
|
296
|
+
try {
|
|
297
|
+
var grepPattern = (typeof toolInput === 'object' && toolInput !== null)
|
|
298
|
+
? (toolInput.pattern || toolInput.query || '')
|
|
299
|
+
: '';
|
|
300
|
+
// Only attempt lookup for clean identifiers — skip regexes and paths
|
|
301
|
+
var isCleanSymbol = grepPattern.length >= 3 && grepPattern.length <= 80
|
|
302
|
+
&& /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(grepPattern);
|
|
303
|
+
if (isCleanSymbol) {
|
|
304
|
+
if (!hCtx._preSearchCache) hCtx._preSearchCache = {};
|
|
305
|
+
var cacheKey = 'presearch:' + grepPattern;
|
|
306
|
+
if (!(cacheKey in hCtx._preSearchCache)) {
|
|
307
|
+
var db = _openMonographDb();
|
|
308
|
+
var hint = null;
|
|
309
|
+
if (db) {
|
|
310
|
+
try {
|
|
311
|
+
var row = db.prepare(
|
|
312
|
+
'SELECT n.name, n.label, n.file_path, n.start_line FROM nodes n ' +
|
|
313
|
+
'WHERE n.name = ? AND n.label NOT IN (\'Concept\',\'Community\',\'Folder\') ' +
|
|
314
|
+
'AND n.file_path IS NOT NULL LIMIT 1'
|
|
315
|
+
).get(grepPattern);
|
|
316
|
+
if (row) {
|
|
317
|
+
hint = row.file_path + (row.start_line != null ? ':' + row.start_line : '');
|
|
318
|
+
}
|
|
319
|
+
} catch (e) { /* non-fatal */ }
|
|
320
|
+
}
|
|
321
|
+
hCtx._preSearchCache[cacheKey] = hint;
|
|
322
|
+
}
|
|
323
|
+
var cachedHint = hCtx._preSearchCache[cacheKey];
|
|
324
|
+
if (cachedHint) {
|
|
325
|
+
// Use the correct MCP tool name — monograph_context does not exist;
|
|
326
|
+
// the callable tool is mcp__monomind__monograph_query
|
|
327
|
+
console.log('[MONOGRAPH_HINT] ' + grepPattern + ' found at ' + cachedHint + ' — use mcp__monomind__monograph_query instead of Grep for better results');
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} catch (e) { /* non-fatal — telemetry always proceeds */ }
|
|
291
331
|
},
|
|
292
332
|
|
|
293
333
|
'post-graph-tool': () => {
|
|
@@ -1,87 +1,164 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
3
|
* Intelligence context module for hook-handler.cjs
|
|
4
|
-
* Provides context injection, trajectory logging,
|
|
4
|
+
* Provides context injection, trajectory logging, feedback recording,
|
|
5
|
+
* edit tracking, consolidation, and stats.
|
|
6
|
+
*
|
|
7
|
+
* Data directory: $CLAUDE_PROJECT_DIR/.monomind/data/
|
|
8
|
+
* auto-memory-store.json — persisted memory entries
|
|
9
|
+
* ranked-context.json — ranked view written by init()
|
|
10
|
+
* pending-insights.jsonl — pending entries to consolidate
|
|
11
|
+
* intelligence-outcomes.jsonl — feedback records
|
|
5
12
|
*/
|
|
6
13
|
|
|
7
14
|
const path = require('path');
|
|
8
15
|
const fs = require('fs');
|
|
9
16
|
|
|
17
|
+
// Resolve base dir at require-time so tests can inject CLAUDE_PROJECT_DIR
|
|
18
|
+
// per fresh require() call.
|
|
10
19
|
const CWD = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
20
|
+
const DATA_DIR = path.join(CWD, '.monomind', 'data');
|
|
21
|
+
const STORE_FILE = path.join(DATA_DIR, 'auto-memory-store.json');
|
|
22
|
+
const RANKED_FILE = path.join(DATA_DIR, 'ranked-context.json');
|
|
23
|
+
const PENDING_FILE = path.join(DATA_DIR, 'pending-insights.jsonl');
|
|
24
|
+
const OUTCOMES_FILE = path.join(DATA_DIR, 'intelligence-outcomes.jsonl');
|
|
14
25
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var _trajectory = [];
|
|
26
|
+
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MiB guard
|
|
27
|
+
const RING_BUFFER_MAX = 50;
|
|
18
28
|
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
var _entries = []; // deduplicated memory entries loaded from store
|
|
30
|
+
var _recentEdits = []; // ring buffer of recently edited paths
|
|
31
|
+
|
|
32
|
+
function ensureDataDir() {
|
|
33
|
+
try { fs.mkdirSync(DATA_DIR, { recursive: true }); } catch (_) {}
|
|
21
34
|
}
|
|
22
35
|
|
|
23
|
-
function
|
|
36
|
+
function safeReadJson(filePath) {
|
|
24
37
|
try {
|
|
25
|
-
if (fs.existsSync(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
38
|
+
if (!fs.existsSync(filePath)) return null;
|
|
39
|
+
var st = fs.statSync(filePath);
|
|
40
|
+
if (st.size > MAX_FILE_SIZE) return null;
|
|
41
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
42
|
+
} catch (_) { return null; }
|
|
29
43
|
}
|
|
30
44
|
|
|
45
|
+
function safeReadLines(filePath) {
|
|
46
|
+
try {
|
|
47
|
+
if (!fs.existsSync(filePath)) return [];
|
|
48
|
+
var st = fs.statSync(filePath);
|
|
49
|
+
if (st.size > MAX_FILE_SIZE) return [];
|
|
50
|
+
return fs.readFileSync(filePath, 'utf-8')
|
|
51
|
+
.split('\n')
|
|
52
|
+
.filter(function(l) { return l.trim().length > 0; });
|
|
53
|
+
} catch (_) { return []; }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ── init ───────────────────────────────────────────────────────────────────────
|
|
57
|
+
|
|
31
58
|
function init() {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
ensureDataDir();
|
|
60
|
+
|
|
61
|
+
// Load entries from store, deduplicate by id
|
|
62
|
+
var raw = safeReadJson(STORE_FILE);
|
|
63
|
+
var arr = Array.isArray(raw) ? raw : [];
|
|
64
|
+
var seen = new Set();
|
|
65
|
+
_entries = arr.filter(function(e) {
|
|
66
|
+
var key = e && e.id ? String(e.id) : null;
|
|
67
|
+
if (!key) return true;
|
|
68
|
+
if (seen.has(key)) return false;
|
|
69
|
+
seen.add(key);
|
|
70
|
+
return true;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Write ranked-context.json (sorted by confidence desc) with version envelope
|
|
74
|
+
var ranked = _entries.slice().sort(function(a, b) {
|
|
75
|
+
return (b.confidence || 0) - (a.confidence || 0);
|
|
76
|
+
});
|
|
77
|
+
try {
|
|
78
|
+
fs.writeFileSync(RANKED_FILE, JSON.stringify({ version: 1, entries: ranked }, null, 2), 'utf-8');
|
|
79
|
+
} catch (_) {}
|
|
80
|
+
|
|
81
|
+
return { nodes: _entries.length, edges: 0 };
|
|
37
82
|
}
|
|
38
83
|
|
|
84
|
+
// ── getContext ─────────────────────────────────────────────────────────────────
|
|
85
|
+
|
|
39
86
|
function getContext(prompt) {
|
|
40
|
-
if (!prompt || typeof prompt !== 'string') return null;
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
87
|
+
if (!prompt || typeof prompt !== 'string' || prompt.trim() === '') return null;
|
|
88
|
+
if (_entries.length === 0) return null;
|
|
89
|
+
|
|
90
|
+
var promptWords = prompt.toLowerCase().split(/\W+/).filter(Boolean);
|
|
91
|
+
var promptSet = new Set(promptWords);
|
|
92
|
+
|
|
93
|
+
var matches = _entries.filter(function(e) {
|
|
94
|
+
var content = ((e.content || '') + ' ' + (e.summary || '')).toLowerCase();
|
|
95
|
+
var words = content.split(/\W+/).filter(Boolean);
|
|
96
|
+
return words.some(function(w) { return promptSet.has(w); });
|
|
47
97
|
});
|
|
98
|
+
|
|
48
99
|
if (matches.length === 0) return null;
|
|
100
|
+
|
|
49
101
|
var top = matches[0];
|
|
50
|
-
return '[INTELLIGENCE]
|
|
51
|
-
(top.suggestion ? ' — ' + top.suggestion : '');
|
|
102
|
+
return '[INTELLIGENCE] ' + (top.summary || top.content || top.id || 'context match');
|
|
52
103
|
}
|
|
53
104
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
fs.writeFileSync(TRAJECTORY_FILE, JSON.stringify(_trajectory.slice(-200), null, 2), 'utf-8');
|
|
61
|
-
} catch (_) {}
|
|
105
|
+
// ── recordEdit ────────────────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
function recordEdit(filePath) {
|
|
108
|
+
_recentEdits.push({ path: String(filePath || ''), ts: Date.now() });
|
|
109
|
+
if (_recentEdits.length > RING_BUFFER_MAX) {
|
|
110
|
+
_recentEdits = _recentEdits.slice(-RING_BUFFER_MAX);
|
|
62
111
|
}
|
|
63
112
|
}
|
|
64
113
|
|
|
114
|
+
// ── consolidate ───────────────────────────────────────────────────────────────
|
|
115
|
+
|
|
116
|
+
function consolidate() {
|
|
117
|
+
ensureDataDir();
|
|
118
|
+
var lines = safeReadLines(PENDING_FILE);
|
|
119
|
+
var count = lines.length;
|
|
120
|
+
|
|
121
|
+
// Clear the pending file
|
|
122
|
+
try { fs.writeFileSync(PENDING_FILE, '', 'utf-8'); } catch (_) {}
|
|
123
|
+
|
|
124
|
+
return { entries: count, edges: 0, newEntries: count };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ── feedback ──────────────────────────────────────────────────────────────────
|
|
128
|
+
|
|
65
129
|
function feedback(success) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
130
|
+
ensureDataDir();
|
|
131
|
+
var record = JSON.stringify({
|
|
132
|
+
ts: Date.now(),
|
|
133
|
+
success: !!success,
|
|
134
|
+
context: null,
|
|
135
|
+
recentEdits: _recentEdits.slice(),
|
|
136
|
+
}) + '\n';
|
|
137
|
+
try { fs.appendFileSync(OUTCOMES_FILE, record, 'utf-8'); } catch (_) {}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// ── stats ─────────────────────────────────────────────────────────────────────
|
|
141
|
+
|
|
142
|
+
function stats(asJson) {
|
|
143
|
+
var result = {
|
|
144
|
+
entries: _entries.length,
|
|
145
|
+
recentEdits: _recentEdits.length,
|
|
146
|
+
pending: safeReadLines(PENDING_FILE).length,
|
|
147
|
+
};
|
|
148
|
+
if (asJson) return JSON.stringify(result);
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ── legacy ────────────────────────────────────────────────────────────────────
|
|
153
|
+
|
|
154
|
+
function logTrajectory(step) {
|
|
155
|
+
// no-op stub for backward compatibility
|
|
156
|
+
void step;
|
|
75
157
|
}
|
|
76
158
|
|
|
77
159
|
function storePattern(pattern) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
_patterns = _patterns.filter(function(p) { return p.id !== pattern.id; });
|
|
81
|
-
_patterns.push(Object.assign({ storedAt: new Date().toISOString() }, pattern));
|
|
82
|
-
try {
|
|
83
|
-
fs.writeFileSync(PATTERNS_FILE, JSON.stringify(_patterns.slice(-500), null, 2), 'utf-8');
|
|
84
|
-
} catch (_) {}
|
|
160
|
+
// no-op stub for backward compatibility
|
|
161
|
+
void pattern;
|
|
85
162
|
}
|
|
86
163
|
|
|
87
|
-
module.exports = { init, getContext,
|
|
164
|
+
module.exports = { init, getContext, recordEdit, consolidate, feedback, stats, logTrajectory, storePattern };
|
|
@@ -15,13 +15,20 @@ const path = require('path');
|
|
|
15
15
|
const CWD = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
16
16
|
const LOOPS_DIR = path.join(CWD, '.monomind', 'loops');
|
|
17
17
|
|
|
18
|
+
const STDIN_MAX_BYTES = 1 * 1024 * 1024; // 1 MiB cap to prevent OOM
|
|
19
|
+
|
|
18
20
|
async function readStdin() {
|
|
19
21
|
if (process.stdin.isTTY) return '';
|
|
20
22
|
return new Promise((resolve) => {
|
|
21
23
|
let data = '';
|
|
24
|
+
let bytesRead = 0;
|
|
22
25
|
const timer = setTimeout(() => { process.stdin.removeAllListeners(); resolve(data); }, 3000);
|
|
23
26
|
process.stdin.setEncoding('utf8');
|
|
24
|
-
process.stdin.on('data', chunk => {
|
|
27
|
+
process.stdin.on('data', chunk => {
|
|
28
|
+
bytesRead += Buffer.byteLength(chunk, 'utf8');
|
|
29
|
+
if (bytesRead > STDIN_MAX_BYTES) { clearTimeout(timer); resolve(''); return; }
|
|
30
|
+
data += chunk;
|
|
31
|
+
});
|
|
25
32
|
process.stdin.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
26
33
|
process.stdin.on('error', () => { clearTimeout(timer); resolve(data); });
|
|
27
34
|
process.stdin.resume();
|
|
@@ -60,7 +67,9 @@ async function main() {
|
|
|
60
67
|
try { hookInput = JSON.parse(raw); } catch { process.exit(0); }
|
|
61
68
|
|
|
62
69
|
const toolInput = hookInput.tool_input || hookInput.toolInput || {};
|
|
63
|
-
const
|
|
70
|
+
const rawSessionId = hookInput.session_id || hookInput.sessionId || hookInput.id || '';
|
|
71
|
+
// Sanitize sessionId to prevent path traversal — allow only alphanumeric, dash, underscore, dot
|
|
72
|
+
const sessionId = String(rawSessionId).replace(/[^a-zA-Z0-9_.\-]/g, '').slice(0, 128);
|
|
64
73
|
|
|
65
74
|
if (!sessionId) { process.exit(0); }
|
|
66
75
|
|
|
@@ -75,7 +84,10 @@ async function main() {
|
|
|
75
84
|
let existing = {};
|
|
76
85
|
try {
|
|
77
86
|
if (fs.existsSync(loopFile)) {
|
|
78
|
-
|
|
87
|
+
const stat = fs.statSync(loopFile);
|
|
88
|
+
if (stat.size <= 512 * 1024) { // 512 KiB guard to prevent OOM
|
|
89
|
+
existing = JSON.parse(fs.readFileSync(loopFile, 'utf-8'));
|
|
90
|
+
}
|
|
79
91
|
}
|
|
80
92
|
} catch { /* start fresh */ }
|
|
81
93
|
|