digital-brain 0.1.3 → 1.0.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.
Files changed (48) hide show
  1. package/README.md +38 -7
  2. package/bin/digital-brain.js +275 -38
  3. package/docs/AUTOMATIONS.md +13 -4
  4. package/docs/INTEGRATIONS.md +72 -0
  5. package/docs/PRIVACY.md +3 -1
  6. package/docs/SETUP.md +78 -0
  7. package/examples/sample-vault/{04 People/Interpreted Relationships/Close Friend.md → 06 AI Memory/Generated Relationship Drafts/Close Friend (WhatsApp).md } +4 -3
  8. package/examples/sample-vault/{04 People/Interpreted Relationships/Mom.md → 06 AI Memory/Generated Relationship Drafts/Mom (WhatsApp).md } +4 -3
  9. package/examples/sample-vault/{08 Sources/WhatsApp/Analysis/Interpreted/Project Team.md → 06 AI Memory/Generated Relationship Drafts/Project Team (WhatsApp).md } +4 -3
  10. package/examples/sample-vault/06 AI Memory/Interpreted Relationship Memory.md +3 -3
  11. package/examples/sample-vault/06 AI Memory/Person Context Index.md +26 -0
  12. package/examples/sample-vault/06 AI Memory/Person Reply Context.md +26 -0
  13. package/examples/sample-vault/08 Sources/{WhatsApp/Analysis/Interpreted/Close Friend.md → Analysis/Interpreted/Close Friend (WhatsApp).md } +4 -3
  14. package/examples/sample-vault/08 Sources/{WhatsApp/Analysis/Interpreted/Mom.md → Analysis/Interpreted/Mom (WhatsApp).md } +4 -3
  15. package/examples/sample-vault/{04 People/Interpreted Relationships/Project Team.md → 08 Sources/Analysis/Interpreted/Project Team (WhatsApp).md } +4 -3
  16. package/examples/sample-vault/08 Sources/Analysis/Relationship Map.md +38 -0
  17. package/examples/sample-vault/08 Sources/Analysis/interpreted_relationship_models.json +175 -0
  18. package/examples/sample-vault/08 Sources/Analysis/person_identity_map.json +78 -0
  19. package/examples/sample-vault/08 Sources/Analysis/relationship_profiles.json +122 -0
  20. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/Interpreted/Close Friend (WhatsApp).md +44 -0
  21. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/Interpreted/Mom (WhatsApp).md +45 -0
  22. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/Interpreted/Project Team (WhatsApp).md +45 -0
  23. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/Relationship Map.md +9 -3
  24. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/interpreted_relationship_models.json +18 -0
  25. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/person_identity_map.json +78 -0
  26. package/examples/sample-vault/08 Sources/WhatsApp/Analysis/relationship_profiles.json +18 -0
  27. package/examples/sample-vault/08 Sources/WhatsApp/Raw/2026-01-01.jsonl +6 -6
  28. package/lib/fs.js +33 -0
  29. package/package.json +2 -1
  30. package/scripts/digital_brain_imessage_sync.py +175 -0
  31. package/scripts/digital_brain_linkedin_export_import.py +214 -0
  32. package/scripts/digital_brain_relationship_extractor.py +189 -12
  33. package/scripts/digital_brain_relationship_interpreter.py +104 -15
  34. package/scripts/digital_brain_slack_export_import.py +181 -0
  35. package/scripts/digital_brain_whatsapp_mac_sync.py +37 -8
  36. package/templates/vault/00 Home/How AI Should Use This Vault.md +1 -1
  37. package/templates/vault/00 Home/Start Here.md +2 -1
  38. package/templates/vault/04 People/Relationship Overrides.md +2 -1
  39. package/templates/vault/06 AI Memory/Generated Relationship Drafts/README.md +5 -0
  40. package/templates/vault/06 AI Memory/Interpreted Relationship Memory.md +1 -2
  41. package/templates/vault/06 AI Memory/Person Context Index.md +4 -0
  42. package/templates/vault/06 AI Memory/Person Reply Context.md +4 -0
  43. package/templates/vault/08 Sources/README.md +5 -0
  44. package/templates/vault/08 Sources/WhatsApp/Outbound/README.md +2 -2
  45. package/templates/vault/AGENTS.md +5 -1
  46. package/templates/vault/CLAUDE.md +3 -0
  47. package/templates/vault/GEMINI.md +4 -0
  48. package/whatsapp-web/send.mjs +32 -5
