@oh-my-pi/pi-mnemopi 17.4.2 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [18.0.0] - 2026-08-22
6
+
7
+ ### Fixed
8
+
9
+ - Fixed false-positive location extraction in episodic gists by properly enforcing capitalization constraints for proper nouns.
10
+ - Improved episodic gist participant extraction with Unicode support to properly capture names in non-Latin scripts (e.g., Cyrillic, Greek).
11
+
5
12
  ## [17.3.8] - 2026-08-19
6
13
 
7
14
  ### Added
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-mnemopi",
4
- "version": "17.4.2",
4
+ "version": "18.0.0",
5
5
  "description": "Local SQLite memory engine for Oh My Pi agents",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Stencil Labs, Inc.",
@@ -39,10 +39,10 @@
39
39
  "fmt": "biome format --write ."
40
40
  },
41
41
  "dependencies": {
42
- "@oh-my-pi/pi-ai": "17.4.2",
43
- "@oh-my-pi/pi-catalog": "17.4.2",
44
- "@oh-my-pi/pi-natives": "17.4.2",
45
- "@oh-my-pi/pi-utils": "17.4.2"
42
+ "@oh-my-pi/pi-ai": "18.0.0",
43
+ "@oh-my-pi/pi-catalog": "18.0.0",
44
+ "@oh-my-pi/pi-natives": "18.0.0",
45
+ "@oh-my-pi/pi-utils": "18.0.0"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "fastembed": "2.1.0",
@@ -565,7 +565,14 @@ export class EpisodicGraph {
565
565
  }
566
566
 
567
567
  private extractParticipants(content: string): string[] {
568
- const names = Array.from(content.matchAll(/\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)?)\b/g), match => match[1] ?? "");
568
+ // Match capitalized proper nouns across cased scripts (Latin, Greek, Cyrillic, …).
569
+ // `[A-Z][a-z]+` plus ASCII `\b` matched no non-Latin token, so any non-English
570
+ // memory produced zero participants (issue #7918). Unicode property escapes with
571
+ // the `u` flag, and `\p{L}`-based lookaround boundaries in place of `\b`, fix that.
572
+ const names = Array.from(
573
+ content.matchAll(/(?<![\p{L}\p{N}_])(\p{Lu}\p{Ll}+(?:\s+\p{Lu}\p{Ll}+)?)(?![\p{L}\p{N}_])/gu),
574
+ match => match[1] ?? "",
575
+ );
569
576
  const pronouns = Array.from(
570
577
  content.matchAll(/\b(I|you|we|they|he|she|it|me|us|them|him|her)\b/gi),
571
578
  match => match[1] ?? "",
@@ -590,7 +597,7 @@ export class EpisodicGraph {
590
597
 
591
598
  private extractLocation(content: string): string | null {
592
599
  const properPlace =
593
- /\b(?:at|in|from)\s+([A-Z][a-zA-Z\s]+?)(?:\s+(?:yesterday|today|tomorrow|now|last|next|on|at)\b|$)/i.exec(
600
+ /\b(?:at|in|from)\s+([A-Z][a-zA-Z\s]+?)(?:\s+(?:yesterday|today|tomorrow|now|last|next|on|at)\b|$)/.exec(
594
601
  content,
595
602
  );
596
603
  if (properPlace?.[1] !== undefined) return properPlace[1].trim();