mindlore 0.2.0 → 0.3.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 (153) hide show
  1. package/README.md +15 -9
  2. package/SCHEMA.md +15 -2
  3. package/dist/scripts/init.d.ts +10 -0
  4. package/dist/scripts/init.d.ts.map +1 -0
  5. package/dist/scripts/init.js +406 -0
  6. package/dist/scripts/init.js.map +1 -0
  7. package/dist/scripts/lib/constants.d.ts +56 -0
  8. package/dist/scripts/lib/constants.d.ts.map +1 -0
  9. package/dist/scripts/lib/constants.js +131 -0
  10. package/dist/scripts/lib/constants.js.map +1 -0
  11. package/dist/scripts/lib/schemas.d.ts +93 -0
  12. package/dist/scripts/lib/schemas.d.ts.map +1 -0
  13. package/dist/scripts/lib/schemas.js +108 -0
  14. package/dist/scripts/lib/schemas.js.map +1 -0
  15. package/dist/scripts/mindlore-fts5-index.d.ts +9 -0
  16. package/dist/scripts/mindlore-fts5-index.d.ts.map +1 -0
  17. package/dist/scripts/mindlore-fts5-index.js +88 -0
  18. package/dist/scripts/mindlore-fts5-index.js.map +1 -0
  19. package/dist/scripts/mindlore-fts5-search.d.ts +10 -0
  20. package/dist/scripts/mindlore-fts5-search.d.ts.map +1 -0
  21. package/dist/scripts/mindlore-fts5-search.js +121 -0
  22. package/dist/scripts/mindlore-fts5-search.js.map +1 -0
  23. package/dist/scripts/mindlore-health-check.d.ts +10 -0
  24. package/dist/scripts/mindlore-health-check.d.ts.map +1 -0
  25. package/dist/scripts/mindlore-health-check.js +337 -0
  26. package/dist/scripts/mindlore-health-check.js.map +1 -0
  27. package/dist/scripts/uninstall.d.ts +10 -0
  28. package/dist/scripts/uninstall.d.ts.map +1 -0
  29. package/dist/scripts/uninstall.js +153 -0
  30. package/dist/scripts/uninstall.js.map +1 -0
  31. package/dist/tests/compounding.test.d.ts +8 -0
  32. package/dist/tests/compounding.test.d.ts.map +1 -0
  33. package/dist/tests/compounding.test.js +51 -0
  34. package/dist/tests/compounding.test.js.map +1 -0
  35. package/dist/tests/cwd-changed.test.d.ts +2 -0
  36. package/dist/tests/cwd-changed.test.d.ts.map +1 -0
  37. package/dist/tests/cwd-changed.test.js +62 -0
  38. package/dist/tests/cwd-changed.test.js.map +1 -0
  39. package/dist/tests/decision.test.d.ts +2 -0
  40. package/dist/tests/decision.test.d.ts.map +1 -0
  41. package/dist/tests/decision.test.js +61 -0
  42. package/dist/tests/decision.test.js.map +1 -0
  43. package/dist/tests/dedup.test.d.ts +2 -0
  44. package/dist/tests/dedup.test.d.ts.map +1 -0
  45. package/dist/tests/dedup.test.js +74 -0
  46. package/dist/tests/dedup.test.js.map +1 -0
  47. package/dist/tests/dont-repeat.test.d.ts +2 -0
  48. package/dist/tests/dont-repeat.test.d.ts.map +1 -0
  49. package/dist/tests/dont-repeat.test.js +100 -0
  50. package/dist/tests/dont-repeat.test.js.map +1 -0
  51. package/dist/tests/e2e-pipeline.test.d.ts +2 -0
  52. package/dist/tests/e2e-pipeline.test.d.ts.map +1 -0
  53. package/dist/tests/e2e-pipeline.test.js +220 -0
  54. package/dist/tests/e2e-pipeline.test.js.map +1 -0
  55. package/dist/tests/evolve.test.d.ts +2 -0
  56. package/dist/tests/evolve.test.d.ts.map +1 -0
  57. package/dist/tests/evolve.test.js +105 -0
  58. package/dist/tests/evolve.test.js.map +1 -0
  59. package/dist/tests/explore.test.d.ts +2 -0
  60. package/dist/tests/explore.test.d.ts.map +1 -0
  61. package/dist/tests/explore.test.js +146 -0
  62. package/dist/tests/explore.test.js.map +1 -0
  63. package/dist/tests/frontmatter.test.d.ts +2 -0
  64. package/dist/tests/frontmatter.test.d.ts.map +1 -0
  65. package/dist/tests/frontmatter.test.js +90 -0
  66. package/dist/tests/frontmatter.test.js.map +1 -0
  67. package/dist/tests/fts5.test.d.ts +2 -0
  68. package/dist/tests/fts5.test.d.ts.map +1 -0
  69. package/dist/tests/fts5.test.js +95 -0
  70. package/dist/tests/fts5.test.js.map +1 -0
  71. package/dist/tests/global-layer.test.d.ts +2 -0
  72. package/dist/tests/global-layer.test.d.ts.map +1 -0
  73. package/dist/tests/global-layer.test.js +152 -0
  74. package/dist/tests/global-layer.test.js.map +1 -0
  75. package/dist/tests/helpers/db.d.ts +20 -0
  76. package/dist/tests/helpers/db.d.ts.map +1 -0
  77. package/dist/tests/helpers/db.js +46 -0
  78. package/dist/tests/helpers/db.js.map +1 -0
  79. package/dist/tests/hook-smoke.test.d.ts +2 -0
  80. package/dist/tests/hook-smoke.test.d.ts.map +1 -0
  81. package/dist/tests/hook-smoke.test.js +58 -0
  82. package/dist/tests/hook-smoke.test.js.map +1 -0
  83. package/dist/tests/init.test.d.ts +2 -0
  84. package/dist/tests/init.test.d.ts.map +1 -0
  85. package/dist/tests/init.test.js +109 -0
  86. package/dist/tests/init.test.js.map +1 -0
  87. package/dist/tests/log.test.d.ts +2 -0
  88. package/dist/tests/log.test.d.ts.map +1 -0
  89. package/dist/tests/log.test.js +68 -0
  90. package/dist/tests/log.test.js.map +1 -0
  91. package/dist/tests/post-read.test.d.ts +2 -0
  92. package/dist/tests/post-read.test.d.ts.map +1 -0
  93. package/dist/tests/post-read.test.js +69 -0
  94. package/dist/tests/post-read.test.js.map +1 -0
  95. package/dist/tests/quality-populate.test.d.ts +2 -0
  96. package/dist/tests/quality-populate.test.d.ts.map +1 -0
  97. package/dist/tests/quality-populate.test.js +85 -0
  98. package/dist/tests/quality-populate.test.js.map +1 -0
  99. package/dist/tests/read-guard.test.d.ts +2 -0
  100. package/dist/tests/read-guard.test.d.ts.map +1 -0
  101. package/dist/tests/read-guard.test.js +69 -0
  102. package/dist/tests/read-guard.test.js.map +1 -0
  103. package/dist/tests/reflect.test.d.ts +2 -0
  104. package/dist/tests/reflect.test.d.ts.map +1 -0
  105. package/dist/tests/reflect.test.js +122 -0
  106. package/dist/tests/reflect.test.js.map +1 -0
  107. package/dist/tests/schemas.test.d.ts +2 -0
  108. package/dist/tests/schemas.test.d.ts.map +1 -0
  109. package/dist/tests/schemas.test.js +87 -0
  110. package/dist/tests/schemas.test.js.map +1 -0
  111. package/dist/tests/search-hook.test.d.ts +2 -0
  112. package/dist/tests/search-hook.test.d.ts.map +1 -0
  113. package/dist/tests/search-hook.test.js +108 -0
  114. package/dist/tests/search-hook.test.js.map +1 -0
  115. package/dist/tests/session-focus.test.d.ts +2 -0
  116. package/dist/tests/session-focus.test.d.ts.map +1 -0
  117. package/dist/tests/session-focus.test.js +71 -0
  118. package/dist/tests/session-focus.test.js.map +1 -0
  119. package/dist/tests/uninstall.test.d.ts +2 -0
  120. package/dist/tests/uninstall.test.d.ts.map +1 -0
  121. package/dist/tests/uninstall.test.js +98 -0
  122. package/dist/tests/uninstall.test.js.map +1 -0
  123. package/dist/tests/upgrade.test.d.ts +2 -0
  124. package/dist/tests/upgrade.test.d.ts.map +1 -0
  125. package/dist/tests/upgrade.test.js +91 -0
  126. package/dist/tests/upgrade.test.js.map +1 -0
  127. package/hooks/lib/mindlore-common.cjs +66 -5
  128. package/hooks/lib/types.d.ts +56 -0
  129. package/hooks/mindlore-cwd-changed.cjs +57 -0
  130. package/hooks/mindlore-dont-repeat.cjs +222 -0
  131. package/hooks/mindlore-fts5-sync.cjs +6 -9
  132. package/hooks/mindlore-index.cjs +3 -3
  133. package/hooks/mindlore-post-read.cjs +97 -0
  134. package/hooks/mindlore-read-guard.cjs +27 -4
  135. package/hooks/mindlore-search.cjs +73 -52
  136. package/hooks/mindlore-session-end.cjs +43 -1
  137. package/hooks/mindlore-session-focus.cjs +14 -0
  138. package/package.json +21 -8
  139. package/plugin.json +24 -1
  140. package/skills/mindlore-decide/SKILL.md +8 -0
  141. package/skills/mindlore-evolve/SKILL.md +81 -0
  142. package/skills/mindlore-explore/SKILL.md +84 -0
  143. package/skills/mindlore-health/SKILL.md +8 -0
  144. package/skills/mindlore-ingest/SKILL.md +19 -4
  145. package/skills/mindlore-log/SKILL.md +30 -13
  146. package/skills/mindlore-query/SKILL.md +8 -0
  147. package/templates/SCHEMA.md +15 -2
  148. package/scripts/init.cjs +0 -448
  149. package/scripts/lib/constants.cjs +0 -49
  150. package/scripts/mindlore-fts5-index.cjs +0 -112
  151. package/scripts/mindlore-fts5-search.cjs +0 -119
  152. package/scripts/mindlore-health-check.cjs +0 -389
  153. package/scripts/uninstall.cjs +0 -186
