@monoes/monomindcli 2.16.11 → 2.16.13
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/coder.md +1 -1
- package/.claude/agents/engineering/engineering-devops-automator.md +1 -1
- package/.claude/agents/github/repo-architect.md +1 -1
- package/.claude/agents/testing/production-validator.md +1 -1
- package/.claude/agents/testing/testing-tool-evaluator.md +1 -1
- package/.claude/commands/github/pr-manager.md +1 -1
- package/.claude/helpers/pick-rank.cjs +34 -4
- package/.claude/skills/monolean-audit/SKILL.md +1 -1
- package/dist/src/commands/cleanup-data.d.ts +30 -0
- package/dist/src/commands/cleanup-data.d.ts.map +1 -0
- package/dist/src/commands/cleanup-data.js +138 -0
- package/dist/src/commands/cleanup-data.js.map +1 -0
- package/dist/src/commands/cleanup-origin.d.ts +24 -0
- package/dist/src/commands/cleanup-origin.d.ts.map +1 -0
- package/dist/src/commands/cleanup-origin.js +67 -0
- package/dist/src/commands/cleanup-origin.js.map +1 -0
- package/dist/src/commands/cleanup-scratch.d.ts +43 -0
- package/dist/src/commands/cleanup-scratch.d.ts.map +1 -0
- package/dist/src/commands/cleanup-scratch.js +125 -0
- package/dist/src/commands/cleanup-scratch.js.map +1 -0
- package/dist/src/commands/cleanup.d.ts +2 -39
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +9 -296
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/doctor-gitignore-checks.d.ts +10 -0
- package/dist/src/commands/doctor-gitignore-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-gitignore-checks.js +141 -0
- package/dist/src/commands/doctor-gitignore-checks.js.map +1 -0
- package/dist/src/commands/doctor-helpers-checks.d.ts +10 -0
- package/dist/src/commands/doctor-helpers-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-helpers-checks.js +292 -0
- package/dist/src/commands/doctor-helpers-checks.js.map +1 -0
- package/dist/src/commands/doctor-memory-checks.d.ts +47 -0
- package/dist/src/commands/doctor-memory-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-memory-checks.js +298 -0
- package/dist/src/commands/doctor-memory-checks.js.map +1 -0
- package/dist/src/commands/doctor-monograph-checks.d.ts +9 -0
- package/dist/src/commands/doctor-monograph-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-monograph-checks.js +331 -0
- package/dist/src/commands/doctor-monograph-checks.js.map +1 -0
- package/dist/src/commands/doctor-project-checks.d.ts +7 -66
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +10 -1331
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor-routing-checks.d.ts +10 -0
- package/dist/src/commands/doctor-routing-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-routing-checks.js +194 -0
- package/dist/src/commands/doctor-routing-checks.js.map +1 -0
- package/dist/src/commands/doctor-worker-checks.d.ts +17 -0
- package/dist/src/commands/doctor-worker-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-worker-checks.js +122 -0
- package/dist/src/commands/doctor-worker-checks.js.map +1 -0
- package/dist/src/commands/hooks-routing-commands.js +1 -1
- package/dist/src/commands/hooks-routing-commands.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +6 -15
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/never-commit.d.ts +3 -3
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.js +1 -1
- package/dist/src/knowledge/document-store.js +1 -1
- package/dist/src/knowledge/document-store.js.map +1 -1
- package/dist/src/mcp-tools/hooks-edit-command.d.ts +10 -0
- package/dist/src/mcp-tools/hooks-edit-command.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-edit-command.js +247 -0
- package/dist/src/mcp-tools/hooks-edit-command.js.map +1 -0
- package/dist/src/mcp-tools/hooks-learning.d.ts +9 -0
- package/dist/src/mcp-tools/hooks-learning.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-learning.js +408 -0
- package/dist/src/mcp-tools/hooks-learning.js.map +1 -0
- package/dist/src/mcp-tools/hooks-metrics-list.d.ts +8 -0
- package/dist/src/mcp-tools/hooks-metrics-list.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-metrics-list.js +205 -0
- package/dist/src/mcp-tools/hooks-metrics-list.js.map +1 -0
- package/dist/src/mcp-tools/hooks-route.d.ts +12 -0
- package/dist/src/mcp-tools/hooks-route.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-route.js +251 -0
- package/dist/src/mcp-tools/hooks-route.js.map +1 -0
- package/dist/src/mcp-tools/hooks-routing.d.ts +6 -27
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +6 -1727
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/hooks-session.d.ts +9 -0
- package/dist/src/mcp-tools/hooks-session.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-session.js +243 -0
- package/dist/src/mcp-tools/hooks-session.js.map +1 -0
- package/dist/src/mcp-tools/hooks-task.d.ts +17 -0
- package/dist/src/mcp-tools/hooks-task.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-task.js +427 -0
- package/dist/src/mcp-tools/hooks-task.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +2 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2 -1
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +1 -1
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/memory/bm25-index.d.ts +2 -2
- package/dist/src/memory/bm25-index.js +2 -2
- package/dist/src/memory/embedding-operations.js +2 -2
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/entity-name-key.d.ts +1 -1
- package/dist/src/memory/entity-name-key.js +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +1 -1
- package/dist/src/memory/hnsw-operations.js +1 -1
- package/dist/src/memory/memory-bridge-backend.d.ts +43 -0
- package/dist/src/memory/memory-bridge-backend.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-backend.js +363 -0
- package/dist/src/memory/memory-bridge-backend.js.map +1 -0
- package/dist/src/memory/memory-bridge-core.d.ts +42 -0
- package/dist/src/memory/memory-bridge-core.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-core.js +126 -0
- package/dist/src/memory/memory-bridge-core.js.map +1 -0
- package/dist/src/memory/memory-bridge-entries.d.ts +131 -0
- package/dist/src/memory/memory-bridge-entries.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-entries.js +227 -0
- package/dist/src/memory/memory-bridge-entries.js.map +1 -0
- package/dist/src/memory/memory-bridge-feedback.d.ts +60 -0
- package/dist/src/memory/memory-bridge-feedback.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-feedback.js +118 -0
- package/dist/src/memory/memory-bridge-feedback.js.map +1 -0
- package/dist/src/memory/memory-bridge-paths.d.ts +123 -0
- package/dist/src/memory/memory-bridge-paths.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-paths.js +335 -0
- package/dist/src/memory/memory-bridge-paths.js.map +1 -0
- package/dist/src/memory/memory-bridge-search.d.ts +48 -0
- package/dist/src/memory/memory-bridge-search.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-search.js +383 -0
- package/dist/src/memory/memory-bridge-search.js.map +1 -0
- package/dist/src/memory/memory-bridge-sessions.d.ts +38 -0
- package/dist/src/memory/memory-bridge-sessions.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-sessions.js +109 -0
- package/dist/src/memory/memory-bridge-sessions.js.map +1 -0
- package/dist/src/memory/memory-bridge-store.d.ts +58 -0
- package/dist/src/memory/memory-bridge-store.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-store.js +201 -0
- package/dist/src/memory/memory-bridge-store.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts +10 -438
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +14 -1787
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-kg-claims.d.ts +52 -0
- package/dist/src/memory/memory-kg-claims.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-claims.js +99 -0
- package/dist/src/memory/memory-kg-claims.js.map +1 -0
- package/dist/src/memory/memory-kg-index.d.ts +86 -0
- package/dist/src/memory/memory-kg-index.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-index.js +256 -0
- package/dist/src/memory/memory-kg-index.js.map +1 -0
- package/dist/src/memory/memory-kg-ingest.d.ts +44 -0
- package/dist/src/memory/memory-kg-ingest.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-ingest.js +361 -0
- package/dist/src/memory/memory-kg-ingest.js.map +1 -0
- package/dist/src/memory/memory-kg-model.d.ts +168 -0
- package/dist/src/memory/memory-kg-model.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-model.js +158 -0
- package/dist/src/memory/memory-kg-model.js.map +1 -0
- package/dist/src/memory/memory-kg-names.d.ts +64 -0
- package/dist/src/memory/memory-kg-names.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-names.js +187 -0
- package/dist/src/memory/memory-kg-names.js.map +1 -0
- package/dist/src/memory/memory-kg-promote.d.ts +79 -0
- package/dist/src/memory/memory-kg-promote.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-promote.js +248 -0
- package/dist/src/memory/memory-kg-promote.js.map +1 -0
- package/dist/src/memory/memory-kg-rebuild.d.ts +77 -0
- package/dist/src/memory/memory-kg-rebuild.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rebuild.js +299 -0
- package/dist/src/memory/memory-kg-rebuild.js.map +1 -0
- package/dist/src/memory/memory-kg-rollback.d.ts +47 -0
- package/dist/src/memory/memory-kg-rollback.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rollback.js +193 -0
- package/dist/src/memory/memory-kg-rollback.js.map +1 -0
- package/dist/src/memory/memory-kg-rules.d.ts +64 -0
- package/dist/src/memory/memory-kg-rules.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rules.js +251 -0
- package/dist/src/memory/memory-kg-rules.js.map +1 -0
- package/dist/src/memory/memory-kg-scan.d.ts +118 -0
- package/dist/src/memory/memory-kg-scan.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-scan.js +209 -0
- package/dist/src/memory/memory-kg-scan.js.map +1 -0
- package/dist/src/memory/memory-kg-search.d.ts +80 -0
- package/dist/src/memory/memory-kg-search.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-search.js +239 -0
- package/dist/src/memory/memory-kg-search.js.map +1 -0
- package/dist/src/memory/memory-kg.d.ts +19 -547
- package/dist/src/memory/memory-kg.d.ts.map +1 -1
- package/dist/src/memory/memory-kg.js +10 -2389
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/orgrt/sandbox-stubs.d.ts +4 -0
- package/dist/src/orgrt/sandbox-stubs.d.ts.map +1 -1
- package/dist/src/orgrt/sandbox-stubs.js +12 -2
- package/dist/src/orgrt/sandbox-stubs.js.map +1 -1
- package/dist/src/ui/org-hil.mjs +1 -1
- package/dist/src/ui/routes-org-agents.mjs +318 -0
- package/dist/src/ui/routes-org-approvals.mjs +133 -0
- package/dist/src/ui/routes-org-config.mjs +459 -0
- package/dist/src/ui/routes-org-control.mjs +300 -0
- package/dist/src/ui/routes-org-files.mjs +172 -0
- package/dist/src/ui/routes-org-helpers.mjs +84 -0
- package/dist/src/ui/routes-org-knowledge.mjs +262 -0
- package/dist/src/ui/routes-org-lifecycle.mjs +224 -0
- package/dist/src/ui/routes-org-live.mjs +278 -0
- package/dist/src/ui/routes-org-mastermind.mjs +346 -0
- package/dist/src/ui/routes-org-planning.mjs +398 -0
- package/dist/src/ui/routes-org-runs.mjs +430 -0
- package/dist/src/ui/routes-org-status.mjs +342 -0
- package/dist/src/ui/routes-org-workflows.mjs +212 -0
- package/dist/src/ui/routes-org.mjs +26 -3847
- package/dist/src/ui/server.mjs +1 -1
- package/dist/src/utils/native-error.d.ts +1 -1
- package/dist/src/utils/native-error.js +1 -1
- package/dist/src/utils/paths.d.ts +2 -1
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +2 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/org-skills/adversarial-reviewer/SKILL.md +1 -1
- package/org-skills/board-deck-builder/SKILL.md +1 -1
- package/org-skills/code-reviewer/SKILL.md +1 -1
- package/org-skills/debugging-wizard/SKILL.md +1 -1
- package/org-skills/scientific-thinking-literature-review/SKILL.md +1 -1
- package/org-skills/scientific-thinking-scholar-evaluation/SKILL.md +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-kg-rebuild.js","sourceRoot":"","sources":["../../../src/memory/memory-kg-rebuild.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,6EAA6E;AAE7E;;;6EAG6E;AAC7E,MAAM,eAAe,GAAG,GAAG,CAAC;AAS5B,SAAS,UAAU,CAAC,KAA8C;IAChE,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,CAAoB,EAAE,CAAoB;IAChE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;6EA0B6E;AAC7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAGpC;IACC,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,oEAAoE;IACpE,sEAAsE;IACtE,mEAAmE;IACnE,uEAAuE;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG;YACP,KAAK,EAAE,UAAU;YACjB,aAAa,EAAE,uBAAuB;YACtC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;YACrC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;QAChC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC9E,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;QACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChG,CAAC,CAAC;IAEF,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,uEAAuE;IACvE,kEAAkE;IAClE,qEAAqE;IACrE,yEAAyE;IACzE,uEAAuE;IACvE,0EAA0E;IAC1E,2BAA2B;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;YAC7F,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAgE;QAC1E,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;QACvC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;QACvC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;KACxC,CAAC;IAEF,IAAI,CAAC;QACH,KAAK,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,MAAM,EAAE,CAAC;YAC1C,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,kBAAkB;YACtF,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,SAAS,CAAC;gBACR,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,mEAAmE;oBACnE,mEAAmE;oBACnE,MAAM,GAAG;wBACP,GAAG,MAAM;wBACT,KAAK,EAAE,QAAQ;wBACf,SAAS,EAAE,IAAI;wBACf,KAAK,EAAE,GAAG,SAAS,sCAAsC;qBAC1D,CAAC;oBACF,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzD,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;oBACzD,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;wBAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;wBACjC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;wBACjC,IAAI,GAAG,EAAE,CAAC;4BACR,MAAM,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;4BACvC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAClB,CAAC;wBACD,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;4BACvB,MAAM,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;4BACvC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAClB,CAAC;oBACH,CAAC;oBACD,IAAI,KAAK,KAAK,OAAO;wBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrC,MAAM,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;wBAC7E,UAAU,CAAC,SAAS,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9B,MAAM,GAAG;oBACP,GAAG,MAAM;oBACT,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;oBACzB,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAA6B;iBACxE,CAAC;gBACF,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS;oBAAE,MAAM,CAAC,8BAA8B;YAC5E,CAAC;QACH,CAAC;QAED,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC5C,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBAClE,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;gBAC3C,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,UAAU,SAAS,oBAAoB,CAAC,CAAC;gBACzD,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpD,UAAU,CAAC,IAAI,CAAC,UAAU,SAAS,6BAA6B,CAAC,CAAC;gBAClE,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;gBACvB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAClD,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAClD,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;aACnD,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,UAAU,CAAC,IAAI,CAAC,UAAU,SAAS,0BAA0B,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,eAAe,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC;QAC3F,MAAM,UAAU,GAAG;YACjB,eAAe,EAAE,YAAY,CAAC,MAAM;YACpC,cAAc,EAAE,WAAW,CAAC,MAAM;YAClC,IAAI;SACL,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,GAAG;gBACP,GAAG,MAAM;gBACT,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,sBAAsB,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;aAC1G,CAAC;YACF,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzD,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG;YACP,GAAG,MAAM;YACT,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;QACF,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACzD,CAAC;AACH,CAAC;AAiBD;;;;;sDAKsD;AACtD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAKtC;IACC,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;IACpC,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,EAAE,EAAU,EAAoB,EAAE;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,yEAAyE;QACzE,oEAAoE;QACpE,MAAM,IAAI,GAAgD,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;gBACzD,IAAI,EAAE,CAAC,EAAE,KAAK,MAAM;oBAAE,SAAS;gBAC/B,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;YACpC,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;YAC9E,IAAI,OAAO,CAAC,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK;YACL,QAAQ;YACR,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,QAAQ;YACR,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Knowledge Graph — per-origin rollback: kgRollback withdraws an
|
|
3
|
+
* origin's support, re-derives the survivors and removes edges left
|
|
4
|
+
* without endpoints. Split out of memory-kg.ts, which re-exports
|
|
5
|
+
* kgRollback.
|
|
6
|
+
*/
|
|
7
|
+
import type { KgScope } from './memory-kg-model.js';
|
|
8
|
+
/** Withdraw `originRef`'s support from the graph: remove it from every
|
|
9
|
+
* node/edge/rule it backs, and delete the element once no origin remains.
|
|
10
|
+
*
|
|
11
|
+
* The withdrawn ref is REWRITTEN out of the surviving elements' origin lists,
|
|
12
|
+
* not left behind. Retaining it (as this used to) meant a second rollback saw
|
|
13
|
+
* a two-entry list and retained again — so an element could outlive the
|
|
14
|
+
* withdrawal of every origin that ever supported it.
|
|
15
|
+
*
|
|
16
|
+
* The scan is EXHAUSTIVE: it pages each namespace to the end rather than
|
|
17
|
+
* reading one capped list. A capped scan let an element past the cap keep a
|
|
18
|
+
* withdrawn origin while the caller was told the rollback succeeded.
|
|
19
|
+
*
|
|
20
|
+
* Collect-then-mutate is deliberate: deleting a row pulls every later row back
|
|
21
|
+
* one position, so a delete inside the page loop would make an advancing
|
|
22
|
+
* offset skip whatever slid into the gap. (Rewrites are no longer a hazard —
|
|
23
|
+
* the bridge's upsert reuses the existing entry id and preserves `createdAt`
|
|
24
|
+
* rather than re-inserting at the head of the default ordering — but this
|
|
25
|
+
* function deletes as well as rewrites.) Only origin-carrying entries are
|
|
26
|
+
* retained during the scan, so memory tracks the rollback's own footprint, not
|
|
27
|
+
* the namespace size. */
|
|
28
|
+
export declare function kgRollback(options: {
|
|
29
|
+
originRef: string;
|
|
30
|
+
/** Whose knowledge to withdraw from. A rollback can only reach the named
|
|
31
|
+
* scope's namespaces — an org's rollback is an ownership boundary, not just
|
|
32
|
+
* a label on the output. */
|
|
33
|
+
scope?: KgScope;
|
|
34
|
+
dbPath?: string;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
success: boolean;
|
|
37
|
+
deleted: number;
|
|
38
|
+
retained: number;
|
|
39
|
+
failures?: string[];
|
|
40
|
+
error?: string;
|
|
41
|
+
/** Edges deleted because this rollback removed an endpoint they name. A
|
|
42
|
+
* relation between two things is not a fact once one of them is gone, and
|
|
43
|
+
* retrieval is node-seeded, so leaving them behind left unreachable rows
|
|
44
|
+
* claiming a graph that no longer exists. */
|
|
45
|
+
danglingEdgesRemoved?: number;
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=memory-kg-rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-kg-rollback.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-kg-rollback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAQlE;;;;;;;;;;;;;;;;;;;0BAmB0B;AAC1B,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB;;iCAE6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;kDAG8C;IAC9C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC,CAyHD"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Knowledge Graph — per-origin rollback: kgRollback withdraws an
|
|
3
|
+
* origin's support, re-derives the survivors and removes edges left
|
|
4
|
+
* without endpoints. Split out of memory-kg.ts, which re-exports
|
|
5
|
+
* kgRollback.
|
|
6
|
+
*/
|
|
7
|
+
import { bridgeDeleteEntry, bridgeStoreEntry } from './memory-bridge.js';
|
|
8
|
+
import { withoutOrigin } from './memory-kg-claims.js';
|
|
9
|
+
import { kgIndexedByOrigin, onEntryDeleted, onOriginWithdrawn, readIndexStatus, } from './memory-kg-index.js';
|
|
10
|
+
import { kgNamespaces, kgQualifyOrigin } from './memory-kg-model.js';
|
|
11
|
+
import { readNameIndex, writeNameIndex } from './memory-kg-names.js';
|
|
12
|
+
import { collectByOrigin, FailureLog, scanNamespace } from './memory-kg-scan.js';
|
|
13
|
+
// ── Rollback (per-origin bad-ingest recovery) ───────────────────────
|
|
14
|
+
/** Withdraw `originRef`'s support from the graph: remove it from every
|
|
15
|
+
* node/edge/rule it backs, and delete the element once no origin remains.
|
|
16
|
+
*
|
|
17
|
+
* The withdrawn ref is REWRITTEN out of the surviving elements' origin lists,
|
|
18
|
+
* not left behind. Retaining it (as this used to) meant a second rollback saw
|
|
19
|
+
* a two-entry list and retained again — so an element could outlive the
|
|
20
|
+
* withdrawal of every origin that ever supported it.
|
|
21
|
+
*
|
|
22
|
+
* The scan is EXHAUSTIVE: it pages each namespace to the end rather than
|
|
23
|
+
* reading one capped list. A capped scan let an element past the cap keep a
|
|
24
|
+
* withdrawn origin while the caller was told the rollback succeeded.
|
|
25
|
+
*
|
|
26
|
+
* Collect-then-mutate is deliberate: deleting a row pulls every later row back
|
|
27
|
+
* one position, so a delete inside the page loop would make an advancing
|
|
28
|
+
* offset skip whatever slid into the gap. (Rewrites are no longer a hazard —
|
|
29
|
+
* the bridge's upsert reuses the existing entry id and preserves `createdAt`
|
|
30
|
+
* rather than re-inserting at the head of the default ordering — but this
|
|
31
|
+
* function deletes as well as rewrites.) Only origin-carrying entries are
|
|
32
|
+
* retained during the scan, so memory tracks the rollback's own footprint, not
|
|
33
|
+
* the namespace size. */
|
|
34
|
+
export async function kgRollback(options) {
|
|
35
|
+
const failures = new FailureLog();
|
|
36
|
+
const namespaces = kgNamespaces(options.scope);
|
|
37
|
+
const originRef = kgQualifyOrigin(options.originRef, options.scope);
|
|
38
|
+
let deleted = 0, retained = 0;
|
|
39
|
+
/** Entity IDs this rollback removed, and the names that pointed at them. */
|
|
40
|
+
const removedIds = new Set();
|
|
41
|
+
const removedNames = new Set();
|
|
42
|
+
try {
|
|
43
|
+
// K7: one indexed read across all three namespaces, tried before the
|
|
44
|
+
// exhaustive per-namespace scan. Only trusted when the scope's index is
|
|
45
|
+
// `ready` AND every ref it names still resolves — `kgIndexedByOrigin`
|
|
46
|
+
// returns null otherwise, and this falls straight back to the scan.
|
|
47
|
+
let indexedByNs = null;
|
|
48
|
+
if ((await readIndexStatus(namespaces, options.dbPath)).state === 'ready') {
|
|
49
|
+
const indexed = await kgIndexedByOrigin(namespaces, originRef, options.dbPath);
|
|
50
|
+
if (indexed !== null) {
|
|
51
|
+
indexedByNs = new Map([
|
|
52
|
+
[namespaces.nodes, []],
|
|
53
|
+
[namespaces.edges, []],
|
|
54
|
+
[namespaces.rules, []],
|
|
55
|
+
]);
|
|
56
|
+
for (const { ns, entry } of indexed)
|
|
57
|
+
indexedByNs.get(ns)?.push(entry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const ns of [namespaces.nodes, namespaces.edges, namespaces.rules]) {
|
|
61
|
+
const found = indexedByNs
|
|
62
|
+
? { entries: indexedByNs.get(ns) ?? [], covered: true }
|
|
63
|
+
: await collectByOrigin(ns, originRef, options.dbPath);
|
|
64
|
+
// A partial scan cannot be reported as a completed withdrawal.
|
|
65
|
+
if (!found.covered) {
|
|
66
|
+
failures.note(`${ns}: memory backend unavailable`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const withdrawn = found.entries.map((e) => ({
|
|
70
|
+
entry: e,
|
|
71
|
+
// Re-derive from the claim ledger rather than editing an origin list:
|
|
72
|
+
// this is what puts back the description a withdrawn origin overwrote.
|
|
73
|
+
remaining: withoutOrigin((e.metadata ?? {}), originRef),
|
|
74
|
+
}));
|
|
75
|
+
for (const { entry: e, remaining } of withdrawn) {
|
|
76
|
+
const md = (e.metadata ?? {});
|
|
77
|
+
if (remaining === null) {
|
|
78
|
+
const del = await bridgeDeleteEntry({ id: e.id, namespace: ns, dbPath: options.dbPath });
|
|
79
|
+
if (del?.deleted) {
|
|
80
|
+
deleted++;
|
|
81
|
+
await onOriginWithdrawn(namespaces, ns, e.key, originRef, options.dbPath);
|
|
82
|
+
await onEntryDeleted(namespaces, e.key, options.dbPath, ns === namespaces.edges
|
|
83
|
+
? { src: String(md.src ?? ''), dst: String(md.dst ?? '') }
|
|
84
|
+
: undefined);
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
failures.note(`${ns}/${e.key}: delete failed`);
|
|
88
|
+
if (ns === namespaces.nodes && del?.deleted) {
|
|
89
|
+
removedIds.add(e.key);
|
|
90
|
+
if (typeof md.name === 'string')
|
|
91
|
+
removedNames.add(md.name);
|
|
92
|
+
}
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const store = await bridgeStoreEntry({
|
|
96
|
+
key: e.key,
|
|
97
|
+
value: rerender(e.content, md, remaining.description, ns === namespaces.rules),
|
|
98
|
+
namespace: ns,
|
|
99
|
+
dbPath: options.dbPath,
|
|
100
|
+
upsert: true,
|
|
101
|
+
// Edges are stored without embeddings; re-deriving one here would
|
|
102
|
+
// silently change how the entry behaves in search.
|
|
103
|
+
generateEmbeddingFlag: e.hasEmbedding,
|
|
104
|
+
tags: e.tags,
|
|
105
|
+
metadata: { ...md, ...remaining },
|
|
106
|
+
});
|
|
107
|
+
if (!failures.add(store, `${ns}/${e.key}: origin withdrawal`)) {
|
|
108
|
+
retained++;
|
|
109
|
+
await onOriginWithdrawn(namespaces, ns, e.key, originRef, options.dbPath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Drop the removed entities out of the name index, so a later ingest of the
|
|
114
|
+
// same name does not resolve onto an entity that no longer exists.
|
|
115
|
+
for (const name of removedNames) {
|
|
116
|
+
const known = await readNameIndex(name, namespaces, options.dbPath);
|
|
117
|
+
if (known === null) {
|
|
118
|
+
// An unreadable index must not be rewritten from a guess — doing so
|
|
119
|
+
// would erase every same-name entity this rollback did NOT remove.
|
|
120
|
+
failures.note(`${namespaces.names}: name index unreadable for ${name}`);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const survivors = known.filter((c) => !removedIds.has(c.id));
|
|
124
|
+
if (survivors.length !== known.length)
|
|
125
|
+
await writeNameIndex(name, survivors, namespaces, options.dbPath, failures);
|
|
126
|
+
}
|
|
127
|
+
const danglingEdgesRemoved = removedIds.size
|
|
128
|
+
? await removeEdgesMissingEndpoints(namespaces, removedIds, options.dbPath, failures)
|
|
129
|
+
: 0;
|
|
130
|
+
return {
|
|
131
|
+
success: !failures.failed,
|
|
132
|
+
deleted,
|
|
133
|
+
retained,
|
|
134
|
+
...(failures.failed ? { failures: failures.messages, error: failures.summary() } : {}),
|
|
135
|
+
...(danglingEdgesRemoved ? { danglingEdgesRemoved } : {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
deleted,
|
|
142
|
+
retained,
|
|
143
|
+
...(failures.messages.length ? { failures: failures.messages } : {}),
|
|
144
|
+
error: err instanceof Error ? err.message : String(err),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Re-render a stored value after its derived description changed.
|
|
149
|
+
*
|
|
150
|
+
* Rules are left alone: their value is the rule text plus an optional context
|
|
151
|
+
* block, not a rendering of a description. */
|
|
152
|
+
function rerender(content, md, description, isRule) {
|
|
153
|
+
if (isRule || description === md.description)
|
|
154
|
+
return content;
|
|
155
|
+
if (md.kg === 'edge')
|
|
156
|
+
return description || `${md.source_name} ${md.relation} ${md.target_name}`;
|
|
157
|
+
return `${md.name} — ${description || md.type}`;
|
|
158
|
+
}
|
|
159
|
+
/** Delete every edge incident to one of `removedIds`. Collect-then-mutate for
|
|
160
|
+
* the same reason `kgRollback` does. */
|
|
161
|
+
async function removeEdgesMissingEndpoints(ns, removedIds, dbPath, failures) {
|
|
162
|
+
const doomed = [];
|
|
163
|
+
const covered = await scanNamespace(ns.edges, dbPath, (page) => {
|
|
164
|
+
for (const e of page) {
|
|
165
|
+
const md = (e.metadata ?? {});
|
|
166
|
+
const src = String(md.src ?? '');
|
|
167
|
+
const dst = String(md.dst ?? '');
|
|
168
|
+
if (removedIds.has(src) || removedIds.has(dst))
|
|
169
|
+
doomed.push({ entry: e, src, dst });
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
if (!covered) {
|
|
173
|
+
failures.note(`${ns.edges}: memory backend unavailable during dangling-edge sweep`);
|
|
174
|
+
return 0;
|
|
175
|
+
}
|
|
176
|
+
let removed = 0;
|
|
177
|
+
for (const { entry: e, src, dst } of doomed) {
|
|
178
|
+
const del = await bridgeDeleteEntry({ id: e.id, namespace: ns.edges, dbPath });
|
|
179
|
+
if (del?.deleted) {
|
|
180
|
+
removed++;
|
|
181
|
+
// Only the surviving endpoint needs its adjacency entry pruned — the
|
|
182
|
+
// removed one's own entry is moot, its entity is gone too.
|
|
183
|
+
await onEntryDeleted(ns, e.key, dbPath, {
|
|
184
|
+
src: removedIds.has(src) ? dst : src,
|
|
185
|
+
dst: removedIds.has(src) ? dst : src,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else
|
|
189
|
+
failures.note(`${ns.edges}/${e.key}: dangling-edge delete failed`);
|
|
190
|
+
}
|
|
191
|
+
return removed;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=memory-kg-rollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-kg-rollback.js","sourceRoot":"","sources":["../../../src/memory/memory-kg-rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Knowledge Graph — rules (two-stage distillation support):
|
|
3
|
+
* kgIngestRules with per-rule verdicts, origin reinforcement, and
|
|
4
|
+
* kgListRules. Split out of memory-kg.ts, which re-exports the public
|
|
5
|
+
* symbols.
|
|
6
|
+
*/
|
|
7
|
+
import type { KgScope } from './memory-kg-model.js';
|
|
8
|
+
export interface RuleVerdict {
|
|
9
|
+
rule: string;
|
|
10
|
+
/** `failed` — the candidate was fine, but a write the caller was told about
|
|
11
|
+
* did not land. It is neither `invalid` (which blames the caller's input)
|
|
12
|
+
* nor `accepted`/`already_known` (which claim the graph now holds it). Both
|
|
13
|
+
* of those used to be reported unconditionally, so a caller reading verdicts
|
|
14
|
+
* saw every rule land while the aggregate `accepted` count said zero. */
|
|
15
|
+
verdict: 'accepted' | 'already_known' | 'invalid' | 'failed';
|
|
16
|
+
similarTo?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Stage-2 of cognee's curator/writer distillation: the CALLER (an LLM agent)
|
|
19
|
+
* proposes candidate rules; this accepts each unless a semantically
|
|
20
|
+
* near-identical rule exists (embedding dedup — deterministic keys can't
|
|
21
|
+
* collapse paraphrases). Accepted rules are stored both as KG nodes
|
|
22
|
+
* (node_set=rules) and as plain `rules`-namespace entries so the existing
|
|
23
|
+
* injection/search surfaces pick them up with zero new plumbing.
|
|
24
|
+
*
|
|
25
|
+
* A candidate that dedups against an existing rule still ADDS its origin to
|
|
26
|
+
* that rule's support set: two independent runs asserting the same rule mean
|
|
27
|
+
* the rule survives either one being rolled back. Dropping the second origin
|
|
28
|
+
* (as this used to) made rollback of the FIRST run delete knowledge the
|
|
29
|
+
* second run independently vouched for.
|
|
30
|
+
*
|
|
31
|
+
* Like `kgIngest`, NOT atomic — see that function's note. */
|
|
32
|
+
export declare function kgIngestRules(options: {
|
|
33
|
+
rules: {
|
|
34
|
+
rule: string;
|
|
35
|
+
context?: string;
|
|
36
|
+
}[];
|
|
37
|
+
originRef: string;
|
|
38
|
+
/** Owner of these rules. Omit for project-shared knowledge. */
|
|
39
|
+
scope?: KgScope;
|
|
40
|
+
dbPath?: string;
|
|
41
|
+
/** Similarity above which a candidate is already_known (default 0.78 —
|
|
42
|
+
* MiniLM paraphrases of the same rule commonly land 0.78-0.9; cognee's
|
|
43
|
+
* equivalent control is prompt-injected LLM judgment, which we approximate). */
|
|
44
|
+
dedupThreshold?: number;
|
|
45
|
+
}): Promise<{
|
|
46
|
+
success: boolean;
|
|
47
|
+
verdicts: RuleVerdict[];
|
|
48
|
+
accepted: number;
|
|
49
|
+
failures?: string[];
|
|
50
|
+
error?: string;
|
|
51
|
+
/** Candidates dropped by the per-call cap, reported rather than sliced away
|
|
52
|
+
* in silence. */
|
|
53
|
+
rulesTruncated?: number;
|
|
54
|
+
}>;
|
|
55
|
+
/** List stored rules (for injection or review). */
|
|
56
|
+
export declare function kgListRules(options?: {
|
|
57
|
+
dbPath?: string;
|
|
58
|
+
limit?: number;
|
|
59
|
+
scope?: KgScope;
|
|
60
|
+
}): Promise<{
|
|
61
|
+
rule: string;
|
|
62
|
+
key: string;
|
|
63
|
+
}[]>;
|
|
64
|
+
//# sourceMappingURL=memory-kg-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-kg-rules.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-kg-rules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAapD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb;;;;8EAI0E;IAC1E,OAAO,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;8DAa8D;AAC9D,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;qFAEiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;sBACkB;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAkJD;AA+ED,mDAAmD;AACnD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAO3C"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Knowledge Graph — rules (two-stage distillation support):
|
|
3
|
+
* kgIngestRules with per-rule verdicts, origin reinforcement, and
|
|
4
|
+
* kgListRules. Split out of memory-kg.ts, which re-exports the public
|
|
5
|
+
* symbols.
|
|
6
|
+
*/
|
|
7
|
+
import { bridgeGetEntry, bridgeListEntries, bridgeSearchEntries, bridgeStoreEntry, } from './memory-bridge.js';
|
|
8
|
+
import { applyClaim } from './memory-kg-claims.js';
|
|
9
|
+
import { onEntrySupported } from './memory-kg-index.js';
|
|
10
|
+
import { kgIngest } from './memory-kg-ingest.js';
|
|
11
|
+
import { KG_ID_VERSION, kgNamespaces, kgQualifyOrigin, legacyRuleKey, MAX_RULES_PER_CALL, ruleKey, } from './memory-kg-model.js';
|
|
12
|
+
import { FailureLog } from './memory-kg-scan.js';
|
|
13
|
+
/** Stage-2 of cognee's curator/writer distillation: the CALLER (an LLM agent)
|
|
14
|
+
* proposes candidate rules; this accepts each unless a semantically
|
|
15
|
+
* near-identical rule exists (embedding dedup — deterministic keys can't
|
|
16
|
+
* collapse paraphrases). Accepted rules are stored both as KG nodes
|
|
17
|
+
* (node_set=rules) and as plain `rules`-namespace entries so the existing
|
|
18
|
+
* injection/search surfaces pick them up with zero new plumbing.
|
|
19
|
+
*
|
|
20
|
+
* A candidate that dedups against an existing rule still ADDS its origin to
|
|
21
|
+
* that rule's support set: two independent runs asserting the same rule mean
|
|
22
|
+
* the rule survives either one being rolled back. Dropping the second origin
|
|
23
|
+
* (as this used to) made rollback of the FIRST run delete knowledge the
|
|
24
|
+
* second run independently vouched for.
|
|
25
|
+
*
|
|
26
|
+
* Like `kgIngest`, NOT atomic — see that function's note. */
|
|
27
|
+
export async function kgIngestRules(options) {
|
|
28
|
+
const verdicts = [];
|
|
29
|
+
const threshold = options.dedupThreshold ?? 0.78;
|
|
30
|
+
const failures = new FailureLog();
|
|
31
|
+
const ns = kgNamespaces(options.scope);
|
|
32
|
+
// Direct writes here store the qualified ref; nested kgIngest calls get the
|
|
33
|
+
// RAW ref plus the scope and qualify it themselves, so it is stamped once.
|
|
34
|
+
const originRef = kgQualifyOrigin(options.originRef, options.scope);
|
|
35
|
+
let accepted = 0;
|
|
36
|
+
const all = options.rules ?? [];
|
|
37
|
+
const batch = all.slice(0, MAX_RULES_PER_CALL);
|
|
38
|
+
const rulesTruncated = all.length - batch.length;
|
|
39
|
+
try {
|
|
40
|
+
for (const r of batch) {
|
|
41
|
+
const rule = r?.rule?.trim();
|
|
42
|
+
if (!rule || rule.length < 8) {
|
|
43
|
+
verdicts.push({ rule: r?.rule ?? '', verdict: 'invalid' });
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const similar = await bridgeSearchEntries({
|
|
47
|
+
query: rule,
|
|
48
|
+
namespace: ns.rules,
|
|
49
|
+
limit: 1,
|
|
50
|
+
threshold,
|
|
51
|
+
dbPath: options.dbPath,
|
|
52
|
+
});
|
|
53
|
+
const top = similar?.results?.[0];
|
|
54
|
+
// Issue #111: FTS5 keyword scores are min-max normalized per batch.
|
|
55
|
+
// With limit:1, the sole result always scores 1.0 — any rule sharing
|
|
56
|
+
// even one keyword was falsely marked as a duplicate.
|
|
57
|
+
//
|
|
58
|
+
// Only trust embedding-backed (semantic) cosine scores for dedup.
|
|
59
|
+
// Keyword-only matches can't distinguish paraphrases from merely
|
|
60
|
+
// overlapping vocabulary — fall back to exact-text comparison.
|
|
61
|
+
// (Key-based upsert on store already handles identical keys.)
|
|
62
|
+
const provenance = top?.provenance;
|
|
63
|
+
let isDuplicate = false;
|
|
64
|
+
if (top && provenance?.startsWith('semantic:')) {
|
|
65
|
+
const rawCosine = parseFloat(provenance.slice('semantic:'.length));
|
|
66
|
+
isDuplicate = rawCosine >= threshold;
|
|
67
|
+
}
|
|
68
|
+
else if (top) {
|
|
69
|
+
// Keyword-only: only suppress true near-exact duplicates.
|
|
70
|
+
const existing = (top.content || '').replace(/\s+/g, ' ').trim().toLowerCase();
|
|
71
|
+
const candidate = rule.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
72
|
+
isDuplicate = existing === candidate;
|
|
73
|
+
}
|
|
74
|
+
if (isDuplicate && top?.key) {
|
|
75
|
+
// `already_known` is a claim that this origin now supports the existing
|
|
76
|
+
// rule. If reinforcement did not land, it does not — and a later
|
|
77
|
+
// rollback of the OTHER origin would delete a rule this run believes it
|
|
78
|
+
// vouched for.
|
|
79
|
+
const reinforced = await reinforceRuleOrigin(top.key, top.content, options.originRef, options.scope, options.dbPath, failures);
|
|
80
|
+
verdicts.push({
|
|
81
|
+
rule,
|
|
82
|
+
verdict: reinforced ? 'already_known' : 'failed',
|
|
83
|
+
similarTo: top.key,
|
|
84
|
+
});
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Identity is the full rule text. The old key truncated at 120 normalized
|
|
88
|
+
// characters, so two rules sharing a long preamble were the same rule.
|
|
89
|
+
// A rule stored under that scheme is adopted in place rather than
|
|
90
|
+
// duplicated under the new key.
|
|
91
|
+
let key = ruleKey(rule);
|
|
92
|
+
let priorMd = {};
|
|
93
|
+
const current = await bridgeGetEntry({ key, namespace: ns.rules, dbPath: options.dbPath });
|
|
94
|
+
if (current?.found && current.entry)
|
|
95
|
+
priorMd = current.entry.metadata;
|
|
96
|
+
else {
|
|
97
|
+
const legacy = legacyRuleKey(rule);
|
|
98
|
+
const hit = await bridgeGetEntry({
|
|
99
|
+
key: legacy,
|
|
100
|
+
namespace: ns.rules,
|
|
101
|
+
dbPath: options.dbPath,
|
|
102
|
+
});
|
|
103
|
+
if (hit?.found && hit.entry) {
|
|
104
|
+
key = legacy;
|
|
105
|
+
priorMd = hit.entry.metadata;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// The mirrored KG node is named by the FULL rule text. Truncating it to
|
|
109
|
+
// 200 characters put two rules sharing a long preamble on one node — the
|
|
110
|
+
// same collision `ruleKey` was just widened to prevent, reintroduced one
|
|
111
|
+
// namespace over.
|
|
112
|
+
const ruleName = rule;
|
|
113
|
+
const stored = await bridgeStoreEntry({
|
|
114
|
+
key,
|
|
115
|
+
value: rule + (r.context ? `\n(context: ${r.context.slice(0, 500)})` : ''),
|
|
116
|
+
namespace: ns.rules,
|
|
117
|
+
dbPath: options.dbPath,
|
|
118
|
+
upsert: true,
|
|
119
|
+
tags: ['rule'],
|
|
120
|
+
metadata: {
|
|
121
|
+
...priorMd,
|
|
122
|
+
...applyClaim(priorMd, originRef, rule, Date.now()),
|
|
123
|
+
id_version: KG_ID_VERSION,
|
|
124
|
+
derived_from: originRef,
|
|
125
|
+
// Lets the dedup path reinforce the matching KG node without having
|
|
126
|
+
// to re-derive the node name from the stored value (which may carry
|
|
127
|
+
// an appended context block).
|
|
128
|
+
rule: ruleName,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
const nodeRes = await kgIngest({
|
|
132
|
+
nodes: [{ name: ruleName, type: 'Rule', description: rule, nodeSet: 'rules' }],
|
|
133
|
+
originRef: options.originRef,
|
|
134
|
+
scope: options.scope,
|
|
135
|
+
dbPath: options.dbPath,
|
|
136
|
+
});
|
|
137
|
+
const ruleFailed = failures.add(stored, `rule ${key}`);
|
|
138
|
+
if (!ruleFailed)
|
|
139
|
+
await onEntrySupported(ns, ns.rules, key, originRef, options.dbPath);
|
|
140
|
+
if (nodeRes.failures?.length)
|
|
141
|
+
for (const m of nodeRes.failures)
|
|
142
|
+
failures.note(m);
|
|
143
|
+
// Only count a rule as accepted when BOTH of its writes landed; a rule
|
|
144
|
+
// present in one namespace only is not the state the caller was told
|
|
145
|
+
// about. The per-rule verdict now says the same thing — it read
|
|
146
|
+
// `accepted` unconditionally, so the two halves of one result disagreed.
|
|
147
|
+
const landed = !ruleFailed && nodeRes.success;
|
|
148
|
+
if (landed)
|
|
149
|
+
accepted++;
|
|
150
|
+
verdicts.push({ rule, verdict: landed ? 'accepted' : 'failed' });
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
success: !failures.failed,
|
|
154
|
+
verdicts,
|
|
155
|
+
accepted,
|
|
156
|
+
...(failures.failed ? { failures: failures.messages, error: failures.summary() } : {}),
|
|
157
|
+
...(rulesTruncated ? { rulesTruncated } : {}),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
return {
|
|
162
|
+
success: false,
|
|
163
|
+
verdicts,
|
|
164
|
+
accepted,
|
|
165
|
+
...(failures.messages.length ? { failures: failures.messages } : {}),
|
|
166
|
+
...(rulesTruncated ? { rulesTruncated } : {}),
|
|
167
|
+
error: err instanceof Error ? err.message : String(err),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** Add `originRef` to an already-stored rule's support set — both the
|
|
172
|
+
* `rules`-namespace entry and its `node_set=rules` KG node. Idempotent in
|
|
173
|
+
* effect: re-asserting an origin the rule already carries leaves the support
|
|
174
|
+
* set unchanged.
|
|
175
|
+
*
|
|
176
|
+
* @returns true when the rule genuinely carries this origin afterwards —
|
|
177
|
+
* including the no-op case where it already did. False means the support set
|
|
178
|
+
* is not what the caller is about to be told it is. */
|
|
179
|
+
async function reinforceRuleOrigin(matchedKey, matchedContent,
|
|
180
|
+
/** RAW ref — qualified here for the rules entry, and passed on unqualified
|
|
181
|
+
* to `kgIngest`, which qualifies it once with the same scope. */
|
|
182
|
+
originRef, scope, dbPath, failures) {
|
|
183
|
+
const ns = kgNamespaces(scope);
|
|
184
|
+
const qualified = kgQualifyOrigin(originRef, scope);
|
|
185
|
+
const existing = await bridgeGetEntry({ key: matchedKey, namespace: ns.rules, dbPath });
|
|
186
|
+
if (!existing?.found || !existing.entry) {
|
|
187
|
+
// The dedup hit came from search; if the entry can't be re-read by key the
|
|
188
|
+
// support set cannot be updated, and silently proceeding is exactly the
|
|
189
|
+
// provenance loss this function exists to prevent.
|
|
190
|
+
failures.note(`rule ${matchedKey}: matched by dedup but not readable by key`);
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
const entry = existing.entry;
|
|
194
|
+
const md = entry.metadata;
|
|
195
|
+
const origins = Array.isArray(md.origin_refs) ? md.origin_refs : [];
|
|
196
|
+
// The KG node's name: recorded at accept time, else the first line of the
|
|
197
|
+
// stored value (any context block is appended after a newline).
|
|
198
|
+
const ruleName = typeof md.rule === 'string' && md.rule
|
|
199
|
+
? md.rule
|
|
200
|
+
: (matchedContent || entry.content).split('\n')[0];
|
|
201
|
+
// Both writes are attempted regardless: skipping the node write because the
|
|
202
|
+
// entry write failed would leave the two halves disagreeing about who
|
|
203
|
+
// supports this rule. Only the REPORT changes.
|
|
204
|
+
let ok = true;
|
|
205
|
+
if (!origins.includes(qualified)) {
|
|
206
|
+
const res = await bridgeStoreEntry({
|
|
207
|
+
key: entry.key,
|
|
208
|
+
value: entry.content,
|
|
209
|
+
namespace: ns.rules,
|
|
210
|
+
dbPath,
|
|
211
|
+
upsert: true,
|
|
212
|
+
generateEmbeddingFlag: entry.hasEmbedding,
|
|
213
|
+
tags: entry.tags,
|
|
214
|
+
metadata: {
|
|
215
|
+
...md,
|
|
216
|
+
rule: ruleName,
|
|
217
|
+
// A dedup hit is SUPPORT, not a correction: the candidate asserts the
|
|
218
|
+
// rule the entry already holds. Its contribution therefore carries no
|
|
219
|
+
// description of its own — passing one here (the truncated `rule` name,
|
|
220
|
+
// as this did) made the newest claim disagree with the stored text and
|
|
221
|
+
// flagged the rule as conflicted with a truncation of itself.
|
|
222
|
+
...applyClaim(md, qualified, '', Date.now()),
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
if (failures.add(res, `rule ${entry.key}`))
|
|
226
|
+
ok = false;
|
|
227
|
+
else
|
|
228
|
+
await onEntrySupported(ns, ns.rules, entry.key, qualified, dbPath);
|
|
229
|
+
}
|
|
230
|
+
// The rule's KG node needs the same origin — rollback walks nodes separately.
|
|
231
|
+
const nodeRes = await kgIngest({
|
|
232
|
+
nodes: [{ name: ruleName, type: 'Rule', description: '', nodeSet: 'rules' }],
|
|
233
|
+
originRef,
|
|
234
|
+
scope,
|
|
235
|
+
dbPath,
|
|
236
|
+
});
|
|
237
|
+
if (nodeRes.failures?.length)
|
|
238
|
+
for (const m of nodeRes.failures)
|
|
239
|
+
failures.note(m);
|
|
240
|
+
return ok && nodeRes.success;
|
|
241
|
+
}
|
|
242
|
+
/** List stored rules (for injection or review). */
|
|
243
|
+
export async function kgListRules(options) {
|
|
244
|
+
const res = await bridgeListEntries({
|
|
245
|
+
namespace: kgNamespaces(options?.scope).rules,
|
|
246
|
+
limit: options?.limit ?? 50,
|
|
247
|
+
dbPath: options?.dbPath,
|
|
248
|
+
});
|
|
249
|
+
return (res?.entries ?? []).map((e) => ({ rule: e.content, key: e.key }));
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=memory-kg-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-kg-rules.js","sourceRoot":"","sources":["../../../src/memory/memory-kg-rules.ts"],"names":[],"mappings":"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"}
|