@@ -0,0 +1,72 @@
1
+ # Integrations
2
+
3
+ Digital Brain prefers official exports and local files over scraping.
4
+
5
+ ## WhatsApp
6
+
7
+ ```bash
8
+ digital-brain run
9
+ ```
10
+
11
+ WhatsApp support reads the local macOS WhatsApp database when available.
12
+
13
+ Dependency selected in setup:
14
+
15
+ - Install/open WhatsApp for Mac and log in: https://faq.whatsapp.com/686469079565350
16
+ - If macOS blocks access, grant Full Disk Access to the terminal app running Digital Brain.
17
+ - If WhatsApp is selected and the database is missing, `digital-brain run` exits with an error.
18
+
19
+ ## Apple iMessage
20
+
21
+ ```bash
22
+ digital-brain sync-imessage --days 30
23
+ digital-brain extract
24
+ digital-brain interpret
25
+ ```
26
+
27
+ iMessage support reads the local macOS Messages database at `~/Library/Messages/chat.db`.
28
+
29
+ Dependency selected in setup:
30
+
31
+ - Open Messages on macOS at least once: https://support.apple.com/guide/messages/welcome/mac
32
+ - If macOS blocks access, grant Full Disk Access to the terminal app running Digital Brain.
33
+ - If iMessage is selected and the database is missing, `digital-brain run` exits with an error.
34
+
35
+ ## Slack
36
+
37
+ Use Slack's official workspace export ZIP or extracted export folder.
38
+
39
+ ```bash
40
+ digital-brain import-slack --input ./slack-export.zip
41
+ digital-brain extract
42
+ digital-brain interpret
43
+ ```
44
+
45
+ Slack export access depends on workspace permissions and plan. Public-channel exports are common; private channels and DMs may require elevated workspace export permissions.
46
+
47
+ Export guide: https://slack.com/help/articles/201658943-Export-your-workspace-data
48
+
49
+ ## LinkedIn
50
+
51
+ Use LinkedIn's official data archive ZIP or extracted archive folder.
52
+
53
+ ```bash
54
+ digital-brain import-linkedin --input ./linkedin-archive.zip
55
+ digital-brain extract
56
+ digital-brain interpret
57
+ ```
58
+
59
+ Digital Brain does not scrape LinkedIn or automate the LinkedIn app. LinkedIn controls what appears in the archive, so connections/messages may vary by account and export type.
60
+
61
+ Data archive guide: https://www.linkedin.com/help/linkedin/answer/a566336
62
+
63
+ ## Useful Next Sources
64
+
65
+ - Calendar: recurring people, meetings, and relationship cadence.
66
+ - Email export: long-form relationship and work context, but privacy risk is high.
67
+ - GitHub: collaborators, repos, review style, and work graph.
68
+ - Linear/Jira: active projects and operating context.
69
+ - Contacts: canonical names, phones, companies, and relationship labels.
70
+ - Browser bookmarks/read-later: interests and research areas.
71
+
72
+ The right rule: add sources that improve memory without turning Digital Brain into spyware. Prefer explicit exports, clear consent, and source-specific privacy controls.
package/docs/PRIVACY.md CHANGED
@@ -7,13 +7,15 @@ Digital Brain is designed for local use.
7
7
  - No cloud API is called by default.
8
8
  - Ollama interpretation is local when enabled.
9
9
  - WhatsApp sending uses a local WhatsApp Web session.
10
+ - Raw source data stays under `08 Sources/`; normal AI context should use `06 AI Memory/` and human notes under `04 People/`.
11
+ - Same-person matching across sources is provisional and file-based; keep source evidence visible when using merged person context.
10
12
 
11
13
  Things to be careful about:
12
14
 
13
15
  - Do not commit a generated vault.
14
16
  - Do not paste private message exports into GitHub issues.
15
17
  - Do not enable outbound sending without understanding the risk.
