@novis10813/secondbrain-cli 0.1.0 → 0.1.1

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 (93) hide show
  1. package/README.md +74 -5
  2. package/dist/commands/backlinks.d.ts.map +1 -1
  3. package/dist/commands/backlinks.js +16 -33
  4. package/dist/commands/backlinks.js.map +1 -1
  5. package/dist/commands/capture.d.ts.map +1 -1
  6. package/dist/commands/capture.js +71 -57
  7. package/dist/commands/capture.js.map +1 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +5 -20
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/get.js +27 -26
  12. package/dist/commands/get.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +21 -4
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +22 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/open.d.ts +3 -0
  21. package/dist/commands/open.d.ts.map +1 -0
  22. package/dist/commands/open.js +28 -0
  23. package/dist/commands/open.js.map +1 -0
  24. package/dist/commands/orphans.d.ts.map +1 -1
  25. package/dist/commands/orphans.js +9 -27
  26. package/dist/commands/orphans.js.map +1 -1
  27. package/dist/commands/outlinks.d.ts +3 -0
  28. package/dist/commands/outlinks.d.ts.map +1 -0
  29. package/dist/commands/outlinks.js +48 -0
  30. package/dist/commands/outlinks.js.map +1 -0
  31. package/dist/commands/search.d.ts +2 -0
  32. package/dist/commands/search.d.ts.map +1 -1
  33. package/dist/commands/search.js +57 -39
  34. package/dist/commands/search.js.map +1 -1
  35. package/dist/commands/stats.d.ts.map +1 -1
  36. package/dist/commands/stats.js +4 -18
  37. package/dist/commands/stats.js.map +1 -1
  38. package/dist/commands/sync.d.ts.map +1 -1
  39. package/dist/commands/sync.js +3 -17
  40. package/dist/commands/sync.js.map +1 -1
  41. package/dist/commands/template.d.ts +3 -0
  42. package/dist/commands/template.d.ts.map +1 -0
  43. package/dist/commands/template.js +63 -0
  44. package/dist/commands/template.js.map +1 -0
  45. package/dist/commands/vault.d.ts +3 -0
  46. package/dist/commands/vault.d.ts.map +1 -0
  47. package/dist/commands/vault.js +233 -0
  48. package/dist/commands/vault.js.map +1 -0
  49. package/dist/index.js +13 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/index.d.ts +134 -10
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/utils/config.d.ts +3 -1
  54. package/dist/utils/config.d.ts.map +1 -1
  55. package/dist/utils/config.js +12 -0
  56. package/dist/utils/config.js.map +1 -1
  57. package/dist/utils/database.d.ts +58 -14
  58. package/dist/utils/database.d.ts.map +1 -1
  59. package/dist/utils/database.js +627 -207
  60. package/dist/utils/database.js.map +1 -1
  61. package/dist/utils/global-config.d.ts +53 -0
  62. package/dist/utils/global-config.d.ts.map +1 -0
  63. package/dist/utils/global-config.js +144 -0
  64. package/dist/utils/global-config.js.map +1 -0
  65. package/dist/utils/parser.d.ts +95 -2
  66. package/dist/utils/parser.d.ts.map +1 -1
  67. package/dist/utils/parser.js +436 -38
  68. package/dist/utils/parser.js.map +1 -1
  69. package/dist/utils/placeholder.d.ts +37 -0
  70. package/dist/utils/placeholder.d.ts.map +1 -0
  71. package/dist/utils/placeholder.js +113 -0
  72. package/dist/utils/placeholder.js.map +1 -0
  73. package/dist/utils/position.d.ts +10 -0
  74. package/dist/utils/position.d.ts.map +1 -0
  75. package/dist/utils/position.js +24 -0
  76. package/dist/utils/position.js.map +1 -0
  77. package/dist/utils/sqlite-adapter.d.ts +8 -0
  78. package/dist/utils/sqlite-adapter.d.ts.map +1 -0
  79. package/dist/utils/sqlite-adapter.js +14 -0
  80. package/dist/utils/sqlite-adapter.js.map +1 -0
  81. package/dist/utils/template.d.ts +2 -2
  82. package/dist/utils/template.d.ts.map +1 -1
  83. package/dist/utils/template.js +8 -3
  84. package/dist/utils/template.js.map +1 -1
  85. package/dist/utils/vault-resolve.d.ts +23 -0
  86. package/dist/utils/vault-resolve.d.ts.map +1 -0
  87. package/dist/utils/vault-resolve.js +86 -0
  88. package/dist/utils/vault-resolve.js.map +1 -0
  89. package/dist/utils/vault.d.ts +77 -10
  90. package/dist/utils/vault.d.ts.map +1 -1
  91. package/dist/utils/vault.js +253 -98
  92. package/dist/utils/vault.js.map +1 -1
  93. package/package.json +9 -3
