@cartisien/engram-mcp 0.3.1 → 0.3.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.
@@ -1,6 +1,22 @@
1
1
  /**
2
2
  * Lightweight regex-based NER — no LLM required.
3
3
  * Extracts entities with type classification and confidence scores.
4
+ *
5
+ * Rewritten 2026-07-09 to fix three recall/precision bugs in the previous
6
+ * heuristic:
7
+ * 1. Sentence-initial proper nouns were always skipped, so a name that
8
+ * started a sentence ("Jeff prefers…", "Sarah mentioned…") was never
9
+ * extracted. The token walk now includes index 0 and relies on an
10
+ * expanded STOP_WORDS list to filter common sentence-initial non-entities.
11
+ * 2. Type classification used a fuzzy ±20-char context window, so a
12
+ * person-verb sitting elsewhere in the sentence leaked onto an unrelated
13
+ * capitalized word ("Jeff said he uses React" tagged React as a person).
14
+ * Classification now looks only at the IMMEDIATELY adjacent tokens.
15
+ * 3. Single proper nouns whose type could not be determined were dropped
16
+ * entirely ("Cartisien" vanished). They are now kept as type 'unknown'
17
+ * with lower confidence so the graph still gets the node.
18
+ * A small technology gazetteer also stops well-known tech from being
19
+ * misclassified as people/locations.
4
20
  */
