@monoes/monomindcli 1.18.15 → 2.0.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/core/researcher.md +29 -24
- package/.claude/agents/github/code-review-swarm.md +1 -1
- package/.claude/agents/github/github-modes.md +1 -1
- package/.claude/agents/github/issue-tracker.md +1 -3
- package/.claude/agents/github/multi-repo-swarm.md +1 -1
- package/.claude/agents/github/pr-manager.md +1 -3
- package/.claude/agents/github/project-board-sync.md +1 -1
- package/.claude/agents/github/release-manager.md +1 -1
- package/.claude/agents/github/repo-architect.md +4 -12
- package/.claude/agents/github/swarm-issue.md +1 -1
- package/.claude/agents/github/swarm-pr.md +1 -1
- package/.claude/agents/github/sync-coordinator.md +1 -1
- package/.claude/agents/github/workflow-automation.md +1 -1
- package/.claude/agents/goal/goal-planner.md +1 -2
- package/.claude/agents/specialized/specialized-workflow-architect.md +11 -14
- package/.claude/agents/testing/production-validator.md +8 -7
- package/.claude/agents/testing/testing-evidence-collector.md +3 -1
- package/.claude/commands/github/issue-tracker.md +0 -2
- package/.claude/commands/github/pr-manager.md +0 -2
- package/.claude/commands/github/repo-architect.md +3 -10
- package/.claude/commands/mastermind/code-review.md +4 -4
- package/.claude/commands/mastermind/help.md +5 -5
- package/.claude/commands/mastermind/okf-export.md +14 -0
- package/.claude/commands/mastermind/okf-import.md +15 -0
- package/.claude/commands/workflows/README.md +0 -1
- package/.claude/commands/workflows/workflow-create.md +0 -1
- package/.claude/commands/workflows/workflow-execute.md +1 -3
- package/.claude/commands/workflows/workflow-export.md +0 -2
- package/.claude/helpers/handlers/agent-start-handler.cjs +28 -36
- package/.claude/helpers/handlers/capture-handler.cjs +110 -0
- package/.claude/helpers/handlers/edit-handler.cjs +15 -0
- package/.claude/helpers/handlers/gates-handler.cjs +2 -8
- package/.claude/helpers/handlers/route-handler.cjs +314 -245
- package/.claude/helpers/handlers/session-handler.cjs +182 -163
- package/.claude/helpers/handlers/session-restore-handler.cjs +95 -53
- package/.claude/helpers/handlers/task-handler.cjs +17 -160
- package/.claude/helpers/hook-handler.cjs +153 -16
- package/.claude/helpers/intelligence.cjs +255 -15
- package/.claude/helpers/learning-service.mjs +1 -0
- package/.claude/helpers/mastermind-activate.cjs +33 -51
- package/.claude/helpers/monolean-activate.cjs +13 -3
- package/.claude/helpers/monolean-propagate.cjs +7 -3
- package/.claude/helpers/router.cjs +122 -11
- package/.claude/helpers/skill-registry.json +0 -189
- package/.claude/skills/github-toolkit/SKILL.md +60 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +0 -15
- package/.claude/skills/hooks-automation/SKILL.md +0 -1
- package/.claude/skills/mastermind-skills/_protocol.md +1 -1
- package/.claude/skills/mastermind-skills/architect.md +5 -6
- package/.claude/skills/mastermind-skills/autodev.md +8 -5
- package/.claude/skills/mastermind-skills/build.md +1 -2
- package/.claude/skills/mastermind-skills/review.md +8 -5
- package/.claude/skills/mastermind-skills/techport.md +37 -3
- package/.claude/skills/memory-toolkit/SKILL.md +75 -0
- package/.claude/skills/monodesign/document.md +9 -6
- package/.claude/skills/monodesign/extract.md +1 -1
- package/.claude/skills/monodesign/reference/document.md +1 -1
- package/.claude/skills/monodesign/reference/live.md +1 -1
- package/.claude/skills/monolean/SKILL.md +1 -1
- package/.claude/skills/specialagent/SKILL.md +2 -4
- package/.claude/skills/swarm-advanced/SKILL.md +0 -1
- package/README.md +2 -5
- package/bin/mcp-server.js +11 -1
- package/dist/src/autopilot-state.d.ts.map +1 -1
- package/dist/src/autopilot-state.js +4 -5
- package/dist/src/autopilot-state.js.map +1 -1
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +69 -1
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +214 -1764
- package/dist/src/capabilities/index.d.ts +0 -2
- package/dist/src/capabilities/index.d.ts.map +1 -1
- package/dist/src/capabilities/index.js +0 -1
- package/dist/src/capabilities/index.js.map +1 -1
- package/dist/src/commands/agent-lifecycle.d.ts.map +1 -1
- package/dist/src/commands/agent-lifecycle.js +2 -6
- package/dist/src/commands/agent-lifecycle.js.map +1 -1
- package/dist/src/commands/agent-ops.d.ts +1 -2
- package/dist/src/commands/agent-ops.d.ts.map +1 -1
- package/dist/src/commands/agent-ops.js +1 -59
- package/dist/src/commands/agent-ops.js.map +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +2 -3
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze-diff.js +1 -1
- package/dist/src/commands/analyze-diff.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +0 -4
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +1 -29
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/browse-action.d.ts.map +1 -1
- package/dist/src/commands/browse-action.js +94 -2
- package/dist/src/commands/browse-action.js.map +1 -1
- package/dist/src/commands/completions.d.ts.map +1 -1
- package/dist/src/commands/completions.js +12 -76
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +0 -6
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts +13 -3
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +131 -23
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +6 -5
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/guidance.d.ts +5 -1
- package/dist/src/commands/guidance.d.ts.map +1 -1
- package/dist/src/commands/guidance.js +11 -556
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind-comms.d.ts.map +1 -1
- package/dist/src/commands/hive-mind-comms.js +11 -4
- package/dist/src/commands/hive-mind-comms.js.map +1 -1
- package/dist/src/commands/hive-mind-helpers.js +2 -2
- package/dist/src/commands/hive-mind-helpers.js.map +1 -1
- package/dist/src/commands/hive-mind-ops.d.ts +1 -3
- package/dist/src/commands/hive-mind-ops.d.ts.map +1 -1
- package/dist/src/commands/hive-mind-ops.js +2 -116
- package/dist/src/commands/hive-mind-ops.js.map +1 -1
- package/dist/src/commands/hive-mind.d.ts +4 -4
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +11 -11
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.js +8 -7
- package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
- package/dist/src/commands/hooks-coverage-gaps.js +1 -1
- package/dist/src/commands/hooks-coverage-gaps.js.map +1 -1
- package/dist/src/commands/hooks-coverage-routing.js +2 -2
- package/dist/src/commands/hooks-coverage-routing.js.map +1 -1
- package/dist/src/commands/hooks-extended-commands.d.ts +0 -3
- package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-extended-commands.js +0 -307
- package/dist/src/commands/hooks-extended-commands.js.map +1 -1
- package/dist/src/commands/hooks-formatting.d.ts +1 -5
- package/dist/src/commands/hooks-formatting.d.ts.map +1 -1
- package/dist/src/commands/hooks-formatting.js +1 -18
- package/dist/src/commands/hooks-formatting.js.map +1 -1
- package/dist/src/commands/hooks-workers.d.ts +1 -1
- package/dist/src/commands/hooks-workers.d.ts.map +1 -1
- package/dist/src/commands/hooks-workers.js +82 -330
- package/dist/src/commands/hooks-workers.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +1 -12
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +2 -55
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +23 -216
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init-wizard.d.ts.map +1 -1
- package/dist/src/commands/init-wizard.js +3 -5
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +4 -24
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +32 -4
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory-admin.d.ts +1 -2
- package/dist/src/commands/memory-admin.d.ts.map +1 -1
- package/dist/src/commands/memory-admin.js +1 -118
- package/dist/src/commands/memory-admin.js.map +1 -1
- package/dist/src/commands/memory-transfer.d.ts +1 -2
- package/dist/src/commands/memory-transfer.d.ts.map +1 -1
- package/dist/src/commands/memory-transfer.js +5 -171
- package/dist/src/commands/memory-transfer.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +3 -6
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/neural-core.d.ts +3 -1
- package/dist/src/commands/neural-core.d.ts.map +1 -1
- package/dist/src/commands/neural-core.js +154 -15
- package/dist/src/commands/neural-core.js.map +1 -1
- package/dist/src/commands/neural-optimize.d.ts.map +1 -1
- package/dist/src/commands/neural-optimize.js +13 -15
- package/dist/src/commands/neural-optimize.js.map +1 -1
- package/dist/src/commands/neural-registry.d.ts +1 -1
- package/dist/src/commands/neural-registry.js +14 -14
- package/dist/src/commands/neural-registry.js.map +1 -1
- package/dist/src/commands/neural.d.ts +1 -1
- package/dist/src/commands/neural.js +6 -6
- 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 +68 -58
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/providers.d.ts.map +1 -1
- package/dist/src/commands/providers.js +77 -117
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/search-universal.d.ts +7 -1
- package/dist/src/commands/search-universal.d.ts.map +1 -1
- package/dist/src/commands/search-universal.js +59 -5
- package/dist/src/commands/search-universal.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts.map +1 -1
- package/dist/src/commands/security-cve.js +3 -5
- package/dist/src/commands/security-cve.js.map +1 -1
- package/dist/src/commands/security-misc.d.ts +0 -1
- package/dist/src/commands/security-misc.d.ts.map +1 -1
- package/dist/src/commands/security-misc.js +69 -45
- package/dist/src/commands/security-misc.js.map +1 -1
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +2 -4
- 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 +137 -281
- 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 +2 -59
- 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 +18 -29
- 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 +113 -66
- 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 +2 -49
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js +43 -1
- package/dist/src/consensus/audit-writer.js.map +1 -1
- package/dist/src/consensus/tally.d.ts +19 -0
- package/dist/src/consensus/tally.d.ts.map +1 -0
- package/dist/src/consensus/tally.js +34 -0
- package/dist/src/consensus/tally.js.map +1 -0
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -9
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +10 -14
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +42 -100
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +2 -22
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +0 -13
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +62 -0
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +3 -9
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +0 -5
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +18 -8
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +0 -8
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +14 -0
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +0 -17
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/coherence/causal-infer.d.ts +5 -5
- package/dist/src/mcp-tools/coherence/causal-infer.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/causal-infer.js +32 -46
- package/dist/src/mcp-tools/coherence/causal-infer.js.map +1 -1
- package/dist/src/mcp-tools/coherence/coherence-check.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/coherence-check.js +1 -19
- package/dist/src/mcp-tools/coherence/coherence-check.js.map +1 -1
- package/dist/src/mcp-tools/coherence/consensus-verify.d.ts +2 -3
- package/dist/src/mcp-tools/coherence/consensus-verify.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/consensus-verify.js +22 -20
- package/dist/src/mcp-tools/coherence/consensus-verify.js.map +1 -1
- package/dist/src/mcp-tools/coherence/memory-gate.d.ts +3 -2
- package/dist/src/mcp-tools/coherence/memory-gate.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/memory-gate.js +32 -19
- package/dist/src/mcp-tools/coherence/memory-gate.js.map +1 -1
- package/dist/src/mcp-tools/coherence/quantum-topology.d.ts +4 -4
- package/dist/src/mcp-tools/coherence/quantum-topology.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/quantum-topology.js +11 -17
- package/dist/src/mcp-tools/coherence/quantum-topology.js.map +1 -1
- package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts +2 -3
- package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/spectral-analyze.js +51 -32
- package/dist/src/mcp-tools/coherence/spectral-analyze.js.map +1 -1
- package/dist/src/mcp-tools/coherence/types.d.ts +8 -11
- package/dist/src/mcp-tools/coherence/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/coherence/types.js +3 -18
- package/dist/src/mcp-tools/coherence/types.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +1 -7
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/graphify-tools.js +2 -2
- package/dist/src/mcp-tools/graphify-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 +9 -19
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +198 -40
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-advanced.d.ts +18 -0
- package/dist/src/mcp-tools/hooks-advanced.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-advanced.js +25 -0
- package/dist/src/mcp-tools/hooks-advanced.js.map +1 -0
- package/dist/src/mcp-tools/hooks-intelligence.d.ts +4 -8
- package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.js +33 -482
- package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts +1 -3
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +96 -202
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/hooks-synthesis.d.ts +31 -0
- package/dist/src/mcp-tools/hooks-synthesis.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-synthesis.js +196 -0
- package/dist/src/mcp-tools/hooks-synthesis.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +10 -11
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +0 -3
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +0 -4
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +24 -9
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts +6 -0
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +370 -95
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts +8 -9
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +249 -539
- 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 +5 -17
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +2 -2
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +4 -4
- package/dist/src/mcp-tools/quality-tools.d.ts +7 -2
- package/dist/src/mcp-tools/quality-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality-tools.js +7 -257
- package/dist/src/mcp-tools/quality-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +103 -0
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +9 -9
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +71 -59
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +1 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +47 -5
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-read.d.ts.map +1 -1
- package/dist/src/memory/memory-read.js +1 -19
- package/dist/src/memory/memory-read.js.map +1 -1
- package/dist/src/suggest.d.ts.map +1 -1
- package/dist/src/suggest.js +1 -12
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts +3 -2
- package/dist/src/transfer/store/discovery.d.ts.map +1 -1
- package/dist/src/transfer/store/discovery.js +22 -70
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +0 -1
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/utils/cosine-similarity.d.ts +22 -0
- package/dist/src/utils/cosine-similarity.d.ts.map +1 -0
- package/dist/src/utils/cosine-similarity.js +38 -0
- package/dist/src/utils/cosine-similarity.js.map +1 -0
- package/dist/src/utils/input-guards.d.ts +51 -0
- package/dist/src/utils/input-guards.d.ts.map +1 -0
- package/dist/src/utils/input-guards.js +223 -0
- package/dist/src/utils/input-guards.js.map +1 -0
- package/dist/src/utils/json-file.d.ts +33 -0
- package/dist/src/utils/json-file.d.ts.map +1 -0
- package/dist/src/utils/json-file.js +57 -0
- package/dist/src/utils/json-file.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -6
- package/scripts/sync-claude-assets.sh +16 -20
- package/.claude/agents/generated/case-analyst.md +0 -50
- package/.claude/agents/generated/channel-intelligence-director.md +0 -87
- package/.claude/agents/generated/chief-growth-officer.md +0 -88
- package/.claude/agents/generated/churn-analyst.md +0 -53
- package/.claude/agents/generated/code-reviewer.md +0 -55
- package/.claude/agents/generated/code-validator.md +0 -57
- package/.claude/agents/generated/complexity-scanner.md +0 -56
- package/.claude/agents/generated/content-seo-strategist.md +0 -90
- package/.claude/agents/generated/copy-editor.md +0 -45
- package/.claude/agents/generated/court-reporter.md +0 -50
- package/.claude/agents/generated/defender.md +0 -51
- package/.claude/agents/generated/devbot-orchestrator.md +0 -58
- package/.claude/agents/generated/devbot-planner.md +0 -63
- package/.claude/agents/generated/developer-community-strategist.md +0 -91
- package/.claude/agents/generated/editor-in-chief.md +0 -45
- package/.claude/agents/generated/fact-checker.md +0 -45
- package/.claude/agents/generated/impact-assessor.md +0 -54
- package/.claude/agents/generated/judge.md +0 -51
- package/.claude/agents/generated/outreach-partnership-strategist.md +0 -90
- package/.claude/agents/generated/prosecutor.md +0 -51
- package/.claude/agents/generated/reporter.md +0 -45
- package/.claude/agents/generated/social-media-strategist.md +0 -91
- package/.claude/agents/generated/video-visual-strategist.md +0 -90
- package/.claude/agents/reengineer-squad/boss.md +0 -113
- package/.claude/agents/reengineer-squad/critic-architect.md +0 -132
- package/.claude/agents/reengineer-squad/git-manager.md +0 -145
- package/.claude/agents/reengineer-squad/idea-generator.md +0 -95
- package/.claude/agents/reengineer-squad/implementer.md +0 -112
- package/.claude/agents/reengineer-squad/integration-planner.md +0 -112
- package/.claude/agents/reengineer-squad/source-analyst.md +0 -103
- package/.claude/agents/reengineer-squad/target-analyst.md +0 -118
- package/.claude/agents/reengineer-squad/tester.md +0 -105
- package/.claude/agents/sparc/architecture.md +0 -453
- package/.claude/agents/sparc/pseudocode.md +0 -299
- package/.claude/agents/sparc/refinement.md +0 -504
- package/.claude/agents/sparc/specification.md +0 -258
- package/.claude/agents/templates/implementer-sparc-coder.md +0 -231
- package/.claude/commands/sparc/analyzer.md +0 -35
- package/.claude/commands/sparc/architect.md +0 -36
- package/.claude/commands/sparc/ask.md +0 -56
- package/.claude/commands/sparc/batch-executor.md +0 -37
- package/.claude/commands/sparc/code.md +0 -48
- package/.claude/commands/sparc/coder.md +0 -37
- package/.claude/commands/sparc/debug.md +0 -42
- package/.claude/commands/sparc/debugger.md +0 -37
- package/.claude/commands/sparc/designer.md +0 -36
- package/.claude/commands/sparc/devops.md +0 -68
- package/.claude/commands/sparc/docs-writer.md +0 -39
- package/.claude/commands/sparc/documenter.md +0 -37
- package/.claude/commands/sparc/innovator.md +0 -37
- package/.claude/commands/sparc/integration.md +0 -42
- package/.claude/commands/sparc/mcp.md +0 -76
- package/.claude/commands/sparc/memory-manager.md +0 -57
- package/.claude/commands/sparc/optimizer.md +0 -37
- package/.claude/commands/sparc/orchestrator.md +0 -70
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +0 -42
- package/.claude/commands/sparc/refinement-optimization-mode.md +0 -42
- package/.claude/commands/sparc/researcher.md +0 -37
- package/.claude/commands/sparc/reviewer.md +0 -37
- package/.claude/commands/sparc/security-review.md +0 -39
- package/.claude/commands/sparc/sparc-modes.md +0 -120
- package/.claude/commands/sparc/sparc.md +0 -71
- package/.claude/commands/sparc/spec-pseudocode.md +0 -39
- package/.claude/commands/sparc/supabase-admin.md +0 -301
- package/.claude/commands/sparc/swarm-coordinator.md +0 -50
- package/.claude/commands/sparc/tdd.md +0 -37
- package/.claude/commands/sparc/tester.md +0 -37
- package/.claude/commands/sparc/tutorial.md +0 -38
- package/.claude/commands/sparc/workflow-manager.md +0 -37
- package/.claude/commands/sparc.md +0 -112
- package/.claude/helpers/auto-memory-hook.mjs +0 -503
- package/.claude/skills/sparc-methodology/SKILL.md +0 -950
- package/dist/src/capabilities/enrichment.d.ts +0 -44
- package/dist/src/capabilities/enrichment.d.ts.map +0 -1
- package/dist/src/capabilities/enrichment.js +0 -141
- package/dist/src/capabilities/enrichment.js.map +0 -1
- package/dist/src/commands/analyze-boundaries.d.ts +0 -14
- package/dist/src/commands/analyze-boundaries.d.ts.map +0 -1
- package/dist/src/commands/analyze-boundaries.js +0 -295
- package/dist/src/commands/analyze-boundaries.js.map +0 -1
- package/dist/src/commands/analyze-graph.d.ts +0 -14
- package/dist/src/commands/analyze-graph.d.ts.map +0 -1
- package/dist/src/commands/analyze-graph.js +0 -304
- package/dist/src/commands/analyze-graph.js.map +0 -1
- package/dist/src/commands/claims.d.ts +0 -10
- package/dist/src/commands/claims.d.ts.map +0 -1
- package/dist/src/commands/claims.js +0 -650
- package/dist/src/commands/claims.js.map +0 -1
- package/dist/src/commands/daemon.d.ts +0 -8
- package/dist/src/commands/daemon.d.ts.map +0 -1
- package/dist/src/commands/daemon.js +0 -681
- package/dist/src/commands/daemon.js.map +0 -1
- package/dist/src/commands/deployment.d.ts +0 -10
- package/dist/src/commands/deployment.d.ts.map +0 -1
- package/dist/src/commands/deployment.js +0 -706
- package/dist/src/commands/deployment.js.map +0 -1
- package/dist/src/commands/enrich.d.ts +0 -10
- package/dist/src/commands/enrich.d.ts.map +0 -1
- package/dist/src/commands/enrich.js +0 -58
- package/dist/src/commands/enrich.js.map +0 -1
- package/dist/src/commands/issues.d.ts +0 -21
- package/dist/src/commands/issues.d.ts.map +0 -1
- package/dist/src/commands/issues.js +0 -575
- package/dist/src/commands/issues.js.map +0 -1
- package/dist/src/commands/workflow.d.ts +0 -8
- package/dist/src/commands/workflow.d.ts.map +0 -1
- package/dist/src/commands/workflow.js +0 -677
- package/dist/src/commands/workflow.js.map +0 -1
- package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +0 -1
- package/dist/src/mcp-tools/workflow-tools.js +0 -717
- package/dist/src/mcp-tools/workflow-tools.js.map +0 -1
- package/dist/src/services/claim-service.d.ts +0 -198
- package/dist/src/services/claim-service.d.ts.map +0 -1
- package/dist/src/services/claim-service.js +0 -890
- package/dist/src/services/claim-service.js.map +0 -1
- package/dist/src/services/headless-worker-executor.d.ts +0 -311
- package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
- package/dist/src/services/headless-worker-executor.js +0 -1183
- package/dist/src/services/headless-worker-executor.js.map +0 -1
- package/dist/src/services/worker-daemon.d.ts +0 -248
- package/dist/src/services/worker-daemon.d.ts.map +0 -1
- package/dist/src/services/worker-daemon.js +0 -1417
- package/dist/src/services/worker-daemon.js.map +0 -1
- package/dist/src/ui/.monomind/capture/active-run.json +0 -1
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +0 -3
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +0 -11
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +0 -540
- package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +0 -3
- package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +0 -2
|
@@ -52,6 +52,24 @@ module.exports = {
|
|
|
52
52
|
|
|
53
53
|
if (intelligence && intelligence.getContext) {
|
|
54
54
|
try {
|
|
55
|
+
// Each hook event runs as a fresh node process, so the module-level
|
|
56
|
+
// _entries cache is always empty here — without init() getContext()
|
|
57
|
+
// returns null on every prompt and stored patterns are never recalled.
|
|
58
|
+
// init() reads one small JSON file (auto-memory-store.json), so the
|
|
59
|
+
// per-prompt cost is negligible.
|
|
60
|
+
if (intelligence.init) {
|
|
61
|
+
try { intelligence.init(); } catch (e) { /* non-fatal */ }
|
|
62
|
+
}
|
|
63
|
+
// Bootstrap intelligence from monograph on first prompt if store is sparse
|
|
64
|
+
if (intelligence.bootstrapFromDb) {
|
|
65
|
+
try {
|
|
66
|
+
var bDb = hCtx._openMonographDb();
|
|
67
|
+
if (bDb) {
|
|
68
|
+
var bootstrapped = intelligence.bootstrapFromDb(bDb);
|
|
69
|
+
if (bootstrapped > 0) console.log('[INTELLIGENCE] Bootstrapped ' + bootstrapped + ' hub nodes from knowledge graph');
|
|
70
|
+
}
|
|
71
|
+
} catch (e) { /* non-fatal */ }
|
|
72
|
+
}
|
|
55
73
|
const ctx = intelligence.getContext(prompt);
|
|
56
74
|
if (ctx) console.log(ctx);
|
|
57
75
|
} catch (e) { /* non-fatal */ }
|
|
@@ -60,284 +78,170 @@ module.exports = {
|
|
|
60
78
|
const routeFn = router.routeTaskSemantic || router.routeTask;
|
|
61
79
|
var result = await Promise.resolve(routeFn(prompt));
|
|
62
80
|
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
81
|
+
// ── Enrichment: when router.cjs falls to the broad "coder" catch-all,
|
|
82
|
+
// try @monomind/routing's richer keyword pre-filter (30+ specialized
|
|
83
|
+
// rules for Solidity, game engines, DevOps, embedded, etc.) for a
|
|
84
|
+
// more specific agent match. This bridges the hooks layer (router.cjs)
|
|
85
|
+
// with the CLI routing package without requiring ESM imports. ─────────
|
|
86
|
+
if (result && result.agentSlug === 'coder' && result.confidence <= 0.8) {
|
|
87
|
+
try {
|
|
88
|
+
var routingPkgPath = path.resolve(
|
|
89
|
+
CWD, 'packages', '@monomind', 'routing', 'dist', 'keyword-pre-filter.js'
|
|
90
|
+
);
|
|
91
|
+
// Also check CLI's node_modules (symlinked workspace)
|
|
92
|
+
if (!fs.existsSync(routingPkgPath)) {
|
|
93
|
+
routingPkgPath = path.resolve(
|
|
94
|
+
CWD, 'packages', '@monomind', 'cli', 'node_modules',
|
|
95
|
+
'@monomind', 'routing', 'dist', 'keyword-pre-filter.js'
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
if (fs.existsSync(routingPkgPath)) {
|
|
99
|
+
var routingMod = await import(routingPkgPath);
|
|
100
|
+
var enrichRules = routingMod.DEFAULT_KEYWORD_ROUTES;
|
|
101
|
+
if (enrichRules && enrichRules.length > 0) {
|
|
102
|
+
for (var eri = 0; eri < enrichRules.length; eri++) {
|
|
103
|
+
var erRule = enrichRules[eri];
|
|
104
|
+
if (erRule.pattern && erRule.pattern.test(prompt)) {
|
|
105
|
+
result.agent = erRule.routeName || erRule.agentSlug;
|
|
106
|
+
result.agentSlug = erRule.agentSlug;
|
|
107
|
+
result.confidence = 0.90;
|
|
108
|
+
result.reason = 'Enriched: ' + (erRule.description || erRule.routeName);
|
|
109
|
+
result.enrichedFrom = 'routing-keyword-pre-filter';
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} catch (e) { /* non-fatal — routing package may not be available */ }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ── Agent success pattern lookup ──────────────────────────
|
|
67
119
|
try {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
120
|
+
var patternDb = hCtx._openMonographDb();
|
|
121
|
+
if (patternDb) {
|
|
122
|
+
var cutoff = Date.now() - 30 * 86400000;
|
|
123
|
+
var patterns = patternDb.prepare(
|
|
124
|
+
'SELECT agent_type, COUNT(*) as total, SUM(CASE WHEN success=1 THEN 1 ELSE 0 END) as wins FROM agent_interactions WHERE timestamp > @cutoff GROUP BY agent_type HAVING total >= 3'
|
|
125
|
+
).all({ cutoff: cutoff });
|
|
126
|
+
if (patterns.length > 0) {
|
|
127
|
+
var patternMap = {};
|
|
128
|
+
for (var pi = 0; pi < patterns.length; pi++) {
|
|
129
|
+
patternMap[patterns[pi].agent_type] = {
|
|
130
|
+
total: patterns[pi].total,
|
|
131
|
+
successRate: Math.round(patterns[pi].wins / patterns[pi].total * 100)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
var routedAgent = result.agent || 'coder';
|
|
135
|
+
var routedPattern = patternMap[routedAgent];
|
|
136
|
+
// Find if there's a clearly better agent
|
|
137
|
+
if (routedPattern && routedPattern.successRate < 50) {
|
|
138
|
+
var best = patterns.reduce(function(a, b) { return (b.wins/b.total) > (a.wins/a.total) ? b : a; });
|
|
139
|
+
if (best.wins / best.total > 0.8 && best.agent_type !== routedAgent) {
|
|
140
|
+
console.log('[AGENT_PATTERN] Historical: ' + best.agent_type + ' (' + Math.round(best.wins/best.total*100) + '% success, n=' + best.total + ') outperforms ' + routedAgent + ' (' + routedPattern.successRate + '%)');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
result.historicalPattern = patternMap;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
} catch (e) { /* non-fatal — agent_interactions table may not exist */ }
|
|
71
147
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
148
|
+
// ── Routing feedback accuracy check ──────────────────────
|
|
149
|
+
try {
|
|
150
|
+
var rfPath = path.join(CWD, '.monomind', 'routing-feedback.jsonl');
|
|
151
|
+
var MAX_RF = 256 * 1024;
|
|
152
|
+
if (fs.existsSync(rfPath) && fs.statSync(rfPath).size <= MAX_RF) {
|
|
153
|
+
var rfLines = fs.readFileSync(rfPath, 'utf-8').trim().split('\n').filter(Boolean);
|
|
154
|
+
// Check last 50 entries for this agent's feedback
|
|
155
|
+
var routedAgent = result.agent || 'coder';
|
|
156
|
+
var recentRf = rfLines.slice(-50);
|
|
157
|
+
var agentFeedback = [];
|
|
158
|
+
for (var ri = 0; ri < recentRf.length; ri++) {
|
|
159
|
+
try {
|
|
160
|
+
var rfEntry = JSON.parse(recentRf[ri]);
|
|
161
|
+
if (rfEntry.suggestedAgent === routedAgent && typeof rfEntry.intelligenceFeedback === 'boolean') {
|
|
162
|
+
agentFeedback.push(rfEntry.intelligenceFeedback);
|
|
163
|
+
}
|
|
164
|
+
} catch (e) {}
|
|
165
|
+
}
|
|
166
|
+
if (agentFeedback.length >= 3) {
|
|
167
|
+
var successes = agentFeedback.filter(function(f) { return f === true; }).length;
|
|
168
|
+
var accuracy = Math.round(successes / agentFeedback.length * 100);
|
|
169
|
+
if (accuracy < 60) {
|
|
170
|
+
console.log('[ROUTING] Warning: ' + routedAgent + ' routing accuracy ' + accuracy + '% over last ' + agentFeedback.length + ' sessions');
|
|
171
|
+
}
|
|
172
|
+
result.routingAccuracy = accuracy;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
} catch (e) { /* non-fatal */ }
|
|
75
176
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
var promptIsDevish = /\b(develop(?:ment|er)?|routing|improve|refactor|fix|bug|optimi[sz]e|implement|build|debug|deploy|test|feature|system|performance|architecture|memory|hook|graph|statusline|monograph|api|cli|skill|hooks|agent|workflow|init|module|package|registry|server|client|route|handler|localhost|dashboard|sidebar|layout|component|function|class|config|port|script|parse|compile|lint|build)\b/i.test(prompt);
|
|
177
|
+
// monolean: graph-fallback override removed — it compensated for bad agent
|
|
178
|
+
// recommendations that are no longer injected into context. The statusline
|
|
179
|
+
// just shows the keyword router's pick; no need for 50 lines of overrides.
|
|
80
180
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (/\.(test|spec)\./.test(file) || file.includes('__tests__')) agent = 'tester';
|
|
95
|
-
// Architecture/system docs → architect
|
|
96
|
-
else if (/(architect|adr-|design-doc|rfc-)/.test(file)) agent = 'system-architect';
|
|
97
|
-
// Pure docs → tech writer
|
|
98
|
-
else if (file.endsWith('readme.md') || file.startsWith('docs/') || /\/docs\//.test(file)) agent = 'Technical Writer';
|
|
99
|
-
// Other .md (skills, agents, configs) → coder (they're code-adjacent)
|
|
100
|
-
else if (file.endsWith('.md')) agent = 'coder';
|
|
101
|
-
// Class/Interface → architect
|
|
102
|
-
else if (topGraph.label === 'Class' || topGraph.label === 'Interface') agent = 'system-architect';
|
|
103
|
-
// Functions, files, methods → coder
|
|
104
|
-
else agent = 'coder';
|
|
105
|
-
// Scale confidence by graph degree: well-connected nodes are stronger anchors.
|
|
106
|
-
var topDeg = topGraph.deg || 0;
|
|
107
|
-
var graphConf = topDeg > 30 ? 0.80 : (topDeg > 10 ? 0.75 : 0.70);
|
|
108
|
-
result = Object.assign({}, result, {
|
|
109
|
-
agent: agent,
|
|
110
|
-
agentSlug: agent,
|
|
111
|
-
confidence: graphConf,
|
|
112
|
-
reason: 'Graph fallback: top file ' + (topGraph.name || '').substring(0, 30) + ' [' + topGraph.label + '] deg=' + topDeg,
|
|
113
|
-
specificAgents: [],
|
|
114
|
-
extrasMatches: [],
|
|
115
|
-
});
|
|
181
|
+
// ── Dispatch dedup: suppress re-recommending the same agent just dispatched ──
|
|
182
|
+
// agent-start-handler writes last-dispatch.json on SubagentStart.
|
|
183
|
+
// If the router picks the same agent within 60s, it's likely the parent re-routing
|
|
184
|
+
// the same prompt — log a note so the LLM can vary its approach.
|
|
185
|
+
try {
|
|
186
|
+
var dispatchPath = path.join(CWD, '.monomind', 'last-dispatch.json');
|
|
187
|
+
var MAX_DISPATCH = 4096;
|
|
188
|
+
if (fs.existsSync(dispatchPath) && fs.statSync(dispatchPath).size <= MAX_DISPATCH) {
|
|
189
|
+
var lastDispatch = JSON.parse(fs.readFileSync(dispatchPath, 'utf-8'));
|
|
190
|
+
var dispatchAge = Date.now() - new Date(lastDispatch.dispatchedAt || 0).getTime();
|
|
191
|
+
if (dispatchAge < 60000 && lastDispatch.agentType === (result.agentSlug || result.agent)) {
|
|
192
|
+
result.recentlyDispatched = true;
|
|
193
|
+
console.log('[DISPATCH_DEDUP] ' + lastDispatch.agentType + ' was dispatched ' + Math.round(dispatchAge / 1000) + 's ago — consider a different specialist or direct implementation');
|
|
116
194
|
}
|
|
117
195
|
}
|
|
118
|
-
} catch (e) {}
|
|
196
|
+
} catch (e) { /* non-fatal */ }
|
|
119
197
|
|
|
120
198
|
var output = [];
|
|
121
|
-
// Skip the noisy "[INFO] Routing task: ..." prefix — it repeats the user's
|
|
122
|
-
// own words back and adds token overhead without helping Claude.
|
|
123
|
-
// Routing panel strategy:
|
|
124
|
-
// conf >= 0.90 → show primary recommendation (router is confident, trust it)
|
|
125
|
-
// conf < 0.90 → show category picker so Claude uses its own context to
|
|
126
|
-
// pick the right agent category + agent from a menu.
|
|
127
|
-
// Specific-agent panel is suppressed (category menu replaces it).
|
|
128
199
|
var conf = result.confidence != null ? result.confidence : 0;
|
|
129
|
-
var promptShort = (prompt || '').trim().length < 60;
|
|
130
|
-
var lowConf = conf < 0.70;
|
|
131
|
-
var suppressPanel = lowConf && promptShort;
|
|
132
|
-
|
|
133
|
-
// Agent category menu — shown when conf < 0.90 so Claude picks with context.
|
|
134
|
-
var AGENT_CATEGORIES = [
|
|
135
|
-
{ label: 'CORE', agents: 'coder · reviewer · tester · planner · researcher' },
|
|
136
|
-
{ label: 'BACKEND', agents: 'backend-dev · Backend Architect · DB Optimizer' },
|
|
137
|
-
{ label: 'FRONTEND', agents: 'Frontend Developer · mobile-dev' },
|
|
138
|
-
{ label: 'ARCH', agents: 'Software Architect · system-architect' },
|
|
139
|
-
{ label: 'SECURITY', agents: 'Security Engineer · security-architect' },
|
|
140
|
-
{ label: 'AI/ML', agents: 'AI Engineer · ml-developer · Data Engineer' },
|
|
141
|
-
{ label: 'DEVOPS', agents: 'DevOps Automator · SRE · cicd-engineer' },
|
|
142
|
-
{ label: 'DOCS', agents: 'Technical Writer · api-docs' },
|
|
143
|
-
{ divider: 'Non-Coding Agents' },
|
|
144
|
-
{ label: 'PRODUCT', agents: 'Product Manager · Launch Strategist · CRO Spec.' },
|
|
145
|
-
{ label: 'MARKETING', agents: 'Content Creator · SEO Specialist · Growth Hacker' },
|
|
146
|
-
{ label: 'SOCIAL', agents: 'TikTok · LinkedIn · Twitter · Instagram Strat.' },
|
|
147
|
-
{ label: 'SALES', agents: 'Deal Strategist · Sales Coach · Outbound Strat.' },
|
|
148
|
-
{ label: 'BUSINESS', agents: 'Finance Tracker · Legal Compliance · Analytics' },
|
|
149
|
-
{ label: 'DESIGN', agents: 'Monodesign (UI/UX · brand · CSS · animation)' },
|
|
150
|
-
];
|
|
151
|
-
|
|
152
|
-
if (conf >= 0.90) {
|
|
153
|
-
output.push('+------------- monomind | Primary Recommendation --------------+');
|
|
154
|
-
output.push('| Agent: ' + (result.agent || 'unknown').substring(0, 54).padEnd(54) + '|');
|
|
155
|
-
output.push('| Confidence: ' + ((result.confidence != null ? (result.confidence * 100).toFixed(1) : '?') + '%').padEnd(49) + '|');
|
|
156
|
-
output.push('| Reason: ' + (result.reason || '').substring(0, 53).padEnd(53) + '|');
|
|
157
|
-
output.push('+--------------------------------------------------------------+');
|
|
158
|
-
} else if (!suppressPanel) {
|
|
159
|
-
output.push('+------- monomind | Agent Category Picker ---------------------+');
|
|
160
|
-
output.push('| ' + ('Conf: ' + (conf * 100).toFixed(0) + '% — router uncertain. YOU choose using context.').padEnd(60) + ' |');
|
|
161
|
-
output.push('+--------------------------------------------------------------+');
|
|
162
|
-
AGENT_CATEGORIES.forEach(function(cat) {
|
|
163
|
-
if (cat.divider) {
|
|
164
|
-
var d = '- ' + cat.divider + ' ';
|
|
165
|
-
output.push('|' + d.padEnd(31, '-') + ''.padEnd(31, '-') + '|');
|
|
166
|
-
} else {
|
|
167
|
-
output.push('| ' + cat.label.padEnd(10) + cat.agents.substring(0, 50).padEnd(50) + ' |');
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
output.push('+--------------------------------------------------------------+');
|
|
171
|
-
output.push('| INSTRUCTION: Read your conversation context. Identify the |');
|
|
172
|
-
output.push('| best-fit category above, then pick one agent from it and |');
|
|
173
|
-
output.push('| spawn it via Task({ subagent_type: "name" }). If no agent |');
|
|
174
|
-
output.push('| fits the task, skip and proceed directly. Do this now. |');
|
|
175
|
-
output.push('+--------------------------------------------------------------+');
|
|
176
|
-
}
|
|
177
200
|
|
|
178
201
|
// ── Persist routing result for statusline display ─────────────
|
|
179
202
|
try {
|
|
180
203
|
var routeDir = path.join(CWD, '.monomind');
|
|
181
204
|
fs.mkdirSync(routeDir, { recursive: true });
|
|
182
|
-
// When confidence < 90% and the router picked a non-dev agent without
|
|
183
|
-
// a graph override, don't persist the wrong specialist — show "AI" instead.
|
|
184
|
-
var confForPersist = result.confidence != null ? result.confidence : 0;
|
|
185
|
-
var devAgentsForPersist = /^(coder|tester|reviewer|planner|researcher|system-architect|backend-dev|backend-architect|mobile-dev|ml-developer|cicd-engineer|api-docs|code-analyzer|production-validator|Technical Writer|Software Architect|Frontend Developer|AI Engineer|Data Engineer|Security Engineer|DevOps Automator|SRE)$/i;
|
|
186
|
-
var persistedIsNonDev = !devAgentsForPersist.test(String(result.agent || '').trim());
|
|
187
|
-
var resolvedAgent = result.agent;
|
|
188
|
-
var resolvedFromExtras = false;
|
|
189
|
-
if (!resolvedAgent || resolvedAgent === 'extras') {
|
|
190
|
-
var topExtra = result.extrasMatches && result.extrasMatches[0];
|
|
191
|
-
resolvedAgent = topExtra ? topExtra.name : 'Specialist Agent';
|
|
192
|
-
resolvedFromExtras = true;
|
|
193
|
-
}
|
|
194
|
-
// If router was uncertain (< 90%) and picked a non-dev specialist,
|
|
195
|
-
// show "AI selecting" in statusline rather than the wrong agent.
|
|
196
|
-
// Exception: when agent was explicitly 'extras' and we resolved from extrasMatches,
|
|
197
|
-
// trust that resolution — the domain specialist was explicitly matched.
|
|
198
|
-
if (!resolvedFromExtras && confForPersist < 0.90 && persistedIsNonDev && !String(result.reason || '').startsWith('Graph fallback')) {
|
|
199
|
-
resolvedAgent = 'AI selecting';
|
|
200
|
-
}
|
|
201
|
-
var routePayload = {
|
|
202
|
-
agent: resolvedAgent,
|
|
203
|
-
agentSlug: result.agentSlug || null,
|
|
204
|
-
confidence: result.confidence,
|
|
205
|
-
reason: result.reason,
|
|
206
|
-
semanticRouting: result.semanticRouting || false,
|
|
207
|
-
llmRouting: result.llmRouting || false,
|
|
208
|
-
updatedAt: new Date().toISOString(),
|
|
209
|
-
};
|
|
210
|
-
if (result.extrasMatches && result.extrasMatches.length > 0) {
|
|
211
|
-
routePayload.extrasMatches = result.extrasMatches.map(function(e) {
|
|
212
|
-
return { name: e.name, slug: e.slug, category: e.category };
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
205
|
fs.writeFileSync(
|
|
216
206
|
path.join(routeDir, 'last-route.json'),
|
|
217
|
-
JSON.stringify(
|
|
207
|
+
JSON.stringify({
|
|
208
|
+
agent: result.agent || 'coder',
|
|
209
|
+
agentSlug: result.agentSlug || null,
|
|
210
|
+
confidence: result.confidence,
|
|
211
|
+
reason: result.reason,
|
|
212
|
+
prompt: (prompt || '').slice(0, 500),
|
|
213
|
+
historicalPattern: result.historicalPattern || null,
|
|
214
|
+
updatedAt: new Date().toISOString(),
|
|
215
|
+
}),
|
|
218
216
|
'utf-8'
|
|
219
217
|
);
|
|
220
218
|
} catch (e) { /* non-fatal */ }
|
|
221
219
|
|
|
222
|
-
// ──
|
|
220
|
+
// ── Skill auto-activation (the one thing the hook does better than Claude) ──
|
|
223
221
|
var matches = result.skillMatches || [];
|
|
224
222
|
if (matches.length > 0) {
|
|
225
|
-
// Check for high-confidence auto-invoke: if top skill scored >= 3 keyword
|
|
226
|
-
// hits and is the dominant match, auto-invoke instead of just suggesting
|
|
227
223
|
var topMatch = matches[0];
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
autoInvoke = true;
|
|
234
|
-
}
|
|
224
|
+
// Auto-activate when one skill clearly dominates:
|
|
225
|
+
// - score >= 2 with at most 2 matches (strong multi-keyword signal), or
|
|
226
|
+
// - single match with score >= 2 and low agent confidence (skill is better fit)
|
|
227
|
+
var autoInvoke = (topMatch && topMatch.score >= 2 && matches.length <= 2) ||
|
|
228
|
+
(topMatch && topMatch.score >= 2 && matches.length === 1 && conf < 0.7);
|
|
235
229
|
|
|
236
230
|
if (autoInvoke) {
|
|
237
|
-
output.push('');
|
|
238
|
-
output.push('
|
|
239
|
-
output.push('
|
|
240
|
-
output.push('| INSTRUCTION: Invoke ' + topMatch.invoke.substring(0, 41).padEnd(41) + '|');
|
|
241
|
-
output.push('| BEFORE responding. This skill matched with very high |');
|
|
242
|
-
output.push('| confidence — do not skip it. |');
|
|
243
|
-
output.push('+==============================================================+');
|
|
231
|
+
output.push('+======== SKILL AUTO-ACTIVATED ========+');
|
|
232
|
+
output.push('| ' + topMatch.invoke.padEnd(36) + ' |');
|
|
233
|
+
output.push('+======================================+');
|
|
244
234
|
} else {
|
|
245
|
-
output.push('');
|
|
246
|
-
if ((result.confidence ?? 0) < 0.8) {
|
|
247
|
-
output.push('+----------- Skill Suggestions (pick one if relevant) ---------+');
|
|
248
|
-
output.push('| No strong primary match — here are the best skill candidates |');
|
|
249
|
-
} else {
|
|
250
|
-
output.push('+----------- Matching Skills (invoke via Skill tool) ----------+');
|
|
251
|
-
}
|
|
235
|
+
output.push('+----------- Matching Skills (invoke via Skill tool) ----------+');
|
|
252
236
|
matches.forEach(function(m, i) {
|
|
253
|
-
|
|
254
|
-
var desc = (m.description || '').substring(0, 30);
|
|
255
|
-
var line = '| ' + label.substring(0, 30).padEnd(30) + desc.padEnd(30) + ' |';
|
|
256
|
-
output.push(line);
|
|
237
|
+
output.push('| ' + (i + 1) + '. ' + m.skill.padEnd(28) + (m.description || '').substring(0, 30).padEnd(30) + ' |');
|
|
257
238
|
output.push('| invoke: ' + m.invoke.substring(0, 51).padEnd(51) + '|');
|
|
258
239
|
});
|
|
259
240
|
output.push('+--------------------------------------------------------------+');
|
|
260
|
-
if ((result.confidence ?? 0) < 0.8) {
|
|
261
|
-
output.push('| To use a skill: call Skill("skill-name") before responding. |');
|
|
262
|
-
output.push('+--------------------------------------------------------------+');
|
|
263
|
-
}
|
|
264
241
|
}
|
|
265
242
|
}
|
|
266
243
|
|
|
267
|
-
|
|
268
|
-
// Skip entirely on suppressed (low-confidence + short) prompts.
|
|
269
|
-
var specificAgents = result.specificAgents || [];
|
|
270
|
-
if (specificAgents.length > 0 && !suppressPanel && conf >= 0.90) {
|
|
271
|
-
output.push('');
|
|
272
|
-
var saHdr = '------- Specific Agents (' + specificAgents.length + ' available) ';
|
|
273
|
-
output.push('+' + saHdr + '-'.repeat(Math.max(1, 62 - saHdr.length)) + '+');
|
|
274
|
-
specificAgents.forEach(function(a, i) {
|
|
275
|
-
var label = (i + 1) + '. ' + a.label;
|
|
276
|
-
var note = (a.note || '').substring(0, 26);
|
|
277
|
-
output.push('| ' + label.substring(0, 33).padEnd(33) + note.padEnd(27) + ' |');
|
|
278
|
-
if (a.slug) {
|
|
279
|
-
output.push('| slug: ' + a.slug.substring(0, 52).padEnd(52) + ' |');
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
output.push('+--------------------------------------------------------------+');
|
|
283
|
-
output.push('| Use: Task({ subagent_type: "<slug>" }) or /specialagent |');
|
|
284
|
-
output.push('+--------------------------------------------------------------+');
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// ── Specialist agents (non-dev domain) — only shown when specificAgents panel wasn't shown ──
|
|
288
|
-
var extras = result.extrasMatches || [];
|
|
289
|
-
var specificAgentsShown = (result.specificAgents || []).length > 0 && conf >= 0.90;
|
|
290
|
-
if (extras.length > 0 && !specificAgentsShown && !suppressPanel) {
|
|
291
|
-
output.push('');
|
|
292
|
-
var spHdr = '------- Specialist Agents (' + extras.length + ' matched) ';
|
|
293
|
-
output.push('+' + spHdr + '-'.repeat(Math.max(1, 62 - spHdr.length)) + '+');
|
|
294
|
-
extras.slice(0, 5).forEach(function(e, i) {
|
|
295
|
-
var label = (i + 1) + '. ' + e.name;
|
|
296
|
-
var cat = '[' + e.category + ']';
|
|
297
|
-
output.push('| ' + label.substring(0, 44).padEnd(44) + cat.substring(0, 16).padEnd(16) + ' |');
|
|
298
|
-
output.push('| slug: ' + e.slug.substring(0, 52).padEnd(52) + ' |');
|
|
299
|
-
});
|
|
300
|
-
output.push('+--------------------------------------------------------------+');
|
|
301
|
-
output.push('| Use: Task({ subagent_type: "<slug>" }) or /specialagent |');
|
|
302
|
-
output.push('+--------------------------------------------------------------+');
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// ── MicroAgent Trigger Scan (Task 32) ──────────────────────────────
|
|
306
|
-
try {
|
|
307
|
-
var triggerResult = hCtx.scanMicroAgentTriggers(typeof prompt === 'string' ? prompt : '');
|
|
308
|
-
if (triggerResult.matches.length > 0) {
|
|
309
|
-
output.push('');
|
|
310
|
-
if (triggerResult.takeoverAgent) {
|
|
311
|
-
var tAgent = triggerResult.takeoverAgent;
|
|
312
|
-
var tKw = triggerResult.matches[0].matchedText;
|
|
313
|
-
output.push('+============= MicroAgent TAKEOVER Detected ===================+');
|
|
314
|
-
output.push('| Specialist: ' + tAgent.substring(0, 49).padEnd(49) + '|');
|
|
315
|
-
output.push('| Keyword: ' + ('"' + tKw + '"').substring(0, 49).padEnd(49) + '|');
|
|
316
|
-
output.push('| Recommended: use this specialist instead of primary agent. |');
|
|
317
|
-
output.push('+==============================================================+');
|
|
318
|
-
} else {
|
|
319
|
-
output.push('+------- MicroAgent Specialists Triggered ---------------------+');
|
|
320
|
-
triggerResult.matches.forEach(function(m) {
|
|
321
|
-
var slug = m.agentSlug.substring(0, 37).padEnd(37);
|
|
322
|
-
var kw = ('(match: "' + m.matchedText + '")').substring(0, 21).padEnd(21);
|
|
323
|
-
output.push('| + ' + slug + kw + ' |');
|
|
324
|
-
});
|
|
325
|
-
output.push('+--------------------------------------------------------------+');
|
|
326
|
-
}
|
|
327
|
-
// Persist trigger matches alongside route result
|
|
328
|
-
try {
|
|
329
|
-
var routeFile = path.join(CWD, '.monomind', 'last-route.json');
|
|
330
|
-
var routeSt = fs.statSync(routeFile);
|
|
331
|
-
if (routeSt.size <= 1024 * 1024) {
|
|
332
|
-
var existing = JSON.parse(fs.readFileSync(routeFile, 'utf-8'));
|
|
333
|
-
existing.microAgents = { injectAgents: triggerResult.injectAgents || [], takeoverAgent: triggerResult.takeoverAgent || null };
|
|
334
|
-
fs.writeFileSync(routeFile, JSON.stringify(existing), 'utf-8');
|
|
335
|
-
}
|
|
336
|
-
} catch (e) {}
|
|
337
|
-
}
|
|
338
|
-
} catch (e) { /* non-fatal */ }
|
|
339
|
-
|
|
340
|
-
console.log(output.join('\n'));
|
|
244
|
+
if (output.length > 0) console.log(output.join('\n'));
|
|
341
245
|
|
|
342
246
|
// Record any decision markers in this prompt (auto-ADR pipeline).
|
|
343
247
|
try { hCtx._recordDecisionMarkers(prompt); } catch (e) {}
|
|
@@ -357,6 +261,171 @@ module.exports = {
|
|
|
357
261
|
}
|
|
358
262
|
} catch (e) {}
|
|
359
263
|
|
|
264
|
+
// ── Surface daemon metrics warnings (hook latency, token spikes) ──
|
|
265
|
+
try {
|
|
266
|
+
var metricsDir = path.join(CWD, '.monomind', 'metrics');
|
|
267
|
+
// Hook latency warnings
|
|
268
|
+
var latencyFile = path.join(metricsDir, 'hook-latency.json');
|
|
269
|
+
if (fs.existsSync(latencyFile) && fs.statSync(latencyFile).size < 32768) {
|
|
270
|
+
var latencyData = JSON.parse(fs.readFileSync(latencyFile, 'utf-8'));
|
|
271
|
+
if (latencyData && latencyData.avgMs > 500) {
|
|
272
|
+
console.log('[PERF] Hook latency avg ' + Math.round(latencyData.avgMs) + 'ms (target <500ms). Slowest: ' + (latencyData.slowest || 'unknown'));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Token usage check — surface only when spend is high
|
|
276
|
+
var tokenFile = path.join(metricsDir, 'token-summary.json');
|
|
277
|
+
if (fs.existsSync(tokenFile) && fs.statSync(tokenFile).size < 32768) {
|
|
278
|
+
var tokenData = JSON.parse(fs.readFileSync(tokenFile, 'utf-8'));
|
|
279
|
+
if (tokenData && tokenData.todayCost > 50) {
|
|
280
|
+
console.log('[COST] Today: $' + (tokenData.todayCost || 0).toFixed(2) + ' (' + (tokenData.todayCalls || 0) + ' calls)');
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Security audit findings
|
|
284
|
+
var secAuditFile = path.join(metricsDir, 'security-audit.json');
|
|
285
|
+
if (fs.existsSync(secAuditFile) && fs.statSync(secAuditFile).size < 32768) {
|
|
286
|
+
var secData = JSON.parse(fs.readFileSync(secAuditFile, 'utf-8'));
|
|
287
|
+
if (secData && secData.findings && secData.findings.length > 0) {
|
|
288
|
+
console.log('[SECURITY] ' + secData.findings.length + ' findings from background scan. Review .monomind/metrics/security-audit.json');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Codebase map top files (high-centrality god nodes from monograph)
|
|
292
|
+
var mapFile = path.join(metricsDir, 'codebase-map.json');
|
|
293
|
+
if (fs.existsSync(mapFile) && fs.statSync(mapFile).size < 32768) {
|
|
294
|
+
var mapData = JSON.parse(fs.readFileSync(mapFile, 'utf-8'));
|
|
295
|
+
if (mapData && mapData.topFiles && mapData.topFiles.length > 0) {
|
|
296
|
+
console.log('[CODEBASE] ' + mapData.topFiles.length + ' high-centrality files. Top: ' + (mapData.topFiles[0].ref || 'unknown') + ' (degree ' + (mapData.topFiles[0].degree || '?') + ')');
|
|
297
|
+
}
|
|
298
|
+
if (mapData && mapData.graphStaleness && mapData.graphStaleness.commitsBehind > 10) {
|
|
299
|
+
console.log('[CODEBASE] Graph index ' + mapData.graphStaleness.commitsBehind + ' commits behind HEAD — run monograph build');
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Deep dive findings (god nodes, high-degree files from background analysis)
|
|
303
|
+
var deepdiveFile = path.join(metricsDir, 'deepdive.json');
|
|
304
|
+
if (fs.existsSync(deepdiveFile) && fs.statSync(deepdiveFile).size < 32768) {
|
|
305
|
+
var ddData = JSON.parse(fs.readFileSync(deepdiveFile, 'utf-8'));
|
|
306
|
+
if (ddData && ddData.findings && ddData.findings.length > 0) {
|
|
307
|
+
for (var di = 0; di < ddData.findings.length; di++) {
|
|
308
|
+
var finding = ddData.findings[di];
|
|
309
|
+
if (finding.category === 'god_nodes' && finding.items && finding.items.length > 0) {
|
|
310
|
+
var topGod = finding.items[0];
|
|
311
|
+
console.log('[DEEPDIVE] ' + finding.items.length + ' god nodes. Top: ' + (topGod.name || 'unknown') + ' (degree ' + (topGod.degree || '?') + ') in ' + (topGod.file || 'unknown'));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Ultralearn insights (bridge nodes crossing community boundaries)
|
|
317
|
+
var ultralearnFile = path.join(metricsDir, 'ultralearn.json');
|
|
318
|
+
if (fs.existsSync(ultralearnFile) && fs.statSync(ultralearnFile).size < 32768) {
|
|
319
|
+
var ulData = JSON.parse(fs.readFileSync(ultralearnFile, 'utf-8'));
|
|
320
|
+
if (ulData && ulData.insightsGained && ulData.insightsGained.length > 0) {
|
|
321
|
+
for (var ui = 0; ui < ulData.insightsGained.length; ui++) {
|
|
322
|
+
var insight = ulData.insightsGained[ui];
|
|
323
|
+
if (insight.category === 'bridge_nodes' && insight.items && insight.items.length > 0) {
|
|
324
|
+
var topBridge = insight.items[0];
|
|
325
|
+
console.log('[ARCHITECTURE] ' + insight.items.length + ' bridge nodes crossing community boundaries. Top: ' + (topBridge.name || 'unknown') + ' (' + (topBridge.crossCommunityEdges || '?') + ' cross-edges) in ' + (topBridge.location || 'unknown'));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Performance metrics (daemon optimize worker)
|
|
331
|
+
var perfFile = path.join(metricsDir, 'performance.json');
|
|
332
|
+
if (fs.existsSync(perfFile) && fs.statSync(perfFile).size < 32768) {
|
|
333
|
+
var perfData = JSON.parse(fs.readFileSync(perfFile, 'utf-8'));
|
|
334
|
+
if (perfData && perfData.memoryUsage) {
|
|
335
|
+
var rssBytes = perfData.memoryUsage.rss || 0;
|
|
336
|
+
var rssMB = Math.round(rssBytes / (1024 * 1024));
|
|
337
|
+
if (rssMB > 512) {
|
|
338
|
+
console.log('[PERF] Daemon RSS ' + rssMB + 'MB (>512MB threshold). Consider restarting daemon or reducing worker concurrency');
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// Memory consolidation health
|
|
343
|
+
var consolFile = path.join(metricsDir, 'consolidation.json');
|
|
344
|
+
if (fs.existsSync(consolFile) && fs.statSync(consolFile).size < 32768) {
|
|
345
|
+
var consolData = JSON.parse(fs.readFileSync(consolFile, 'utf-8'));
|
|
346
|
+
if (consolData && consolData.patternsConsolidated > 0) {
|
|
347
|
+
console.log('[MEMORY] ' + consolData.patternsConsolidated + ' patterns consolidated into ' + consolData.clustersCreated + ' RAPTOR clusters');
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Benchmark worker RSS (manual-trigger `daemon trigger -w benchmark`)
|
|
351
|
+
var benchFile = path.join(metricsDir, 'benchmark.json');
|
|
352
|
+
if (fs.existsSync(benchFile) && fs.statSync(benchFile).size < 32768) {
|
|
353
|
+
var benchData = JSON.parse(fs.readFileSync(benchFile, 'utf-8'));
|
|
354
|
+
if (benchData && benchData.benchmarks && benchData.benchmarks.memoryUsage) {
|
|
355
|
+
var benchRssMB = Math.round((benchData.benchmarks.memoryUsage.rss || 0) / (1024 * 1024));
|
|
356
|
+
if (benchRssMB > 512) {
|
|
357
|
+
console.log('[PERF] Benchmark snapshot RSS ' + benchRssMB + 'MB (>512MB threshold) at last `daemon trigger -w benchmark` run');
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
} catch (e) { /* non-fatal */ }
|
|
362
|
+
|
|
363
|
+
// ── Memory: surface relevant past session context ──────────
|
|
364
|
+
try {
|
|
365
|
+
var epFile = path.join(CWD, '.monomind', 'episodic', 'episodes.jsonl');
|
|
366
|
+
var MAX_EP = 256 * 1024;
|
|
367
|
+
if (fs.existsSync(epFile) && fs.statSync(epFile).size <= MAX_EP) {
|
|
368
|
+
var epRaw = fs.readFileSync(epFile, 'utf-8').trim().split('\n').filter(Boolean);
|
|
369
|
+
if (epRaw.length > 0) {
|
|
370
|
+
// Simple keyword matching against episode summaries
|
|
371
|
+
var promptLower = (prompt || '').toLowerCase();
|
|
372
|
+
var promptTokens = promptLower.match(/[a-z][a-z0-9_-]{2,}/g) || [];
|
|
373
|
+
if (promptTokens.length > 0) {
|
|
374
|
+
var matches = [];
|
|
375
|
+
// Truncate at the last space before maxLen so fragments never
|
|
376
|
+
// end mid-word (falls back to a hard cut for space-less text).
|
|
377
|
+
var truncAtWord = function(s, maxLen) {
|
|
378
|
+
s = String(s || '');
|
|
379
|
+
if (s.length <= maxLen) return s;
|
|
380
|
+
var cut = s.slice(0, maxLen);
|
|
381
|
+
var sp = cut.lastIndexOf(' ');
|
|
382
|
+
return sp > 40 ? cut.slice(0, sp) : cut;
|
|
383
|
+
};
|
|
384
|
+
// Only search last 200 episodes
|
|
385
|
+
var searchEps = epRaw.slice(-200);
|
|
386
|
+
for (var ei = 0; ei < searchEps.length; ei++) {
|
|
387
|
+
try {
|
|
388
|
+
var ep = JSON.parse(searchEps[ei]);
|
|
389
|
+
var sumLower = (ep.summary || '').toLowerCase();
|
|
390
|
+
// Skip if from current session
|
|
391
|
+
var currentSessId = process.env.CLAUDE_SESSION_ID || '';
|
|
392
|
+
if (ep.sessionId === currentSessId) continue;
|
|
393
|
+
// Count keyword overlap
|
|
394
|
+
var hits = 0;
|
|
395
|
+
for (var ti = 0; ti < promptTokens.length; ti++) {
|
|
396
|
+
if (sumLower.includes(promptTokens[ti])) hits++;
|
|
397
|
+
}
|
|
398
|
+
var relevance = promptTokens.length > 0 ? hits / promptTokens.length : 0;
|
|
399
|
+
if (relevance >= 0.3 && hits >= 2) {
|
|
400
|
+
matches.push({ summary: truncAtWord(ep.summary || '', 120), relevance: relevance, ts: ep.endedAt || 0 });
|
|
401
|
+
}
|
|
402
|
+
} catch (e) {}
|
|
403
|
+
}
|
|
404
|
+
// Show top 2 most relevant matches — dedupe by fragment text so
|
|
405
|
+
// two episodes from the same conversation don't inject the same
|
|
406
|
+
// truncated snippet twice.
|
|
407
|
+
if (matches.length > 0) {
|
|
408
|
+
matches.sort(function(a, b) { return b.relevance - a.relevance; });
|
|
409
|
+
var topMatches = [];
|
|
410
|
+
var seenFrags = {};
|
|
411
|
+
for (var tmi = 0; tmi < matches.length && topMatches.length < 2; tmi++) {
|
|
412
|
+
var frag = matches[tmi].summary.replace(/\n/g, ' ').trim();
|
|
413
|
+
if (seenFrags[frag]) continue;
|
|
414
|
+
seenFrags[frag] = true;
|
|
415
|
+
topMatches.push(matches[tmi]);
|
|
416
|
+
}
|
|
417
|
+
var memLines = ['[MEMORY] Relevant past sessions:'];
|
|
418
|
+
for (var mi = 0; mi < topMatches.length; mi++) {
|
|
419
|
+
var ago = topMatches[mi].ts ? Math.round((Date.now() - topMatches[mi].ts) / 3600000) + 'h ago' : '';
|
|
420
|
+
memLines.push(' ' + topMatches[mi].summary.replace(/\n/g, ' ').trim() + (ago ? ' (' + ago + ')' : ''));
|
|
421
|
+
}
|
|
422
|
+
console.log(memLines.join('\n'));
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
} catch (e) { /* non-fatal */ }
|
|
428
|
+
|
|
360
429
|
// Inject monograph hint for complex tasks.
|
|
361
430
|
// Source of truth is .monomind/monograph.db (SQLite). Legacy stats.json
|
|
362
431
|
// is no longer written by the build, so it is checked only as a fallback.
|