@monoes/monomindcli 2.16.12 → 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.
Files changed (217) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/engineering/engineering-devops-automator.md +1 -1
  3. package/.claude/agents/github/repo-architect.md +1 -1
  4. package/.claude/agents/testing/production-validator.md +1 -1
  5. package/.claude/agents/testing/testing-tool-evaluator.md +1 -1
  6. package/.claude/commands/github/pr-manager.md +1 -1
  7. package/.claude/helpers/pick-rank.cjs +34 -4
  8. package/.claude/skills/monolean-audit/SKILL.md +1 -1
  9. package/dist/src/commands/cleanup-data.d.ts +30 -0
  10. package/dist/src/commands/cleanup-data.d.ts.map +1 -0
  11. package/dist/src/commands/cleanup-data.js +138 -0
  12. package/dist/src/commands/cleanup-data.js.map +1 -0
  13. package/dist/src/commands/cleanup-scratch.d.ts +43 -0
  14. package/dist/src/commands/cleanup-scratch.d.ts.map +1 -0
  15. package/dist/src/commands/cleanup-scratch.js +125 -0
  16. package/dist/src/commands/cleanup-scratch.js.map +1 -0
  17. package/dist/src/commands/cleanup.d.ts +2 -39
  18. package/dist/src/commands/cleanup.d.ts.map +1 -1
  19. package/dist/src/commands/cleanup.js +5 -247
  20. package/dist/src/commands/cleanup.js.map +1 -1
  21. package/dist/src/commands/doctor-gitignore-checks.d.ts +10 -0
  22. package/dist/src/commands/doctor-gitignore-checks.d.ts.map +1 -0
  23. package/dist/src/commands/doctor-gitignore-checks.js +141 -0
  24. package/dist/src/commands/doctor-gitignore-checks.js.map +1 -0
  25. package/dist/src/commands/doctor-helpers-checks.d.ts +10 -0
  26. package/dist/src/commands/doctor-helpers-checks.d.ts.map +1 -0
  27. package/dist/src/commands/doctor-helpers-checks.js +292 -0
  28. package/dist/src/commands/doctor-helpers-checks.js.map +1 -0
  29. package/dist/src/commands/doctor-memory-checks.d.ts +47 -0
  30. package/dist/src/commands/doctor-memory-checks.d.ts.map +1 -0
  31. package/dist/src/commands/doctor-memory-checks.js +298 -0
  32. package/dist/src/commands/doctor-memory-checks.js.map +1 -0
  33. package/dist/src/commands/doctor-monograph-checks.d.ts +9 -0
  34. package/dist/src/commands/doctor-monograph-checks.d.ts.map +1 -0
  35. package/dist/src/commands/doctor-monograph-checks.js +331 -0
  36. package/dist/src/commands/doctor-monograph-checks.js.map +1 -0
  37. package/dist/src/commands/doctor-project-checks.d.ts +7 -66
  38. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  39. package/dist/src/commands/doctor-project-checks.js +10 -1331
  40. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  41. package/dist/src/commands/doctor-routing-checks.d.ts +10 -0
  42. package/dist/src/commands/doctor-routing-checks.d.ts.map +1 -0
  43. package/dist/src/commands/doctor-routing-checks.js +194 -0
  44. package/dist/src/commands/doctor-routing-checks.js.map +1 -0
  45. package/dist/src/commands/doctor-worker-checks.d.ts +17 -0
  46. package/dist/src/commands/doctor-worker-checks.d.ts.map +1 -0
  47. package/dist/src/commands/doctor-worker-checks.js +122 -0
  48. package/dist/src/commands/doctor-worker-checks.js.map +1 -0
  49. package/dist/src/commands/hooks-routing-commands.js +1 -1
  50. package/dist/src/commands/hooks-routing-commands.js.map +1 -1
  51. package/dist/src/commands/init.d.ts.map +1 -1
  52. package/dist/src/commands/init.js +6 -15
  53. package/dist/src/commands/init.js.map +1 -1
  54. package/dist/src/index.js +2 -2
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/init/never-commit.d.ts +3 -3
  57. package/dist/src/init/types.d.ts +1 -1
  58. package/dist/src/init/types.js +1 -1
  59. package/dist/src/knowledge/document-store.js +1 -1
  60. package/dist/src/knowledge/document-store.js.map +1 -1
  61. package/dist/src/mcp-tools/hooks-edit-command.d.ts +10 -0
  62. package/dist/src/mcp-tools/hooks-edit-command.d.ts.map +1 -0
  63. package/dist/src/mcp-tools/hooks-edit-command.js +247 -0
  64. package/dist/src/mcp-tools/hooks-edit-command.js.map +1 -0
  65. package/dist/src/mcp-tools/hooks-learning.d.ts +9 -0
  66. package/dist/src/mcp-tools/hooks-learning.d.ts.map +1 -0
  67. package/dist/src/mcp-tools/hooks-learning.js +408 -0
  68. package/dist/src/mcp-tools/hooks-learning.js.map +1 -0
  69. package/dist/src/mcp-tools/hooks-metrics-list.d.ts +8 -0
  70. package/dist/src/mcp-tools/hooks-metrics-list.d.ts.map +1 -0
  71. package/dist/src/mcp-tools/hooks-metrics-list.js +205 -0
  72. package/dist/src/mcp-tools/hooks-metrics-list.js.map +1 -0
  73. package/dist/src/mcp-tools/hooks-route.d.ts +12 -0
  74. package/dist/src/mcp-tools/hooks-route.d.ts.map +1 -0
  75. package/dist/src/mcp-tools/hooks-route.js +251 -0
  76. package/dist/src/mcp-tools/hooks-route.js.map +1 -0
  77. package/dist/src/mcp-tools/hooks-routing.d.ts +6 -27
  78. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  79. package/dist/src/mcp-tools/hooks-routing.js +6 -1727
  80. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  81. package/dist/src/mcp-tools/hooks-session.d.ts +9 -0
  82. package/dist/src/mcp-tools/hooks-session.d.ts.map +1 -0
  83. package/dist/src/mcp-tools/hooks-session.js +243 -0
  84. package/dist/src/mcp-tools/hooks-session.js.map +1 -0
  85. package/dist/src/mcp-tools/hooks-task.d.ts +17 -0
  86. package/dist/src/mcp-tools/hooks-task.d.ts.map +1 -0
  87. package/dist/src/mcp-tools/hooks-task.js +427 -0
  88. package/dist/src/mcp-tools/hooks-task.js.map +1 -0
  89. package/dist/src/mcp-tools/hooks-tools.d.ts +2 -1
  90. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  91. package/dist/src/mcp-tools/hooks-tools.js +2 -1
  92. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  93. package/dist/src/mcp-tools/memory-tools.js +1 -1
  94. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  95. package/dist/src/memory/bm25-index.d.ts +2 -2
  96. package/dist/src/memory/bm25-index.js +2 -2
  97. package/dist/src/memory/embedding-operations.js +2 -2
  98. package/dist/src/memory/embedding-operations.js.map +1 -1
  99. package/dist/src/memory/entity-name-key.d.ts +1 -1
  100. package/dist/src/memory/entity-name-key.js +1 -1
  101. package/dist/src/memory/hnsw-operations.d.ts +1 -1
  102. package/dist/src/memory/hnsw-operations.js +1 -1
  103. package/dist/src/memory/memory-bridge-backend.d.ts +43 -0
  104. package/dist/src/memory/memory-bridge-backend.d.ts.map +1 -0
  105. package/dist/src/memory/memory-bridge-backend.js +363 -0
  106. package/dist/src/memory/memory-bridge-backend.js.map +1 -0
  107. package/dist/src/memory/memory-bridge-core.d.ts +42 -0
  108. package/dist/src/memory/memory-bridge-core.d.ts.map +1 -0
  109. package/dist/src/memory/memory-bridge-core.js +126 -0
  110. package/dist/src/memory/memory-bridge-core.js.map +1 -0
  111. package/dist/src/memory/memory-bridge-entries.d.ts +131 -0
  112. package/dist/src/memory/memory-bridge-entries.d.ts.map +1 -0
  113. package/dist/src/memory/memory-bridge-entries.js +227 -0
  114. package/dist/src/memory/memory-bridge-entries.js.map +1 -0
  115. package/dist/src/memory/memory-bridge-feedback.d.ts +60 -0
  116. package/dist/src/memory/memory-bridge-feedback.d.ts.map +1 -0
  117. package/dist/src/memory/memory-bridge-feedback.js +118 -0
  118. package/dist/src/memory/memory-bridge-feedback.js.map +1 -0
  119. package/dist/src/memory/memory-bridge-paths.d.ts +123 -0
  120. package/dist/src/memory/memory-bridge-paths.d.ts.map +1 -0
  121. package/dist/src/memory/memory-bridge-paths.js +335 -0
  122. package/dist/src/memory/memory-bridge-paths.js.map +1 -0
  123. package/dist/src/memory/memory-bridge-search.d.ts +48 -0
  124. package/dist/src/memory/memory-bridge-search.d.ts.map +1 -0
  125. package/dist/src/memory/memory-bridge-search.js +383 -0
  126. package/dist/src/memory/memory-bridge-search.js.map +1 -0
  127. package/dist/src/memory/memory-bridge-sessions.d.ts +38 -0
  128. package/dist/src/memory/memory-bridge-sessions.d.ts.map +1 -0
  129. package/dist/src/memory/memory-bridge-sessions.js +109 -0
  130. package/dist/src/memory/memory-bridge-sessions.js.map +1 -0
  131. package/dist/src/memory/memory-bridge-store.d.ts +58 -0
  132. package/dist/src/memory/memory-bridge-store.d.ts.map +1 -0
  133. package/dist/src/memory/memory-bridge-store.js +201 -0
  134. package/dist/src/memory/memory-bridge-store.js.map +1 -0
  135. package/dist/src/memory/memory-bridge.d.ts +10 -438
  136. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  137. package/dist/src/memory/memory-bridge.js +14 -1787
  138. package/dist/src/memory/memory-bridge.js.map +1 -1
  139. package/dist/src/memory/memory-kg-claims.d.ts +52 -0
  140. package/dist/src/memory/memory-kg-claims.d.ts.map +1 -0
  141. package/dist/src/memory/memory-kg-claims.js +99 -0
  142. package/dist/src/memory/memory-kg-claims.js.map +1 -0
  143. package/dist/src/memory/memory-kg-index.d.ts +86 -0
  144. package/dist/src/memory/memory-kg-index.d.ts.map +1 -0
  145. package/dist/src/memory/memory-kg-index.js +256 -0
  146. package/dist/src/memory/memory-kg-index.js.map +1 -0
  147. package/dist/src/memory/memory-kg-ingest.d.ts +44 -0
  148. package/dist/src/memory/memory-kg-ingest.d.ts.map +1 -0
  149. package/dist/src/memory/memory-kg-ingest.js +361 -0
  150. package/dist/src/memory/memory-kg-ingest.js.map +1 -0
  151. package/dist/src/memory/memory-kg-model.d.ts +168 -0
  152. package/dist/src/memory/memory-kg-model.d.ts.map +1 -0
  153. package/dist/src/memory/memory-kg-model.js +158 -0
  154. package/dist/src/memory/memory-kg-model.js.map +1 -0
  155. package/dist/src/memory/memory-kg-names.d.ts +64 -0
  156. package/dist/src/memory/memory-kg-names.d.ts.map +1 -0
  157. package/dist/src/memory/memory-kg-names.js +187 -0
  158. package/dist/src/memory/memory-kg-names.js.map +1 -0
  159. package/dist/src/memory/memory-kg-promote.d.ts +79 -0
  160. package/dist/src/memory/memory-kg-promote.d.ts.map +1 -0
  161. package/dist/src/memory/memory-kg-promote.js +248 -0
  162. package/dist/src/memory/memory-kg-promote.js.map +1 -0
  163. package/dist/src/memory/memory-kg-rebuild.d.ts +77 -0
  164. package/dist/src/memory/memory-kg-rebuild.d.ts.map +1 -0
  165. package/dist/src/memory/memory-kg-rebuild.js +299 -0
  166. package/dist/src/memory/memory-kg-rebuild.js.map +1 -0
  167. package/dist/src/memory/memory-kg-rollback.d.ts +47 -0
  168. package/dist/src/memory/memory-kg-rollback.d.ts.map +1 -0
  169. package/dist/src/memory/memory-kg-rollback.js +193 -0
  170. package/dist/src/memory/memory-kg-rollback.js.map +1 -0
  171. package/dist/src/memory/memory-kg-rules.d.ts +64 -0
  172. package/dist/src/memory/memory-kg-rules.d.ts.map +1 -0
  173. package/dist/src/memory/memory-kg-rules.js +251 -0
  174. package/dist/src/memory/memory-kg-rules.js.map +1 -0
  175. package/dist/src/memory/memory-kg-scan.d.ts +118 -0
  176. package/dist/src/memory/memory-kg-scan.d.ts.map +1 -0
  177. package/dist/src/memory/memory-kg-scan.js +209 -0
  178. package/dist/src/memory/memory-kg-scan.js.map +1 -0
  179. package/dist/src/memory/memory-kg-search.d.ts +80 -0
  180. package/dist/src/memory/memory-kg-search.d.ts.map +1 -0
  181. package/dist/src/memory/memory-kg-search.js +239 -0
  182. package/dist/src/memory/memory-kg-search.js.map +1 -0
  183. package/dist/src/memory/memory-kg.d.ts +19 -547
  184. package/dist/src/memory/memory-kg.d.ts.map +1 -1
  185. package/dist/src/memory/memory-kg.js +10 -2389
  186. package/dist/src/memory/memory-kg.js.map +1 -1
  187. package/dist/src/ui/org-hil.mjs +1 -1
  188. package/dist/src/ui/routes-org-agents.mjs +318 -0
  189. package/dist/src/ui/routes-org-approvals.mjs +133 -0
  190. package/dist/src/ui/routes-org-config.mjs +459 -0
  191. package/dist/src/ui/routes-org-control.mjs +300 -0
  192. package/dist/src/ui/routes-org-files.mjs +172 -0
  193. package/dist/src/ui/routes-org-helpers.mjs +84 -0
  194. package/dist/src/ui/routes-org-knowledge.mjs +262 -0
  195. package/dist/src/ui/routes-org-lifecycle.mjs +224 -0
  196. package/dist/src/ui/routes-org-live.mjs +278 -0
  197. package/dist/src/ui/routes-org-mastermind.mjs +346 -0
  198. package/dist/src/ui/routes-org-planning.mjs +398 -0
  199. package/dist/src/ui/routes-org-runs.mjs +430 -0
  200. package/dist/src/ui/routes-org-status.mjs +342 -0
  201. package/dist/src/ui/routes-org-workflows.mjs +212 -0
  202. package/dist/src/ui/routes-org.mjs +26 -3847
  203. package/dist/src/ui/server.mjs +1 -1
  204. package/dist/src/utils/native-error.d.ts +1 -1
  205. package/dist/src/utils/native-error.js +1 -1
  206. package/dist/src/utils/paths.d.ts +2 -1
  207. package/dist/src/utils/paths.d.ts.map +1 -1
  208. package/dist/src/utils/paths.js +2 -1
  209. package/dist/src/utils/paths.js.map +1 -1
  210. package/dist/tsconfig.tsbuildinfo +1 -1
  211. package/org-skills/adversarial-reviewer/SKILL.md +1 -1
  212. package/org-skills/board-deck-builder/SKILL.md +1 -1
  213. package/org-skills/code-reviewer/SKILL.md +1 -1
  214. package/org-skills/debugging-wizard/SKILL.md +1 -1
  215. package/org-skills/scientific-thinking-literature-review/SKILL.md +1 -1
  216. package/org-skills/scientific-thinking-scholar-evaluation/SKILL.md +1 -1
  217. package/package.json +8 -8
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Memory Knowledge Graph — retrieval: kgSearch (seed nodes, neighbourhood
3
+ * expansion, evidence-aware ranking) and kgGlossary for extraction prompts.
4
+ * Split out of memory-kg.ts, which re-exports the public symbols.
5
+ */
6
+ import { bridgeGetEntry, bridgeSearchEntries } from './memory-bridge.js';
7
+ import { readAdj, readIndexStatus } from './memory-kg-index.js';
8
+ import { kgNamespaces, normalizeName } from './memory-kg-model.js';
9
+ import { SEARCH_EDGE_SCAN_MAX, scanNamespace } from './memory-kg-scan.js';
10
+ /** Seed candidates pulled before filtering and ranking. */
11
+ const SEARCH_SEED_LIMIT = 15;
12
+ /** Extra candidates fetched when a `nodeSet` narrows the graph.
13
+ *
14
+ * The bridge has no tag filter, so set membership can only be tested after
15
+ * retrieval. Filtering the unfiltered top-15 meant a node that IS in the set
16
+ * but ranks 16th overall was missed — the set made results scarcer instead of
17
+ * more precise. Over-fetching moves the cutoff after the filter. */
18
+ const SEARCH_NODE_SET_OVERFETCH = 4;
19
+ /** How far a co-occurrence guess drops below an equally-seeded stated fact.
20
+ * Enough to lose a tie, not enough to hide it: `mentioned_with` between two
21
+ * strong seeds is still worth surfacing when nothing better was asserted. */
22
+ const HEURISTIC_PENALTY = 0.15;
23
+ /** Live origins disagree about what this edge says. Still returned — a disputed
24
+ * fact is information — but it does not outrank a settled one. */
25
+ const CONFLICT_PENALTY = 0.1;
26
+ /** Seeded retrieval → neighborhood → triplet ranking (cognee's brute-force
27
+ * triplet search, scaled down). Seed scores already carry the Phase 1 feedback
28
+ * blend, and the seed retrieval may be vector or keyword — `method` on the
29
+ * result says which actually ran.
30
+ *
31
+ * Ranking weighs exactly two evidence signals, both read off the claim ledger:
32
+ * extraction method and description conflict. It deliberately does NOT model
33
+ * source credibility, claim freshness, or whether the relation itself answers
34
+ * the query — those need an evaluation set to tune against, and guessing at
35
+ * them would be the same overclaim this weighting exists to correct. */
36
+ export async function kgSearch(options) {
37
+ try {
38
+ const limit = options.limit ?? 8;
39
+ const ns = kgNamespaces(options.scope);
40
+ const seedsRes = await bridgeSearchEntries({
41
+ query: options.query,
42
+ namespace: ns.nodes,
43
+ // Over-fetch when a set filter follows, so the cutoff lands AFTER it.
44
+ limit: options.nodeSet ? SEARCH_SEED_LIMIT * SEARCH_NODE_SET_OVERFETCH : SEARCH_SEED_LIMIT,
45
+ threshold: 0.25,
46
+ dbPath: options.dbPath,
47
+ });
48
+ // What the retrieval actually was, carried on every return below: a keyword
49
+ // fallback presented as vector-seeded search is the overclaim B5 names.
50
+ const retrieval = {
51
+ ...(seedsRes?.searchMethod ? { method: seedsRes.searchMethod } : {}),
52
+ ...(seedsRes?.fallbackReason ? { fallbackReason: seedsRes.fallbackReason } : {}),
53
+ };
54
+ let seedResults = seedsRes?.results ?? [];
55
+ if (options.nodeSet) {
56
+ const setTag = normalizeName(options.nodeSet);
57
+ seedResults = seedResults.filter((r) => (r.tags ?? []).includes(setTag));
58
+ }
59
+ seedResults = seedResults.slice(0, SEARCH_SEED_LIMIT);
60
+ if (!seedResults.length)
61
+ return { success: true, context: '', triplets: [], seeds: [], ...retrieval };
62
+ const seedScore = new Map();
63
+ for (const s of seedResults)
64
+ seedScore.set(s.key, s.score);
65
+ const triplets = [];
66
+ let scannedEdges = 0;
67
+ let truncated = false;
68
+ /** Score one edge against the seeded entities and, if relevant, push its
69
+ * triplet — shared by the indexed and exhaustive gathering paths below
70
+ * so ranking never depends on which one ran (K7). */
71
+ const considerEdge = (e) => {
72
+ scannedEdges++;
73
+ const md = (e.metadata ?? {});
74
+ if (md?.kg !== 'edge' || md.valid_to != null)
75
+ return;
76
+ const src = String(md.src ?? '');
77
+ const dst = String(md.dst ?? '');
78
+ const sSrc = seedScore.get(src) ?? 0;
79
+ const sDst = seedScore.get(dst) ?? 0;
80
+ if (sSrc === 0 && sDst === 0)
81
+ return;
82
+ // Both endpoints seeded beats one; the unseeded endpoint contributes a
83
+ // neutral 0.35 so bridging edges from a strong seed still surface.
84
+ const relevance = (Math.max(sSrc, 0.35) + Math.max(sDst, 0.35)) / 2 + (sSrc > 0 && sDst > 0 ? 0.1 : 0);
85
+ // Evidence, from the claim ledger. An edge whose method was never
86
+ // recorded is left at its relevance score — unknown is not evidence
87
+ // against it, and penalizing it would demote the entire pre-existing
88
+ // graph relative to anything written today.
89
+ const method = md.method === 'asserted' || md.method === 'heuristic'
90
+ ? md.method
91
+ : undefined;
92
+ const conflict = md.conflict === true;
93
+ const score = Math.max(0, relevance -
94
+ (method === 'heuristic' ? HEURISTIC_PENALTY : 0) -
95
+ (conflict ? CONFLICT_PENALTY : 0));
96
+ triplets.push({
97
+ source: String(md.source_name ?? src),
98
+ relation: String(md.relation ?? 'related_to'),
99
+ target: String(md.target_name ?? dst),
100
+ fact: e.content,
101
+ score,
102
+ ...(method ? { method } : {}),
103
+ ...(conflict ? { conflict } : {}),
104
+ id: e.id,
105
+ key: e.key,
106
+ });
107
+ };
108
+ // Scores are per-edge, so pruning to the running top-`limit` after every
109
+ // batch yields exactly the same result as sorting the whole set at the end.
110
+ const pruneToLimit = () => {
111
+ if (triplets.length > limit) {
112
+ triplets.sort((a, b) => b.score - a.score);
113
+ triplets.length = limit;
114
+ }
115
+ };
116
+ // K7: gather candidate edges via each seed's adjacency entry — O(seeds ×
117
+ // degree) instead of a full namespace scan — when the scope's index is
118
+ // ready and every seed's adjacency entry resolves. Any seed that misses
119
+ // (index not ready, or an unresolvable ref) falls the WHOLE query back to
120
+ // the exhaustive scan rather than silently searching only some seeds.
121
+ let covered = false;
122
+ let usedIndex = false;
123
+ if ((await readIndexStatus(ns, options.dbPath)).state === 'ready') {
124
+ const candidateKeys = new Set();
125
+ let indexOk = true;
126
+ for (const s of seedResults) {
127
+ const adj = await readAdj(ns, s.key, options.dbPath);
128
+ if (adj === null) {
129
+ indexOk = false;
130
+ break;
131
+ }
132
+ for (const key of adj.edgeKeys)
133
+ candidateKeys.add(key);
134
+ }
135
+ if (indexOk) {
136
+ for (const key of candidateKeys) {
137
+ const res = await bridgeGetEntry({ key, namespace: ns.edges, dbPath: options.dbPath });
138
+ if (res?.found && res.entry)
139
+ considerEdge(res.entry);
140
+ }
141
+ pruneToLimit();
142
+ usedIndex = true;
143
+ covered = true;
144
+ }
145
+ }
146
+ // Paged edge scan (see monolean note in module header). Each page is folded
147
+ // into the running top-`limit` immediately, so memory stays at one page
148
+ // regardless of how many edges the namespace holds.
149
+ if (!usedIndex) {
150
+ covered = await scanNamespace(ns.edges, options.dbPath, (page) => {
151
+ for (const e of page)
152
+ considerEdge(e);
153
+ pruneToLimit();
154
+ if (scannedEdges >= SEARCH_EDGE_SCAN_MAX) {
155
+ truncated = true;
156
+ return false;
157
+ }
158
+ return true;
159
+ });
160
+ }
161
+ // An unreadable namespace is an incomplete answer, not an empty graph.
162
+ if (!covered)
163
+ truncated = true;
164
+ triplets.sort((a, b) => b.score - a.score);
165
+ const seeds = seedResults.slice(0, limit).map((s) => {
166
+ // metadata is not in search results; parse from rendered content "name — description"
167
+ const dash = s.content.indexOf(' — ');
168
+ return {
169
+ name: dash > 0 ? s.content.slice(0, dash) : s.key,
170
+ // Tags carry the stored type (`['kg', <type>, …]`). The key never did:
171
+ // reading `key.split(':')[1]` reported the type of `n:shared_service`
172
+ // as `shared_service`, and under hashed IDs would report a digest.
173
+ type: (s.tags ?? [])[1] ?? 'entity',
174
+ description: dash > 0 ? s.content.slice(dash + 3) : s.content,
175
+ score: s.score,
176
+ id: s.id,
177
+ };
178
+ });
179
+ const context = [
180
+ ...triplets.map((t) => `${t.source} —${t.relation}→ ${t.target}${t.fact && t.fact !== `${t.source} ${t.relation} ${t.target}` ? ` (${t.fact})` : ''}`),
181
+ ...(triplets.length ? [] : seeds.map((s) => `${s.name}: ${s.description}`)),
182
+ ].join('\n');
183
+ return {
184
+ success: true,
185
+ context,
186
+ triplets,
187
+ seeds,
188
+ scannedEdges,
189
+ ...(truncated && { truncated }),
190
+ ...retrieval,
191
+ };
192
+ }
193
+ catch (err) {
194
+ return {
195
+ success: false,
196
+ context: '',
197
+ triplets: [],
198
+ seeds: [],
199
+ error: err instanceof Error ? err.message : String(err),
200
+ };
201
+ }
202
+ }
203
+ // ── Glossary (anti-duplicate-entity injection for extraction prompts) ──
204
+ export async function kgGlossary(options) {
205
+ const limit = options?.limit ?? 40;
206
+ // Running top-`limit` by rank, deduplicated by normalized name. Folding each
207
+ // page in and pruning keeps the whole node namespace in scope without ever
208
+ // holding more than a page plus `limit` names.
209
+ let top = [];
210
+ await scanNamespace(kgNamespaces(options?.scope).nodes, options?.dbPath, (page) => {
211
+ for (const e of page) {
212
+ const md = e.metadata;
213
+ // Glossary is for ENTITY name reuse — rule prose and extraction-source
214
+ // Session nodes would drown it.
215
+ const t = String(md?.type ?? '').toLowerCase();
216
+ if (md?.node_set === 'rules' || t === 'rule' || t === 'session')
217
+ continue;
218
+ const fw = typeof md.feedback_weight === 'number' ? md.feedback_weight : 0.5;
219
+ const freq = typeof md.frequency_weight === 'number' ? md.frequency_weight : 0;
220
+ const version = typeof md.version === 'number' ? md.version : 1;
221
+ const name = String(md.name ?? e.key);
222
+ top.push({ name, norm: normalizeName(name), rank: version + freq + fw });
223
+ }
224
+ top.sort((a, b) => b.rank - a.rank);
225
+ const seen = new Set();
226
+ const pruned = [];
227
+ for (const n of top) {
228
+ if (seen.has(n.norm))
229
+ continue;
230
+ seen.add(n.norm);
231
+ pruned.push(n);
232
+ if (pruned.length >= limit)
233
+ break;
234
+ }
235
+ top = pruned;
236
+ });
237
+ return top.map((n) => n.name);
238
+ }
239
+ //# sourceMappingURL=memory-kg-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-kg-search.js","sourceRoot":"","sources":["../../../src/memory/memory-kg-search.ts"],"names":[],"mappings":"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"}