@lapis-notes/api 0.1.3 → 0.1.4

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.
@@ -0,0 +1,197 @@
1
+ function filePath(path) {
2
+ if (typeof path !== "string" || /[\\\0]/u.test(path))
3
+ throw new Error("Editing sessions require a vault-relative file path");
4
+ const parts = path
5
+ .replace(/^\/+/, "")
6
+ .split("/")
7
+ .filter((part) => part !== "." && part !== "");
8
+ if (!parts.length || parts.some((part) => part === ".."))
9
+ throw new Error("Editing sessions require a vault-relative file path");
10
+ return parts.join("/");
11
+ }
12
+ function throwFailures(errors) {
13
+ if (errors.length === 1)
14
+ throw errors[0];
15
+ if (errors.length)
16
+ throw new AggregateError(errors, "File editing-session cleanup failed");
17
+ }
18
+ function failures(results) {
19
+ return results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
20
+ }
21
+ /**
22
+ * An App-owned persistence and protection boundary for independent file writers.
23
+ * Hosts must register every writer before selecting this as an apply guard.
24
+ */
25
+ export class FileEditingSessionRegistry {
26
+ #sessions = new Map();
27
+ #barriers = new Map();
28
+ #releases = new Set();
29
+ #held = new Set();
30
+ #tail = Promise.resolve();
31
+ #closing = false;
32
+ #closed = false;
33
+ #disposal;
34
+ register(path, session) {
35
+ this.#assertOpen();
36
+ const capturedPath = filePath(path);
37
+ if ([...this.#barriers.values()].some((scope) => scope === undefined || scope === capturedPath))
38
+ throw new Error(`File editing is protected: ${capturedPath}`);
39
+ if (!session ||
40
+ typeof session.flush !== "function" ||
41
+ typeof session.protect !== "function" ||
42
+ typeof session.dirty !== "boolean")
43
+ throw new Error("Invalid file editing session");
44
+ let entry = this.#sessions.get(session);
45
+ if (entry && entry.path !== capturedPath)
46
+ throw new Error("An editing session cannot change its registered file");
47
+ if (!entry) {
48
+ entry = { path: capturedPath, session, references: 0 };
49
+ this.#sessions.set(session, entry);
50
+ }
51
+ entry.references++;
52
+ let registered = true;
53
+ return () => {
54
+ if (!registered)
55
+ return;
56
+ registered = false;
57
+ entry.references--;
58
+ this.#prune(entry);
59
+ };
60
+ }
61
+ /** Flush the captured sessions; protection is required for mutation admission. */
62
+ async flush(path) {
63
+ this.#assertOpen();
64
+ const scope = path === undefined ? undefined : filePath(path);
65
+ return this.#enqueue(async () => {
66
+ const entries = this.#matching(scope);
67
+ const results = await Promise.allSettled(entries.map(async (entry) => {
68
+ await entry.session.flush();
69
+ if (entry.session.dirty)
70
+ throw new Error(`File editing session remains dirty: ${entry.path}`);
71
+ this.#prune(entry);
72
+ }));
73
+ throwFailures(failures(results));
74
+ return {
75
+ flushed: entries.length > 0,
76
+ ...(scope === undefined ? {} : { path: scope }),
77
+ };
78
+ });
79
+ }
80
+ /**
81
+ * Serialize mutations, holding matching sessions protected throughout the callback.
82
+ * Callbacks and session methods must not re-enter queued registry operations.
83
+ */
84
+ guard(path, operation) {
85
+ try {
86
+ this.#assertOpen();
87
+ const scope = path === undefined ? undefined : filePath(path);
88
+ return this.#enqueue(() => this.#guard(scope, operation));
89
+ }
90
+ catch (error) {
91
+ return Promise.reject(error);
92
+ }
93
+ }
94
+ /** Stop admission immediately, drain callbacks and retry failed persistence/cleanup. */
95
+ dispose() {
96
+ if (this.#disposal)
97
+ return this.#disposal;
98
+ this.#closing = true;
99
+ this.#disposal = (async () => {
100
+ await this.#tail;
101
+ if (this.#closed)
102
+ return;
103
+ await this.#guard(undefined, async () => undefined, true);
104
+ this.#sessions.clear();
105
+ this.#closed = true;
106
+ })();
107
+ // Keep closure permanent, but allow explicitly requested cleanup retries.
108
+ void this.#disposal.catch(() => {
109
+ this.#disposal = undefined;
110
+ });
111
+ return this.#disposal;
112
+ }
113
+ #assertOpen() {
114
+ if (this.#closing)
115
+ throw new Error("File editing-session registry is closed");
116
+ }
117
+ #enqueue(operation) {
118
+ const run = this.#tail.then(() => {
119
+ this.#assertOpen();
120
+ return operation();
121
+ });
122
+ this.#tail = run.then(() => undefined, () => undefined);
123
+ return run;
124
+ }
125
+ #matching(path) {
126
+ return [...this.#sessions.values()].filter((entry) => path === undefined || entry.path === path);
127
+ }
128
+ #prune(entry) {
129
+ // A detached writer's failed or in-flight persistence remains a barrier.
130
+ if (entry.references ||
131
+ this.#held.has(entry) ||
132
+ this.#sessions.get(entry.session) !== entry)
133
+ return;
134
+ try {
135
+ if (!entry.session.dirty)
136
+ this.#sessions.delete(entry.session);
137
+ }
138
+ catch {
139
+ // A failing dirty-state getter must not silently remove a writer.
140
+ }
141
+ }
142
+ async #release(pending) {
143
+ const results = await Promise.allSettled(pending.map(async (lease) => {
144
+ await lease.release();
145
+ this.#releases.delete(lease);
146
+ this.#held.delete(lease.entry);
147
+ this.#prune(lease.entry);
148
+ }));
149
+ for (const barrier of this.#barriers.keys())
150
+ if (![...this.#releases].some((lease) => lease.barrier === barrier))
151
+ this.#barriers.delete(barrier);
152
+ return failures(results);
153
+ }
154
+ async #guard(path, operation, shutdown = false) {
155
+ // A previous release failure must be repaired before another mutation starts.
156
+ throwFailures(await this.#release([...this.#releases]));
157
+ const barrier = {};
158
+ this.#barriers.set(barrier, path);
159
+ const entries = this.#matching(path);
160
+ for (const entry of entries)
161
+ this.#held.add(entry);
162
+ let result;
163
+ const errors = [];
164
+ try {
165
+ const protectedEntries = [];
166
+ const admission = await Promise.allSettled(entries.map(async (entry) => {
167
+ const release = await entry.session.protect();
168
+ if (typeof release !== "function")
169
+ throw new Error("Invalid editing-session protection release");
170
+ this.#releases.add({ barrier, entry, release });
171
+ protectedEntries.push(entry);
172
+ }));
173
+ const saved = await Promise.allSettled(protectedEntries.map(async (entry) => {
174
+ await entry.session.flush();
175
+ if (entry.session.dirty)
176
+ throw new Error(`File editing session remains dirty: ${entry.path}`);
177
+ this.#prune(entry);
178
+ }));
179
+ throwFailures([...failures(admission), ...failures(saved)]);
180
+ if (!shutdown)
181
+ this.#assertOpen();
182
+ result = await operation();
183
+ }
184
+ catch (error) {
185
+ errors.push(error);
186
+ }
187
+ errors.push(...(await this.#release([...this.#releases].filter((lease) => lease.barrier === barrier))));
188
+ for (const entry of entries) {
189
+ if (![...this.#releases].some((lease) => lease.entry === entry)) {
190
+ this.#held.delete(entry);
191
+ this.#prune(entry);
192
+ }
193
+ }
194
+ throwFailures(errors);
195
+ return result;
196
+ }
197
+ }
@@ -41,6 +41,7 @@ export declare class FileManager {
41
41
  * @public
42
42
  */
43
43
  renameFile(file: TAbstractFile, newPath: string): Promise<void>;
44
+ private renameProtectedFile;
44
45
  /**
45
46
  * Remove a file or a folder from the vault according the user's preferred
46
47
  * 'trash' options (either moving the file to .trash/ or the OS trash bin).
@@ -173,6 +173,14 @@ export class FileManager {
173
173
  * @public
174
174
  */
175
175
  async renameFile(file, newPath) {
176
+ const capturedPath = file.path;
177
+ await this.app.fileEditingSessions.guard(undefined, async () => {
178
+ if (file.path !== capturedPath)
179
+ throw new Error("Rename target changed during editor admission");
180
+ await this.renameProtectedFile(file, newPath);
181
+ });
182
+ }
183
+ async renameProtectedFile(file, newPath) {
176
184
  if (!(file instanceof TFile)) {
177
185
  return this.app.vault.rename(file, newPath);
178
186
  }
@@ -137,7 +137,7 @@ export declare const pluginHostModuleRegistry: {
137
137
  readonly public: true;
138
138
  readonly source: "package-json-export";
139
139
  readonly specifier: "@lapis-notes/api";
140
- readonly version: "0.1.3";
140
+ readonly version: "0.1.4";
141
141
  };
142
142
  readonly "@lapis-notes/api/agent-skills": {
143
143
  readonly entry: "@lapis-notes/api/agent-skills";
@@ -147,7 +147,7 @@ export declare const pluginHostModuleRegistry: {
147
147
  readonly public: true;
148
148
  readonly source: "package-json-export";
149
149
  readonly specifier: "@lapis-notes/api/agent-skills";
150
- readonly version: "0.1.3";
150
+ readonly version: "0.1.4";
151
151
  };
152
152
  readonly "@lapis-notes/api/agent-tools": {
153
153
  readonly entry: "@lapis-notes/api/agent-tools";
@@ -157,7 +157,7 @@ export declare const pluginHostModuleRegistry: {
157
157
  readonly public: true;
158
158
  readonly source: "package-json-export";
159
159
  readonly specifier: "@lapis-notes/api/agent-tools";
160
- readonly version: "0.1.3";
160
+ readonly version: "0.1.4";
161
161
  };
162
162
  readonly "@lapis-notes/api/app-database": {
163
163
  readonly entry: "@lapis-notes/api/app-database";
@@ -167,7 +167,7 @@ export declare const pluginHostModuleRegistry: {
167
167
  readonly public: true;
168
168
  readonly source: "package-json-export";
169
169
  readonly specifier: "@lapis-notes/api/app-database";
170
- readonly version: "0.1.3";
170
+ readonly version: "0.1.4";
171
171
  };
172
172
  readonly "@lapis-notes/api/build/vite": {
173
173
  readonly entry: "@lapis-notes/api/build/vite";
@@ -177,7 +177,7 @@ export declare const pluginHostModuleRegistry: {
177
177
  readonly public: true;
178
178
  readonly source: "package-json-export";
179
179
  readonly specifier: "@lapis-notes/api/build/vite";
180
- readonly version: "0.1.3";
180
+ readonly version: "0.1.4";
181
181
  };
182
182
  readonly "@lapis-notes/api/cache": {
183
183
  readonly entry: "@lapis-notes/api/cache";
@@ -187,7 +187,7 @@ export declare const pluginHostModuleRegistry: {
187
187
  readonly public: true;
188
188
  readonly source: "package-json-export";
189
189
  readonly specifier: "@lapis-notes/api/cache";
190
- readonly version: "0.1.3";
190
+ readonly version: "0.1.4";
191
191
  };
192
192
  readonly "@lapis-notes/api/copy-button": {
193
193
  readonly entry: "@lapis-notes/api/copy-button";
@@ -197,7 +197,7 @@ export declare const pluginHostModuleRegistry: {
197
197
  readonly public: true;
198
198
  readonly source: "package-json-export";
199
199
  readonly specifier: "@lapis-notes/api/copy-button";
200
- readonly version: "0.1.3";
200
+ readonly version: "0.1.4";
201
201
  };
202
202
  readonly "@lapis-notes/api/desktop-native": {
203
203
  readonly entry: "@lapis-notes/api/desktop-native";
@@ -207,7 +207,7 @@ export declare const pluginHostModuleRegistry: {
207
207
  readonly public: true;
208
208
  readonly source: "package-json-export";
209
209
  readonly specifier: "@lapis-notes/api/desktop-native";
210
- readonly version: "0.1.3";
210
+ readonly version: "0.1.4";
211
211
  };
212
212
  readonly "@lapis-notes/api/editor": {
213
213
  readonly defaultExport: true;
@@ -218,7 +218,7 @@ export declare const pluginHostModuleRegistry: {
218
218
  readonly public: true;
219
219
  readonly source: "package-json-export";
220
220
  readonly specifier: "@lapis-notes/api/editor";
221
- readonly version: "0.1.3";
221
+ readonly version: "0.1.4";
222
222
  };
223
223
  readonly "@lapis-notes/api/editor/core": {
224
224
  readonly entry: "@lapis-notes/api/editor/core";
@@ -228,7 +228,7 @@ export declare const pluginHostModuleRegistry: {
228
228
  readonly public: true;
229
229
  readonly source: "package-json-export";
230
230
  readonly specifier: "@lapis-notes/api/editor/core";
231
- readonly version: "0.1.3";
231
+ readonly version: "0.1.4";
232
232
  };
233
233
  readonly "@lapis-notes/api/editor/extensions/autocomplete": {
234
234
  readonly entry: "@lapis-notes/api/editor/extensions/autocomplete";
@@ -238,7 +238,7 @@ export declare const pluginHostModuleRegistry: {
238
238
  readonly public: true;
239
239
  readonly source: "package-json-export";
240
240
  readonly specifier: "@lapis-notes/api/editor/extensions/autocomplete";
241
- readonly version: "0.1.3";
241
+ readonly version: "0.1.4";
242
242
  };
243
243
  readonly "@lapis-notes/api/editor/extensions/class-highlighter": {
244
244
  readonly entry: "@lapis-notes/api/editor/extensions/class-highlighter";
@@ -248,7 +248,7 @@ export declare const pluginHostModuleRegistry: {
248
248
  readonly public: true;
249
249
  readonly source: "package-json-export";
250
250
  readonly specifier: "@lapis-notes/api/editor/extensions/class-highlighter";
251
- readonly version: "0.1.3";
251
+ readonly version: "0.1.4";
252
252
  };
253
253
  readonly "@lapis-notes/api/editor/extensions/fold-gutter": {
254
254
  readonly entry: "@lapis-notes/api/editor/extensions/fold-gutter";
@@ -258,7 +258,7 @@ export declare const pluginHostModuleRegistry: {
258
258
  readonly public: true;
259
259
  readonly source: "package-json-export";
260
260
  readonly specifier: "@lapis-notes/api/editor/extensions/fold-gutter";
261
- readonly version: "0.1.3";
261
+ readonly version: "0.1.4";
262
262
  };
263
263
  readonly "@lapis-notes/api/editor/extensions/gutter-line-style-sync": {
264
264
  readonly entry: "@lapis-notes/api/editor/extensions/gutter-line-style-sync";
@@ -268,7 +268,7 @@ export declare const pluginHostModuleRegistry: {
268
268
  readonly public: true;
269
269
  readonly source: "package-json-export";
270
270
  readonly specifier: "@lapis-notes/api/editor/extensions/gutter-line-style-sync";
271
- readonly version: "0.1.3";
271
+ readonly version: "0.1.4";
272
272
  };
273
273
  readonly "@lapis-notes/api/editor/extensions/lint": {
274
274
  readonly entry: "@lapis-notes/api/editor/extensions/lint";
@@ -278,7 +278,7 @@ export declare const pluginHostModuleRegistry: {
278
278
  readonly public: true;
279
279
  readonly source: "package-json-export";
280
280
  readonly specifier: "@lapis-notes/api/editor/extensions/lint";
281
- readonly version: "0.1.3";
281
+ readonly version: "0.1.4";
282
282
  };
283
283
  readonly "@lapis-notes/api/editor/extensions/search": {
284
284
  readonly entry: "@lapis-notes/api/editor/extensions/search";
@@ -288,7 +288,7 @@ export declare const pluginHostModuleRegistry: {
288
288
  readonly public: true;
289
289
  readonly source: "package-json-export";
290
290
  readonly specifier: "@lapis-notes/api/editor/extensions/search";
291
- readonly version: "0.1.3";
291
+ readonly version: "0.1.4";
292
292
  };
293
293
  readonly "@lapis-notes/api/editor/language-service": {
294
294
  readonly entry: "@lapis-notes/api/editor/language-service";
@@ -298,7 +298,7 @@ export declare const pluginHostModuleRegistry: {
298
298
  readonly public: true;
299
299
  readonly source: "package-json-export";
300
300
  readonly specifier: "@lapis-notes/api/editor/language-service";
301
- readonly version: "0.1.3";
301
+ readonly version: "0.1.4";
302
302
  };
303
303
  readonly "@lapis-notes/api/empty-view": {
304
304
  readonly entry: "@lapis-notes/api/empty-view";
@@ -308,7 +308,7 @@ export declare const pluginHostModuleRegistry: {
308
308
  readonly public: true;
309
309
  readonly source: "package-json-export";
310
310
  readonly specifier: "@lapis-notes/api/empty-view";
311
- readonly version: "0.1.3";
311
+ readonly version: "0.1.4";
312
312
  };
313
313
  readonly "@lapis-notes/api/icon": {
314
314
  readonly entry: "@lapis-notes/api/icon";
@@ -318,7 +318,7 @@ export declare const pluginHostModuleRegistry: {
318
318
  readonly public: true;
319
319
  readonly source: "package-json-export";
320
320
  readonly specifier: "@lapis-notes/api/icon";
321
- readonly version: "0.1.3";
321
+ readonly version: "0.1.4";
322
322
  };
323
323
  readonly "@lapis-notes/api/language-service": {
324
324
  readonly entry: "@lapis-notes/api/language-service";
@@ -328,7 +328,7 @@ export declare const pluginHostModuleRegistry: {
328
328
  readonly public: true;
329
329
  readonly source: "package-json-export";
330
330
  readonly specifier: "@lapis-notes/api/language-service";
331
- readonly version: "0.1.3";
331
+ readonly version: "0.1.4";
332
332
  };
333
333
  readonly "@lapis-notes/api/language-service/worker": {
334
334
  readonly entry: "@lapis-notes/api/language-service/worker";
@@ -338,7 +338,7 @@ export declare const pluginHostModuleRegistry: {
338
338
  readonly public: true;
339
339
  readonly source: "package-json-export";
340
340
  readonly specifier: "@lapis-notes/api/language-service/worker";
341
- readonly version: "0.1.3";
341
+ readonly version: "0.1.4";
342
342
  };
343
343
  readonly "@lapis-notes/api/menu": {
344
344
  readonly defaultExport: true;
@@ -349,7 +349,17 @@ export declare const pluginHostModuleRegistry: {
349
349
  readonly public: true;
350
350
  readonly source: "package-json-export";
351
351
  readonly specifier: "@lapis-notes/api/menu";
352
- readonly version: "0.1.3";
352
+ readonly version: "0.1.4";
353
+ };
354
+ readonly "@lapis-notes/api/metadata-store": {
355
+ readonly entry: "@lapis-notes/api/metadata-store";
356
+ readonly moduleId: "lapis-notes-api-metadata-store";
357
+ readonly packageName: "@lapis-notes/api";
358
+ readonly platforms: readonly [];
359
+ readonly public: true;
360
+ readonly source: "package-json-export";
361
+ readonly specifier: "@lapis-notes/api/metadata-store";
362
+ readonly version: "0.1.4";
353
363
  };
354
364
  readonly "@lapis-notes/api/metadata-value": {
355
365
  readonly entry: "@lapis-notes/api/metadata-value";
@@ -359,7 +369,7 @@ export declare const pluginHostModuleRegistry: {
359
369
  readonly public: true;
360
370
  readonly source: "package-json-export";
361
371
  readonly specifier: "@lapis-notes/api/metadata-value";
362
- readonly version: "0.1.3";
372
+ readonly version: "0.1.4";
363
373
  };
364
374
  readonly "@lapis-notes/api/path": {
365
375
  readonly entry: "@lapis-notes/api/path";
@@ -369,7 +379,7 @@ export declare const pluginHostModuleRegistry: {
369
379
  readonly public: true;
370
380
  readonly source: "package-json-export";
371
381
  readonly specifier: "@lapis-notes/api/path";
372
- readonly version: "0.1.3";
382
+ readonly version: "0.1.4";
373
383
  };
374
384
  readonly "@lapis-notes/api/plugin-assets": {
375
385
  readonly entry: "@lapis-notes/api/plugin-assets";
@@ -379,7 +389,7 @@ export declare const pluginHostModuleRegistry: {
379
389
  readonly public: true;
380
390
  readonly source: "package-json-export";
381
391
  readonly specifier: "@lapis-notes/api/plugin-assets";
382
- readonly version: "0.1.3";
392
+ readonly version: "0.1.4";
383
393
  };
384
394
  readonly "@lapis-notes/api/plugin-distribution-host": {
385
395
  readonly entry: "@lapis-notes/api/plugin-distribution-host";
@@ -389,7 +399,7 @@ export declare const pluginHostModuleRegistry: {
389
399
  readonly public: true;
390
400
  readonly source: "package-json-export";
391
401
  readonly specifier: "@lapis-notes/api/plugin-distribution-host";
392
- readonly version: "0.1.3";
402
+ readonly version: "0.1.4";
393
403
  };
394
404
  readonly "@lapis-notes/api/plugin-host-modules": {
395
405
  readonly entry: "@lapis-notes/api/plugin-host-modules";
@@ -399,7 +409,7 @@ export declare const pluginHostModuleRegistry: {
399
409
  readonly public: true;
400
410
  readonly source: "package-json-export";
401
411
  readonly specifier: "@lapis-notes/api/plugin-host-modules";
402
- readonly version: "0.1.3";
412
+ readonly version: "0.1.4";
403
413
  };
404
414
  readonly "@lapis-notes/api/registry/schema": {
405
415
  readonly entry: "@lapis-notes/api/registry/schema";
@@ -409,7 +419,7 @@ export declare const pluginHostModuleRegistry: {
409
419
  readonly public: true;
410
420
  readonly source: "package-json-export";
411
421
  readonly specifier: "@lapis-notes/api/registry/schema";
412
- readonly version: "0.1.3";
422
+ readonly version: "0.1.4";
413
423
  };
414
424
  readonly "@lapis-notes/api/search-embedding-worker": {
415
425
  readonly entry: "@lapis-notes/api/search-embedding-worker";
@@ -419,7 +429,7 @@ export declare const pluginHostModuleRegistry: {
419
429
  readonly public: true;
420
430
  readonly source: "package-json-export";
421
431
  readonly specifier: "@lapis-notes/api/search-embedding-worker";
422
- readonly version: "0.1.3";
432
+ readonly version: "0.1.4";
423
433
  };
424
434
  readonly "@lapis-notes/api/select": {
425
435
  readonly entry: "@lapis-notes/api/select";
@@ -429,7 +439,7 @@ export declare const pluginHostModuleRegistry: {
429
439
  readonly public: true;
430
440
  readonly source: "package-json-export";
431
441
  readonly specifier: "@lapis-notes/api/select";
432
- readonly version: "0.1.3";
442
+ readonly version: "0.1.4";
433
443
  };
434
444
  readonly "@lapis-notes/api/server-host": {
435
445
  readonly entry: "@lapis-notes/api/server-host";
@@ -439,7 +449,27 @@ export declare const pluginHostModuleRegistry: {
439
449
  readonly public: true;
440
450
  readonly source: "package-json-export";
441
451
  readonly specifier: "@lapis-notes/api/server-host";
442
- readonly version: "0.1.3";
452
+ readonly version: "0.1.4";
453
+ };
454
+ readonly "@lapis-notes/api/sync-repository": {
455
+ readonly entry: "@lapis-notes/api/sync-repository";
456
+ readonly moduleId: "lapis-notes-api-sync-repository";
457
+ readonly packageName: "@lapis-notes/api";
458
+ readonly platforms: readonly ["web", "electron-renderer"];
459
+ readonly public: true;
460
+ readonly source: "package-json-export";
461
+ readonly specifier: "@lapis-notes/api/sync-repository";
462
+ readonly version: "0.1.4";
463
+ };
464
+ readonly "@lapis-notes/api/sync-security-host": {
465
+ readonly entry: "@lapis-notes/api/sync-security-host";
466
+ readonly moduleId: "lapis-notes-api-sync-security-host";
467
+ readonly packageName: "@lapis-notes/api";
468
+ readonly platforms: readonly [];
469
+ readonly public: true;
470
+ readonly source: "package-json-export";
471
+ readonly specifier: "@lapis-notes/api/sync-security-host";
472
+ readonly version: "0.1.4";
443
473
  };
444
474
  readonly "@lapis-notes/api/telemetry": {
445
475
  readonly entry: "@lapis-notes/api/telemetry";
@@ -449,7 +479,7 @@ export declare const pluginHostModuleRegistry: {
449
479
  readonly public: true;
450
480
  readonly source: "package-json-export";
451
481
  readonly specifier: "@lapis-notes/api/telemetry";
452
- readonly version: "0.1.3";
482
+ readonly version: "0.1.4";
453
483
  };
454
484
  readonly "@lapis-notes/api/vault": {
455
485
  readonly entry: "@lapis-notes/api/vault";
@@ -459,7 +489,7 @@ export declare const pluginHostModuleRegistry: {
459
489
  readonly public: true;
460
490
  readonly source: "package-json-export";
461
491
  readonly specifier: "@lapis-notes/api/vault";
462
- readonly version: "0.1.3";
492
+ readonly version: "0.1.4";
463
493
  };
464
494
  readonly "@lapis-notes/api/workspace-host": {
465
495
  readonly entry: "@lapis-notes/api/workspace-host";
@@ -469,7 +499,7 @@ export declare const pluginHostModuleRegistry: {
469
499
  readonly public: true;
470
500
  readonly source: "package-json-export";
471
501
  readonly specifier: "@lapis-notes/api/workspace-host";
472
- readonly version: "0.1.3";
502
+ readonly version: "0.1.4";
473
503
  };
474
504
  readonly "@lapis-notes/markdown": {
475
505
  readonly entry: "@lapis-notes/markdown";