mindlore 0.6.8 → 0.7.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.
Files changed (209) hide show
  1. package/README.md +259 -259
  2. package/SCHEMA.md +292 -292
  3. package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -1
  4. package/dist/scripts/cc-memory-bulk-sync.js +4 -2
  5. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
  6. package/dist/scripts/cc-session-sync.d.ts.map +1 -1
  7. package/dist/scripts/cc-session-sync.js +9 -7
  8. package/dist/scripts/cc-session-sync.js.map +1 -1
  9. package/dist/scripts/fetch-raw.js +5 -4
  10. package/dist/scripts/fetch-raw.js.map +1 -1
  11. package/dist/scripts/init.js +16 -12
  12. package/dist/scripts/init.js.map +1 -1
  13. package/dist/scripts/lib/consolidation.js +10 -10
  14. package/dist/scripts/lib/constants.d.ts +3 -0
  15. package/dist/scripts/lib/constants.d.ts.map +1 -1
  16. package/dist/scripts/lib/constants.js +11 -1
  17. package/dist/scripts/lib/constants.js.map +1 -1
  18. package/dist/scripts/lib/decay.js +9 -9
  19. package/dist/scripts/lib/episodes.js +23 -23
  20. package/dist/scripts/lib/err-msg.d.ts +2 -0
  21. package/dist/scripts/lib/err-msg.d.ts.map +1 -0
  22. package/dist/scripts/lib/err-msg.js +7 -0
  23. package/dist/scripts/lib/err-msg.js.map +1 -0
  24. package/dist/scripts/lib/mcp-namespace.d.ts +2 -0
  25. package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -0
  26. package/dist/scripts/lib/mcp-namespace.js +21 -0
  27. package/dist/scripts/lib/mcp-namespace.js.map +1 -0
  28. package/dist/scripts/lib/mcp-telemetry.d.ts +11 -0
  29. package/dist/scripts/lib/mcp-telemetry.d.ts.map +1 -0
  30. package/dist/scripts/lib/mcp-telemetry.js +37 -0
  31. package/dist/scripts/lib/mcp-telemetry.js.map +1 -0
  32. package/dist/scripts/lib/mcp-tools.d.ts +10 -0
  33. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -0
  34. package/dist/scripts/lib/mcp-tools.js +121 -0
  35. package/dist/scripts/lib/mcp-tools.js.map +1 -0
  36. package/dist/scripts/lib/migrations-v061.js +21 -21
  37. package/dist/scripts/lib/migrations-v062.js +11 -11
  38. package/dist/scripts/lib/migrations-v063.js +14 -14
  39. package/dist/scripts/lib/migrations-v067.js +11 -11
  40. package/dist/scripts/lib/rrf.d.ts.map +1 -1
  41. package/dist/scripts/lib/rrf.js +2 -1
  42. package/dist/scripts/lib/rrf.js.map +1 -1
  43. package/dist/scripts/lib/schema-version.js +6 -6
  44. package/dist/scripts/lib/search-cache.js +11 -11
  45. package/dist/scripts/lib/search-engine.d.ts +1 -0
  46. package/dist/scripts/lib/search-engine.d.ts.map +1 -1
  47. package/dist/scripts/lib/search-engine.js +9 -5
  48. package/dist/scripts/lib/search-engine.js.map +1 -1
  49. package/dist/scripts/lib/secure-io.d.ts +11 -0
  50. package/dist/scripts/lib/secure-io.d.ts.map +1 -0
  51. package/dist/scripts/lib/secure-io.js +26 -0
  52. package/dist/scripts/lib/secure-io.js.map +1 -0
  53. package/dist/scripts/lib/session-payload.js +7 -7
  54. package/dist/scripts/lib/slugify.d.ts +2 -0
  55. package/dist/scripts/lib/slugify.d.ts.map +1 -0
  56. package/dist/scripts/lib/slugify.js +13 -0
  57. package/dist/scripts/lib/slugify.js.map +1 -0
  58. package/dist/scripts/lib/smart-snippet.d.ts +9 -0
  59. package/dist/scripts/lib/smart-snippet.d.ts.map +1 -0
  60. package/dist/scripts/lib/smart-snippet.js +47 -0
  61. package/dist/scripts/lib/smart-snippet.js.map +1 -0
  62. package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts +15 -0
  63. package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts.map +1 -0
  64. package/dist/scripts/lib/tool-adapters/brief-adapter.js +66 -0
  65. package/dist/scripts/lib/tool-adapters/brief-adapter.js.map +1 -0
  66. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +31 -0
  67. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -0
  68. package/dist/scripts/lib/tool-adapters/decide-adapter.js +71 -0
  69. package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -0
  70. package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts +16 -0
  71. package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts.map +1 -0
  72. package/dist/scripts/lib/tool-adapters/ingest-adapter.js +58 -0
  73. package/dist/scripts/lib/tool-adapters/ingest-adapter.js.map +1 -0
  74. package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts +20 -0
  75. package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts.map +1 -0
  76. package/dist/scripts/lib/tool-adapters/recall-adapter.js +69 -0
  77. package/dist/scripts/lib/tool-adapters/recall-adapter.js.map +1 -0
  78. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +22 -0
  79. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -0
  80. package/dist/scripts/lib/tool-adapters/search-adapter.js +32 -0
  81. package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -0
  82. package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts +15 -0
  83. package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts.map +1 -0
  84. package/dist/scripts/lib/tool-adapters/stats-adapter.js +66 -0
  85. package/dist/scripts/lib/tool-adapters/stats-adapter.js.map +1 -0
  86. package/dist/scripts/lib/triage.js +3 -3
  87. package/dist/scripts/lib/validate-manifest.d.ts +8 -0
  88. package/dist/scripts/lib/validate-manifest.d.ts.map +1 -0
  89. package/dist/scripts/lib/validate-manifest.js +80 -0
  90. package/dist/scripts/lib/validate-manifest.js.map +1 -0
  91. package/dist/scripts/maintain-cleanup.d.ts.map +1 -1
  92. package/dist/scripts/maintain-cleanup.js +3 -2
  93. package/dist/scripts/maintain-cleanup.js.map +1 -1
  94. package/dist/scripts/mcp-server.d.ts +3 -0
  95. package/dist/scripts/mcp-server.d.ts.map +1 -0
  96. package/dist/scripts/mcp-server.js +85 -0
  97. package/dist/scripts/mcp-server.js.map +1 -0
  98. package/dist/scripts/mindlore-backup.js +9 -9
  99. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  100. package/dist/scripts/mindlore-doctor.js +4 -6
  101. package/dist/scripts/mindlore-doctor.js.map +1 -1
  102. package/dist/scripts/mindlore-fts5-index.js +12 -12
  103. package/dist/scripts/mindlore-fts5-index.js.map +1 -1
  104. package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
  105. package/dist/scripts/mindlore-health-check.js +2 -2
  106. package/dist/scripts/mindlore-health-check.js.map +1 -1
  107. package/dist/scripts/validate-manifest-cli.d.ts +2 -0
  108. package/dist/scripts/validate-manifest-cli.d.ts.map +1 -0
  109. package/dist/scripts/validate-manifest-cli.js +38 -0
  110. package/dist/scripts/validate-manifest-cli.js.map +1 -0
  111. package/dist/tests/cc-memory-sync.test.js +3 -3
  112. package/dist/tests/chunks-migration.test.js +1 -1
  113. package/dist/tests/compaction-snapshot.test.js +2 -2
  114. package/dist/tests/consolidation.test.js +3 -3
  115. package/dist/tests/decay.test.js +9 -9
  116. package/dist/tests/diary.test.js +4 -4
  117. package/dist/tests/episode-file.test.js +2 -1
  118. package/dist/tests/episode-file.test.js.map +1 -1
  119. package/dist/tests/episodes-inject.test.js +9 -9
  120. package/dist/tests/err-msg.test.d.ts +2 -0
  121. package/dist/tests/err-msg.test.d.ts.map +1 -0
  122. package/dist/tests/err-msg.test.js +24 -0
  123. package/dist/tests/err-msg.test.js.map +1 -0
  124. package/dist/tests/fetch-raw.test.js +1 -2
  125. package/dist/tests/fetch-raw.test.js.map +1 -1
  126. package/dist/tests/fts5.test.js +75 -75
  127. package/dist/tests/fuzzy.test.js +1 -1
  128. package/dist/tests/git-snapshot.test.js +3 -5
  129. package/dist/tests/git-snapshot.test.js.map +1 -1
  130. package/dist/tests/helpers/db.d.ts +1 -2
  131. package/dist/tests/helpers/db.d.ts.map +1 -1
  132. package/dist/tests/helpers/db.js +18 -26
  133. package/dist/tests/helpers/db.js.map +1 -1
  134. package/dist/tests/manifest-v2.test.d.ts +2 -0
  135. package/dist/tests/manifest-v2.test.d.ts.map +1 -0
  136. package/dist/tests/manifest-v2.test.js +67 -0
  137. package/dist/tests/manifest-v2.test.js.map +1 -0
  138. package/dist/tests/mcp-server.test.d.ts +2 -0
  139. package/dist/tests/mcp-server.test.d.ts.map +1 -0
  140. package/dist/tests/mcp-server.test.js +118 -0
  141. package/dist/tests/mcp-server.test.js.map +1 -0
  142. package/dist/tests/mcp-tools.test.d.ts +2 -0
  143. package/dist/tests/mcp-tools.test.d.ts.map +1 -0
  144. package/dist/tests/mcp-tools.test.js +243 -0
  145. package/dist/tests/mcp-tools.test.js.map +1 -0
  146. package/dist/tests/migrations-v053.test.js +16 -16
  147. package/dist/tests/migrations-v061.test.js +10 -10
  148. package/dist/tests/migrations-v063.test.js +4 -4
  149. package/dist/tests/migrations-v068.test.js +6 -3
  150. package/dist/tests/migrations-v068.test.js.map +1 -1
  151. package/dist/tests/nomination-counts.test.js +6 -6
  152. package/dist/tests/nomination-counts.test.js.map +1 -1
  153. package/dist/tests/pre-compact.test.js +2 -1
  154. package/dist/tests/pre-compact.test.js.map +1 -1
  155. package/dist/tests/recall-telemetry.test.js +12 -11
  156. package/dist/tests/recall-telemetry.test.js.map +1 -1
  157. package/dist/tests/rrf.test.js +3 -3
  158. package/dist/tests/search-engine.test.js +1 -1
  159. package/dist/tests/search-hook.test.js +2 -2
  160. package/dist/tests/search-offload.test.js +1 -1
  161. package/dist/tests/search-offload.test.js.map +1 -1
  162. package/dist/tests/secure-io.test.d.ts +2 -0
  163. package/dist/tests/secure-io.test.d.ts.map +1 -0
  164. package/dist/tests/secure-io.test.js +65 -0
  165. package/dist/tests/secure-io.test.js.map +1 -0
  166. package/dist/tests/session-payload.test.js +1 -1
  167. package/dist/tests/session-summary.test.js +1 -1
  168. package/dist/tests/similarity.test.js +1 -1
  169. package/dist/tests/skill-path-resolution.test.js +22 -3
  170. package/dist/tests/skill-path-resolution.test.js.map +1 -1
  171. package/dist/tests/smart-snippet.test.d.ts +2 -0
  172. package/dist/tests/smart-snippet.test.d.ts.map +1 -0
  173. package/dist/tests/smart-snippet.test.js +67 -0
  174. package/dist/tests/smart-snippet.test.js.map +1 -0
  175. package/dist/tests/triage.test.js +1 -1
  176. package/hooks/lib/constants.cjs +15 -15
  177. package/hooks/lib/mindlore-common.cjs +975 -974
  178. package/hooks/mindlore-cwd-changed.cjs +57 -57
  179. package/hooks/mindlore-decision-detector.cjs +54 -54
  180. package/hooks/mindlore-dont-repeat.cjs +222 -222
  181. package/hooks/mindlore-fts5-sync.cjs +98 -97
  182. package/hooks/mindlore-index.cjs +230 -229
  183. package/hooks/mindlore-model-router.cjs +54 -54
  184. package/hooks/mindlore-post-compact.cjs +69 -69
  185. package/hooks/mindlore-post-read.cjs +106 -106
  186. package/hooks/mindlore-pre-compact.cjs +154 -154
  187. package/hooks/mindlore-read-guard.cjs +105 -105
  188. package/hooks/mindlore-research-guard.cjs +176 -176
  189. package/hooks/mindlore-search.cjs +200 -200
  190. package/hooks/mindlore-session-end.cjs +510 -509
  191. package/hooks/mindlore-session-focus.cjs +256 -256
  192. package/package.json +77 -75
  193. package/plugin.json +8 -1
  194. package/skills/mindlore-diary/SKILL.md +85 -85
  195. package/skills/mindlore-evolve/SKILL.md +126 -126
  196. package/skills/mindlore-explore/SKILL.md +109 -109
  197. package/skills/mindlore-ingest/SKILL.md +195 -195
  198. package/skills/mindlore-maintain/SKILL.md +125 -125
  199. package/skills/mindlore-query/SKILL.md +151 -151
  200. package/skills/mindlore-reflect/SKILL.md +141 -141
  201. package/skills/mindlore-stats/SKILL.md +106 -106
  202. package/templates/INDEX.md +14 -14
  203. package/templates/SCHEMA.md +292 -292
  204. package/templates/config.json +1 -1
  205. package/templates/extraction/article.md +15 -15
  206. package/templates/extraction/changelog.md +15 -15
  207. package/templates/extraction/default.md +15 -15
  208. package/templates/extraction/docs.md +15 -15
  209. package/templates/extraction/github-repo.md +17 -17