@@ -6,12 +6,15 @@ const path_1 = require("path");
6
6
  const database_js_1 = require("./database.js");
7
7
  const parser_js_1 = require("./parser.js");
8
8
  class VaultManager {
9
- config;
9
+ _config;
10
10
  db;
11
11
  constructor(config) {
12
- this.config = config;
12
+ this._config = config;
13
13
  this.db = new database_js_1.DatabaseManager(config);
14
14
  }
15
+ get config() {
16
+ return this._config;
17
+ }
15
18
  close() {
16
19
  this.db.close();
17
20
  }
@@ -22,59 +25,88 @@ class VaultManager {
22
25
  let removed = 0;
23
26
  const currentPaths = new Set();
24
27
  const markdownFiles = this.findMarkdownFiles();
25
- // Pass 1: Collect all files and upsert basic metadata with empty links
28
+ const parsedByPath = new Map();
29
+ // Pass 1: Collect all files, parse once, upsert FileInfo + ContentMetadata
26
30
  for (const filePath of markdownFiles) {
27
- const relativePath = (0, path_1.relative)(this.config.vaultPath, filePath);
31
+ const relativePath = (0, path_1.relative)(this._config.vaultPath, filePath);
28
32
  currentPaths.add(relativePath);
29
33
  const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
30
34
  const hash = parser_js_1.NoteParser.computeHash(content);
31
- // Check if note exists and if hash changed
32
- const existingNote = this.db.getNoteByPath(relativePath);
33
- if (!existingNote) {
34
- // New note - create with empty links
35
- const note = await this.createNoteFromFile(relativePath, content, hash, []);
36
- this.db.upsertNote(note);
35
+ const existingHash = this.db.getFileContentHash(relativePath);
36
+ if (existingHash === hash) {
37
+ // Skip parsing, load existing metadata for Pass 2 link resolution
38
+ const existingMetadata = this.db.getContentMetadata(relativePath);
39
+ if (existingMetadata) {
40
+ parsedByPath.set(relativePath, {
41
+ title: '',
42
+ content: '',
43
+ frontmatter: {},
44
+ tags: [],
45
+ links: existingMetadata.links ?? [],
46
+ headings: [],
47
+ blocks: []
48
+ });
49
+ continue;
50
+ }
51
+ }
52
+ const parsed = parser_js_1.NoteParser.parse(content);
53
+ parsedByPath.set(relativePath, parsed);
54
+ const existingFile = this.db.getFileByPath(relativePath);
55
+ const isNew = !existingFile;
56
+ const fileInfo = this.createFileInfo(relativePath, filePath);
57
+ const contentMetadata = parser_js_1.NoteParser.parsedToContentMetadata(parsed, content);
58
+ this.db.upsertFile(fileInfo, hash);
59
+ this.db.upsertContentMetadata(relativePath, contentMetadata, hash);
60
+ if (isNew) {
37
61
  added++;
38
62
  }
39
- else if (existingNote.hash !== hash) {
40
- // Updated note - preserve ID, use empty links initially
41
- const note = await this.createNoteFromFile(relativePath, content, hash, []);
42
- note.id = existingNote.id; // Keep same ID
43
- this.db.upsertNote(note);
63
+ else {
44
64
  updated++;
45
65
  }
46
66
  }
47
- // Pass 2: Resolve links against populated database
48
- for (const filePath of markdownFiles) {
49
- const relativePath = (0, path_1.relative)(this.config.vaultPath, filePath);
50
- const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
51
- const parsed = parser_js_1.NoteParser.parse(content);
52
- // Get the note ID
53
- const note = this.db.getNoteByPath(relativePath);
54
- if (note) {
55
- // Resolve link titles to note IDs
56
- const linkIds = [];
57
- for (const linkTitle of parsed.links) {
58
- const linkedNote = this.findNoteByTitleOrPath(linkTitle);
59
- if (linkedNote) {
60
- linkIds.push(linkedNote.id);
61
- }
67
+ // Pass 2: Resolve link targets using cached parsed data (no second read/parse)
68
+ for (const [relativePath, parsed] of parsedByPath) {
69
+ for (const link of parsed.links) {
70
+ const linkedFile = this.getFirstLinkpathDest(link.target, relativePath);
71
+ if (linkedFile) {
72
+ this.db.updateLinkTarget(relativePath, link.position.start.offset, linkedFile.path, null);
62
73
  }
63
- // Update note with resolved links
64
- note.links = linkIds;
65
- this.db.upsertNote(note);
66
74
  }
67
75
  }
68
- // Remove notes that no longer exist in filesystem
69
- const allNotes = this.db.getAllNotes();
70
- for (const note of allNotes) {
71
- if (!currentPaths.has(note.path)) {
72
- this.db.deleteNoteByPath(note.path);
76
+ // Remove files that no longer exist in filesystem
77
+ const allFiles = this.db.getAllFiles();
78
+ for (const file of allFiles) {
79
+ if (!currentPaths.has(file.path)) {
80
+ this.db.deleteFile(file.path);
73
81
  removed++;
74
82
  }
75
83
  }
76
84
  return { added, updated, removed };
77
85
  }
86
+ /**
87
+ * Rapidly index a single file without a full vault scan.
88
+ * Useful for capture or real-time updates.
89
+ */
90
+ indexSingleFile(relativePath) {
91
+ const fullPath = (0, path_1.join)(this._config.vaultPath, relativePath);
92
+ if (!(0, fs_1.existsSync)(fullPath)) {
93
+ throw new Error(`File not found: ${fullPath}`);
94
+ }
95
+ const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
96
+ const hash = parser_js_1.NoteParser.computeHash(content);
97
+ const fileInfo = this.createFileInfo(relativePath, fullPath);
98
+ const parsed = parser_js_1.NoteParser.parse(content);
99
+ const contentMetadata = parser_js_1.NoteParser.parsedToContentMetadata(parsed, content);
100
+ this.db.upsertFile(fileInfo, hash);
101
+ this.db.upsertContentMetadata(relativePath, contentMetadata, hash);
102
+ // Resolve outlinks of this file immediately
103
+ for (const link of parsed.links) {
104
+ const linkedFile = this.getFirstLinkpathDest(link.target, relativePath);
105
+ if (linkedFile) {
106
+ this.db.updateLinkTarget(relativePath, link.position.start.offset, linkedFile.path, null);
107
+ }
108
+ }
109
+ }
78
110
  findMarkdownFiles() {
79
111
  const files = [];
80
112
  const excludeDirs = ['.git', '.secondbrain', 'node_modules'];
@@ -83,60 +115,46 @@ class VaultManager {
83
115
  for (const entry of entries) {
84
116
  const fullPath = (0, path_1.join)(dir, entry.name);
85
117
  if (entry.isDirectory() && !excludeDirs.includes(entry.name)) {
86
- walk(fullPath);
118
+ // Skip symlinked directories to avoid cycles and duplicate traversal
119
+ if (!entry.isSymbolicLink()) {
120
+ walk(fullPath);
121
+ }
87
122
  }
88
123
  else if (entry.isFile() && (0, path_1.extname)(entry.name) === '.md') {
89
124
  files.push(fullPath);
90
125
  }
91
126
  }
92
127
  };
93
- walk(this.config.vaultPath);
128
+ walk(this._config.vaultPath);
94
129
  return files;
95
130
  }
96
- async createNoteFromFile(path, content, hash, links = []) {
97
- const parsed = parser_js_1.NoteParser.parse(content);
98
- const fullPath = (0, path_1.join)(this.config.vaultPath, path);
131
+ /**
132
+ * Create FileInfo from file path and stats.
133
+ * Separates file system information from content parsing.
134
+ */
135
+ createFileInfo(relativePath, fullPath) {
99
136
  const stats = (0, fs_1.statSync)(fullPath);
137
+ const ext = (0, path_1.extname)(relativePath) || '.md';
138
+ const name = (0, path_1.basename)(relativePath);
139
+ const basenameWithoutExt = (0, path_1.basename)(relativePath, ext) || (0, path_1.basename)(relativePath);
140
+ const parentDir = (0, path_1.dirname)(relativePath);
141
+ const parent = parentDir === '.' ? null : parentDir;
100
142
  return {
101
- id: hash,
102
- path,
103
- title: parsed.title,
104
- content: parsed.content,
105
- frontmatter: parsed.frontmatter,
106
- tags: parsed.tags,
107
- links: links,
108
- backlinks: [], // Will be computed by database
109
- hash,
110
- createdAt: stats.birthtime.toISOString(),
111
- modifiedAt: stats.mtime.toISOString()
143
+ path: relativePath,
144
+ name,
145
+ basename: basenameWithoutExt,
146
+ extension: ext.replace(/^\./, ''), // Remove leading dot
147
+ parent,
148
+ stat: {
149
+ ctime: stats.birthtimeMs,
150
+ mtime: stats.mtimeMs,
151
+ size: stats.size
152
+ }
112
153
  };
113
154
  }
114
- findNoteByTitleOrPath(titleOrPath) {
115
- // Try exact path match first
116
- const note = this.db.getNoteByPath(titleOrPath + '.md');
117
- if (note)
118
- return note;
119
- // Try with different extensions or paths
120
- const variations = [
121
- titleOrPath + '.md',
122
- titleOrPath,
123
- titleOrPath.replace(/ /g, '-') + '.md',
124
- titleOrPath.replace(/ /g, '_') + '.md'
125
- ];
126
- for (const variation of variations) {
127
- const note = this.db.getNoteByPath(variation);
128
- if (note)
129
- return note;
130
- }
131
- // Search by title using SQL (case-insensitive)
132
- const byTitle = this.db.getNoteByTitle(titleOrPath);
133
- if (byTitle)
134
- return byTitle;
135
- return null;
136
- }
137
155
  // Write note to file
138
156
  writeNote(path, content) {
139
- const fullPath = (0, path_1.join)(this.config.vaultPath, path);
157
+ const fullPath = (0, path_1.join)(this._config.vaultPath, path);
140
158
  // Ensure directory exists
141
159
  const dir = (0, path_1.dirname)(fullPath);
142
160
  if (!(0, fs_1.existsSync)(dir)) {
@@ -145,7 +163,7 @@ class VaultManager {
145
163
  (0, fs_1.writeFileSync)(fullPath, content, 'utf-8');
146
164
  }
147
165
  readNote(path) {
148
- const fullPath = (0, path_1.join)(this.config.vaultPath, path);
166
+ const fullPath = (0, path_1.join)(this._config.vaultPath, path);
149
167
  if (!(0, fs_1.existsSync)(fullPath)) {
150
168
  return null;
151
169
  }
@@ -157,37 +175,174 @@ class VaultManager {
157
175
  const month = String(date.getMonth() + 1).padStart(2, '0');
158
176
  const day = String(date.getDate()).padStart(2, '0');
159
177
  const dateStr = `${year}-${month}-${day}`;
160
- return (0, path_1.join)(this.config.dailyNotesFolder, `${dateStr}.md`);
178
+ return (0, path_1.join)(this._config.dailyNotesFolder, `${dateStr}.md`);
161
179
  }
162
180
  // Get template path
163
181
  getTemplatePath(templateName) {
164
- return (0, path_1.join)(this.config.templatesFolder, `${templateName}.md`);
165
- }
166
- // Database proxy methods
167
- getNoteById(id) {
168
- return this.db.getNoteById(id);
182
+ return (0, path_1.join)(this._config.templatesFolder, `${templateName}.md`);
169
183
  }
170
- getNoteByPath(path) {
171
- return this.db.getNoteByPath(path);
184
+ getStats() {
185
+ return this.db.getStats();
172
186
  }
173
- searchNotes(query, tags, limit = 20) {
174
- return this.db.searchNotes(query, tags, limit);
187
+ // New structure (files + content_metadata + links_with_positions)
188
+ getBacklinksByPath(filePath) {
189
+ return this.db.getBacklinksByPath(filePath);
175
190
  }
176
- getBacklinks(noteId) {
177
- return this.db.getBacklinks(noteId);
191
+ getOutlinksByPath(filePath) {
192
+ return this.db.getOutlinksByPath(filePath);
178
193
  }
179
- getOrphans() {
180
- return this.db.getOrphans();
194
+ getOrphanFiles() {
195
+ return this.db.getOrphanFiles();
181
196
  }
182
- getStats() {
183
- return this.db.getStats();
197
+ searchFiles(query, tags, limit = 20, pathPrefix, linksToPath, headingQuery, modifiedAfter, modifiedBefore) {
198
+ return this.db.searchFiles(query, tags, limit, pathPrefix, linksToPath, headingQuery, modifiedAfter, modifiedBefore);
184
199
  }
185
200
  getGraphData() {
186
201
  return this.db.getGraphData();
187
202
  }
188
- // Database proxy methods
189
- upsertNote(note) {
190
- return this.db.upsertNote(note);
203
+ // Obsidian-style API methods
204
+ /**
205
+ * Get all markdown files in the vault (Obsidian-style API).
206
+ * Equivalent to Obsidian's Vault.getMarkdownFiles().
207
+ * @returns Array of FileInfo for every .md file in the vault
208
+ */
209
+ getMarkdownFiles() {
210
+ return this.db.getAllFiles();
211
+ }
212
+ /**
213
+ * Get FileInfo by path (Obsidian-style API).
214
+ * @param path Relative path from vault root
215
+ * @returns FileInfo or null if not found
216
+ */
217
+ getFileByPath(path) {
218
+ return this.db.getFileByPath(path);
219
+ }
220
+ /**
221
+ * Resolve path or basename to FileInfo using new structure only.
222
+ * Tries exact path, path + .md, then match by basename.
223
+ */
224
+ resolvePathOrBasename(pathOrBasename) {
225
+ let file = this.db.getFileByPath(pathOrBasename);
226
+ if (file)
227
+ return file;
228
+ if (!pathOrBasename.endsWith('.md')) {
229
+ file = this.db.getFileByPath(pathOrBasename + '.md');
230
+ if (file)
231
+ return file;
232
+ }
233
+ const base = pathOrBasename.replace(/\.md$/i, '');
234
+ return this.db.getFileByBasename(base);
235
+ }
236
+ /**
237
+ * Read file content by FileInfo (Obsidian-style API).
238
+ * Equivalent to Obsidian's Vault.read(file).
239
+ * @param file FileInfo object
240
+ * @returns File content or null if not found
241
+ */
242
+ readFile(file) {
243
+ return this.readNote(file.path);
244
+ }
245
+ /**
246
+ * Get backlinks for a file by FileInfo (Obsidian-style API).
247
+ * Equivalent to Obsidian's MetadataCache.getBacklinksForFile(file).
248
+ * @param file FileInfo object
249
+ * @returns Array of FileInfo that link to this file
250
+ */
251
+ getBacklinksForFile(file) {
252
+ return this.getBacklinksByPath(file.path);
253
+ }
254
+ /**
255
+ * Get ContentMetadata for a FileInfo (Obsidian-style API).
256
+ * Equivalent to Obsidian's MetadataCache.getFileCache(file).
257
+ * @param file FileInfo object
258
+ * @returns ContentMetadata or null if not found
259
+ */
260
+ getFileCache(file) {
261
+ return this.db.getContentMetadata(file.path);
262
+ }
263
+ /**
264
+ * Resolve a linkpath to a FileInfo (Obsidian-style API).
265
+ * Equivalent to Obsidian's MetadataCache.getFirstLinkpathDest(linkpath, sourcePath).
266
+ * Resolves linkpaths like "note-name", "folder/note-name", "note-name#heading", etc.
267
+ * @param linkpath Link path (may include heading/block reference after #)
268
+ * @param sourcePath Path of the source file (for relative path resolution)
269
+ * @returns FileInfo or null if not found
270
+ */
271
+ getFirstLinkpathDest(linkpath, sourcePath) {
272
+ // Strip heading/block reference (everything after #)
273
+ const filePart = linkpath.split('#')[0].trim();
274
+ if (!filePart)
275
+ return null;
276
+ // Try exact path match first
277
+ let file = this.db.getFileByPath(filePart);
278
+ if (file)
279
+ return file;
280
+ // Try with .md extension
281
+ file = this.db.getFileByPath(filePart + '.md');
282
+ if (file)
283
+ return file;
284
+ // Try relative to source file's directory
285
+ if (sourcePath) {
286
+ const sourceDir = (0, path_1.dirname)(sourcePath);
287
+ const relativePath = sourceDir === '.' ? filePart : (0, path_1.join)(sourceDir, filePart);
288
+ file = this.db.getFileByPath(relativePath);
289
+ if (file)
290
+ return file;
291
+ // Try relative path with .md extension
292
+ file = this.db.getFileByPath(relativePath + '.md');
293
+ if (file)
294
+ return file;
295
+ }
296
+ // Try path variations (spaces to dashes/underscores)
297
+ const variations = [
298
+ filePart.replace(/ /g, '-') + '.md',
299
+ filePart.replace(/ /g, '_') + '.md',
300
+ filePart.replace(/ /g, '-'),
301
+ filePart.replace(/ /g, '_')
302
+ ];
303
+ for (const variation of variations) {
304
+ file = this.db.getFileByPath(variation);
305
+ if (file)
306
+ return file;
307
+ }
308
+ // Try finding by basename (filename without extension)
309
+ // This matches Obsidian's behavior of finding files by title
310
+ const basenameToMatch = filePart.replace(/\.md$/, '');
311
+ return this.db.getFileByBasename(basenameToMatch);
312
+ }
313
+ /**
314
+ * Resolve a linkpath to a file and position (line, col) for editor navigation.
315
+ * Supports note, note#heading, note#^block-id, and note#heading#^block-id.
316
+ * @returns { path, line, col } (1-based) or null if file not found
317
+ */
318
+ resolveLinkToPosition(linkpath, sourcePath) {
319
+ const parts = linkpath.split('#').map(p => p.trim());
320
+ const filePart = parts[0];
321
+ if (!filePart)
322
+ return null;
323
+ const file = this.getFirstLinkpathDest(filePart, sourcePath);
324
+ if (!file)
325
+ return null;
326
+ const fragments = parts.slice(1);
327
+ if (fragments.length === 0) {
328
+ return { path: file.path, line: 1, col: 1 };
329
+ }
330
+ const last = fragments[fragments.length - 1];
331
+ const blockId = last.startsWith('^') ? last.slice(1) : null;
332
+ const headingFragment = blockId && fragments.length > 1
333
+ ? fragments.slice(0, -1).join(' ')
334
+ : fragments.join(' ');
335
+ if (blockId) {
336
+ const pos = this.db.getBlockPosition(file.path, blockId);
337
+ if (pos)
338
+ return { path: file.path, ...pos };
339
+ }
340
+ if (headingFragment) {
341
+ const pos = this.db.getHeadingPosition(file.path, headingFragment);
342
+ if (pos)
343
+ return { path: file.path, ...pos };
344
+ }
345
+ return { path: file.path, line: 1, col: 1 };
191
346
  }
192
347
  }
193
348
  exports.VaultManager = VaultManager;
@@ -1 +1 @@
1
- {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/utils/vault.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/utils/vault.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@novis10813/secondbrain-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "A CLI tool for LLM agents to interact with Obsidian vaults",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,8 +17,11 @@
17
17
  "build": "tsc",
18
18
  "dev": "bun run src/index.ts",
19
19
  "test": "bun test",
20
+ "test:perf": "bun test tests/perf",
21
+ "coverage": "bun test --coverage",
20
22
  "lint": "tsc --noEmit",
21
- "prepare": "npm run build"
23
+ "prepare": "npm run build",
24
+ "check": "tsc --noEmit"
22
25
  },
23
26
  "keywords": [
24
27
  "obsidian",
@@ -32,7 +35,7 @@
32
35
  "author": "novis10813",
33
36
  "repository": {
34
37
  "type": "git",
35
- "url": "https://github.com/novis10813/secondbrain-cli.git"
38
+ "url": "git+https://github.com/novis10813/secondbrain-cli.git"
36
39
  },
37
40
  "bugs": {
38
41
  "url": "https://github.com/novis10813/secondbrain-cli/issues"
@@ -40,10 +43,13 @@
40
43
  "homepage": "https://github.com/novis10813/secondbrain-cli#readme",
41
44
  "license": "MIT",
42
45
  "dependencies": {
46
+ "better-sqlite3": "^11.6.0",
43
47
  "commander": "^12.0.0",
48
+ "moment": "^2.30.1",
44
49
  "yaml": "^2.3.4"
45
50
  },
46
51
  "devDependencies": {
52
+ "@types/better-sqlite3": "^7.6.11",
47
53
  "@types/node": "^20.11.0",
48
54
  "typescript": "^5.3.3"
49
55
  },