5
21
  export interface ExtractedEntity {
6
22
  name: string;
@@ -1,8 +1,26 @@
1
1
  /**
2
2
  * Lightweight regex-based NER — no LLM required.
3
3
  * Extracts entities with type classification and confidence scores.
4
+ *
5
+ * Rewritten 2026-07-09 to fix three recall/precision bugs in the previous
6
+ * heuristic:
7
+ * 1. Sentence-initial proper nouns were always skipped, so a name that
8
+ * started a sentence ("Jeff prefers…", "Sarah mentioned…") was never
9
+ * extracted. The token walk now includes index 0 and relies on an
10
+ * expanded STOP_WORDS list to filter common sentence-initial non-entities.
11
+ * 2. Type classification used a fuzzy ±20-char context window, so a
12
+ * person-verb sitting elsewhere in the sentence leaked onto an unrelated
13
+ * capitalized word ("Jeff said he uses React" tagged React as a person).
14
+ * Classification now looks only at the IMMEDIATELY adjacent tokens.
15
+ * 3. Single proper nouns whose type could not be determined were dropped
16
+ * entirely ("Cartisien" vanished). They are now kept as type 'unknown'
17
+ * with lower confidence so the graph still gets the node.
18
+ * A small technology gazetteer also stops well-known tech from being
19
+ * misclassified as people/locations.
4
20
  */
5
- // Words that appear capitalized but are not entities
21
+ // Capitalized tokens that are never entities. Includes common sentence-initial
22
+ // words so that walking from index 0 (to catch sentence-initial names) does not
23
+ // flood the graph with false positives.
6
24
  const STOP_WORDS = new Set([
7
25
  'I', 'The', 'A', 'An', 'It', 'This', 'That', 'These', 'Those', 'My', 'Your',
8
26
  'His', 'Her', 'Our', 'Their', 'We', 'You', 'He', 'She', 'They', 'Is', 'Are',
@@ -14,75 +32,116 @@ const STOP_WORDS = new Set([
14
32
  'Too', 'Very', 'With', 'As', 'At', 'By', 'For', 'From', 'In', 'Of', 'On',
15
33
  'To', 'Up', 'After', 'Before', 'Between', 'Into', 'Through', 'During', 'Above',
16
34
  'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday',
17
- 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
35
+ 'January', 'February', 'March', 'April', 'June', 'July', 'August',
18
36
  'September', 'October', 'November', 'December',
37
+ // common sentence-initial / filler words that are not entities
38
+ 'Yesterday', 'Today', 'Tomorrow', 'Tonight', 'Recently', 'Currently', 'Meanwhile',
39
+ 'However', 'Therefore', 'Maybe', 'Perhaps', 'Please', 'Thanks', 'Thank', 'Hello',
40
+ 'Hi', 'Hey', 'Let', 'Lets', 'Sure', 'Actually', 'Basically', 'Overall', 'Finally',
41
+ 'First', 'Second', 'Third', 'Next', 'Last', 'Here', 'There', 'Once', 'Every', 'All',
42
+ 'Any', 'Since', 'Because', 'While', 'Although', 'Though', 'Well', 'Still', 'Even',
43
+ 'Only', 'Again', 'Soon', 'Later', 'Never', 'Always', 'Us', 'Me', 'Him', 'Them',
44
+ ]);
45
+ // Verbs whose subject (the token right before) is a person: "Jeff said", "Sarah prefers".
46
+ const PERSON_VERBS = new Set([
47
+ 'said', 'says', 'say', 'told', 'tells', 'asked', 'asks', 'mentioned', 'mentions',
48
+ 'wants', 'want', 'needs', 'need', 'thinks', 'think', 'believes', 'believe', 'loves',
49
+ 'love', 'hates', 'hate', 'created', 'wrote', 'writes', 'emailed', 'emails', 'called',
50
+ 'calls', 'texted', 'messaged', 'messages', 'prefers', 'prefer', 'likes', 'dislikes',
51
+ 'noted', 'notes', 'replied', 'suggested', 'suggests', 'decided', 'agreed', 'met',
52
+ 'meets', 'joined', 'left', 'reported', 'added', 'adds', 'owns', 'manages', 'leads',
53
+ 'runs', 'sent', 'sends', 'recommended', 'recommends', 'confirmed', 'requested', 'built',
54
+ ]);
55
+ // Verbs/objects where the token right AFTER is a person: "emailed Jeff", "met Sarah".
56
+ const PERSON_VERBS_BEFORE = new Set([
57
+ 'told', 'asked', 'emailed', 'called', 'texted', 'messaged', 'met', 'thanked',
58
+ 'invited', 'hired', 'mentioned',
59
+ ]);
60
+ // Prepositions that, when they immediately precede a proper noun, signal a place.
61
+ const LOCATION_PREPS = new Set(['in', 'at', 'from', 'near']);
62
+ // Tokens that, when they immediately follow a proper noun, signal an organization.
63
+ const ORG_SUFFIXES = new Set([
64
+ 'team', 'group', 'inc', 'corp', 'llc', 'co', 'company', 'labs', 'systems', 'ltd',
65
+ ]);
66
+ // Well-known technologies. Checked first so tech is never mislabeled as a person
67
+ // just because a person-verb sits nearby.
68
+ const TECH_GAZETTEER = new Set([
69
+ 'react', 'vue', 'angular', 'svelte', 'sqlite', 'postgres', 'postgresql', 'mysql',
70
+ 'mongodb', 'redis', 'docker', 'kubernetes', 'k8s', 'python', 'typescript', 'javascript',
71
+ 'node', 'nodejs', 'deno', 'bun', 'claude', 'openai', 'anthropic', 'ollama', 'qdrant',
72
+ 'pinecone', 'llama', 'gpt', 'rust', 'golang', 'java', 'kotlin', 'swift', 'ruby', 'php',
73
+ 'nginx', 'apache', 'git', 'github', 'gitlab', 'vite', 'webpack', 'next', 'nextjs', 'nuxt',
74
+ 'tailwind', 'stripe', 'vercel', 'netlify', 'aws', 'gcp', 'azure', 'linux', 'ubuntu',
75
+ 'drizzle', 'prisma', 'fastify', 'express', 'hono', 'vitest', 'jest', 'playwright',
19
76
  ]);
20
- // Heuristics for person names: common English name patterns
21
- const PERSON_CONTEXT_WORDS = ['said', 'told', 'asked', 'mentioned', 'wants', 'needs',
22
- 'thinks', 'believes', 'loves', 'hates', 'created', 'built', 'wrote', 'emailed',
23
- 'called', 'texted', 'messaged'];
24
- // Tech/project signal words
25
77
  const TECH_SUFFIXES = ['js', 'ts', 'py', 'db', 'ai', 'ml', 'ui', 'api', 'sdk', 'cli',
26
78
  'mcp', 'gpt', 'llm'];
27
79
  const TECH_CONTEXT_WORDS = ['using', 'built with', 'runs on', 'framework', 'library',
28
80
  'package', 'repo', 'github', 'npm', 'deployed', 'version', 'model'];
29
- // Location signals
30
- const LOCATION_CONTEXT = ['in', 'at', 'from', 'near', 'to', 'city', 'state', 'country'];
31
81
  export function extractEntities(text) {
32
82
  const entities = new Map();
33
83
  const lower = text.toLowerCase();
34
- // --- Pass 1: CamelCase identifiers (GovScout, GitNexus, OpenAI, MemoryDB) ---
84
+ // --- Pass 1: CamelCase identifiers (GovScout, OpenAI, MemoryDB) ---
35
85
  const camelPattern = /\b([A-Z][a-z]+(?:[A-Z][a-z0-9]+)+)\b/g;
36
86
  let m;
37
87
  while ((m = camelPattern.exec(text)) !== null) {
38
88
  const name = m[1];
39
- if (!STOP_WORDS.has(name)) {
40
- const type = classifyCamel(name, lower);
41
- upsert(entities, name, type, 0.90);
42
- }
43
- }
44
- // --- Pass 2: Multi-word proper nouns (Jeff Smith, New York, Federal Aviation) ---
45
- const multiWordPattern = /\b([A-Z][a-z]{1,20}(?:\s[A-Z][a-z]{1,20}){1,3})\b/g;
46
- while ((m = multiWordPattern.exec(text)) !== null) {
47
- const name = m[1];
48
- const words = name.split(' ');
49
- if (words.every(w => !STOP_WORDS.has(w))) {
50
- const type = classifyMultiWord(name, lower);
51
- upsert(entities, name, type, 0.88);
52
- }
89
+ if (!STOP_WORDS.has(name))
90
+ upsert(entities, name, classifyCamel(name, lower), 0.90);
53
91
  }
54
- // --- Pass 3: Single capitalized proper nouns (not at sentence start) ---
55
- const singlePattern = /(?<=[.!?]\s{1,2}|^|\n)(?![A-Z]).*?\b([A-Z][a-z]{2,15})\b/g;
56
- // Simpler: find capitalized words that aren't the first word of a sentence
92
+ // --- Pass 2 + 3: token walk per sentence for single & multi-word proper nouns.
93
+ // Walks from index 0 so sentence-initial names are captured; classification
94
+ // uses only the immediately adjacent tokens. ---
57
95
  const sentences = text.split(/(?<=[.!?])\s+/);
58
96
  for (const sentence of sentences) {
59
- // Skip first word of each sentence, check the rest
60
- const words = sentence.trim().split(/\s+/);
61
- for (let i = 1; i < words.length; i++) {
62
- const word = words[i].replace(/[^A-Za-z]/g, '');
63
- if (word.length >= 3 && /^[A-Z][a-z]{2,}$/.test(word) && !STOP_WORDS.has(word)) {
64
- const type = classifySingle(word, lower);
65
- if (type !== 'unknown') {
66
- upsert(entities, word, type, 0.70);
97
+ const toks = sentence
98
+ .trim()
99
+ .split(/\s+/)
100
+ .map(w => w.replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, ''));
101
+ for (let i = 0; i < toks.length; i++) {
102
+ const word = toks[i];
103
+ // single-token candidate: Title case, 3+ chars (excludes ALL-CAPS acronyms)
104
+ if (!/^[A-Z][a-z]{2,20}$/.test(word))
105
+ continue;
106
+ if (STOP_WORDS.has(word))
107
+ continue;
108
+ // Extend into a multi-word run of Title-case tokens (Jeff Witters, New York).
109
+ let j = i;
110
+ while (j + 1 < toks.length &&
111
+ /^[A-Z][a-z]{1,20}$/.test(toks[j + 1]) &&
112
+ !STOP_WORDS.has(toks[j + 1])) {
113
+ j++;
114
+ }
115
+ const prev = (toks[i - 1] ?? '').toLowerCase();
116
+ if (j > i) {
117
+ const phrase = toks.slice(i, j + 1).join(' ');
118
+ const next = (toks[j + 1] ?? '').toLowerCase();
119
+ if (!entities.has(phrase)) {
120
+ upsert(entities, phrase, classifyPhrase(toks.slice(i, j + 1), prev, next), 0.86);
67
121
  }
122
+ i = j; // consume the run
123
+ continue;
68
124
  }
125
+ if (entities.has(word))
126
+ continue; // already captured (camel / earlier pass)
127
+ const next = (toks[i + 1] ?? '').toLowerCase();
128
+ const { type, confidence } = classifySingle(word, prev, next, lower);
129
+ upsert(entities, word, type, confidence);
69
130
  }
70
131
  }
71
132
  // --- Pass 4: @mentions and #tags ---
72
133
  const mentionPattern = /@([A-Za-z][A-Za-z0-9_-]{1,30})/g;
73
- while ((m = mentionPattern.exec(text)) !== null) {
134
+ while ((m = mentionPattern.exec(text)) !== null)
74
135
  upsert(entities, m[1], 'person', 0.92);
75
- }
76
136
  const tagPattern = /#([A-Za-z][A-Za-z0-9_-]{1,30})/g;
77
- while ((m = tagPattern.exec(text)) !== null) {
137
+ while ((m = tagPattern.exec(text)) !== null)
78
138
  upsert(entities, m[1], 'concept', 0.85);
79
- }
80
- // --- Pass 5: Version strings (v1.2.3, v0.7.0-alpha) ---
139
+ // --- Pass 5: version strings (v1.2.3) ---
81
140
  const versionPattern = /\b(v\d+\.\d+(?:\.\d+)?(?:-[a-z]+)?)\b/gi;
82
141
  while ((m = versionPattern.exec(text)) !== null) {
83
142
  upsert(entities, m[1].toLowerCase(), 'technology', 0.80);
84
143
  }
85
- // Boost confidence for entities that appear multiple times
144
+ // Boost confidence for entities that appear multiple times.
86
145
  for (const [name, entity] of entities) {
87
146
  const count = countOccurrences(lower, name.toLowerCase());
88
147
  if (count > 1) {
@@ -91,7 +150,7 @@ export function extractEntities(text) {
91
150
  }
92
151
  return Array.from(entities.values())
93
152
  .sort((a, b) => b.confidence - a.confidence)
94
- .slice(0, 20); // cap at 20 entities per memory
153
+ .slice(0, 20);
95
154
  }
96
155
  function upsert(map, name, type, confidence) {
97
156
  const existing = map.get(name);
@@ -101,61 +160,58 @@ function upsert(map, name, type, confidence) {
101
160
  }
102
161
  function classifyCamel(name, context) {
103
162
  const lower = name.toLowerCase();
104
- // Common tech suffixes
105
163
  if (TECH_SUFFIXES.some(s => lower.endsWith(s)) || lower.includes('db') || lower.includes('api')) {
106
164
  return 'technology';
107
165
  }
108
- // Common project patterns
109
166
  if (lower.includes('scout') || lower.includes('nexus') || lower.includes('gram') ||
110
167
  lower.includes('claw') || lower.includes('brain') || lower.includes('hub')) {
111
168
  return 'project';
112
169
  }
113
- // If mentioned near tech context words
114
170
  if (TECH_CONTEXT_WORDS.some(w => context.includes(w)))
115
171
  return 'technology';
116
- return 'project'; // CamelCase is most likely a project/product
117
- }
118
- function classifyMultiWord(name, context) {
119
- const lower = name.toLowerCase();
120
- const idx = context.indexOf(lower);
121
- if (idx === -1)
122
- return 'unknown';
123
- const before = context.slice(Math.max(0, idx - 30), idx);
124
- const after = context.slice(idx + lower.length, idx + lower.length + 30);
125
- const window = before + ' ' + after;
126
- if (PERSON_CONTEXT_WORDS.some(w => window.includes(w)))
127
- return 'person';
128
- if (LOCATION_CONTEXT.some(w => before.trim().endsWith(w)))
129
- return 'location';
130
- if (TECH_CONTEXT_WORDS.some(w => window.includes(w)))
131
- return 'technology';
132
- // Two capitalized words with common first names = person
133
- const words = name.split(' ');
134
- if (words.length === 2 && isLikelyFirstName(words[0]))
135
- return 'person';
136
- return 'concept';
172
+ return 'project';
137
173
  }
138
- function classifySingle(word, context) {
174
+ // Classify a single Title-case token using only its immediate neighbours.
175
+ function classifySingle(word, prev, next, context) {
139
176
  const lower = word.toLowerCase();
140
- const idx = context.indexOf(lower);
141
- if (idx === -1)
142
- return 'unknown';
143
- const before = context.slice(Math.max(0, idx - 20), idx);
144
- const after = context.slice(idx + lower.length, idx + lower.length + 20);
145
- const window = before + ' ' + after;
146
- if (PERSON_CONTEXT_WORDS.some(w => window.includes(w)))
147
- return 'person';
148
- if (LOCATION_CONTEXT.some(w => before.trim().endsWith(w)))
149
- return 'location';
150
- // Known tech names
151
- if (['react', 'sqlite', 'postgres', 'docker', 'redis', 'python', 'typescript',
152
- 'claude', 'openai', 'ollama', 'qdrant'].includes(lower))
153
- return 'technology';
154
- return 'unknown'; // single words are too ambiguous without stronger signals
177
+ if (TECH_GAZETTEER.has(lower))
178
+ return { type: 'technology', confidence: 0.85 };
179
+ if (TECH_SUFFIXES.some(s => lower.endsWith(s)))
180
+ return { type: 'technology', confidence: 0.72 };
181
+ // "Jeff said" / "Sarah prefers" name is the subject of a person-verb.
182
+ if (PERSON_VERBS.has(next))
183
+ return { type: 'person', confidence: 0.85 };
184
+ // "emailed Jeff" / "met Sarah" — name is the object of a person-directed verb.
185
+ if (PERSON_VERBS_BEFORE.has(prev))
186
+ return { type: 'person', confidence: 0.74 };
187
+ // "in Boston" / "at Denver" — preceded by a location preposition.
188
+ if (LOCATION_PREPS.has(prev))
189
+ return { type: 'location', confidence: 0.72 };
190
+ // "Cartisien team" / "Acme labs" — followed by an org suffix.
191
+ if (ORG_SUFFIXES.has(next))
192
+ return { type: 'project', confidence: 0.78 };
193
+ // "uses Foo" / "Foo framework" with tech language nearby.
194
+ if ((prev === 'uses' || prev === 'using' || next === 'framework' || next === 'library') &&
195
+ TECH_CONTEXT_WORDS.some(w => context.includes(w))) {
196
+ return { type: 'technology', confidence: 0.70 };
197
+ }
198
+ // A real proper noun we cannot confidently type — keep it so the graph still
199
+ // gets the node, but at low confidence.
200
+ return { type: 'unknown', confidence: 0.55 };
155
201
  }
156
- function isLikelyFirstName(word) {
157
- // Very basic - common short English first names pattern
158
- return word.length >= 2 && word.length <= 12 && /^[A-Z][a-z]+$/.test(word);
202
+ // Classify a multi-word Title-case run using its immediate neighbours.
203
+ function classifyPhrase(words, prev, next) {
204
+ if (ORG_SUFFIXES.has(next))
205
+ return 'project';
206
+ if (PERSON_VERBS.has(next))
207
+ return 'person'; // "Jeff Smith said"
208
+ if (PERSON_VERBS_BEFORE.has(prev))
209
+ return 'person'; // "emailed Jeff Smith"
210
+ if (LOCATION_PREPS.has(prev))
211
+ return 'location'; // "in New York"
212
+ if (words.length === 2)
213
+ return 'person'; // two Title-case words: most often a full name
214
+ return 'concept';
159
215
  }
160
216
  function countOccurrences(text, term) {
161
217
  let count = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/analysis/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/analysis/entities.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cartisien/engram-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "MCP server for Engram — structured agent memory as relational intelligence",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
@@ -22,7 +22,7 @@
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
24
  "@modelcontextprotocol/sdk": "^1.0.0",
25
- "@cartisien/engram": "2.1.1"
25
+ "@cartisien/engram": "2.1.2"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^20.11.0",