@novis10813/secondbrain-cli 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -81
- package/dist/commands/backlinks.d.ts.map +1 -1
- package/dist/commands/backlinks.js +16 -33
- package/dist/commands/backlinks.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +71 -57
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -20
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/get.js +27 -26
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +22 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +28 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/orphans.d.ts.map +1 -1
- package/dist/commands/orphans.js +9 -27
- package/dist/commands/orphans.js.map +1 -1
- package/dist/commands/outlinks.d.ts +3 -0
- package/dist/commands/outlinks.d.ts.map +1 -0
- package/dist/commands/outlinks.js +48 -0
- package/dist/commands/outlinks.js.map +1 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +57 -39
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +4 -18
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +3 -17
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +63 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/vault.d.ts +3 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +233 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +134 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +3 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/database.d.ts +58 -14
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +627 -207
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/global-config.d.ts +53 -0
- package/dist/utils/global-config.d.ts.map +1 -0
- package/dist/utils/global-config.js +144 -0
- package/dist/utils/global-config.js.map +1 -0
- package/dist/utils/parser.d.ts +95 -2
- package/dist/utils/parser.d.ts.map +1 -1
- package/dist/utils/parser.js +466 -39
- package/dist/utils/parser.js.map +1 -1
- package/dist/utils/placeholder.d.ts +37 -0
- package/dist/utils/placeholder.d.ts.map +1 -0
- package/dist/utils/placeholder.js +113 -0
- package/dist/utils/placeholder.js.map +1 -0
- package/dist/utils/position.d.ts +10 -0
- package/dist/utils/position.d.ts.map +1 -0
- package/dist/utils/position.js +24 -0
- package/dist/utils/position.js.map +1 -0
- package/dist/utils/sqlite-adapter.d.ts +8 -0
- package/dist/utils/sqlite-adapter.d.ts.map +1 -0
- package/dist/utils/sqlite-adapter.js +14 -0
- package/dist/utils/sqlite-adapter.js.map +1 -0
- package/dist/utils/template.d.ts +2 -2
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +8 -3
- package/dist/utils/template.js.map +1 -1
- package/dist/utils/vault-resolve.d.ts +23 -0
- package/dist/utils/vault-resolve.d.ts.map +1 -0
- package/dist/utils/vault-resolve.js +86 -0
- package/dist/utils/vault-resolve.js.map +1 -0
- package/dist/utils/vault.d.ts +77 -10
- package/dist/utils/vault.d.ts.map +1 -1
- package/dist/utils/vault.js +262 -98
- package/dist/utils/vault.js.map +1 -1
- package/package.json +9 -3
package/dist/utils/vault.js
CHANGED
|
@@ -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
|
-
|
|
9
|
+
_config;
|
|
10
10
|
db;
|
|
11
11
|
constructor(config) {
|
|
12
|
-
this.
|
|
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,94 @@ class VaultManager {
|
|
|
22
25
|
let removed = 0;
|
|
23
26
|
const currentPaths = new Set();
|
|
24
27
|
const markdownFiles = this.findMarkdownFiles();
|
|
25
|
-
|
|
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.
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
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
|
|
48
|
-
for (const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
+
// Guard: skip links with undefined/non-string targets (e.g. from template placeholders)
|
|
71
|
+
if (!link.target || typeof link.target !== 'string')
|
|
72
|
+
continue;
|
|
73
|
+
const linkedFile = this.getFirstLinkpathDest(link.target, relativePath);
|
|
74
|
+
if (linkedFile) {
|
|
75
|
+
this.db.updateLinkTarget(relativePath, link.position.start.offset, linkedFile.path, null);
|
|
62
76
|
}
|
|
63
|
-
// Update note with resolved links
|
|
64
|
-
note.links = linkIds;
|
|
65
|
-
this.db.upsertNote(note);
|
|
66
77
|
}
|
|
67
78
|
}
|
|
68
|
-
// Remove
|
|
69
|
-
const
|
|
70
|
-
for (const
|
|
71
|
-
if (!currentPaths.has(
|
|
72
|
-
this.db.
|
|
79
|
+
// Remove files that no longer exist in filesystem
|
|
80
|
+
const allFiles = this.db.getAllFiles();
|
|
81
|
+
for (const file of allFiles) {
|
|
82
|
+
if (!currentPaths.has(file.path)) {
|
|
83
|
+
this.db.deleteFile(file.path);
|
|
73
84
|
removed++;
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
87
|
return { added, updated, removed };
|
|
77
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Rapidly index a single file without a full vault scan.
|
|
91
|
+
* Useful for capture or real-time updates.
|
|
92
|
+
*/
|
|
93
|
+
indexSingleFile(relativePath) {
|
|
94
|
+
const fullPath = (0, path_1.join)(this._config.vaultPath, relativePath);
|
|
95
|
+
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
96
|
+
throw new Error(`File not found: ${fullPath}`);
|
|
97
|
+
}
|
|
98
|
+
const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
|
|
99
|
+
const hash = parser_js_1.NoteParser.computeHash(content);
|
|
100
|
+
const fileInfo = this.createFileInfo(relativePath, fullPath);
|
|
101
|
+
const parsed = parser_js_1.NoteParser.parse(content);
|
|
102
|
+
const contentMetadata = parser_js_1.NoteParser.parsedToContentMetadata(parsed, content);
|
|
103
|
+
this.db.upsertFile(fileInfo, hash);
|
|
104
|
+
this.db.upsertContentMetadata(relativePath, contentMetadata, hash);
|
|
105
|
+
// Resolve outlinks of this file immediately
|
|
106
|
+
for (const link of parsed.links) {
|
|
107
|
+
// Guard: skip links with undefined/non-string targets (e.g. from template placeholders)
|
|
108
|
+
if (!link.target || typeof link.target !== 'string')
|
|
109
|
+
continue;
|
|
110
|
+
const linkedFile = this.getFirstLinkpathDest(link.target, relativePath);
|
|
111
|
+
if (linkedFile) {
|
|
112
|
+
this.db.updateLinkTarget(relativePath, link.position.start.offset, linkedFile.path, null);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
78
116
|
findMarkdownFiles() {
|
|
79
117
|
const files = [];
|
|
80
118
|
const excludeDirs = ['.git', '.secondbrain', 'node_modules'];
|
|
@@ -83,60 +121,46 @@ class VaultManager {
|
|
|
83
121
|
for (const entry of entries) {
|
|
84
122
|
const fullPath = (0, path_1.join)(dir, entry.name);
|
|
85
123
|
if (entry.isDirectory() && !excludeDirs.includes(entry.name)) {
|
|
86
|
-
|
|
124
|
+
// Skip symlinked directories to avoid cycles and duplicate traversal
|
|
125
|
+
if (!entry.isSymbolicLink()) {
|
|
126
|
+
walk(fullPath);
|
|
127
|
+
}
|
|
87
128
|
}
|
|
88
129
|
else if (entry.isFile() && (0, path_1.extname)(entry.name) === '.md') {
|
|
89
130
|
files.push(fullPath);
|
|
90
131
|
}
|
|
91
132
|
}
|
|
92
133
|
};
|
|
93
|
-
walk(this.
|
|
134
|
+
walk(this._config.vaultPath);
|
|
94
135
|
return files;
|
|
95
136
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Create FileInfo from file path and stats.
|
|
139
|
+
* Separates file system information from content parsing.
|
|
140
|
+
*/
|
|
141
|
+
createFileInfo(relativePath, fullPath) {
|
|
99
142
|
const stats = (0, fs_1.statSync)(fullPath);
|
|
143
|
+
const ext = (0, path_1.extname)(relativePath) || '.md';
|
|
144
|
+
const name = (0, path_1.basename)(relativePath);
|
|
145
|
+
const basenameWithoutExt = (0, path_1.basename)(relativePath, ext) || (0, path_1.basename)(relativePath);
|
|
146
|
+
const parentDir = (0, path_1.dirname)(relativePath);
|
|
147
|
+
const parent = parentDir === '.' ? null : parentDir;
|
|
100
148
|
return {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
modifiedAt: stats.mtime.toISOString()
|
|
149
|
+
path: relativePath,
|
|
150
|
+
name,
|
|
151
|
+
basename: basenameWithoutExt,
|
|
152
|
+
extension: ext.replace(/^\./, ''), // Remove leading dot
|
|
153
|
+
parent,
|
|
154
|
+
stat: {
|
|
155
|
+
ctime: stats.birthtimeMs,
|
|
156
|
+
mtime: stats.mtimeMs,
|
|
157
|
+
size: stats.size
|
|
158
|
+
}
|
|
112
159
|
};
|
|
113
160
|
}
|
|
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
161
|
// Write note to file
|
|
138
162
|
writeNote(path, content) {
|
|
139
|
-
const fullPath = (0, path_1.join)(this.
|
|
163
|
+
const fullPath = (0, path_1.join)(this._config.vaultPath, path);
|
|
140
164
|
// Ensure directory exists
|
|
141
165
|
const dir = (0, path_1.dirname)(fullPath);
|
|
142
166
|
if (!(0, fs_1.existsSync)(dir)) {
|
|
@@ -145,7 +169,7 @@ class VaultManager {
|
|
|
145
169
|
(0, fs_1.writeFileSync)(fullPath, content, 'utf-8');
|
|
146
170
|
}
|
|
147
171
|
readNote(path) {
|
|
148
|
-
const fullPath = (0, path_1.join)(this.
|
|
172
|
+
const fullPath = (0, path_1.join)(this._config.vaultPath, path);
|
|
149
173
|
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
150
174
|
return null;
|
|
151
175
|
}
|
|
@@ -157,37 +181,177 @@ class VaultManager {
|
|
|
157
181
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
158
182
|
const day = String(date.getDate()).padStart(2, '0');
|
|
159
183
|
const dateStr = `${year}-${month}-${day}`;
|
|
160
|
-
return (0, path_1.join)(this.
|
|
184
|
+
return (0, path_1.join)(this._config.dailyNotesFolder, `${dateStr}.md`);
|
|
161
185
|
}
|
|
162
186
|
// Get template path
|
|
163
187
|
getTemplatePath(templateName) {
|
|
164
|
-
return (0, path_1.join)(this.
|
|
165
|
-
}
|
|
166
|
-
// Database proxy methods
|
|
167
|
-
getNoteById(id) {
|
|
168
|
-
return this.db.getNoteById(id);
|
|
188
|
+
return (0, path_1.join)(this._config.templatesFolder, `${templateName}.md`);
|
|
169
189
|
}
|
|
170
|
-
|
|
171
|
-
return this.db.
|
|
190
|
+
getStats() {
|
|
191
|
+
return this.db.getStats();
|
|
172
192
|
}
|
|
173
|
-
|
|
174
|
-
|
|
193
|
+
// New structure (files + content_metadata + links_with_positions)
|
|
194
|
+
getBacklinksByPath(filePath) {
|
|
195
|
+
return this.db.getBacklinksByPath(filePath);
|
|
175
196
|
}
|
|
176
|
-
|
|
177
|
-
return this.db.
|
|
197
|
+
getOutlinksByPath(filePath) {
|
|
198
|
+
return this.db.getOutlinksByPath(filePath);
|
|
178
199
|
}
|
|
179
|
-
|
|
180
|
-
return this.db.
|
|
200
|
+
getOrphanFiles() {
|
|
201
|
+
return this.db.getOrphanFiles();
|
|
181
202
|
}
|
|
182
|
-
|
|
183
|
-
return this.db.
|
|
203
|
+
searchFiles(query, tags, limit = 20, pathPrefix, linksToPath, headingQuery, modifiedAfter, modifiedBefore) {
|
|
204
|
+
return this.db.searchFiles(query, tags, limit, pathPrefix, linksToPath, headingQuery, modifiedAfter, modifiedBefore);
|
|
184
205
|
}
|
|
185
206
|
getGraphData() {
|
|
186
207
|
return this.db.getGraphData();
|
|
187
208
|
}
|
|
188
|
-
//
|
|
189
|
-
|
|
190
|
-
|
|
209
|
+
// Obsidian-style API methods
|
|
210
|
+
/**
|
|
211
|
+
* Get all markdown files in the vault (Obsidian-style API).
|
|
212
|
+
* Equivalent to Obsidian's Vault.getMarkdownFiles().
|
|
213
|
+
* @returns Array of FileInfo for every .md file in the vault
|
|
214
|
+
*/
|
|
215
|
+
getMarkdownFiles() {
|
|
216
|
+
return this.db.getAllFiles();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get FileInfo by path (Obsidian-style API).
|
|
220
|
+
* @param path Relative path from vault root
|
|
221
|
+
* @returns FileInfo or null if not found
|
|
222
|
+
*/
|
|
223
|
+
getFileByPath(path) {
|
|
224
|
+
return this.db.getFileByPath(path);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Resolve path or basename to FileInfo using new structure only.
|
|
228
|
+
* Tries exact path, path + .md, then match by basename.
|
|
229
|
+
*/
|
|
230
|
+
resolvePathOrBasename(pathOrBasename) {
|
|
231
|
+
let file = this.db.getFileByPath(pathOrBasename);
|
|
232
|
+
if (file)
|
|
233
|
+
return file;
|
|
234
|
+
if (!pathOrBasename.endsWith('.md')) {
|
|
235
|
+
file = this.db.getFileByPath(pathOrBasename + '.md');
|
|
236
|
+
if (file)
|
|
237
|
+
return file;
|
|
238
|
+
}
|
|
239
|
+
const base = pathOrBasename.replace(/\.md$/i, '');
|
|
240
|
+
return this.db.getFileByBasename(base);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Read file content by FileInfo (Obsidian-style API).
|
|
244
|
+
* Equivalent to Obsidian's Vault.read(file).
|
|
245
|
+
* @param file FileInfo object
|
|
246
|
+
* @returns File content or null if not found
|
|
247
|
+
*/
|
|
248
|
+
readFile(file) {
|
|
249
|
+
return this.readNote(file.path);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get backlinks for a file by FileInfo (Obsidian-style API).
|
|
253
|
+
* Equivalent to Obsidian's MetadataCache.getBacklinksForFile(file).
|
|
254
|
+
* @param file FileInfo object
|
|
255
|
+
* @returns Array of FileInfo that link to this file
|
|
256
|
+
*/
|
|
257
|
+
getBacklinksForFile(file) {
|
|
258
|
+
return this.getBacklinksByPath(file.path);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get ContentMetadata for a FileInfo (Obsidian-style API).
|
|
262
|
+
* Equivalent to Obsidian's MetadataCache.getFileCache(file).
|
|
263
|
+
* @param file FileInfo object
|
|
264
|
+
* @returns ContentMetadata or null if not found
|
|
265
|
+
*/
|
|
266
|
+
getFileCache(file) {
|
|
267
|
+
return this.db.getContentMetadata(file.path);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Resolve a linkpath to a FileInfo (Obsidian-style API).
|
|
271
|
+
* Equivalent to Obsidian's MetadataCache.getFirstLinkpathDest(linkpath, sourcePath).
|
|
272
|
+
* Resolves linkpaths like "note-name", "folder/note-name", "note-name#heading", etc.
|
|
273
|
+
* @param linkpath Link path (may include heading/block reference after #)
|
|
274
|
+
* @param sourcePath Path of the source file (for relative path resolution)
|
|
275
|
+
* @returns FileInfo or null if not found
|
|
276
|
+
*/
|
|
277
|
+
getFirstLinkpathDest(linkpath, sourcePath) {
|
|
278
|
+
// Guard: reject undefined, null, or non-string values (e.g. from template placeholders in frontmatter)
|
|
279
|
+
if (!linkpath || typeof linkpath !== 'string')
|
|
280
|
+
return null;
|
|
281
|
+
// Strip heading/block reference (everything after #)
|
|
282
|
+
const filePart = linkpath.split('#')[0].trim();
|
|
283
|
+
if (!filePart)
|
|
284
|
+
return null;
|
|
285
|
+
// Try exact path match first
|
|
286
|
+
let file = this.db.getFileByPath(filePart);
|
|
287
|
+
if (file)
|
|
288
|
+
return file;
|
|
289
|
+
// Try with .md extension
|
|
290
|
+
file = this.db.getFileByPath(filePart + '.md');
|
|
291
|
+
if (file)
|
|
292
|
+
return file;
|
|
293
|
+
// Try relative to source file's directory
|
|
294
|
+
if (sourcePath) {
|
|
295
|
+
const sourceDir = (0, path_1.dirname)(sourcePath);
|
|
296
|
+
const relativePath = sourceDir === '.' ? filePart : (0, path_1.join)(sourceDir, filePart);
|
|
297
|
+
file = this.db.getFileByPath(relativePath);
|
|
298
|
+
if (file)
|
|
299
|
+
return file;
|
|
300
|
+
// Try relative path with .md extension
|
|
301
|
+
file = this.db.getFileByPath(relativePath + '.md');
|
|
302
|
+
if (file)
|
|
303
|
+
return file;
|
|
304
|
+
}
|
|
305
|
+
// Try path variations (spaces to dashes/underscores)
|
|
306
|
+
const variations = [
|
|
307
|
+
filePart.replace(/ /g, '-') + '.md',
|
|
308
|
+
filePart.replace(/ /g, '_') + '.md',
|
|
309
|
+
filePart.replace(/ /g, '-'),
|
|
310
|
+
filePart.replace(/ /g, '_')
|
|
311
|
+
];
|
|
312
|
+
for (const variation of variations) {
|
|
313
|
+
file = this.db.getFileByPath(variation);
|
|
314
|
+
if (file)
|
|
315
|
+
return file;
|
|
316
|
+
}
|
|
317
|
+
// Try finding by basename (filename without extension)
|
|
318
|
+
// This matches Obsidian's behavior of finding files by title
|
|
319
|
+
const basenameToMatch = filePart.replace(/\.md$/, '');
|
|
320
|
+
return this.db.getFileByBasename(basenameToMatch);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Resolve a linkpath to a file and position (line, col) for editor navigation.
|
|
324
|
+
* Supports note, note#heading, note#^block-id, and note#heading#^block-id.
|
|
325
|
+
* @returns { path, line, col } (1-based) or null if file not found
|
|
326
|
+
*/
|
|
327
|
+
resolveLinkToPosition(linkpath, sourcePath) {
|
|
328
|
+
const parts = linkpath.split('#').map(p => p.trim());
|
|
329
|
+
const filePart = parts[0];
|
|
330
|
+
if (!filePart)
|
|
331
|
+
return null;
|
|
332
|
+
const file = this.getFirstLinkpathDest(filePart, sourcePath);
|
|
333
|
+
if (!file)
|
|
334
|
+
return null;
|
|
335
|
+
const fragments = parts.slice(1);
|
|
336
|
+
if (fragments.length === 0) {
|
|
337
|
+
return { path: file.path, line: 1, col: 1 };
|
|
338
|
+
}
|
|
339
|
+
const last = fragments[fragments.length - 1];
|
|
340
|
+
const blockId = last.startsWith('^') ? last.slice(1) : null;
|
|
341
|
+
const headingFragment = blockId && fragments.length > 1
|
|
342
|
+
? fragments.slice(0, -1).join(' ')
|
|
343
|
+
: fragments.join(' ');
|
|
344
|
+
if (blockId) {
|
|
345
|
+
const pos = this.db.getBlockPosition(file.path, blockId);
|
|
346
|
+
if (pos)
|
|
347
|
+
return { path: file.path, ...pos };
|
|
348
|
+
}
|
|
349
|
+
if (headingFragment) {
|
|
350
|
+
const pos = this.db.getHeadingPosition(file.path, headingFragment);
|
|
351
|
+
if (pos)
|
|
352
|
+
return { path: file.path, ...pos };
|
|
353
|
+
}
|
|
354
|
+
return { path: file.path, line: 1, col: 1 };
|
|
191
355
|
}
|
|
192
356
|
}
|
|
193
357
|
exports.VaultManager = VaultManager;
|
package/dist/utils/vault.js.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.1.2",
|
|
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
|
},
|