16
- - Treat WhatsApp database access and WhatsApp Web automation as unofficial, changeable integrations.
18
+ - Treat WhatsApp database access, iMessage database access, and WhatsApp Web automation as local, permission-sensitive integrations that can change.
17
19
  - Always-on mode runs on your machine and inherits your local permissions.
18
20
  - You are responsible for consent, privacy, message content, and sends made from your machine.
19
21
  - Treat relationship labels as editable working notes, not truth.
package/docs/SETUP.md ADDED
@@ -0,0 +1,78 @@
1
+ # Setup
2
+
3
+ Digital Brain is designed to install with one npm command:
4
+
5
+ ```bash
6
+ npx digital-brain init
7
+ ```
8
+
9
+ npm installs the Node dependencies. No pip install is needed; the Python scripts only use the standard library.
10
+
11
+ ## What Init Checks
12
+
13
+ After the quiz, `init` runs a setup check for:
14
+
15
+ - Node 20+
16
+ - npm package dependencies
17
+ - Python 3
18
+ - Python sqlite3 support
19
+ - selected live source access:
20
+ - WhatsApp for Mac local database access
21
+ - Apple Messages local database access
22
+ - selected import source instructions:
23
+ - Slack export link
24
+ - LinkedIn archive link
25
+ - optional Ollama
26
+
27
+ Run the check again anytime:
28
+
29
+ ```bash
30
+ digital-brain doctor
31
+ ```
32
+
33
+ For a short usage guide:
34
+
35
+ ```bash
36
+ digital-brain tutorial
37
+ ```
38
+
39
+ ## What Cannot Be Silently Installed
40
+
41
+ Digital Brain does not silently install or configure system apps.
42
+
43
+ - WhatsApp for Mac must be installed and logged in by the user.
44
+ - Apple Messages must be opened by the user before iMessage sync can read `~/Library/Messages/chat.db`.
45
+ - macOS may require Full Disk Access for the terminal app.
46
+ - Ollama is optional and only needed for local LLM workflows.
47
+
48
+ Useful links:
49
+
50
+ - Node: https://nodejs.org
51
+ - WhatsApp for Mac: https://faq.whatsapp.com/686469079565350
52
+ - Apple Messages: https://support.apple.com/guide/messages/welcome/mac
53
+ - Slack exports: https://slack.com/help/articles/201658943-Export-your-workspace-data
54
+ - LinkedIn data archive: https://www.linkedin.com/help/linkedin/answer/a566336
55
+
56
+ Once setup passes, normal use is:
57
+
58
+ ```bash
59
+ digital-brain run
60
+ ```
61
+
62
+ `run` executes the live local sources selected during setup. If a selected live source does not exist or cannot be opened, the command fails with a setup error.
63
+
64
+ Optional imports:
65
+
66
+ ```bash
67
+ digital-brain import-slack --input ./slack-export.zip
68
+ digital-brain import-linkedin --input ./linkedin-archive.zip
69
+ digital-brain extract
70
+ digital-brain interpret
71
+ ```
72
+
73
+ Useful direct sync commands:
74
+
75
+ ```bash
76
+ digital-brain sync-whatsapp --days 30
77
+ digital-brain sync-imessage --days 30
78
+ ```
@@ -1,13 +1,14 @@
1
- # Close Friend
1
+ # Close Friend (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131803+00:00
3
+ Generated: 2026-06-09T23:15:09.589124+00:00
4
+ Source: WhatsApp
4
5
  Role: operational contact
5
6
  Role confidence: low
6
7
  Closeness: medium
7
8
  Conversation difficulty: low
8
9
  Typing style: short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - operational contact (low confidence).
@@ -1,13 +1,14 @@
1
- # Mom
1
+ # Mom (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131148+00:00
3
+ Generated: 2026-06-09T23:15:09.587707+00:00
4
+ Source: WhatsApp
4
5
  Role: mother
5
6
  Role confidence: high
6
7
  Closeness: medium
7
8
  Conversation difficulty: low
8
9
  Typing style: very short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - mother (high confidence).
@@ -1,13 +1,14 @@
1
- # Project Team
1
+ # Project Team (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131626+00:00
3
+ Generated: 2026-06-09T23:15:09.588601+00:00
4
+ Source: WhatsApp
4
5
  Role: work collaborator
