monomind 2.5.1 → 2.5.3
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/README.md +1 -1
- package/package.json +2 -1
- package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +6 -6
- package/packages/@monomind/cli/.claude/agents/github/repo-architect.md +3 -3
- package/packages/@monomind/cli/.claude/agents/github/sync-coordinator.md +2 -2
- package/packages/@monomind/cli/.claude/agents/specialists/integration-architect.md +4 -4
- package/packages/@monomind/cli/.claude/commands/github/repo-architect.md +4 -4
- package/packages/@monomind/cli/.claude/commands/github/sync-coordinator.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/build.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/content.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +3 -3
- package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/design.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/do.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/master.md +54 -54
- package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/release.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/research.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/review.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +3 -3
- package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +5 -5
- package/packages/@monomind/cli/.claude/helpers/control-start.cjs +30 -0
- package/packages/@monomind/cli/.claude/helpers/event-logger.cjs +2 -2
- package/packages/@monomind/cli/.claude/helpers/extras-registry.json +1 -1
- package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +2 -2
- package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +2 -2
- package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +1 -1
- package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +1 -1
- package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +1 -1
- package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +11 -11
- package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +2 -2
- package/packages/@monomind/cli/.claude/helpers/hook-handler.cjs +8 -8
- package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +44 -12
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/access.md → mastermind-access/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/activity.md → mastermind-activity/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapter-manager.md → mastermind-adapter-manager/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapters.md → mastermind-adapters/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agent-detail.md → mastermind-agent-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agents.md → mastermind-agents/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approval-detail.md → mastermind-approval-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approvev1.md → mastermind-approvev1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/architect.md → mastermind-architect/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/autodev.md → mastermind-autodev/SKILL.md} +10 -10
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/backup.md → mastermind-backup/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/bootstrap.md → mastermind-bootstrap/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/budgets.md → mastermind-budgets/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/build.md → mastermind-build/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/companies.md → mastermind-companies/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/content.md → mastermind-content/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/costs.md → mastermind-costs/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/createorg.md → mastermind-createorg/SKILL.md} +3 -3
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/debug.md → mastermind-debug/SKILL.md} +4 -4
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_delegation.md → mastermind-delegation/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/design.md → mastermind-design/SKILL.md} +9 -9
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/diagnose.md → mastermind-diagnose/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/env.md → mastermind-env/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/environments.md → mastermind-environments/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/execute.md → mastermind-execute/SKILL.md} +10 -10
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/export.md → mastermind-export/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finance.md → mastermind-finance/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goal-detail.md → mastermind-goal-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goals.md → mastermind-goals/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/heartbeatv1.md → mastermind-heartbeatv1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/idea.md → mastermind-idea/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/import.md → mastermind-import/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/inbox.md → mastermind-inbox/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance.md → mastermind-instance/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance-settings.md → mastermind-instance-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invite-landing.md → mastermind-invite-landing/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invites.md → mastermind-invites/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issue-detail.md → mastermind-issue-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issues.md → mastermind-issues/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/join-queue.md → mastermind-join-queue/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/liveness.md → mastermind-liveness/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/marketing.md → mastermind-marketing/SKILL.md} +8 -8
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/memory.md → mastermind-memory/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monitor.md → mastermind-monitor/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/my-issues.md → mastermind-my-issues/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/new-agent.md → mastermind-new-agent/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/ops.md → mastermind-ops/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-chart.md → mastermind-org-chart/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-settings.md → mastermind-org-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgs.md → mastermind-orgs/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgstatus.md → mastermind-orgstatus/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan.md → mastermind-plan/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan-to-tasks.md → mastermind-plan-to-tasks/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-manager.md → mastermind-plugin-manager/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-settings.md → mastermind-plugin-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugins.md → mastermind-plugins/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/profile.md → mastermind-profile/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-detail.md → mastermind-project-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-workspace.md → mastermind-project-workspace/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/projects.md → mastermind-projects/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_protocol.md → mastermind-protocol/SKILL.md} +3 -3
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/release.md → mastermind-release/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_repeat.md → mastermind-repeat/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/research.md → mastermind-research/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/review.md → mastermind-review/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routine-detail.md → mastermind-routine-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routines.md → mastermind-routines/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorgv1.md → mastermind-runorgv1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/sales.md → mastermind-sales/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/search.md → mastermind-search/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/secrets.md → mastermind-secrets/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/skill-builder.md → mastermind-skill-builder/SKILL.md} +16 -14
- package/packages/@monomind/cli/.claude/skills/mastermind-skills/{skills.md → SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/stoporg.md → mastermind-stoporg/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/taskdev.md → mastermind-taskdev/SKILL.md} +6 -6
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/implementer-prompt.md +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tasks.md → mastermind-tasks/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tdd.md → mastermind-tdd/SKILL.md} +4 -4
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/techport.md → mastermind-techport/SKILL.md} +6 -6
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/threads.md → mastermind-threads/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tree-control.md → mastermind-tree-control/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/verify.md → mastermind-verify/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/wiki.md → mastermind-wiki/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspace-detail.md → mastermind-workspace-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspaces.md → mastermind-workspaces/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +114 -190
- package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +4 -4
- package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +103 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +2 -2
- package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/init.md +30 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +36 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/live.md +19 -44
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +122 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +58 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +40 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +39 -11
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +67 -16
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +5 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +139 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +71 -64
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +12 -18
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +114 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +4 -6
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +108 -5
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +70 -143
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +635 -68
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +24 -22
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +22 -29
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +221 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -6
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +45 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +57 -13
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +159 -71
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +16 -8
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +1 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +27 -13
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +6 -152
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +180 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +94 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +260 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +1061 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +416 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +198 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +33 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +1962 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +321 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +814 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +5601 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +50 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +259 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +258 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +636 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +253 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +198 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +12 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +181 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +373 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/index.mjs +426 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +198 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +166 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +563 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +2995 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +124 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +101 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +30 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +7 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +661 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +516 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +1776 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +61 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +842 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +69 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +640 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +129 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +4 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +42 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +50 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +19 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +137 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +458 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +939 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +357 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +152 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +293 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +826 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +274 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +180 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +36 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +812 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +146 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +123 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +11240 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +1241 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +75 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +683 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +51 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +583 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +272 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +363 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +384 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +94 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +1137 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +61 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +30 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +894 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +297 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +14 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +633 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +221 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +7 -58
- package/packages/@monomind/cli/README.md +1 -1
- package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +7 -1
- package/packages/@monomind/cli/dist/src/commands/design-detect.js +131 -38
- package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +0 -1
- package/packages/@monomind/cli/dist/src/commands/design-palette.js +2 -3
- package/packages/@monomind/cli/dist/src/commands/doc.js +72 -15
- package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +5 -1
- package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +24 -1
- package/packages/@monomind/cli/dist/src/commands/doctor.js +3 -3
- package/packages/@monomind/cli/dist/src/commands/hooks-workers.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +8 -8
- package/packages/@monomind/cli/dist/src/commands/init.js +2 -2
- package/packages/@monomind/cli/dist/src/commands/org.js +109 -9
- package/packages/@monomind/cli/dist/src/index.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/index.js +3 -3
- package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +5 -5
- package/packages/@monomind/cli/dist/src/init/executor.js +17 -6
- package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +2 -0
- package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +4 -1
- package/packages/@monomind/cli/dist/src/mcp-server.js +2 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +1 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +2 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +1 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +38 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +8 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +193 -31
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +33 -0
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +166 -17
- package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +186 -0
- package/packages/@monomind/cli/dist/src/memory/memory-kg.js +450 -0
- package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +44 -0
- package/packages/@monomind/cli/dist/src/memory/query-router.js +113 -0
- package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +18 -0
- package/packages/@monomind/cli/dist/src/orgrt/daemon.js +249 -12
- package/packages/@monomind/cli/dist/src/orgrt/migrate.js +7 -0
- package/packages/@monomind/cli/dist/src/orgrt/policy.js +7 -0
- package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +24 -1
- package/packages/@monomind/cli/dist/src/orgrt/session.js +18 -3
- package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/orgrt/templates.js +9 -4
- package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +15 -0
- package/packages/@monomind/cli/dist/src/orgrt/types.js +2 -0
- package/packages/@monomind/cli/dist/src/routing/embed-worker.js +1 -1
- package/packages/@monomind/cli/dist/src/routing/llm-caller.js +1 -1
- package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +1 -1
- package/packages/@monomind/cli/dist/src/ui/dashboard.html +176 -26
- package/packages/@monomind/cli/dist/src/ui/orgs.html +24 -0
- package/packages/@monomind/cli/dist/src/ui/server.mjs +162 -12
- package/packages/@monomind/cli/dist/src/update/checker.js +3 -3
- package/packages/@monomind/cli/package.json +8 -6
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_agent-select.md → mastermind-agent-select/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finish.md → mastermind-finish/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_intake.md → mastermind-intake/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/copywriting-frameworks.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/persuasion-psychology.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monotask.md → mastermind-monotask/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/receive-review.md → mastermind-receive-review/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorg.md → mastermind-runorg/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/code-quality-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/final-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/spec-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/worktree.md → mastermind-worktree/SKILL.md} +0 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Knowledge Graph — entities, relations, and rules distilled from
|
|
3
|
+
* agent sessions and org runs (cognee-concept port, Phase 2 of
|
|
4
|
+
* docs/mastermind/2026-07-19-cognee-port-plan.md).
|
|
5
|
+
*
|
|
6
|
+
* Storage rides store A (memory-bridge) rather than a dedicated SQLite DB:
|
|
7
|
+
* nodes live in namespace `kg:nodes`, edges in `kg:edges`, distilled rules
|
|
8
|
+
* additionally in `rules` (so existing knowledge/injection surfaces find them).
|
|
9
|
+
* That buys embeddings, upsert, sql.js fallback, and the Phase 1
|
|
10
|
+
* feedback/frequency weighting for free — KG node ranking improves with use
|
|
11
|
+
* automatically.
|
|
12
|
+
*
|
|
13
|
+
* Identity is deterministic and NAME-ONLY (cognee's Entity.identity_fields):
|
|
14
|
+
* the entry KEY is `n:<normalized-name>`, so the same entity extracted from
|
|
15
|
+
* any session merges idempotently via upsert regardless of assigned type.
|
|
16
|
+
* Every write carries `origin_refs` so a bad ingest can be rolled back per
|
|
17
|
+
* run/session.
|
|
18
|
+
*
|
|
19
|
+
* // monolean: graph traversal is in-process over a full kg:edges list —
|
|
20
|
+
* // fine to ~10k edges; upgrade path is a real SQLite edges table with
|
|
21
|
+
* // indexed src/dst columns if orgs outgrow that.
|
|
22
|
+
*
|
|
23
|
+
* @module v1/cli/memory/memory-kg
|
|
24
|
+
*/
|
|
25
|
+
import { bridgeStoreEntry, bridgeSearchEntries, bridgeListEntries, bridgeGetEntry, bridgeDeleteEntry, } from './memory-bridge.js';
|
|
26
|
+
export const KG_NODES_NS = 'kg:nodes';
|
|
27
|
+
export const KG_EDGES_NS = 'kg:edges';
|
|
28
|
+
export const RULES_NS = 'rules';
|
|
29
|
+
const MAX_NAME_LEN = 200;
|
|
30
|
+
const MAX_DESC_LEN = 2000;
|
|
31
|
+
const MAX_LIST = 10_000;
|
|
32
|
+
/** cognee DataPoint normalization: lowercase, spaces→_, strip apostrophes. */
|
|
33
|
+
export function normalizeName(name) {
|
|
34
|
+
return String(name).trim().toLowerCase().replace(/['’]/g, '').replace(/\s+/g, '_').slice(0, MAX_NAME_LEN);
|
|
35
|
+
}
|
|
36
|
+
/** Identity is NAME-ONLY (cognee's Entity.identity_fields = ["name"]) — type
|
|
37
|
+
* lives in metadata. Including type in the key forked the same entity when
|
|
38
|
+
* the LLM said "Module" and the heuristic said "entity". */
|
|
39
|
+
export function nodeKey(_type, name) {
|
|
40
|
+
return `n:${normalizeName(name)}`;
|
|
41
|
+
}
|
|
42
|
+
function edgeKey(srcKey, relation, dstKey) {
|
|
43
|
+
return `e:${srcKey}|${normalizeName(relation)}|${dstKey}`;
|
|
44
|
+
}
|
|
45
|
+
// ── Ingest ──────────────────────────────────────────────────────────
|
|
46
|
+
/** Idempotently merge extracted nodes/edges into the KG. Same-name entities
|
|
47
|
+
* collapse onto one node (deterministic key + upsert); origin_refs accumulate
|
|
48
|
+
* so rollback can undo a single run's contribution. */
|
|
49
|
+
export async function kgIngest(options) {
|
|
50
|
+
const { originRef, dbPath } = options;
|
|
51
|
+
let nodesAdded = 0, nodesMerged = 0, edgesAdded = 0, edgesMerged = 0;
|
|
52
|
+
try {
|
|
53
|
+
const keyByName = new Map();
|
|
54
|
+
for (const n of (options.nodes ?? []).slice(0, 500)) {
|
|
55
|
+
if (!n?.name?.trim())
|
|
56
|
+
continue;
|
|
57
|
+
const type = n.type?.trim() || 'entity';
|
|
58
|
+
const key = nodeKey(type, n.name);
|
|
59
|
+
keyByName.set(normalizeName(n.name), key);
|
|
60
|
+
const desc = (n.description ?? '').slice(0, MAX_DESC_LEN);
|
|
61
|
+
const existing = await bridgeGetEntry({ key, namespace: KG_NODES_NS, dbPath });
|
|
62
|
+
if (existing?.found && existing.entry) {
|
|
63
|
+
const md = existing.entry.metadata;
|
|
64
|
+
const origins = Array.isArray(md.origin_refs) ? md.origin_refs : [];
|
|
65
|
+
if (!origins.includes(originRef))
|
|
66
|
+
origins.push(originRef);
|
|
67
|
+
// Prefer the richer description; never let a terse re-extraction erase detail.
|
|
68
|
+
const prevDesc = typeof md.description === 'string' ? md.description : '';
|
|
69
|
+
const bestDesc = desc.length > prevDesc.length ? desc : prevDesc;
|
|
70
|
+
// Keep the most specific type: a generic heuristic 'entity' never
|
|
71
|
+
// overwrites an LLM-assigned type.
|
|
72
|
+
const prevType = typeof md.type === 'string' ? md.type : 'entity';
|
|
73
|
+
const bestType = prevType.toLowerCase() !== 'entity' ? prevType : type;
|
|
74
|
+
await bridgeStoreEntry({
|
|
75
|
+
key,
|
|
76
|
+
value: `${n.name} — ${bestDesc || bestType}`,
|
|
77
|
+
namespace: KG_NODES_NS,
|
|
78
|
+
dbPath,
|
|
79
|
+
upsert: true,
|
|
80
|
+
tags: ['kg', normalizeName(bestType), ...(n.nodeSet ? [normalizeName(n.nodeSet)] : [])],
|
|
81
|
+
metadata: {
|
|
82
|
+
...md,
|
|
83
|
+
kg: 'node', type: bestType, name: n.name, description: bestDesc,
|
|
84
|
+
node_set: n.nodeSet ?? md.node_set ?? null,
|
|
85
|
+
origin_refs: origins.slice(-100),
|
|
86
|
+
version: (typeof md.version === 'number' ? md.version : 1) + 1,
|
|
87
|
+
valid_from: md.valid_from ?? Date.now(),
|
|
88
|
+
valid_to: null,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
nodesMerged++;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
await bridgeStoreEntry({
|
|
95
|
+
key,
|
|
96
|
+
value: `${n.name} — ${desc || type}`,
|
|
97
|
+
namespace: KG_NODES_NS,
|
|
98
|
+
dbPath,
|
|
99
|
+
upsert: true,
|
|
100
|
+
tags: ['kg', normalizeName(type), ...(n.nodeSet ? [normalizeName(n.nodeSet)] : [])],
|
|
101
|
+
metadata: {
|
|
102
|
+
kg: 'node', type, name: n.name, description: desc,
|
|
103
|
+
node_set: n.nodeSet ?? null,
|
|
104
|
+
origin_refs: [originRef],
|
|
105
|
+
version: 1,
|
|
106
|
+
valid_from: Date.now(),
|
|
107
|
+
valid_to: null,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
nodesAdded++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const e of (options.edges ?? []).slice(0, 1000)) {
|
|
114
|
+
if (!e?.source?.trim() || !e?.target?.trim() || !e?.relation?.trim())
|
|
115
|
+
continue;
|
|
116
|
+
const srcKey = keyByName.get(normalizeName(e.source)) ?? nodeKey(e.sourceType ?? 'entity', e.source);
|
|
117
|
+
const dstKey = keyByName.get(normalizeName(e.target)) ?? nodeKey(e.targetType ?? 'entity', e.target);
|
|
118
|
+
const key = edgeKey(srcKey, e.relation, dstKey);
|
|
119
|
+
const desc = (e.description ?? '').slice(0, MAX_DESC_LEN);
|
|
120
|
+
const existing = await bridgeGetEntry({ key, namespace: KG_EDGES_NS, dbPath });
|
|
121
|
+
if (existing?.found && existing.entry) {
|
|
122
|
+
const md = existing.entry.metadata;
|
|
123
|
+
const origins = Array.isArray(md.origin_refs) ? md.origin_refs : [];
|
|
124
|
+
if (!origins.includes(originRef))
|
|
125
|
+
origins.push(originRef);
|
|
126
|
+
await bridgeStoreEntry({
|
|
127
|
+
key,
|
|
128
|
+
value: desc || `${e.source} ${e.relation} ${e.target}`,
|
|
129
|
+
namespace: KG_EDGES_NS,
|
|
130
|
+
dbPath,
|
|
131
|
+
upsert: true,
|
|
132
|
+
generateEmbeddingFlag: false,
|
|
133
|
+
tags: ['kg', normalizeName(e.relation)],
|
|
134
|
+
metadata: { ...md, origin_refs: origins.slice(-100) },
|
|
135
|
+
});
|
|
136
|
+
edgesMerged++;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
await bridgeStoreEntry({
|
|
140
|
+
key,
|
|
141
|
+
value: desc || `${e.source} ${e.relation} ${e.target}`,
|
|
142
|
+
namespace: KG_EDGES_NS,
|
|
143
|
+
dbPath,
|
|
144
|
+
upsert: true,
|
|
145
|
+
generateEmbeddingFlag: false,
|
|
146
|
+
tags: ['kg', normalizeName(e.relation)],
|
|
147
|
+
metadata: {
|
|
148
|
+
kg: 'edge', src: srcKey, dst: dstKey,
|
|
149
|
+
relation: normalizeName(e.relation),
|
|
150
|
+
source_name: e.source, target_name: e.target,
|
|
151
|
+
description: desc,
|
|
152
|
+
origin_refs: [originRef],
|
|
153
|
+
valid_from: Date.now(),
|
|
154
|
+
valid_to: null,
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
edgesAdded++;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return { success: true, nodesAdded, nodesMerged, edgesAdded, edgesMerged };
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
return {
|
|
164
|
+
success: false, nodesAdded, nodesMerged, edgesAdded, edgesMerged,
|
|
165
|
+
error: err instanceof Error ? err.message : String(err),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** Stage-2 of cognee's curator/writer distillation: the CALLER (an LLM agent)
|
|
170
|
+
* proposes candidate rules; this accepts each unless a semantically
|
|
171
|
+
* near-identical rule exists (embedding dedup — deterministic keys can't
|
|
172
|
+
* collapse paraphrases). Accepted rules are stored both as KG nodes
|
|
173
|
+
* (node_set=rules) and as plain `rules`-namespace entries so the existing
|
|
174
|
+
* injection/search surfaces pick them up with zero new plumbing. */
|
|
175
|
+
export async function kgIngestRules(options) {
|
|
176
|
+
const verdicts = [];
|
|
177
|
+
const threshold = options.dedupThreshold ?? 0.78;
|
|
178
|
+
let accepted = 0;
|
|
179
|
+
try {
|
|
180
|
+
for (const r of (options.rules ?? []).slice(0, 50)) {
|
|
181
|
+
const rule = r?.rule?.trim();
|
|
182
|
+
if (!rule || rule.length < 8) {
|
|
183
|
+
verdicts.push({ rule: r?.rule ?? '', verdict: 'invalid' });
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const similar = await bridgeSearchEntries({
|
|
187
|
+
query: rule, namespace: RULES_NS, limit: 1, threshold, dbPath: options.dbPath,
|
|
188
|
+
});
|
|
189
|
+
const top = similar?.results?.[0];
|
|
190
|
+
// Dedup on the RAW cosine (from provenance), not the blended rank score —
|
|
191
|
+
// the Phase 1 feedback blend shifts scores and would corrupt the gate.
|
|
192
|
+
const rawScore = top?.provenance?.startsWith('semantic:')
|
|
193
|
+
? parseFloat(top.provenance.slice('semantic:'.length)) : top?.score ?? 0;
|
|
194
|
+
if (top && rawScore >= threshold) {
|
|
195
|
+
verdicts.push({ rule, verdict: 'already_known', similarTo: top.key });
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
const key = `rule:${normalizeName(rule).slice(0, 120)}`;
|
|
199
|
+
await bridgeStoreEntry({
|
|
200
|
+
key, value: rule + (r.context ? `\n(context: ${r.context.slice(0, 500)})` : ''),
|
|
201
|
+
namespace: RULES_NS, dbPath: options.dbPath, upsert: true,
|
|
202
|
+
tags: ['rule'],
|
|
203
|
+
metadata: { origin_refs: [options.originRef], derived_from: options.originRef },
|
|
204
|
+
});
|
|
205
|
+
await kgIngest({
|
|
206
|
+
nodes: [{ name: rule.slice(0, MAX_NAME_LEN), type: 'Rule', description: rule, nodeSet: 'rules' }],
|
|
207
|
+
originRef: options.originRef,
|
|
208
|
+
dbPath: options.dbPath,
|
|
209
|
+
});
|
|
210
|
+
verdicts.push({ rule, verdict: 'accepted' });
|
|
211
|
+
accepted++;
|
|
212
|
+
}
|
|
213
|
+
return { success: true, verdicts, accepted };
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
return { success: false, verdicts, accepted, error: err instanceof Error ? err.message : String(err) };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** List stored rules (for injection or review). */
|
|
220
|
+
export async function kgListRules(options) {
|
|
221
|
+
const res = await bridgeListEntries({ namespace: RULES_NS, limit: options?.limit ?? 50, dbPath: options?.dbPath });
|
|
222
|
+
return (res?.entries ?? []).map(e => ({ rule: e.content, key: e.key }));
|
|
223
|
+
}
|
|
224
|
+
/** Vector-seed → neighborhood → triplet ranking (cognee's brute-force triplet
|
|
225
|
+
* search, scaled down). Seed scores already carry the Phase 1 feedback blend. */
|
|
226
|
+
export async function kgSearch(options) {
|
|
227
|
+
try {
|
|
228
|
+
const limit = options.limit ?? 8;
|
|
229
|
+
const seedsRes = await bridgeSearchEntries({
|
|
230
|
+
query: options.query, namespace: KG_NODES_NS, limit: 15, threshold: 0.25, dbPath: options.dbPath,
|
|
231
|
+
});
|
|
232
|
+
let seedResults = seedsRes?.results ?? [];
|
|
233
|
+
if (options.nodeSet) {
|
|
234
|
+
const ns = normalizeName(options.nodeSet);
|
|
235
|
+
seedResults = seedResults.filter(r => (r.tags ?? []).includes(ns));
|
|
236
|
+
}
|
|
237
|
+
if (!seedResults.length)
|
|
238
|
+
return { success: true, context: '', triplets: [], seeds: [] };
|
|
239
|
+
const seedScore = new Map();
|
|
240
|
+
for (const s of seedResults)
|
|
241
|
+
seedScore.set(s.key, s.score);
|
|
242
|
+
// Full edge scan (see monolean note in module header).
|
|
243
|
+
const edgesRes = await bridgeListEntries({ namespace: KG_EDGES_NS, limit: MAX_LIST, dbPath: options.dbPath });
|
|
244
|
+
const edges = (edgesRes?.entries ?? []).filter(e => {
|
|
245
|
+
const md = e.metadata;
|
|
246
|
+
return md?.kg === 'edge' && md.valid_to == null;
|
|
247
|
+
});
|
|
248
|
+
const triplets = edges
|
|
249
|
+
.map(e => {
|
|
250
|
+
const md = e.metadata;
|
|
251
|
+
const src = String(md.src ?? '');
|
|
252
|
+
const dst = String(md.dst ?? '');
|
|
253
|
+
const sSrc = seedScore.get(src) ?? 0;
|
|
254
|
+
const sDst = seedScore.get(dst) ?? 0;
|
|
255
|
+
if (sSrc === 0 && sDst === 0)
|
|
256
|
+
return null;
|
|
257
|
+
// Both endpoints seeded beats one; the unseeded endpoint contributes a
|
|
258
|
+
// neutral 0.35 so bridging edges from a strong seed still surface.
|
|
259
|
+
const score = (Math.max(sSrc, 0.35) + Math.max(sDst, 0.35)) / 2 + (sSrc > 0 && sDst > 0 ? 0.1 : 0);
|
|
260
|
+
return {
|
|
261
|
+
source: String(md.source_name ?? src),
|
|
262
|
+
relation: String(md.relation ?? 'related_to'),
|
|
263
|
+
target: String(md.target_name ?? dst),
|
|
264
|
+
fact: e.content,
|
|
265
|
+
score,
|
|
266
|
+
};
|
|
267
|
+
})
|
|
268
|
+
.filter((t) => !!t)
|
|
269
|
+
.sort((a, b) => b.score - a.score)
|
|
270
|
+
.slice(0, limit);
|
|
271
|
+
const seeds = seedResults.slice(0, limit).map(s => {
|
|
272
|
+
// metadata is not in search results; parse from rendered content "name — description"
|
|
273
|
+
const dash = s.content.indexOf(' — ');
|
|
274
|
+
return {
|
|
275
|
+
name: dash > 0 ? s.content.slice(0, dash) : s.key,
|
|
276
|
+
type: s.key.split(':')[1] ?? 'entity',
|
|
277
|
+
description: dash > 0 ? s.content.slice(dash + 3) : s.content,
|
|
278
|
+
score: s.score,
|
|
279
|
+
id: s.id,
|
|
280
|
+
};
|
|
281
|
+
});
|
|
282
|
+
const context = [
|
|
283
|
+
...triplets.map(t => `${t.source} —${t.relation}→ ${t.target}${t.fact && t.fact !== `${t.source} ${t.relation} ${t.target}` ? ` (${t.fact})` : ''}`),
|
|
284
|
+
...(triplets.length ? [] : seeds.map(s => `${s.name}: ${s.description}`)),
|
|
285
|
+
].join('\n');
|
|
286
|
+
return { success: true, context, triplets, seeds };
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
return { success: false, context: '', triplets: [], seeds: [], error: err instanceof Error ? err.message : String(err) };
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// ── Glossary (anti-duplicate-entity injection for extraction prompts) ──
|
|
293
|
+
export async function kgGlossary(options) {
|
|
294
|
+
const res = await bridgeListEntries({ namespace: KG_NODES_NS, limit: MAX_LIST, dbPath: options?.dbPath });
|
|
295
|
+
const nodes = (res?.entries ?? [])
|
|
296
|
+
// Glossary is for ENTITY name reuse — rule prose and extraction-source
|
|
297
|
+
// Session nodes would drown it.
|
|
298
|
+
.filter(e => {
|
|
299
|
+
const md = e.metadata;
|
|
300
|
+
const t = String(md?.type ?? '').toLowerCase();
|
|
301
|
+
return md?.node_set !== 'rules' && t !== 'rule' && t !== 'session';
|
|
302
|
+
})
|
|
303
|
+
.map(e => {
|
|
304
|
+
const md = e.metadata;
|
|
305
|
+
const fw = typeof md.feedback_weight === 'number' ? md.feedback_weight : 0.5;
|
|
306
|
+
const freq = typeof md.frequency_weight === 'number' ? md.frequency_weight : 0;
|
|
307
|
+
const version = typeof md.version === 'number' ? md.version : 1;
|
|
308
|
+
return { name: String(md.name ?? e.key), rank: version + freq + fw };
|
|
309
|
+
})
|
|
310
|
+
.sort((a, b) => b.rank - a.rank);
|
|
311
|
+
const seen = new Set();
|
|
312
|
+
const out = [];
|
|
313
|
+
for (const n of nodes) {
|
|
314
|
+
const norm = normalizeName(n.name);
|
|
315
|
+
if (seen.has(norm))
|
|
316
|
+
continue;
|
|
317
|
+
seen.add(norm);
|
|
318
|
+
out.push(n.name);
|
|
319
|
+
if (out.length >= (options?.limit ?? 40))
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
return out;
|
|
323
|
+
}
|
|
324
|
+
// ── Rollback (per-origin bad-ingest recovery) ───────────────────────
|
|
325
|
+
/** Delete every node/edge/rule whose ONLY origin is `originRef`. Elements with
|
|
326
|
+
* other origins survive (shared knowledge isn't destroyed by one bad run);
|
|
327
|
+
* their origin lists retain the ref — acceptable residue.
|
|
328
|
+
* // monolean: no origin-list rewrite — needs an update-by-id bridge API */
|
|
329
|
+
export async function kgRollback(options) {
|
|
330
|
+
let deleted = 0, retained = 0;
|
|
331
|
+
try {
|
|
332
|
+
for (const ns of [KG_NODES_NS, KG_EDGES_NS, RULES_NS]) {
|
|
333
|
+
const res = await bridgeListEntries({ namespace: ns, limit: MAX_LIST, dbPath: options.dbPath });
|
|
334
|
+
for (const e of res?.entries ?? []) {
|
|
335
|
+
const origins = e.metadata?.origin_refs;
|
|
336
|
+
if (!Array.isArray(origins) || !origins.includes(options.originRef))
|
|
337
|
+
continue;
|
|
338
|
+
if (origins.length <= 1) {
|
|
339
|
+
const del = await bridgeDeleteEntry({ id: e.id, namespace: ns, dbPath: options.dbPath });
|
|
340
|
+
if (del?.deleted)
|
|
341
|
+
deleted++;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
retained++;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return { success: true, deleted, retained };
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
return { success: false, deleted, retained, error: err instanceof Error ? err.message : String(err) };
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/** Entities whose descriptions are stale relative to their connectivity —
|
|
355
|
+
* the LLM half runs in the LIVE agent: it rewrites each candidate's
|
|
356
|
+
* description from the neighborhood facts and resubmits via memory_kg_ingest
|
|
357
|
+
* (longer descriptions win on merge). No LLM here (fully local constraint). */
|
|
358
|
+
export async function kgConsolidateCandidates(options) {
|
|
359
|
+
const minEdges = options?.minEdges ?? 3;
|
|
360
|
+
const [nodesRes, edgesRes] = await Promise.all([
|
|
361
|
+
bridgeListEntries({ namespace: KG_NODES_NS, limit: MAX_LIST, dbPath: options?.dbPath }),
|
|
362
|
+
bridgeListEntries({ namespace: KG_EDGES_NS, limit: MAX_LIST, dbPath: options?.dbPath }),
|
|
363
|
+
]);
|
|
364
|
+
const edgesByNode = new Map();
|
|
365
|
+
for (const e of edgesRes?.entries ?? []) {
|
|
366
|
+
const md = e.metadata;
|
|
367
|
+
for (const end of [String(md.src ?? ''), String(md.dst ?? '')]) {
|
|
368
|
+
if (!end)
|
|
369
|
+
continue;
|
|
370
|
+
const list = edgesByNode.get(end) ?? [];
|
|
371
|
+
list.push(e.content);
|
|
372
|
+
edgesByNode.set(end, list);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return (nodesRes?.entries ?? [])
|
|
376
|
+
.map(n => {
|
|
377
|
+
const md = n.metadata;
|
|
378
|
+
const facts = edgesByNode.get(n.key) ?? [];
|
|
379
|
+
return {
|
|
380
|
+
name: String(md.name ?? n.key),
|
|
381
|
+
type: String(md.type ?? 'entity'),
|
|
382
|
+
description: String(md.description ?? ''),
|
|
383
|
+
edgeCount: facts.length,
|
|
384
|
+
neighborhood: facts.slice(0, 12),
|
|
385
|
+
};
|
|
386
|
+
})
|
|
387
|
+
// Cap the growth target at MAX_DESC_LEN — a very-high-degree node whose
|
|
388
|
+
// description is already at the cap can never "grow out" of candidacy and
|
|
389
|
+
// would otherwise permanently occupy a slot.
|
|
390
|
+
.filter(c => c.edgeCount >= minEdges && c.description.length < Math.min(40 * c.edgeCount, MAX_DESC_LEN))
|
|
391
|
+
.sort((a, b) => b.edgeCount - a.edgeCount)
|
|
392
|
+
.slice(0, options?.limit ?? 10);
|
|
393
|
+
}
|
|
394
|
+
// ── Stats ───────────────────────────────────────────────────────────
|
|
395
|
+
export async function kgStats(options) {
|
|
396
|
+
const [n, e, r] = await Promise.all([
|
|
397
|
+
bridgeListEntries({ namespace: KG_NODES_NS, limit: MAX_LIST, dbPath: options?.dbPath }),
|
|
398
|
+
bridgeListEntries({ namespace: KG_EDGES_NS, limit: MAX_LIST, dbPath: options?.dbPath }),
|
|
399
|
+
bridgeListEntries({ namespace: RULES_NS, limit: MAX_LIST, dbPath: options?.dbPath }),
|
|
400
|
+
]);
|
|
401
|
+
return { nodes: n?.total ?? 0, edges: e?.total ?? 0, rules: r?.total ?? 0 };
|
|
402
|
+
}
|
|
403
|
+
// ── Heuristic extraction (LLM-less fallback) ────────────────────────
|
|
404
|
+
/** Regex extraction for when no LLM is in the loop (memory-palace lineage):
|
|
405
|
+
* proper-noun phrases and `code identifiers` become entities, sentence
|
|
406
|
+
* co-occurrence becomes relates_to edges. Lower-trust by design — real
|
|
407
|
+
* entity/relation quality comes from the LLM path (memory_kg_ingest called
|
|
408
|
+
* by the live agent, or the org coordinator's org_learn tool). */
|
|
409
|
+
export function heuristicExtract(text, opts) {
|
|
410
|
+
const nodes = new Map();
|
|
411
|
+
const edges = [];
|
|
412
|
+
const src = String(text || '').slice(0, 50_000);
|
|
413
|
+
const sentences = src.split(/(?<=[.!?])\s+|\n+/).slice(0, 400);
|
|
414
|
+
const STOPWORDS = new Set(['The', 'This', 'That', 'These', 'Those', 'It', 'A', 'An', 'If', 'When', 'While', 'But', 'And', 'Or', 'For', 'Then', 'Also', 'Not', 'No', 'Yes', 'I', 'We', 'You', 'They', 'He', 'She', 'Run', 'Outcome', 'Assets', 'Goal', 'Org',
|
|
415
|
+
'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December',
|
|
416
|
+
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);
|
|
417
|
+
for (const sentence of sentences) {
|
|
418
|
+
const found = [];
|
|
419
|
+
// Proper-noun phrases: consecutive Capitalized words (2-40 chars each).
|
|
420
|
+
for (const m of sentence.matchAll(/\b([A-Z][a-zA-Z0-9_-]{1,40}(?:\s+[A-Z][a-zA-Z0-9_-]{1,40}){0,3})\b/g)) {
|
|
421
|
+
const phrase = m[1];
|
|
422
|
+
if (STOPWORDS.has(phrase))
|
|
423
|
+
continue;
|
|
424
|
+
found.push(phrase);
|
|
425
|
+
}
|
|
426
|
+
// Code identifiers in backticks or dotted/slashed paths.
|
|
427
|
+
for (const m of sentence.matchAll(/`([^`\n]{2,80})`/g))
|
|
428
|
+
found.push(m[1]);
|
|
429
|
+
const uniq = [...new Set(found)].slice(0, 8);
|
|
430
|
+
for (const name of uniq) {
|
|
431
|
+
if (!nodes.has(normalizeName(name))) {
|
|
432
|
+
nodes.set(normalizeName(name), { name, type: /[./`(]/.test(name) ? 'CodeElement' : 'Entity', description: sentence.trim().slice(0, 300) });
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
// Co-occurrence edges within a sentence (first mention chains to the rest).
|
|
436
|
+
for (let i = 1; i < uniq.length && i < 4; i++) {
|
|
437
|
+
edges.push({ source: uniq[0], target: uniq[i], relation: 'relates_to', description: sentence.trim().slice(0, 300) });
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
if (opts?.sourceName) {
|
|
441
|
+
const srcNode = { name: opts.sourceName, type: 'Session', description: 'extraction source' };
|
|
442
|
+
nodes.set(normalizeName(opts.sourceName), srcNode);
|
|
443
|
+
for (const n of [...nodes.values()].slice(0, 30)) {
|
|
444
|
+
if (n.name !== opts.sourceName)
|
|
445
|
+
edges.push({ source: n.name, target: opts.sourceName, relation: 'mentioned_in', sourceType: n.type, targetType: 'Session' });
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return { nodes: [...nodes.values()].slice(0, 100), edges: edges.slice(0, 200) };
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=memory-kg.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Router + RRF fusion — Phase 4 of the cognee port plan.
|
|
3
|
+
*
|
|
4
|
+
* routeQuery: cognee's rule-based (non-LLM) recall router scaled to our four
|
|
5
|
+
* retrieval surfaces — document chunks, knowledge-graph triplets, distilled
|
|
6
|
+
* rules, and org/pattern memories. Weighted regex rules with a negation
|
|
7
|
+
* window, a confidence gate (winner must be ≥2× runner-up), and an in-memory
|
|
8
|
+
* misroute counter for debuggability.
|
|
9
|
+
*
|
|
10
|
+
* rrfFuse: Reciprocal Rank Fusion across result lists whose raw scores are
|
|
11
|
+
* not comparable (cosine vs blended vs keyword) — `Σ 1/(rrf_k + rank + 1)`
|
|
12
|
+
* with cognee's adaptive rrf_k = max(30, min(60, 20 + 2·top_k)).
|
|
13
|
+
*
|
|
14
|
+
* @module v1/cli/memory/query-router
|
|
15
|
+
*/
|
|
16
|
+
export type RetrievalSurface = 'chunks' | 'kg' | 'rules' | 'memory';
|
|
17
|
+
export interface RouteDecision {
|
|
18
|
+
/** Surfaces to hit, best first. Always non-empty ('chunks' is the fallback). */
|
|
19
|
+
surfaces: RetrievalSurface[];
|
|
20
|
+
/** Winner's score ≥ 2× runner-up (cognee's confidence gate). Low-confidence
|
|
21
|
+
* routes should hit ALL surfaces and fuse. */
|
|
22
|
+
confident: boolean;
|
|
23
|
+
scores: Record<RetrievalSurface, number>;
|
|
24
|
+
}
|
|
25
|
+
export declare function routeQuery(query: string): RouteDecision;
|
|
26
|
+
/** Call when a route proved wrong (caller retried another surface) — counts
|
|
27
|
+
* feed debugging, mirroring cognee's record_override telemetry. */
|
|
28
|
+
export declare function recordRouteOverride(from: RetrievalSurface, to: RetrievalSurface): void;
|
|
29
|
+
/** In-memory counts from this process only; pass merged=true to include the
|
|
30
|
+
* persisted cross-process counts from .monomind/metrics/route-overrides.json. */
|
|
31
|
+
export declare function getRouteOverrides(merged?: boolean): Record<string, number>;
|
|
32
|
+
export interface FusableResult {
|
|
33
|
+
/** Stable identity across lists (id or key). */
|
|
34
|
+
id: string;
|
|
35
|
+
/** Importance factor input in [0,1]; defaults 0.5. */
|
|
36
|
+
importance?: number;
|
|
37
|
+
[extra: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
/** Fuse ranked lists via RRF × importance factor (cognee hybrid/ranking.py).
|
|
40
|
+
* Input lists must each be ranked best-first; raw scores are ignored. */
|
|
41
|
+
export declare function rrfFuse<T extends FusableResult>(lists: T[][], topK: number): (T & {
|
|
42
|
+
rrf: number;
|
|
43
|
+
})[];
|
|
44
|
+
//# sourceMappingURL=query-router.d.ts.map
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Router + RRF fusion — Phase 4 of the cognee port plan.
|
|
3
|
+
*
|
|
4
|
+
* routeQuery: cognee's rule-based (non-LLM) recall router scaled to our four
|
|
5
|
+
* retrieval surfaces — document chunks, knowledge-graph triplets, distilled
|
|
6
|
+
* rules, and org/pattern memories. Weighted regex rules with a negation
|
|
7
|
+
* window, a confidence gate (winner must be ≥2× runner-up), and an in-memory
|
|
8
|
+
* misroute counter for debuggability.
|
|
9
|
+
*
|
|
10
|
+
* rrfFuse: Reciprocal Rank Fusion across result lists whose raw scores are
|
|
11
|
+
* not comparable (cosine vs blended vs keyword) — `Σ 1/(rrf_k + rank + 1)`
|
|
12
|
+
* with cognee's adaptive rrf_k = max(30, min(60, 20 + 2·top_k)).
|
|
13
|
+
*
|
|
14
|
+
* @module v1/cli/memory/query-router
|
|
15
|
+
*/
|
|
16
|
+
import fs from 'node:fs';
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
// Order matters only for tie display; scoring is additive per surface.
|
|
19
|
+
const ROUTE_RULES = [
|
|
20
|
+
// Rules: "how should I", conventions, policies, dos and don'ts.
|
|
21
|
+
{ surface: 'rules', pattern: /\b(rules?|conventions?|policy|policies|guidelines?|best practices?|should (i|we|you)|always|never|allowed|forbidden)\b/i, weight: 2 },
|
|
22
|
+
// KG: relationships, structure, "how does X relate to / depend on Y", who/what connects.
|
|
23
|
+
{ surface: 'kg', pattern: /\b(relat(e|es|ed|ionship)|depend(s|ency|encies)?|connect(s|ed|ion)?|link(s|ed)?|between|structure|architecture|who (owns|maintains|uses)|what (uses|calls|imports))\b/i, weight: 2 },
|
|
24
|
+
{ surface: 'kg', pattern: /\b(entity|entities|graph|triplet)\b/i, weight: 1.5 },
|
|
25
|
+
// Memory: past runs/decisions/outcomes/history.
|
|
26
|
+
{ surface: 'memory', pattern: /\b(last (run|time)|previous(ly)?|history|past|earlier|before|decision|decided|outcome|learned|remember)\b/i, weight: 2 },
|
|
27
|
+
// Chunks: docs/specs/definitions/how-to content.
|
|
28
|
+
{ surface: 'chunks', pattern: /\b(doc(s|ument|umentation)?|spec|readme|guide|manual|note(s)?|wrote|written|what is|how (do|to)|explain|describe|definition)\b/i, weight: 1.5 },
|
|
29
|
+
];
|
|
30
|
+
/** Negated mentions must not vote: "not about the architecture" (cognee uses
|
|
31
|
+
* a 20-char pre-match negation window; same here). */
|
|
32
|
+
const NEGATION_RE = /\b(not?|without|except|ignore|don'?t|excluding)\b[^.!?]{0,20}$/i;
|
|
33
|
+
const overrideCounts = {};
|
|
34
|
+
/** Overrides persist across processes (the CLI is one-shot — an in-memory
|
|
35
|
+
* counter alone evaporates before doctor/debugging can read it). Best-effort
|
|
36
|
+
* read-merge-write of a tiny JSON file; never throws into the caller. */
|
|
37
|
+
const OVERRIDES_FILE = ['.monomind', 'metrics', 'route-overrides.json'];
|
|
38
|
+
function persistOverride(key) {
|
|
39
|
+
try {
|
|
40
|
+
const file = path.join(process.cwd(), ...OVERRIDES_FILE);
|
|
41
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
42
|
+
let disk = {};
|
|
43
|
+
try {
|
|
44
|
+
disk = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
45
|
+
}
|
|
46
|
+
catch { /* fresh file */ }
|
|
47
|
+
disk[key] = (typeof disk[key] === 'number' ? disk[key] : 0) + 1;
|
|
48
|
+
fs.writeFileSync(file, JSON.stringify(disk, null, 2));
|
|
49
|
+
}
|
|
50
|
+
catch { /* telemetry must never block or throw */ }
|
|
51
|
+
}
|
|
52
|
+
export function routeQuery(query) {
|
|
53
|
+
const q = String(query ?? '').slice(0, 2000);
|
|
54
|
+
const scores = { chunks: 0.5, kg: 0, rules: 0, memory: 0 }; // chunks = weak prior
|
|
55
|
+
for (const rule of ROUTE_RULES) {
|
|
56
|
+
for (const m of q.matchAll(new RegExp(rule.pattern.source, rule.pattern.flags + 'g'))) {
|
|
57
|
+
const before = q.slice(Math.max(0, (m.index ?? 0) - 26), m.index ?? 0);
|
|
58
|
+
if (NEGATION_RE.test(before))
|
|
59
|
+
continue;
|
|
60
|
+
scores[rule.surface] += rule.weight;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const ranked = Object.entries(scores)
|
|
64
|
+
.sort((a, b) => b[1] - a[1]);
|
|
65
|
+
const [winner, runnerUp] = ranked;
|
|
66
|
+
const confident = winner[1] >= 2 * Math.max(runnerUp[1], 0.25);
|
|
67
|
+
const surfaces = confident
|
|
68
|
+
? [winner[0]]
|
|
69
|
+
: ranked.filter(([, s]) => s > 0).map(([k]) => k);
|
|
70
|
+
return { surfaces: surfaces.length ? surfaces : ['chunks'], confident, scores };
|
|
71
|
+
}
|
|
72
|
+
/** Call when a route proved wrong (caller retried another surface) — counts
|
|
73
|
+
* feed debugging, mirroring cognee's record_override telemetry. */
|
|
74
|
+
export function recordRouteOverride(from, to) {
|
|
75
|
+
const key = `${from}->${to}`;
|
|
76
|
+
overrideCounts[key] = (overrideCounts[key] ?? 0) + 1;
|
|
77
|
+
persistOverride(key);
|
|
78
|
+
}
|
|
79
|
+
/** In-memory counts from this process only; pass merged=true to include the
|
|
80
|
+
* persisted cross-process counts from .monomind/metrics/route-overrides.json. */
|
|
81
|
+
export function getRouteOverrides(merged = false) {
|
|
82
|
+
if (!merged)
|
|
83
|
+
return { ...overrideCounts };
|
|
84
|
+
try {
|
|
85
|
+
const disk = JSON.parse(fs.readFileSync(path.join(process.cwd(), ...OVERRIDES_FILE), 'utf-8'));
|
|
86
|
+
return { ...disk }; // disk already includes this process's persisted increments
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return { ...overrideCounts };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Fuse ranked lists via RRF × importance factor (cognee hybrid/ranking.py).
|
|
93
|
+
* Input lists must each be ranked best-first; raw scores are ignored. */
|
|
94
|
+
export function rrfFuse(lists, topK) {
|
|
95
|
+
const rrfK = Math.max(30, Math.min(60, 20 + 2 * topK));
|
|
96
|
+
const byId = new Map();
|
|
97
|
+
for (const list of lists) {
|
|
98
|
+
list.forEach((item, rank) => {
|
|
99
|
+
const importance = typeof item.importance === 'number' ? item.importance : 0.5;
|
|
100
|
+
const contribution = (1 / (rrfK + rank + 1)) * (0.75 + 0.5 * importance);
|
|
101
|
+
const existing = byId.get(item.id);
|
|
102
|
+
if (existing)
|
|
103
|
+
existing.rrf += contribution;
|
|
104
|
+
else
|
|
105
|
+
byId.set(item.id, { item, rrf: contribution });
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return [...byId.values()]
|
|
109
|
+
.sort((a, b) => b.rrf - a.rrf)
|
|
110
|
+
.slice(0, topK)
|
|
111
|
+
.map(({ item, rrf }) => ({ ...item, rrf }));
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=query-router.js.map
|
|
@@ -44,6 +44,8 @@ export declare class OrgDaemon {
|
|
|
44
44
|
private globalSubscribers;
|
|
45
45
|
private leases;
|
|
46
46
|
private forwarders;
|
|
47
|
+
private watchdogs;
|
|
48
|
+
private stopping;
|
|
47
49
|
constructor(root: string, opts?: DaemonOpts);
|
|
48
50
|
/** Publish this daemon's inbox so orgs started AFTER this call register with the broker. */
|
|
49
51
|
setInboxUrl(url: string): void;
|
|
@@ -98,6 +100,7 @@ export declare class OrgDaemon {
|
|
|
98
100
|
* Fire-and-forget — errors are logged but don't propagate to the sender. */
|
|
99
101
|
private autoWake;
|
|
100
102
|
stopOrg(name: string): Promise<void>;
|
|
103
|
+
private finishStop;
|
|
101
104
|
stopAll(): Promise<void>;
|
|
102
105
|
private orgMemoryNamespace;
|
|
103
106
|
/** Store dir for org cross-run memory — inside the org root so the bridge's
|
|
@@ -109,6 +112,16 @@ export declare class OrgDaemon {
|
|
|
109
112
|
* unusual daemon setups) that redirect would write into the WRONG project's
|
|
110
113
|
* memory — verify the guard kept our path, and skip org memory otherwise. */
|
|
111
114
|
private orgMemoryUsable;
|
|
115
|
+
/** Namespace for a role's PRIVATE memories, inside the org memory DB. */
|
|
116
|
+
private agentMemoryNamespace;
|
|
117
|
+
/** org_remember implementation: a deliberate write to org-shared or
|
|
118
|
+
* role-private memory (both in the org memory DB, split by namespace). */
|
|
119
|
+
private rememberOrgMemory;
|
|
120
|
+
/** Entry IDs served by org_recall during the current run, per org. This is
|
|
121
|
+
* the usage record the run-outcome auto-rating consumes (cognee's
|
|
122
|
+
* used_graph_element_ids pattern) — recall renders text to the agent, so
|
|
123
|
+
* the IDs must be captured here or they're gone. */
|
|
124
|
+
private recallUsage;
|
|
112
125
|
/** org_recall implementation: search the org's memory namespace via the
|
|
113
126
|
* memory bridge (semantic when the local model is available, tokenized
|
|
114
127
|
* keyword otherwise). Failures return a message, never throw into the tool. */
|
|
@@ -121,6 +134,11 @@ export declare class OrgDaemon {
|
|
|
121
134
|
text: string;
|
|
122
135
|
hits: number;
|
|
123
136
|
}>;
|
|
137
|
+
/** org_learn implementation: merge coordinator-extracted entities/relations/
|
|
138
|
+
* rules into the org's knowledge graph (LLM extraction happens inside the
|
|
139
|
+
* agent's own subscription-auth SDK session — no separate LLM call here). */
|
|
140
|
+
private orgLearnedRuns;
|
|
141
|
+
private learnOrgKnowledge;
|
|
124
142
|
/** Persist the run's outcome into cross-run org memory so org_recall (and
|
|
125
143
|
* future runs) can find it by meaning, not just recency. Best-effort. */
|
|
126
144
|
private storeRunMemory;
|