@@ -1,141 +1,141 @@
1
- ---
2
- name: mindlore-reflect
3
- description: Pattern extraction from episodes — 3-tier confidence, nomination pipeline, CLAUDE.md update proposals.
4
- context: fork
5
- ---
6
-
7
- ## Script Resolution
8
-
9
- Resolve `MINDLORE_PKG` (package root) using one of these methods, in order:
10
- 1. If CC injected "Base directory for this skill: /path/to/skills/mindlore-reflect" → `MINDLORE_PKG = {base_directory}/../..`
11
- 2. Fallback: run `node -e "console.log(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'mindlore')))"`
12
-
13
- Use: `node "$MINDLORE_PKG/dist/scripts/..."` for all script commands.
14
-
15
- # /mindlore-reflect
16
-
17
- ## Scope
18
-
19
- Scans both project + global `~/.mindlore/` diary/ for patterns.
20
-
21
- ## Trigger
22
-
23
- `/mindlore-reflect` or `/mindlore-log reflect`
24
-
25
- ## On Start — Check pending nominations + skill_memory
26
-
27
- ```bash
28
- node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" get mindlore-reflect last_reflect_date
29
- node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" get mindlore-reflect nomination_count
30
- ```
31
-
32
- Check pending nominations:
33
- ```sql
34
- SELECT id, summary, body, created_at FROM episodes
35
- WHERE kind = 'nomination' AND status = 'staged' AND project = ?
36
- ORDER BY created_at ASC
37
- ```
38
-
39
- If pending nominations exist, present them first:
40
- ```
41
- -- Bekleyen Nomination'lar ({N} adet) --
42
- 1. "{summary}" (staged {days} gun once)
43
- Target: learnings | Confidence: 3x
44
-
45
- Onaylamak istediklerini sec, veya 'skip':
46
- ```
47
-
48
- ## Flow
49
-
50
- 1. Read active episodes: `WHERE status = 'active' AND source IN ('hook', 'diary')`
51
- 2. Filter by time: `--days 7` (default), `--days 30`
52
- 3. Present summary: "Found N episodes spanning DATE1 to DATE2"
53
- 4. LLM analyzes episodes for recurring patterns:
54
- - Repeated decisions (same choice 2+ times)
55
- - Recurring frictions (same blocker/error)
56
- - Discovery patterns (assumptions that keep breaking)
57
- - Workflow patterns that worked well
58
-
59
- 5. **3-Tier Confidence Assessment:**
60
-
61
- | Tekrar | Tier | Aksiyon |
62
- |--------|------|---------|
63
- | 1x | Note | Sessiz — episode olarak kalir, raporda goster |
64
- | 2x | Learning | `kind: learning` episode olustur, learnings/ dosyasina yaz |
65
- | 3x+ | Nomination | `kind: nomination, status: staged, source: reflect` episode olustur |
66
-
67
- 6. **Structured report:**
68
- ```
69
- -- Reflect Raporu (son {days} gun, {N} episode) --
70
-
71
- Friction ({count}):
72
- - {summary} — {repeat_count}x tekrar
73
-
74
- Discoveries ({count}):
75
- - {summary}
76
-
77
- Patterns:
78
- - "{pattern}" -> 3x tekrar -> NOMINATION (staged)
79
- - "{pattern}" -> 2x tekrar -> LEARNING
80
- - "{pattern}" -> 1x -> NOTE
81
-
82
- Onerilen:
83
- [ ] {rule} ({repeat_count}x, {confidence} confidence)
84
- ```
85
-
86
- 7. **Nomination creation (3x+ tekrar):**
87
- ```sql
88
- INSERT INTO episodes (summary, body, kind, status, source, project, created_at)
89
- VALUES (?, ?, 'nomination', 'staged', 'reflect', ?, ?)
90
- ```
91
-
92
- 8. **Nomination approval flow:**
93
- User approves -> `status: staged -> approved` -> write to target:
94
- - `learnings` -> `learnings/{topic}.md`
95
- - `claude.md` -> project CLAUDE.md'ye kural ekle
96
- - `domain:{slug}` -> ilgili domain sayfasina ekle
97
-
98
- Approval SQL:
99
- ```sql
100
- UPDATE episodes SET status = 'approved', graduated_at = datetime('now') WHERE id = ?
101
- ```
102
-
103
- User rejects -> `status: staged -> rejected` + rejection reason
104
-
105
- Rejection SQL:
106
- ```sql
107
- UPDATE episodes SET status = 'rejected', rejected_at = datetime('now'), rejection_reason = ? WHERE id = ?
108
- ```
109
-
110
- ## On End — Write skill_memory
111
-
112
- ```bash
113
- node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" set mindlore-reflect last_reflect_date "$(date -I)"
114
- node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" set mindlore-reflect nomination_count "{staged_count}"
115
- ```
116
-
117
- ## Quick Health Summary (v0.5.3)
118
-
119
- After pattern extraction, run quick SQL checks (0 token, <1ms):
120
- ```bash
121
- node -e "
122
- const db = require('better-sqlite3')(require('path').join(require('os').homedir(), '.mindlore', 'mindlore.db'), {readonly:true});
123
- const stale = db.prepare(\"SELECT COUNT(*) as c FROM file_hashes WHERE recall_count = 0 AND archived_at IS NULL AND last_indexed < datetime('now','-60 days')\").get()?.c ?? 0;
124
- const raw = db.prepare(\"SELECT COUNT(*) as c FROM episodes WHERE (consolidation_status = 'raw' OR consolidation_status IS NULL) AND kind IN ('learning','discovery','friction','decision')\").get()?.c ?? 0;
125
- console.log(JSON.stringify({stale, raw}));
126
- db.close();
127
- "
128
- ```
129
-
130
- Rapor sonuna ekle:
131
- ```
132
- Stale: {stale} doc | Raw episodes: {raw} | → Detay: /mindlore-maintain
133
- ```
134
-
135
- ## Rules
136
-
137
- - NEVER write learnings or nominations without user approval
138
- - Group related patterns into existing topic files
139
- - Reflect READS episodes, diary WRITES episodes — clear separation
140
- - Mark processed episodes so future reflect skips them
141
- - Append to `log.md`: `| {date} | reflect | {N} episodes processed, {M} learnings written |`
1
+ ---
2
+ name: mindlore-reflect
3
+ description: Pattern extraction from episodes — 3-tier confidence, nomination pipeline, CLAUDE.md update proposals.
4
+ context: fork
5
+ ---
6
+
7
+ ## Script Resolution
8
+
9
+ Resolve `MINDLORE_PKG` (package root) using one of these methods, in order:
10
+ 1. If CC injected "Base directory for this skill: /path/to/skills/mindlore-reflect" → `MINDLORE_PKG = {base_directory}/../..`
11
+ 2. Fallback: run `node -e "console.log(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'mindlore')))"`
12
+
13
+ Use: `node "$MINDLORE_PKG/dist/scripts/..."` for all script commands.
14
+
15
+ # /mindlore-reflect
16
+
17
+ ## Scope
18
+
19
+ Scans both project + global `~/.mindlore/` diary/ for patterns.
20
+
21
+ ## Trigger
22
+
23
+ `/mindlore-reflect` or `/mindlore-log reflect`
24
+
25
+ ## On Start — Check pending nominations + skill_memory
26
+
27
+ ```bash
28
+ node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" get mindlore-reflect last_reflect_date
29
+ node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" get mindlore-reflect nomination_count
30
+ ```
31
+
32
+ Check pending nominations:
33
+ ```sql
34
+ SELECT id, summary, body, created_at FROM episodes
35
+ WHERE kind = 'nomination' AND status = 'staged' AND project = ?
36
+ ORDER BY created_at ASC
37
+ ```
38
+
39
+ If pending nominations exist, present them first:
40
+ ```
41
+ -- Bekleyen Nomination'lar ({N} adet) --
42
+ 1. "{summary}" (staged {days} gun once)
43
+ Target: learnings | Confidence: 3x
44
+
45
+ Onaylamak istediklerini sec, veya 'skip':
46
+ ```
47
+
48
+ ## Flow
49
+
50
+ 1. Read active episodes: `WHERE status = 'active' AND source IN ('hook', 'diary')`
51
+ 2. Filter by time: `--days 7` (default), `--days 30`
52
+ 3. Present summary: "Found N episodes spanning DATE1 to DATE2"
53
+ 4. LLM analyzes episodes for recurring patterns:
54
+ - Repeated decisions (same choice 2+ times)
55
+ - Recurring frictions (same blocker/error)
56
+ - Discovery patterns (assumptions that keep breaking)
57
+ - Workflow patterns that worked well
58
+
59
+ 5. **3-Tier Confidence Assessment:**
60
+
61
+ | Tekrar | Tier | Aksiyon |
62
+ |--------|------|---------|
63
+ | 1x | Note | Sessiz — episode olarak kalir, raporda goster |
64
+ | 2x | Learning | `kind: learning` episode olustur, learnings/ dosyasina yaz |
65
+ | 3x+ | Nomination | `kind: nomination, status: staged, source: reflect` episode olustur |
66
+
67
+ 6. **Structured report:**
68
+ ```
69
+ -- Reflect Raporu (son {days} gun, {N} episode) --
70
+
71
+ Friction ({count}):
72
+ - {summary} — {repeat_count}x tekrar
73
+
74
+ Discoveries ({count}):
75
+ - {summary}
76
+
77
+ Patterns:
78
+ - "{pattern}" -> 3x tekrar -> NOMINATION (staged)
79
+ - "{pattern}" -> 2x tekrar -> LEARNING
80
+ - "{pattern}" -> 1x -> NOTE
81
+
82
+ Onerilen:
83
+ [ ] {rule} ({repeat_count}x, {confidence} confidence)
84
+ ```
85
+
86
+ 7. **Nomination creation (3x+ tekrar):**
87
+ ```sql
88
+ INSERT INTO episodes (summary, body, kind, status, source, project, created_at)
89
+ VALUES (?, ?, 'nomination', 'staged', 'reflect', ?, ?)
90
+ ```
91
+
92
+ 8. **Nomination approval flow:**
93
+ User approves -> `status: staged -> approved` -> write to target:
94
+ - `learnings` -> `learnings/{topic}.md`
95
+ - `claude.md` -> project CLAUDE.md'ye kural ekle
96
+ - `domain:{slug}` -> ilgili domain sayfasina ekle
97
+
98
+ Approval SQL:
99
+ ```sql
100
+ UPDATE episodes SET status = 'approved', graduated_at = datetime('now') WHERE id = ?
101
+ ```
102
+
103
+ User rejects -> `status: staged -> rejected` + rejection reason
104
+
105
+ Rejection SQL:
106
+ ```sql
107
+ UPDATE episodes SET status = 'rejected', rejected_at = datetime('now'), rejection_reason = ? WHERE id = ?
108
+ ```
109
+
110
+ ## On End — Write skill_memory
111
+
112
+ ```bash
113
+ node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" set mindlore-reflect last_reflect_date "$(date -I)"
114
+ node "$MINDLORE_PKG/dist/scripts/lib/skill-memory.js" set mindlore-reflect nomination_count "{staged_count}"
115
+ ```
116
+
117
+ ## Quick Health Summary (v0.5.3)
118
+
119
+ After pattern extraction, run quick SQL checks (0 token, <1ms):
120
+ ```bash
121
+ node -e "
122
+ const db = require('better-sqlite3')(require('path').join(require('os').homedir(), '.mindlore', 'mindlore.db'), {readonly:true});
123
+ const stale = db.prepare(\"SELECT COUNT(*) as c FROM file_hashes WHERE recall_count = 0 AND archived_at IS NULL AND last_indexed < datetime('now','-60 days')\").get()?.c ?? 0;
124
+ const raw = db.prepare(\"SELECT COUNT(*) as c FROM episodes WHERE (consolidation_status = 'raw' OR consolidation_status IS NULL) AND kind IN ('learning','discovery','friction','decision')\").get()?.c ?? 0;
125
+ console.log(JSON.stringify({stale, raw}));
126
+ db.close();
127
+ "
128
+ ```
129
+
130
+ Rapor sonuna ekle:
131
+ ```
132
+ Stale: {stale} doc | Raw episodes: {raw} | → Detay: /mindlore-maintain
133
+ ```
134
+
135
+ ## Rules
136
+
137
+ - NEVER write learnings or nominations without user approval
138
+ - Group related patterns into existing topic files
139
+ - Reflect READS episodes, diary WRITES episodes — clear separation
140
+ - Mark processed episodes so future reflect skips them
141
+ - Append to `log.md`: `| {date} | reflect | {N} episodes processed, {M} learnings written |`
@@ -1,106 +1,106 @@
1
- ---
2
- name: mindlore-stats
3
- description: Show context contribution and cost per session — hook calls, durations, DB stats.
4
- effort: low
5
- context: fork
6
- allowed-tools: [Bash, Read]
7
- ---
8
-
9
- ## Script Resolution
10
-
11
- Resolve `MINDLORE_DIR` (active knowledge base directory) using:
12
- 1. If project `.mindlore/` exists → use it
13
- 2. Else → use `~/.mindlore/`
14
-
15
- # /mindlore-stats
16
-
17
- Show context contribution and cost per session — hook calls, durations, DB stats.
18
-
19
- ## Trigger
20
-
21
- User says "mindlore stats", "stats", "context cost", "hook performance", "ne kadar yer kaplıyor".
22
-
23
- ## Execution
24
-
25
- ### 1. Telemetry Analysis
26
-
27
- Read `$MINDLORE_DIR/telemetry.jsonl` (each line is a JSON object):
28
-
29
- ```bash
30
- # Count lines and read last 500 for session estimate
31
- wc -l "$MINDLORE_DIR/telemetry.jsonl"
32
- tail -500 "$MINDLORE_DIR/telemetry.jsonl"
33
- ```
34
-
35
- Parse each line as JSON with fields: `hook` (string), `duration` (number, ms), `ts` (ISO timestamp), optionally `injectSize` (number, chars).
36
-
37
- Calculate:
38
- - **Total hook calls (all time)**: total line count
39
- - **Hook calls (session)**: lines where `ts` is within last 8 hours
40
- - **Avg duration per hook**: group by `hook`, compute mean `duration`
41
- - **Session inject avg**: from events where `hook === "mindlore-session-focus"`, average `injectSize` (chars ÷ 4 ≈ tokens)
42
- - **Search inject avg**: from events where `hook === "mindlore-search"`, average `injectSize` (chars ÷ 4 ≈ tokens)
43
-
44
- ### 2. DB Stats
45
-
46
- Query `$MINDLORE_DIR/mindlore.db`:
47
-
48
- ```bash
49
- # Indexed docs
50
- node -e "
51
- const DB = require('better-sqlite3');
52
- const db = new DB('$MINDLORE_DIR/mindlore.db', {readonly:true});
53
- const total = db.prepare('SELECT COUNT(*) as n FROM file_hashes').get().n;
54
- const stale = db.prepare(\"SELECT COUNT(*) as n FROM file_hashes WHERE last_indexed < datetime('now','-30 days')\").get().n;
55
- const epRows = db.prepare('SELECT kind, COUNT(*) as n FROM episodes GROUP BY kind').all();
56
- const sessions = db.prepare('SELECT COUNT(*) as n FROM mindlore_fts_sessions').get()?.n ?? 'N/A';
57
- console.log(JSON.stringify({total, stale, epRows, sessions}));
58
- db.close();
59
- "
60
- ```
61
-
62
- Get DB file size:
63
-
64
- ```bash
65
- node -e "const fs=require('fs'); const s=fs.statSync('$MINDLORE_DIR/mindlore.db'); console.log((s.size/1024/1024).toFixed(2)+' MB');"
66
- ```
67
-
68
- ### 3. Format Output
69
-
70
- Print a compact stats table:
71
-
72
- ```
73
- ## Mindlore Stats
74
-
75
- | Metric | Value |
76
- |--------|-------|
77
- | DB Size | X MB |
78
- | Indexed Docs | N |
79
- | Stale Docs (30d+) | N |
80
- | Episodes (active) | N |
81
- | Hook Calls (session) | N |
82
- | Hook Calls (all time) | N |
83
- | Avg Hook Duration | Xms |
84
- | Session Inject Avg | ~N tokens |
85
- | Search Inject Avg | ~N tokens |
86
- ```
87
-
88
- Then add a per-hook breakdown if hook calls > 0:
89
-
90
- ```
91
- ### Hook Breakdown (session)
92
-
93
- | Hook | Calls | Avg Duration |
94
- |------|-------|-------------|
95
- | mindlore-session-focus | N | Xms |
96
- | mindlore-search | N | Xms |
97
- | ... | | |
98
- ```
99
-
100
- ## Notes
101
-
102
- - If `telemetry.jsonl` does not exist: report "No telemetry data yet"
103
- - If `mindlore.db` does not exist: report "DB not found — run `npx mindlore init`"
104
- - If `episodes` table missing: skip episode count, show "—"
105
- - Inject size in tokens is approximate (chars ÷ 4)
106
- - "Session" = last 8 hours from current time
1
+ ---
2
+ name: mindlore-stats
3
+ description: Show context contribution and cost per session — hook calls, durations, DB stats.
4
+ effort: low
5
+ context: fork
6
+ allowed-tools: [Bash, Read]
7
+ ---
8
+
9
+ ## Script Resolution
10
+
11
+ Resolve `MINDLORE_DIR` (active knowledge base directory) using:
12
+ 1. If project `.mindlore/` exists → use it
13
+ 2. Else → use `~/.mindlore/`
14
+
15
+ # /mindlore-stats
16
+
17
+ Show context contribution and cost per session — hook calls, durations, DB stats.
18
+
19
+ ## Trigger
20
+
21
+ User says "mindlore stats", "stats", "context cost", "hook performance", "ne kadar yer kaplıyor".
22
+
23
+ ## Execution
24
+
25
+ ### 1. Telemetry Analysis
26
+
27
+ Read `$MINDLORE_DIR/telemetry.jsonl` (each line is a JSON object):
28
+
29
+ ```bash
30
+ # Count lines and read last 500 for session estimate
31
+ wc -l "$MINDLORE_DIR/telemetry.jsonl"
32
+ tail -500 "$MINDLORE_DIR/telemetry.jsonl"
33
+ ```
34
+
35
+ Parse each line as JSON with fields: `hook` (string), `duration` (number, ms), `ts` (ISO timestamp), optionally `injectSize` (number, chars).
36
+
37
+ Calculate:
38
+ - **Total hook calls (all time)**: total line count
39
+ - **Hook calls (session)**: lines where `ts` is within last 8 hours
40
+ - **Avg duration per hook**: group by `hook`, compute mean `duration`
41
+ - **Session inject avg**: from events where `hook === "mindlore-session-focus"`, average `injectSize` (chars ÷ 4 ≈ tokens)
42
+ - **Search inject avg**: from events where `hook === "mindlore-search"`, average `injectSize` (chars ÷ 4 ≈ tokens)
43
+
44
+ ### 2. DB Stats
45
+
46
+ Query `$MINDLORE_DIR/mindlore.db`:
47
+
48
+ ```bash
49
+ # Indexed docs
50
+ node -e "
51
+ const DB = require('better-sqlite3');
52
+ const db = new DB('$MINDLORE_DIR/mindlore.db', {readonly:true});
53
+ const total = db.prepare('SELECT COUNT(*) as n FROM file_hashes').get().n;
54
+ const stale = db.prepare(\"SELECT COUNT(*) as n FROM file_hashes WHERE last_indexed < datetime('now','-30 days')\").get().n;
55
+ const epRows = db.prepare('SELECT kind, COUNT(*) as n FROM episodes GROUP BY kind').all();
56
+ const sessions = db.prepare('SELECT COUNT(*) as n FROM mindlore_fts_sessions').get()?.n ?? 'N/A';
57
+ console.log(JSON.stringify({total, stale, epRows, sessions}));
58
+ db.close();
59
+ "
60
+ ```
61
+
62
+ Get DB file size:
63
+
64
+ ```bash
65
+ node -e "const fs=require('fs'); const s=fs.statSync('$MINDLORE_DIR/mindlore.db'); console.log((s.size/1024/1024).toFixed(2)+' MB');"
66
+ ```
67
+
68
+ ### 3. Format Output
69
+
70
+ Print a compact stats table:
71
+
72
+ ```
73
+ ## Mindlore Stats
74
+
75
+ | Metric | Value |
76
+ |--------|-------|
77
+ | DB Size | X MB |
78
+ | Indexed Docs | N |
79
+ | Stale Docs (30d+) | N |
80
+ | Episodes (active) | N |
81
+ | Hook Calls (session) | N |
82
+ | Hook Calls (all time) | N |
83
+ | Avg Hook Duration | Xms |
84
+ | Session Inject Avg | ~N tokens |
85
+ | Search Inject Avg | ~N tokens |
86
+ ```
87
+
88
+ Then add a per-hook breakdown if hook calls > 0:
89
+
90
+ ```
91
+ ### Hook Breakdown (session)
92
+
93
+ | Hook | Calls | Avg Duration |
94
+ |------|-------|-------------|
95
+ | mindlore-session-focus | N | Xms |
96
+ | mindlore-search | N | Xms |
97
+ | ... | | |
98
+ ```
99
+
100
+ ## Notes
101
+
102
+ - If `telemetry.jsonl` does not exist: report "No telemetry data yet"
103
+ - If `mindlore.db` does not exist: report "DB not found — run `npx mindlore init`"
104
+ - If `episodes` table missing: skip episode count, show "—"
105
+ - Inject size in tokens is approximate (chars ÷ 4)
106
+ - "Session" = last 8 hours from current time
@@ -1,14 +1,14 @@
1
- # Mindlore Index
2
-
3
- ## Domains
4
-
5
- ### Entities
6
-
7
- ### Concepts
8
-
9
- ## Connections
10
-
11
- ## Recent
12
-
13
- ## Stats
14
- 0 source, 0 analysis, 0 total
1
+ # Mindlore Index
2
+
3
+ ## Domains
4
+
5
+ ### Entities
6
+
7
+ ### Concepts
8
+
9
+ ## Connections
10
+
11
+ ## Recent
12
+
13
+ ## Stats
14
+ 0 source, 0 analysis, 0 total