5
6
  Role confidence: medium
6
7
  Closeness: low/unclear
7
8
  Conversation difficulty: practical/low-emotional
8
9
  Typing style: short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - work collaborator (medium confidence).
@@ -2,6 +2,6 @@
2
2
 
3
3
  Generated working notes. Treat as editable, not truth.
4
4
 
5
- - [[Mom]]: mother (high), closeness medium, difficulty low, style very short
6
- - [[Project Team]]: work collaborator (medium), closeness low/unclear, difficulty practical/low-emotional, style short
7
- - [[Close Friend]]: operational contact (low), closeness medium, difficulty low, style short
5
+ - [[Mom (WhatsApp)]]: mother (high), closeness medium, difficulty low, style very short
6
+ - [[Project Team (WhatsApp)]]: work collaborator (medium), closeness low/unclear, difficulty practical/low-emotional, style short
7
+ - [[Close Friend (WhatsApp)]]: operational contact (low), closeness medium, difficulty low, style short
@@ -0,0 +1,26 @@
1
+ # Person Context Index
2
+
3
+ Window: last 365 days
4
+
5
+ Canonical people matched across sources. Treat matches as provisional unless manually confirmed.
6
+
7
+ ## Mom
8
+
9
+ - Canonical key: `person::mom`
10
+ - Aliases: Mom
11
+ - Sources: WhatsApp
12
+ - Messages: 2
13
+ - Dates: 2026-01-01 to 2026-01-01
14
+ - Source-specific context:
15
+ - WhatsApp / Mom: warm personal relationship; 2 messages; style very short; avg 4.0 words; lowercase 0.0; emoji 0.0; slang none
16
+
17
+ ## Close Friend
18
+
19
+ - Canonical key: `person::close friend`
20
+ - Aliases: Close Friend
21
+ - Sources: WhatsApp
22
+ - Messages: 2
23
+ - Dates: 2026-01-01 to 2026-01-01
24
+ - Source-specific context:
25
+ - WhatsApp / Close Friend: warm personal relationship; 2 messages; style short; avg 5.0 words; lowercase 0.0; emoji 0.0; slang none
26
+
@@ -0,0 +1,26 @@
1
+ # Person Reply Context
2
+
3
+ Use this first when responding to a specific person. It merges confirmed-looking matches across sources while keeping each source visible.
4
+
5
+ ## Mom
6
+
7
+ - Canonical key: `person::mom`
8
+ - Aliases: Mom
9
+ - Sources: WhatsApp
10
+ - Total messages: 2
11
+ - Source-specific guidance:
12
+ - WhatsApp / Mom: mother (high), closeness medium, difficulty low.
13
+ Style: very short.
14
+ Reply: Keep replies very short unless context demands detail. Match style without exaggerating or parodying the person.
15
+
16
+ ## Close Friend
17
+
18
+ - Canonical key: `person::close friend`
19
+ - Aliases: Close Friend
20
+ - Sources: WhatsApp
21
+ - Total messages: 2
22
+ - Source-specific guidance:
23
+ - WhatsApp / Close Friend: operational contact (low), closeness medium, difficulty low.
24
+ Style: short.
25
+ Reply: Keep replies very short unless context demands detail. Match style without exaggerating or parodying the person.
26
+
@@ -1,13 +1,14 @@
1
- # Close Friend
1
+ # Close Friend (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131803+00:00
3
+ Generated: 2026-06-09T23:15:09.589124+00:00
4
+ Source: WhatsApp
4
5
  Role: operational contact
5
6
  Role confidence: low
6
7
  Closeness: medium
7
8
  Conversation difficulty: low
8
9
  Typing style: short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - operational contact (low confidence).
@@ -1,13 +1,14 @@
1
- # Mom
1
+ # Mom (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131148+00:00
3
+ Generated: 2026-06-09T23:15:09.587707+00:00
4
+ Source: WhatsApp
4
5
  Role: mother
5
6
  Role confidence: high
6
7
  Closeness: medium
7
8
  Conversation difficulty: low
8
9
  Typing style: very short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - mother (high confidence).