package/README.md CHANGED
@@ -1,11 +1,14 @@
1
1
  # Mindlore
2
2
 
3
- AI-native knowledge system for [Claude Code](https://claude.ai/claude-code).
3
+ ![CI](https://github.com/mindlore/mindlore/actions/workflows/ci.yml/badge.svg)
4
+ [![npm](https://img.shields.io/npm/v/mindlore)](https://www.npmjs.com/package/mindlore)
5
+ ![Node](https://img.shields.io/node/v/mindlore)
6
+ ![License](https://img.shields.io/badge/license-MIT-blue)
7
+ ![Zero Telemetry](https://img.shields.io/badge/telemetry-zero-brightgreen)
4
8
 
5
- Persistent, searchable, evolving knowledge base that compounds across sessions.
9
+ > AI-native knowledge system for [Claude Code](https://claude.ai/claude-code)
6
10
 
7
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
- [![Node.js](https://img.shields.io/badge/Node.js-20%2B-green.svg)](https://nodejs.org)
11
+ Persistent, searchable, evolving knowledge base that compounds across sessions.
9
12
 
10
13
  ## Why
11
14
 
@@ -147,19 +150,22 @@ SESSION START DURING SESSION SESSIO
147
150
 
148
151
  ## Hooks
149
152
 
150
- 9 Claude Code lifecycle hooks (v0.2):
153
+ 12 Claude Code lifecycle hooks (v0.3):
151
154
 
152
155
  | Event | Hook | What it does |
153
156
  |-------|------|-------------|
154
- | SessionStart | session-focus | Injects last delta + INDEX |
155
- | UserPromptSubmit | search | FTS5 search, top 3 results + tags |
157
+ | SessionStart | session-focus | Injects last delta + INDEX + version check |
158
+ | UserPromptSubmit | search | FTS5 layered search (project + global) |
156
159
  | UserPromptSubmit | decision-detector | TR+EN decision signal detection |
157
160
  | FileChanged | index | Sync changed files to FTS5 |
158
161
  | FileChanged | fts5-sync | Incremental batch re-index |
159
- | SessionEnd | session-end | Structured delta (commits, files, reads) |
162
+ | SessionEnd | session-end | Structured delta + global git sync |
160
163
  | PreCompact | pre-compact | FTS5 flush before compaction |
161
164
  | PostCompact | post-compact | Re-inject context |
162
- | PreToolUse (Read) | read-guard | Repeated-read warning |
165
+ | PreToolUse (Read) | read-guard | Repeated-read warning + token display |
166
+ | PostToolUse (Read) | post-read | Token estimation per file read |
167
+ | PreToolUse (Write\|Edit) | dont-repeat | LESSONS/learnings rule enforcement |
168
+ | CwdChanged | cwd-changed | Scope detection + _scope.json write |
163
169
 
164
170
  ## Uninstall
165
171
 
package/SCHEMA.md CHANGED
@@ -28,6 +28,18 @@ with YAML frontmatter. Search is powered by FTS5 (SQLite full-text search).
28
28
  └── mindlore.db # FTS5 search database (SQLite)
29
29
  ```
30
30
 
31
+ ### Global Scope (v0.3)
32
+
33
+ Mindlore supports two scopes:
34
+ - **Project scope:** `.mindlore/` in the current working directory (project-specific knowledge)
35
+ - **Global scope:** `~/.mindlore/` in the user's home directory (cross-project knowledge)
36
+
37
+ Rules:
38
+ - `getActiveMindloreDir()` resolves scope: project if exists, otherwise global
39
+ - Search is layered: project results first, global results second
40
+ - Skills accept `--global` (force global) and `--all` (both scopes) flags
41
+ - `npx mindlore init --global` creates `~/.mindlore/` with git repo for auto-sync
42
+
31
43
  ### Directory Rules
32
44
 
33
45
  - Each directory corresponds to exactly one frontmatter `type` value
@@ -143,7 +155,7 @@ Discover unexpected connections between sources. Cross-reference analysis.
143
155
  - Max results: 3 per query (BM25 ranking)
144
156
  - Hook injects: file path + first 2 headings
145
157
 
146
- ### FTS5 Columns (9-col schema, v0.2)
158
+ ### FTS5 Columns (10-col schema, v0.3)
147
159
 
148
160
  | Column | Indexed | Source |
149
161
  |--------|---------|--------|
@@ -155,7 +167,8 @@ Discover unexpected connections between sources. Cross-reference analysis.
155
167
  | `title` | Yes | Frontmatter title or first heading |
156
168
  | `content` | Yes | Markdown body (sans frontmatter) |
157
169
  | `tags` | Yes | Frontmatter tags (comma-separated) |
158
- | `quality` | UNINDEXED | Frontmatter quality (NULL until 50+ sources) |
170
+ | `quality` | UNINDEXED | Frontmatter quality (high/medium/low) |
171
+ | `date_captured` | UNINDEXED | Frontmatter date_captured or date |
159
172
 
160
173
  ### Search Flow (UserPromptSubmit hook)
161
174
 
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mindlore init — Initialize .mindlore/ knowledge base in current project.
4
+ *
5
+ * Usage: npx mindlore init [--recommended] [--global]
6
+ *
7
+ * Idempotent: running again does not destroy existing data.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../scripts/init.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
@@ -0,0 +1,406 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * mindlore init — Initialize .mindlore/ knowledge base in current project.
5
+ *
6
+ * Usage: npx mindlore init [--recommended] [--global]
7
+ *
8
+ * Idempotent: running again does not destroy existing data.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const constants_js_1 = require("./lib/constants.js");
17
+ const { SQL_FTS_CREATE } = require((0, constants_js_1.resolveHookCommon)(__dirname));
18
+ const TEMPLATE_FILES = ['INDEX.md', 'log.md'];
19
+ // ── Helpers ────────────────────────────────────────────────────────────
20
+ function resolvePackageRoot() {
21
+ // When compiled to dist/scripts/, go up two levels to reach package root
22
+ // When running as .ts (ts-jest), go up one level
23
+ const candidate = path_1.default.resolve(__dirname, '..');
24
+ if (fs_1.default.existsSync(path_1.default.join(candidate, 'package.json'))) {
25
+ return candidate;
26
+ }
27
+ return path_1.default.resolve(__dirname, '..', '..');
28
+ }
29
+ function ensureDir(dirPath) {
30
+ if (!fs_1.default.existsSync(dirPath)) {
31
+ fs_1.default.mkdirSync(dirPath, { recursive: true });
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ // ── Step 1: Create .mindlore/ directories ──────────────────────────────
37
+ function createDirectories(baseDir) {
38
+ let created = 0;
39
+ for (const dir of constants_js_1.DIRECTORIES) {
40
+ if (ensureDir(path_1.default.join(baseDir, dir))) {
41
+ created++;
42
+ }
43
+ }
44
+ return created;
45
+ }
46
+ // ── Step 2: Copy template files ────────────────────────────────────────
47
+ function copyTemplates(baseDir, packageRoot) {
48
+ const templatesDir = path_1.default.join(packageRoot, 'templates');
49
+ let copied = 0;
50
+ for (const file of TEMPLATE_FILES) {
51
+ const dest = path_1.default.join(baseDir, file);
52
+ if (!fs_1.default.existsSync(dest)) {
53
+ const src = path_1.default.join(templatesDir, file);
54
+ if (fs_1.default.existsSync(src)) {
55
+ fs_1.default.copyFileSync(src, dest);
56
+ copied++;
57
+ }
58
+ else {
59
+ (0, constants_js_1.log)(`WARNING: template not found: ${src}`);
60
+ }
61
+ }
62
+ }
63
+ // Copy SCHEMA.md
64
+ const schemaSrc = path_1.default.join(packageRoot, 'SCHEMA.md');
65
+ const schemaDest = path_1.default.join(baseDir, 'SCHEMA.md');
66
+ if (!fs_1.default.existsSync(schemaDest)) {
67
+ if (fs_1.default.existsSync(schemaSrc)) {
68
+ fs_1.default.copyFileSync(schemaSrc, schemaDest);
69
+ copied++;
70
+ }
71
+ }
72
+ return copied;
73
+ }
74
+ function resetSchema(db) {
75
+ db.exec('DROP TABLE IF EXISTS mindlore_fts');
76
+ db.exec(SQL_FTS_CREATE);
77
+ db.exec('DELETE FROM file_hashes');
78
+ }
79
+ function migrateDatabase(dbPath, DatabaseCtor) {
80
+ const db = new DatabaseCtor(dbPath);
81
+ try {
82
+ const info = db.pragma('table_info(mindlore_fts)');
83
+ const columns = info.map((r) => r.name);
84
+ if (!columns.includes('slug') || !columns.includes('description')) {
85
+ (0, constants_js_1.log)('Upgrading FTS5 schema (2 → 9 columns, porter stemmer)...');
86
+ resetSchema(db);
87
+ db.close();
88
+ return true;
89
+ }
90
+ else if (!columns.includes('tags')) {
91
+ (0, constants_js_1.log)('Upgrading FTS5 schema (7 → 9 columns, +tags +quality)...');
92
+ resetSchema(db);
93
+ db.close();
94
+ return true;
95
+ }
96
+ else if (!columns.includes('date_captured')) {
97
+ (0, constants_js_1.log)('Upgrading FTS5 schema (9 → 10 columns, +date_captured)...');
98
+ resetSchema(db);
99
+ db.close();
100
+ return true;
101
+ }
102
+ }
103
+ catch (_err) {
104
+ resetSchema(db);
105
+ db.close();
106
+ return true;
107
+ }
108
+ db.close();
109
+ return false;
110
+ }
111
+ function createDatabase(baseDir) {
112
+ const dbPath = path_1.default.join(baseDir, constants_js_1.DB_NAME);
113
+ let DatabaseCtor;
114
+ try {
115
+ DatabaseCtor = require('better-sqlite3');
116
+ }
117
+ catch (_err) {
118
+ (0, constants_js_1.log)('WARNING: better-sqlite3 not installed. Run: npm install better-sqlite3');
119
+ (0, constants_js_1.log)('Database creation skipped — run mindlore init again after installing.');
120
+ return false;
121
+ }
122
+ if (fs_1.default.existsSync(dbPath)) {
123
+ const migrated = migrateDatabase(dbPath, DatabaseCtor);
124
+ if (migrated) {
125
+ (0, constants_js_1.log)('FTS5 schema upgraded — run index to rebuild');
126
+ }
127
+ else {
128
+ (0, constants_js_1.log)('Database already exists, schema OK');
129
+ }
130
+ return migrated;
131
+ }
132
+ const db = new DatabaseCtor(dbPath);
133
+ db.pragma('journal_mode = WAL');
134
+ db.exec(SQL_FTS_CREATE);
135
+ db.exec(`
136
+ CREATE TABLE IF NOT EXISTS file_hashes (
137
+ path TEXT PRIMARY KEY,
138
+ content_hash TEXT NOT NULL,
139
+ last_indexed TEXT NOT NULL
140
+ );
141
+ `);
142
+ db.close();
143
+ return true;
144
+ }
145
+ // ── Step 4: Merge hooks into settings.json ─────────────────────────────
146
+ function mergeHooks(packageRoot) {
147
+ const settingsPath = path_1.default.join((0, constants_js_1.homedir)(), '.claude', 'settings.json');
148
+ if (!fs_1.default.existsSync(settingsPath)) {
149
+ (0, constants_js_1.log)('WARNING: ~/.claude/settings.json not found. Hooks not registered.');
150
+ (0, constants_js_1.log)('Create it manually or install Claude Code first.');
151
+ return false;
152
+ }
153
+ let settings;
154
+ try {
155
+ const raw = fs_1.default.readFileSync(settingsPath, 'utf8');
156
+ settings = JSON.parse(raw);
157
+ }
158
+ catch (_err) {
159
+ (0, constants_js_1.log)('WARNING: Could not parse settings.json. Hooks not registered.');
160
+ return false;
161
+ }
162
+ const pluginPath = path_1.default.join(packageRoot, 'plugin.json');
163
+ if (!fs_1.default.existsSync(pluginPath)) {
164
+ (0, constants_js_1.log)('WARNING: plugin.json not found. Hooks not registered.');
165
+ return false;
166
+ }
167
+ const plugin = JSON.parse(fs_1.default.readFileSync(pluginPath, 'utf8'));
168
+ if (!plugin.hooks || plugin.hooks.length === 0) {
169
+ return false;
170
+ }
171
+ if (!settings.hooks) {
172
+ settings.hooks = {};
173
+ }
174
+ let added = 0;
175
+ for (const hook of plugin.hooks) {
176
+ const event = hook.event;
177
+ if (!settings.hooks[event]) {
178
+ settings.hooks[event] = [];
179
+ }
180
+ const hookScript = path_1.default.join(packageRoot, hook.script);
181
+ const hookName = path_1.default.basename(hook.script, '.cjs');
182
+ const exists = settings.hooks[event].some((entry) => {
183
+ if (entry.hooks && Array.isArray(entry.hooks)) {
184
+ return entry.hooks.some((h) => (h.command ?? '').includes(hookName));
185
+ }
186
+ return (entry.command ?? '').includes(hookName);
187
+ });
188
+ if (!exists) {
189
+ settings.hooks[event].push({
190
+ hooks: [
191
+ {
192
+ type: 'command',
193
+ command: `node "${hookScript}"`,
194
+ },
195
+ ],
196
+ });
197
+ added++;
198
+ }
199
+ }
200
+ if (added > 0) {
201
+ const backupPath = settingsPath + '.mindlore-backup';
202
+ if (!fs_1.default.existsSync(backupPath)) {
203
+ fs_1.default.copyFileSync(settingsPath, backupPath);
204
+ }
205
+ fs_1.default.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
206
+ }
207
+ return added;
208
+ }
209
+ // ── Step 5: Add SCHEMA.md to projectDocFiles ───────────────────────────
210
+ function addSchemaToProjectDocs() {
211
+ const projectSettingsDir = path_1.default.join(process.cwd(), '.claude');
212
+ const projectSettingsPath = path_1.default.join(projectSettingsDir, 'settings.json');
213
+ let settings = {};
214
+ if (fs_1.default.existsSync(projectSettingsPath)) {
215
+ try {
216
+ settings = JSON.parse(fs_1.default.readFileSync(projectSettingsPath, 'utf8'));
217
+ }
218
+ catch (_err) {
219
+ settings = {};
220
+ }
221
+ }
222
+ else {
223
+ ensureDir(projectSettingsDir);
224
+ }
225
+ if (!settings.projectDocFiles) {
226
+ settings.projectDocFiles = [];
227
+ }
228
+ const schemaPath = path_1.default.join(constants_js_1.MINDLORE_DIR, 'SCHEMA.md');
229
+ if (!settings.projectDocFiles.includes(schemaPath)) {
230
+ settings.projectDocFiles.push(schemaPath);
231
+ fs_1.default.writeFileSync(projectSettingsPath, JSON.stringify(settings, null, 2), 'utf8');
232
+ return true;
233
+ }
234
+ return false;
235
+ }
236
+ // ── Step 6: Register skills ────────────────────────────────────────────
237
+ function registerSkills(packageRoot, plugin) {
238
+ const skillsDir = path_1.default.join((0, constants_js_1.homedir)(), '.claude', 'skills');
239
+ ensureDir(skillsDir);
240
+ if (!plugin.skills || plugin.skills.length === 0)
241
+ return 0;
242
+ let added = 0;
243
+ for (const skill of plugin.skills) {
244
+ const skillSrcDir = path_1.default.join(packageRoot, path_1.default.dirname(skill.path));
245
+ const skillDestDir = path_1.default.join(skillsDir, skill.name);
246
+ ensureDir(skillDestDir);
247
+ const entries = fs_1.default.readdirSync(skillSrcDir, { withFileTypes: true });
248
+ for (const entry of entries) {
249
+ if (!entry.isFile())
250
+ continue;
251
+ fs_1.default.copyFileSync(path_1.default.join(skillSrcDir, entry.name), path_1.default.join(skillDestDir, entry.name));
252
+ }
253
+ added++;
254
+ }
255
+ return added;
256
+ }
257
+ // ── Step 7: Install better-sqlite3 if needed ──────────────────────────
258
+ function ensureBetterSqlite3() {
259
+ try {
260
+ require('better-sqlite3');
261
+ return true;
262
+ }
263
+ catch (_err) {
264
+ try {
265
+ const { execSync } = require('child_process');
266
+ (0, constants_js_1.log)('Installing better-sqlite3 (native dependency)...');
267
+ execSync('npm install better-sqlite3 --no-save', {
268
+ cwd: process.cwd(),
269
+ stdio: 'pipe',
270
+ timeout: 120000,
271
+ });
272
+ return true;
273
+ }
274
+ catch (_installErr) {
275
+ (0, constants_js_1.log)('WARNING: Could not install better-sqlite3. FTS5 search disabled.');
276
+ (0, constants_js_1.log)(' Run manually: npm install better-sqlite3');
277
+ return false;
278
+ }
279
+ }
280
+ }
281
+ // ── Step 8: Add .mindlore/ to .gitignore ───────────────────────────────
282
+ function addToGitignore() {
283
+ const gitignorePath = path_1.default.join(process.cwd(), '.gitignore');
284
+ const entry = '.mindlore/';
285
+ if (fs_1.default.existsSync(gitignorePath)) {
286
+ const content = fs_1.default.readFileSync(gitignorePath, 'utf8');
287
+ if (content.includes(entry)) {
288
+ return false;
289
+ }
290
+ fs_1.default.appendFileSync(gitignorePath, `\n${entry}\n`, 'utf8');
291
+ }
292
+ else {
293
+ fs_1.default.writeFileSync(gitignorePath, `${entry}\n`, 'utf8');
294
+ }
295
+ return true;
296
+ }
297
+ // ── Main ───────────────────────────────────────────────────────────────
298
+ function main() {
299
+ const args = process.argv.slice(2);
300
+ const command = args[0];
301
+ if (command === 'uninstall') {
302
+ require('./uninstall.js');
303
+ return;
304
+ }
305
+ if (command && command !== 'init') {
306
+ console.log(`Unknown command: ${command}`);
307
+ console.log('Usage: npx mindlore init [--recommended] [--global]');
308
+ console.log(' npx mindlore uninstall [--all] [--global]');
309
+ process.exit(1);
310
+ }
311
+ const isRecommended = args.includes('--recommended');
312
+ const isGlobal = args.includes('--global');
313
+ const packageRoot = resolvePackageRoot();
314
+ const baseDir = isGlobal
315
+ ? constants_js_1.GLOBAL_MINDLORE_DIR
316
+ : path_1.default.join(process.cwd(), constants_js_1.MINDLORE_DIR);
317
+ const scopeLabel = isGlobal ? 'global (~/.mindlore/)' : 'project (.mindlore/)';
318
+ console.log(`\n Mindlore — AI-native knowledge system [${scopeLabel}]\n`);
319
+ // Step 1: Directories
320
+ const dirsCreated = createDirectories(baseDir);
321
+ (0, constants_js_1.log)(dirsCreated > 0
322
+ ? `Created ${dirsCreated} directories in ${constants_js_1.MINDLORE_DIR}/`
323
+ : 'All directories already exist');
324
+ // Step 2: Templates
325
+ const filesCopied = copyTemplates(baseDir, packageRoot);
326
+ (0, constants_js_1.log)(filesCopied > 0
327
+ ? `Copied ${filesCopied} template files`
328
+ : 'All templates already in place');
329
+ // Step 3: better-sqlite3 (before DB creation so it's available)
330
+ ensureBetterSqlite3();
331
+ // Step 4: Database
332
+ const dbCreated = createDatabase(baseDir);
333
+ (0, constants_js_1.log)(dbCreated ? 'Created FTS5 database' : 'Database already exists');
334
+ // Read plugin.json once for hooks + skills
335
+ const pluginPath = path_1.default.join(packageRoot, 'plugin.json');
336
+ const plugin = fs_1.default.existsSync(pluginPath)
337
+ ? JSON.parse(fs_1.default.readFileSync(pluginPath, 'utf8'))
338
+ : {};
339
+ // Step 5: Hooks
340
+ const hooksAdded = mergeHooks(packageRoot);
341
+ if (typeof hooksAdded === 'number' && hooksAdded > 0) {
342
+ (0, constants_js_1.log)(`Registered ${hooksAdded} hooks in ~/.claude/settings.json`);
343
+ }
344
+ else {
345
+ (0, constants_js_1.log)('Hooks already registered (or settings.json not found)');
346
+ }
347
+ // Step 6: SCHEMA.md in projectDocFiles (project mode only)
348
+ if (!isGlobal) {
349
+ const schemaAdded = addSchemaToProjectDocs();
350
+ (0, constants_js_1.log)(schemaAdded
351
+ ? 'Added SCHEMA.md to project settings'
352
+ : 'SCHEMA.md already in project settings');
353
+ }
354
+ // Step 7: Skills
355
+ const skillsAdded = registerSkills(packageRoot, plugin);
356
+ (0, constants_js_1.log)(skillsAdded > 0
357
+ ? `Registered ${skillsAdded} skills in ~/.claude/skills/`
358
+ : 'Skills already registered');
359
+ // Step 8: .gitignore (project mode only — global dir has its own repo)
360
+ if (!isGlobal) {
361
+ const gitignoreAdded = addToGitignore();
362
+ (0, constants_js_1.log)(gitignoreAdded
363
+ ? 'Added .mindlore/ to .gitignore'
364
+ : '.mindlore/ already in .gitignore');
365
+ }
366
+ // Step 9: Global mode — init git repo + show private repo guide
367
+ if (isGlobal) {
368
+ const gitDir = path_1.default.join(baseDir, '.git');
369
+ if (!fs_1.default.existsSync(gitDir)) {
370
+ try {
371
+ const { execSync } = require('child_process');
372
+ execSync('git init', { cwd: baseDir, stdio: 'pipe', timeout: 10000 });
373
+ (0, constants_js_1.log)('Initialized git repo in ~/.mindlore/');
374
+ }
375
+ catch (_err) {
376
+ (0, constants_js_1.log)('WARNING: Could not init git repo. Install git for auto-sync.');
377
+ }
378
+ }
379
+ else {
380
+ (0, constants_js_1.log)('Git repo already initialized');
381
+ }
382
+ console.log('\n Optional: Create a private repo for backup:');
383
+ (0, constants_js_1.log)(' gh repo create mindlore-data --private');
384
+ (0, constants_js_1.log)(' cd ~/.mindlore && git remote add origin <url>');
385
+ (0, constants_js_1.log)(' Session-end hook will auto-commit + push.\n');
386
+ }
387
+ // Recommended profile tips
388
+ if (isRecommended) {
389
+ console.log('\n Recommended setup:');
390
+ (0, constants_js_1.log)('Install markitdown for better web/doc extraction:');
391
+ (0, constants_js_1.log)(' pip install markitdown');
392
+ (0, constants_js_1.log)('');
393
+ (0, constants_js_1.log)('Install context-mode for token savings:');
394
+ (0, constants_js_1.log)(' See: https://github.com/context-mode/context-mode');
395
+ }
396
+ // Step 10: Write .version + .pkg-version (flat string for fast session-focus comparison)
397
+ const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(packageRoot, 'package.json'), 'utf8'));
398
+ const versionPath = path_1.default.join(baseDir, '.version');
399
+ const pkgVersionPath = path_1.default.join(baseDir, '.pkg-version');
400
+ fs_1.default.writeFileSync(versionPath, packageJson.version, 'utf8');
401
+ fs_1.default.writeFileSync(pkgVersionPath, packageJson.version, 'utf8');
402
+ (0, constants_js_1.log)(`Version: ${packageJson.version}`);
403
+ console.log('\n Done! Start with: /mindlore-ingest\n');
404
+ }
405
+ main();
406
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../scripts/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export declare const MINDLORE_DIR = ".mindlore";
2
+ export declare const GLOBAL_MINDLORE_DIR: string;
3
+ export declare const DB_NAME = "mindlore.db";
4
+ export declare const DIRECTORIES: readonly ["raw", "sources", "domains", "analyses", "insights", "connections", "learnings", "diary", "decisions"];
5
+ export declare const SKIP_FILES: Set<string>;
6
+ export declare const FTS5_COLUMNS: readonly ["path", "slug", "description", "type", "category", "title", "content", "tags", "quality", "date_captured"];
7
+ export type FtsColumn = typeof FTS5_COLUMNS[number];
8
+ export declare const FRONTMATTER_TYPES: readonly ["raw", "source", "domain", "analysis", "diary", "decision", "insight", "connection", "learning"];
9
+ export type FrontmatterType = typeof FRONTMATTER_TYPES[number];
10
+ export declare const QUALITY_VALUES: readonly ["high", "medium", "low"];
11
+ export type QualityValue = typeof QUALITY_VALUES[number];
12
+ export declare const TYPE_TO_DIR: Record<string, string>;
13
+ export declare function homedir(): string;
14
+ /**
15
+ * Resolve the active .mindlore/ directory.
16
+ * If CWD has a .mindlore/ → project scope, otherwise → global (~/.mindlore/).
17
+ */
18
+ export declare function getActiveMindloreDir(): string;
19
+ /**
20
+ * Return all mindlore DB paths (project + global), deduplicated.
21
+ * Project DB first (higher priority in search), global second.
22
+ */
23
+ export declare function getAllDbs(): string[];
24
+ /**
25
+ * Shared log helper — indented console output for init/uninstall scripts.
26
+ */
27
+ export declare function log(msg: string): void;
28
+ export interface HookEntry {
29
+ hooks?: Array<{
30
+ type?: string;
31
+ command?: string;
32
+ }>;
33
+ command?: string;
34
+ }
35
+ export interface Settings {
36
+ hooks?: Record<string, HookEntry[]>;
37
+ projectDocFiles?: string[];
38
+ [key: string]: unknown;
39
+ }
40
+ /**
41
+ * Filter predicate: true if file is NOT a skip file (INDEX.md, SCHEMA.md, log.md).
42
+ */
43
+ export declare function isContentFile(filePath: string): boolean;
44
+ /**
45
+ * Resolve hook common module path — works from both src/ and dist/.
46
+ * From scripts/: ../hooks/lib/mindlore-common.cjs
47
+ * From dist/scripts/: ../../hooks/lib/mindlore-common.cjs
48
+ */
49
+ export declare function resolveHookCommon(callerDir: string): string;
50
+ export declare function hasMarkitdown(): boolean;
51
+ /**
52
+ * Check if youtube-transcript npm package is available.
53
+ * Optional fallback for YouTube transcript extraction when markitdown is absent.
54
+ */
55
+ export declare function hasYoutubeTranscript(): boolean;
56
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAwC,CAAC;AACzE,eAAO,MAAM,OAAO,gBAAgB,CAAC;AAErC,eAAO,MAAM,WAAW,kHAUd,CAAC;AAEX,eAAO,MAAM,UAAU,aAA+C,CAAC;AAEvE,eAAO,MAAM,YAAY,sHAAuH,CAAC;AACjJ,MAAM,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB,4GAA6G,CAAC;AAC5I,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,cAAc,oCAAqC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU9C,CAAC;AAEF,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAYpC;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC;AAID,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI3D;AAOD,wBAAgB,aAAa,IAAI,OAAO,CAUvC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C"}