@@ -1,13 +1,14 @@
1
- # Project Team
1
+ # Project Team (WhatsApp)
2
2
 
3
- Generated: 2026-06-09T22:26:26.131626+00:00
3
+ Generated: 2026-06-09T23:15:09.588601+00:00
4
+ Source: WhatsApp
4
5
  Role: work collaborator
5
6
  Role confidence: medium
6
7
  Closeness: low/unclear
7
8
  Conversation difficulty: practical/low-emotional
8
9
  Typing style: short
9
10
 
10
- These are private working notes. Edit them where wrong.
11
+ Generated draft, not truth. These are private working notes. Edit them where wrong.
11
12
 
12
13
  ## Role / Relationship Label
13
14
  - work collaborator (medium confidence).
@@ -0,0 +1,38 @@
1
+ # Relationship Map
2
+
3
+ Window: last 365 days
4
+
5
+ Generated signals. Treat as editable working notes.
6
+
7
+ ## Mom (WhatsApp)
8
+
9
+ - Source: WhatsApp
10
+ - Canonical person: Mom (person::mom)
11
+ - Guess: warm personal relationship
12
+ - Messages: 2 (1 inbound, 1 outbound)
13
+ - Dates: 2026-01-01 to 2026-01-01
14
+ - Scores: sentiment 0.159, warmth 0.5, friction 0.0, operational 1.5
15
+ - Tags: direct-chat, light, warm, logistics-heavy
16
+ - Typing style: very short; avg 4.0 words; lowercase 0.0; emoji 0.0; slang none
17
+
18
+ ## Project Team (WhatsApp)
19
+
20
+ - Source: WhatsApp
21
+ - Canonical person: Project Team (group::whatsapp::project team)
22
+ - Guess: group, likely social or mixed context
23
+ - Messages: 2 (1 inbound, 1 outbound)
24
+ - Dates: 2026-01-01 to 2026-01-01
25
+ - Scores: sentiment 0, warmth 0.0, friction 0.0, operational 3.0
26
+ - Tags: group-chat, light, logistics-heavy, question-heavy
27
+ - Typing style: short; avg 6.0 words; lowercase 0.0; emoji 0.0; slang none
28
+
29
+ ## Close Friend (WhatsApp)
30
+
31
+ - Source: WhatsApp
32
+ - Canonical person: Close Friend (person::close friend)
33
+ - Guess: warm personal relationship
34
+ - Messages: 2 (1 inbound, 1 outbound)
35
+ - Dates: 2026-01-01 to 2026-01-01
36
+ - Scores: sentiment 0.159, warmth 1.0, friction 0.0, operational 0.5
37
+ - Tags: direct-chat, light, warm, logistics-heavy
38
+ - Typing style: short; avg 5.0 words; lowercase 0.0; emoji 0.0; slang none
@@ -0,0 +1,175 @@
1
+ [
2
+ {
3
+ "chatName": "Mom",
4
+ "sourceSystem": "WhatsApp",
5
+ "displayName": "Mom (WhatsApp)",
6
+ "identityName": "Mom",
7
+ "canonicalPersonKey": "person::mom",
8
+ "identityConfidence": "medium",
9
+ "identityEvidence": "WhatsApp direct chat identity",
10
+ "messageCount": 2,
11
+ "inbound": 1,
12
+ "outbound": 1,
13
+ "outboundShare": 0.5,
14
+ "firstSeen": "2026-01-01",
15
+ "lastSeen": "2026-01-01",
16
+ "isGroup": false,
17
+ "sentimentScore": 0.159,
18
+ "warmthScore": 0.5,
19
+ "frictionScore": 0.0,
20
+ "operationalScore": 1.5,
21
+ "questionCount": 0,
22
+ "relationshipGuess": "warm personal relationship",
23
+ "tags": [
24
+ "direct-chat",
25
+ "light",
26
+ "warm",
27
+ "logistics-heavy"
28
+ ],
29
+ "typingStyle": {
30
+ "sampleSize": 1,
31
+ "avgChars": 24.0,
32
+ "avgWords": 4.0,
33
+ "lowercaseShare": 0.0,
34
+ "uppercaseShare": 0.0,
35
+ "questionShare": 0.0,
36
+ "exclamationShare": 0.0,
37
+ "emojiShare": 0.0,
38
+ "slang": [],
39
+ "signature": "very short"
40
+ },
41
+ "role": "mother",
42
+ "roleConfidence": "high",
43
+ "roleReason": "manual override",
44
+ "closeness": "medium",
45
+ "conversationDifficulty": "low",
46
+ "reciprocity": "balanced",
47
+ "howToContinue": [
48
+ "Use warmer language than a work chat.",
49
+ "Do not make the interaction purely transactional.",
50
+ "Track open loops, plans, dates, and commitments."
51
+ ],
52
+ "boundaries": [
53
+ "Do not expose private summaries unless asked."
54
+ ],
55
+ "replyStyle": [
56
+ "Keep replies very short unless context demands detail.",
57
+ "Match style without exaggerating or parodying the person."
58
+ ]
59
+ },
60
+ {
61
+ "chatName": "Project Team",
62
+ "sourceSystem": "WhatsApp",
63
+ "displayName": "Project Team (WhatsApp)",
64
+ "identityName": "Project Team",
65
+ "canonicalPersonKey": "group::whatsapp::project team",
66
+ "identityConfidence": "medium",
67
+ "identityEvidence": "group chat kept source-specific",
68
+ "messageCount": 2,
69
+ "inbound": 1,
70
+ "outbound": 1,
71
+ "outboundShare": 0.5,
72
+ "firstSeen": "2026-01-01",
73
+ "lastSeen": "2026-01-01",
74
+ "isGroup": true,
75
+ "sentimentScore": 0,
76
+ "warmthScore": 0.0,
77
+ "frictionScore": 0.0,
78
+ "operationalScore": 3.0,
79
+ "questionCount": 1,
80
+ "relationshipGuess": "group, likely social or mixed context",
81
+ "tags": [
82
+ "group-chat",
83
+ "light",
84
+ "logistics-heavy",
85
+ "question-heavy"
86
+ ],
87
+ "typingStyle": {
88
+ "sampleSize": 1,
89
+ "avgChars": 33.0,
90
+ "avgWords": 6.0,
91
+ "lowercaseShare": 0.0,
92
+ "uppercaseShare": 0.0,
93
+ "questionShare": 0.0,
94
+ "exclamationShare": 0.0,
95
+ "emojiShare": 0.0,
96
+ "slang": [],
97
+ "signature": "short"
98
+ },
99
+ "role": "work collaborator",
100
+ "roleConfidence": "medium",
101
+ "roleReason": "matched chat name",
102
+ "closeness": "low/unclear",
103
+ "conversationDifficulty": "practical/low-emotional",
104
+ "reciprocity": "balanced",
105
+ "howToContinue": [
106
+ "Lead with context, next steps, and clear asks.",
107
+ "Keep emotional interpretation light.",
108
+ "Track open loops, plans, dates, and commitments."
109
+ ],
110
+ "boundaries": [
111
+ "Do not expose private summaries unless asked."
112
+ ],
113
+ "replyStyle": [
114
+ "Use concise replies with one clear point.",
115
+ "Match style without exaggerating or parodying the person."
116
+ ]
117
+ },
118
+ {
119
+ "chatName": "Close Friend",
120
+ "sourceSystem": "WhatsApp",
121
+ "displayName": "Close Friend (WhatsApp)",
122
+ "identityName": "Close Friend",
123
+ "canonicalPersonKey": "person::close friend",
124
+ "identityConfidence": "medium",
125
+ "identityEvidence": "WhatsApp direct chat identity",
126
+ "messageCount": 2,
127
+ "inbound": 1,
128
+ "outbound": 1,
129
+ "outboundShare": 0.5,
130
+ "firstSeen": "2026-01-01",
131
+ "lastSeen": "2026-01-01",
132
+ "isGroup": false,
133
+ "sentimentScore": 0.159,
134
+ "warmthScore": 1.0,
135
+ "frictionScore": 0.0,
136
+ "operationalScore": 0.5,
137
+ "questionCount": 0,
138
+ "relationshipGuess": "warm personal relationship",
139
+ "tags": [
140
+ "direct-chat",
141
+ "light",
142
+ "warm",
143
+ "logistics-heavy"
144
+ ],
145
+ "typingStyle": {
146
+ "sampleSize": 1,
147
+ "avgChars": 30.0,
148
+ "avgWords": 5.0,
149
+ "lowercaseShare": 0.0,
150
+ "uppercaseShare": 0.0,
151
+ "questionShare": 0.0,
152
+ "exclamationShare": 0.0,
153
+ "emojiShare": 0.0,
154
+ "slang": [],
155
+ "signature": "short"
156
+ },
157
+ "role": "operational contact",
158
+ "roleConfidence": "low",
159
+ "roleReason": "logistics-heavy communication",
160
+ "closeness": "medium",
161
+ "conversationDifficulty": "low",
162
+ "reciprocity": "balanced",
163
+ "howToContinue": [
164
+ "Keep tone neutral until the user labels this relationship.",
165
+ "Track open loops, plans, dates, and commitments."
166
+ ],
167
+ "boundaries": [
168
+ "Do not expose private summaries unless asked."
169
+ ],
170
+ "replyStyle": [
171
+ "Keep replies very short unless context demands detail.",
172
+ "Match style without exaggerating or parodying the person."
173
+ ]
174
+ }
175
+ ]
@@ -0,0 +1,78 @@
1
+ [
2
+ {
3
+ "canonicalPersonKey": "person::mom",
4
+ "displayName": "Mom",
5
+ "aliases": [
6
+ "Mom"
7
+ ],
8
+ "sources": [
9
+ "WhatsApp"
10
+ ],
11
+ "sourceProfiles": [
12
+ {
13
+ "sourceSystem": "WhatsApp",
14
+ "chatName": "Mom",
15
+ "displayName": "Mom (WhatsApp)",
16
+ "messageCount": 2,
17
+ "firstSeen": "2026-01-01",
18
+ "lastSeen": "2026-01-01",
19
+ "relationshipGuess": "warm personal relationship",
20
+ "typingStyle": {
21
+ "sampleSize": 1,
22
+ "avgChars": 24.0,
23
+ "avgWords": 4.0,
24
+ "lowercaseShare": 0.0,
25
+ "uppercaseShare": 0.0,
26
+ "questionShare": 0.0,
27
+ "exclamationShare": 0.0,
28
+ "emojiShare": 0.0,
29
+ "slang": [],
30
+ "signature": "very short"
31
+ },
32
+ "identityConfidence": "medium",
33
+ "identityEvidence": "WhatsApp direct chat identity"
34
+ }
35
+ ],
36
+ "totalMessages": 2,
37
+ "firstSeen": "2026-01-01",
38
+ "lastSeen": "2026-01-01"
39
+ },
40
+ {
41
+ "canonicalPersonKey": "person::close friend",
42
+ "displayName": "Close Friend",
43
+ "aliases": [
44
+ "Close Friend"
45
+ ],
46
+ "sources": [
47
+ "WhatsApp"
48
+ ],
49
+ "sourceProfiles": [
50
+ {
51
+ "sourceSystem": "WhatsApp",
52
+ "chatName": "Close Friend",
53
+ "displayName": "Close Friend (WhatsApp)",
54
+ "messageCount": 2,
55
+ "firstSeen": "2026-01-01",
56
+ "lastSeen": "2026-01-01",
57
+ "relationshipGuess": "warm personal relationship",
58
+ "typingStyle": {
59
+ "sampleSize": 1,
60
+ "avgChars": 30.0,
61
+ "avgWords": 5.0,
62
+ "lowercaseShare": 0.0,
63
+ "uppercaseShare": 0.0,
64
+ "questionShare": 0.0,
65
+ "exclamationShare": 0.0,
66
+ "emojiShare": 0.0,
67
+ "slang": [],
68
+ "signature": "short"
69
+ },
70
+ "identityConfidence": "medium",
71
+ "identityEvidence": "WhatsApp direct chat identity"
72
+ }
73
+ ],
74
+ "totalMessages": 2,
75
+ "firstSeen": "2026-01-01",
76
+ "lastSeen": "2026-01-01"
77
+ }
78
+ ]