@lapis-notes/api 0.2.6 → 0.2.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # @lapis-notes/api
2
2
 
3
+ ## 0.2.8
4
+
5
+ ### Patch Changes
6
+
7
+ - [#88](https://github.com/lapismd/lapis-notes/pull/88)
8
+ [`abe9a50`](https://github.com/lapismd/lapis-notes/commit/abe9a507050ef2bf39efcbdbc83c47162910bb45)
9
+ Thanks [@stevejuma](https://github.com/stevejuma)! - Keep external
10
+ plugin-configuration reloads observational so another App cannot race the
11
+ originating compatibility-data writer or create dirty native claims during
12
+ settings recovery.
13
+
14
+ - [#88](https://github.com/lapismd/lapis-notes/pull/88)
15
+ [`f47ca51`](https://github.com/lapismd/lapis-notes/commit/f47ca51d606cb91fc6f942d4ffcbd4429b30c093)
16
+ Thanks [@stevejuma](https://github.com/stevejuma)! - Keep app-state
17
+ directories out of recursive user-file watching and observe app configuration
18
+ through a dedicated leaf subscription, preserving direct configuration access
19
+ and lifecycle drain.
20
+
21
+ ## 0.2.7
22
+
23
+ ### Patch Changes
24
+
25
+ - [#85](https://github.com/lapismd/lapis-notes/pull/85)
26
+ [`8325b5e`](https://github.com/lapismd/lapis-notes/commit/8325b5eb7adef358ac577b457278a19637c13571)
27
+ Thanks [@stevejuma](https://github.com/stevejuma)! - Reuse scanned identities
28
+ during unchanged startup, exclude installed plugin assets from content
29
+ polling, avoid eagerly reading lazy ESM chunks, queue plugin operations with
30
+ independent progress and cancellation, and enable bundled AI by default on the
31
+ Rust server.
32
+
33
+ Renew the native AI feature session after disable/re-enable so startup
34
+ recovery cannot reuse a fenced session.
35
+
36
+ - [#82](https://github.com/lapismd/lapis-notes/pull/82)
37
+ [`e7b96fb`](https://github.com/lapismd/lapis-notes/commit/e7b96fb7f901c6ffff7e92815b29a82bea5c5264)
38
+ Thanks
39
+ [@lapismd-dependency-bot](https://github.com/apps/lapismd-dependency-bot)! -
40
+ Refresh first-party Lapis dependencies to the published versions recorded in
41
+ this pull request.
42
+ - Updated dependencies
43
+ [[`e7b96fb`](https://github.com/lapismd/lapis-notes/commit/e7b96fb7f901c6ffff7e92815b29a82bea5c5264)]:
44
+ - @lapis-notes/ui@0.1.8
45
+
3
46
  ## 0.2.6
4
47
 
5
48
  ### Patch Changes
@@ -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";
150
- readonly version: "0.2.6";
150
+ readonly version: "0.2.8";
151
151
  };
152
152
  readonly "@lapis-notes/api/agent-skills": {
153
153
  readonly entry: "@lapis-notes/api/agent-skills";
@@ -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-skills";
160
- readonly version: "0.2.6";
160
+ readonly version: "0.2.8";
161
161
  };
162
162
  readonly "@lapis-notes/api/agent-tools": {
163
163
  readonly entry: "@lapis-notes/api/agent-tools";
@@ -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/agent-tools";
170
- readonly version: "0.2.6";
170
+ readonly version: "0.2.8";
171
171
  };
172
172
  readonly "@lapis-notes/api/app-database": {
173
173
  readonly entry: "@lapis-notes/api/app-database";
@@ -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/app-database";
180
- readonly version: "0.2.6";
180
+ readonly version: "0.2.8";
181
181
  };
182
182
  readonly "@lapis-notes/api/build/vite": {
183
183
  readonly entry: "@lapis-notes/api/build/vite";
@@ -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/build/vite";
190
- readonly version: "0.2.6";
190
+ readonly version: "0.2.8";
191
191
  };
192
192
  readonly "@lapis-notes/api/cache": {
193
193
  readonly entry: "@lapis-notes/api/cache";
@@ -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/cache";
200
- readonly version: "0.2.6";
200
+ readonly version: "0.2.8";
201
201
  };
202
202
  readonly "@lapis-notes/api/copy-button": {
203
203
  readonly entry: "@lapis-notes/api/copy-button";
@@ -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/copy-button";
210
- readonly version: "0.2.6";
210
+ readonly version: "0.2.8";
211
211
  };
212
212
  readonly "@lapis-notes/api/desktop-native": {
213
213
  readonly entry: "@lapis-notes/api/desktop-native";
@@ -217,7 +217,7 @@ export declare const pluginHostModuleRegistry: {
217
217
  readonly public: true;
218
218
  readonly source: "package-json-export";
219
219
  readonly specifier: "@lapis-notes/api/desktop-native";
220
- readonly version: "0.2.6";
220
+ readonly version: "0.2.8";
221
221
  };
222
222
  readonly "@lapis-notes/api/editor": {
223
223
  readonly defaultExport: true;
@@ -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";
231
- readonly version: "0.2.6";
231
+ readonly version: "0.2.8";
232
232
  };
233
233
  readonly "@lapis-notes/api/editor/core": {
234
234
  readonly entry: "@lapis-notes/api/editor/core";
@@ -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/core";
241
- readonly version: "0.2.6";
241
+ readonly version: "0.2.8";
242
242
  };
243
243
  readonly "@lapis-notes/api/editor/extensions/autocomplete": {
244
244
  readonly entry: "@lapis-notes/api/editor/extensions/autocomplete";
@@ -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/autocomplete";
251
- readonly version: "0.2.6";
251
+ readonly version: "0.2.8";
252
252
  };
253
253
  readonly "@lapis-notes/api/editor/extensions/class-highlighter": {
254
254
  readonly entry: "@lapis-notes/api/editor/extensions/class-highlighter";
@@ -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/class-highlighter";
261
- readonly version: "0.2.6";
261
+ readonly version: "0.2.8";
262
262
  };
263
263
  readonly "@lapis-notes/api/editor/extensions/fold-gutter": {
264
264
  readonly entry: "@lapis-notes/api/editor/extensions/fold-gutter";
@@ -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/fold-gutter";
271
- readonly version: "0.2.6";
271
+ readonly version: "0.2.8";
272
272
  };
273
273
  readonly "@lapis-notes/api/editor/extensions/gutter-line-style-sync": {
274
274
  readonly entry: "@lapis-notes/api/editor/extensions/gutter-line-style-sync";
@@ -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/gutter-line-style-sync";
281
- readonly version: "0.2.6";
281
+ readonly version: "0.2.8";
282
282
  };
283
283
  readonly "@lapis-notes/api/editor/extensions/lint": {
284
284
  readonly entry: "@lapis-notes/api/editor/extensions/lint";
@@ -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/lint";
291
- readonly version: "0.2.6";
291
+ readonly version: "0.2.8";
292
292
  };
293
293
  readonly "@lapis-notes/api/editor/extensions/search": {
294
294
  readonly entry: "@lapis-notes/api/editor/extensions/search";
@@ -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/extensions/search";
301
- readonly version: "0.2.6";
301
+ readonly version: "0.2.8";
302
302
  };
303
303
  readonly "@lapis-notes/api/editor/language-service": {
304
304
  readonly entry: "@lapis-notes/api/editor/language-service";
@@ -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/editor/language-service";
311
- readonly version: "0.2.6";
311
+ readonly version: "0.2.8";
312
312
  };
313
313
  readonly "@lapis-notes/api/empty-view": {
314
314
  readonly entry: "@lapis-notes/api/empty-view";
@@ -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/empty-view";
321
- readonly version: "0.2.6";
321
+ readonly version: "0.2.8";
322
322
  };
323
323
  readonly "@lapis-notes/api/icon": {
324
324
  readonly entry: "@lapis-notes/api/icon";
@@ -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/icon";
331
- readonly version: "0.2.6";
331
+ readonly version: "0.2.8";
332
332
  };
333
333
  readonly "@lapis-notes/api/language-service": {
334
334
  readonly entry: "@lapis-notes/api/language-service";
@@ -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";
341
- readonly version: "0.2.6";
341
+ readonly version: "0.2.8";
342
342
  };
343
343
  readonly "@lapis-notes/api/language-service/worker": {
344
344
  readonly entry: "@lapis-notes/api/language-service/worker";
@@ -348,7 +348,7 @@ export declare const pluginHostModuleRegistry: {
348
348
  readonly public: true;
349
349
  readonly source: "package-json-export";
350
350
  readonly specifier: "@lapis-notes/api/language-service/worker";
351
- readonly version: "0.2.6";
351
+ readonly version: "0.2.8";
352
352
  };
353
353
  readonly "@lapis-notes/api/menu": {
354
354
  readonly defaultExport: true;
@@ -359,7 +359,7 @@ export declare const pluginHostModuleRegistry: {
359
359
  readonly public: true;
360
360
  readonly source: "package-json-export";
361
361
  readonly specifier: "@lapis-notes/api/menu";
362
- readonly version: "0.2.6";
362
+ readonly version: "0.2.8";
363
363
  };
364
364
  readonly "@lapis-notes/api/metadata-store": {
365
365
  readonly entry: "@lapis-notes/api/metadata-store";
@@ -369,7 +369,7 @@ export declare const pluginHostModuleRegistry: {
369
369
  readonly public: true;
370
370
  readonly source: "package-json-export";
371
371
  readonly specifier: "@lapis-notes/api/metadata-store";
372
- readonly version: "0.2.6";
372
+ readonly version: "0.2.8";
373
373
  };
374
374
  readonly "@lapis-notes/api/metadata-value": {
375
375
  readonly entry: "@lapis-notes/api/metadata-value";
@@ -379,7 +379,7 @@ export declare const pluginHostModuleRegistry: {
379
379
  readonly public: true;
380
380
  readonly source: "package-json-export";
381
381
  readonly specifier: "@lapis-notes/api/metadata-value";
382
- readonly version: "0.2.6";
382
+ readonly version: "0.2.8";
383
383
  };
384
384
  readonly "@lapis-notes/api/native-editing-intents": {
385
385
  readonly entry: "@lapis-notes/api/native-editing-intents";
@@ -389,7 +389,7 @@ export declare const pluginHostModuleRegistry: {
389
389
  readonly public: true;
390
390
  readonly source: "package-json-export";
391
391
  readonly specifier: "@lapis-notes/api/native-editing-intents";
392
- readonly version: "0.2.6";
392
+ readonly version: "0.2.8";
393
393
  };
394
394
  readonly "@lapis-notes/api/native-history-index": {
395
395
  readonly entry: "@lapis-notes/api/native-history-index";
@@ -399,7 +399,7 @@ export declare const pluginHostModuleRegistry: {
399
399
  readonly public: true;
400
400
  readonly source: "package-json-export";
401
401
  readonly specifier: "@lapis-notes/api/native-history-index";
402
- readonly version: "0.2.6";
402
+ readonly version: "0.2.8";
403
403
  };
404
404
  readonly "@lapis-notes/api/native-tasks": {
405
405
  readonly entry: "@lapis-notes/api/native-tasks";
@@ -409,7 +409,7 @@ export declare const pluginHostModuleRegistry: {
409
409
  readonly public: true;
410
410
  readonly source: "package-json-export";
411
411
  readonly specifier: "@lapis-notes/api/native-tasks";
412
- readonly version: "0.2.6";
412
+ readonly version: "0.2.8";
413
413
  };
414
414
  readonly "@lapis-notes/api/native-turns": {
415
415
  readonly entry: "@lapis-notes/api/native-turns";
@@ -419,7 +419,7 @@ export declare const pluginHostModuleRegistry: {
419
419
  readonly public: true;
420
420
  readonly source: "package-json-export";
421
421
  readonly specifier: "@lapis-notes/api/native-turns";
422
- readonly version: "0.2.6";
422
+ readonly version: "0.2.8";
423
423
  };
424
424
  readonly "@lapis-notes/api/path": {
425
425
  readonly entry: "@lapis-notes/api/path";
@@ -429,7 +429,7 @@ export declare const pluginHostModuleRegistry: {
429
429
  readonly public: true;
430
430
  readonly source: "package-json-export";
431
431
  readonly specifier: "@lapis-notes/api/path";
432
- readonly version: "0.2.6";
432
+ readonly version: "0.2.8";
433
433
  };
434
434
  readonly "@lapis-notes/api/plugin-assets": {
435
435
  readonly entry: "@lapis-notes/api/plugin-assets";
@@ -439,7 +439,7 @@ export declare const pluginHostModuleRegistry: {
439
439
  readonly public: true;
440
440
  readonly source: "package-json-export";
441
441
  readonly specifier: "@lapis-notes/api/plugin-assets";
442
- readonly version: "0.2.6";
442
+ readonly version: "0.2.8";
443
443
  };
444
444
  readonly "@lapis-notes/api/plugin-distribution-host": {
445
445
  readonly entry: "@lapis-notes/api/plugin-distribution-host";
@@ -449,7 +449,7 @@ export declare const pluginHostModuleRegistry: {
449
449
  readonly public: true;
450
450
  readonly source: "package-json-export";
451
451
  readonly specifier: "@lapis-notes/api/plugin-distribution-host";
452
- readonly version: "0.2.6";
452
+ readonly version: "0.2.8";
453
453
  };
454
454
  readonly "@lapis-notes/api/plugin-host-modules": {
455
455
  readonly entry: "@lapis-notes/api/plugin-host-modules";
@@ -459,7 +459,7 @@ export declare const pluginHostModuleRegistry: {
459
459
  readonly public: true;
460
460
  readonly source: "package-json-export";
461
461
  readonly specifier: "@lapis-notes/api/plugin-host-modules";
462
- readonly version: "0.2.6";
462
+ readonly version: "0.2.8";
463
463
  };
464
464
  readonly "@lapis-notes/api/registry/schema": {
465
465
  readonly entry: "@lapis-notes/api/registry/schema";
@@ -469,7 +469,7 @@ export declare const pluginHostModuleRegistry: {
469
469
  readonly public: true;
470
470
  readonly source: "package-json-export";
471
471
  readonly specifier: "@lapis-notes/api/registry/schema";
472
- readonly version: "0.2.6";
472
+ readonly version: "0.2.8";
473
473
  };
474
474
  readonly "@lapis-notes/api/runtime": {
475
475
  readonly entry: "@lapis-notes/api/runtime";
@@ -479,7 +479,7 @@ export declare const pluginHostModuleRegistry: {
479
479
  readonly public: true;
480
480
  readonly source: "package-json-export";
481
481
  readonly specifier: "@lapis-notes/api/runtime";
482
- readonly version: "0.2.6";
482
+ readonly version: "0.2.8";
483
483
  };
484
484
  readonly "@lapis-notes/api/search-embedding-worker": {
485
485
  readonly entry: "@lapis-notes/api/search-embedding-worker";
@@ -489,7 +489,7 @@ export declare const pluginHostModuleRegistry: {
489
489
  readonly public: true;
490
490
  readonly source: "package-json-export";
491
491
  readonly specifier: "@lapis-notes/api/search-embedding-worker";
492
- readonly version: "0.2.6";
492
+ readonly version: "0.2.8";
493
493
  };
494
494
  readonly "@lapis-notes/api/select": {
495
495
  readonly entry: "@lapis-notes/api/select";
@@ -499,7 +499,7 @@ export declare const pluginHostModuleRegistry: {
499
499
  readonly public: true;
500
500
  readonly source: "package-json-export";
501
501
  readonly specifier: "@lapis-notes/api/select";
502
- readonly version: "0.2.6";
502
+ readonly version: "0.2.8";
503
503
  };
504
504
  readonly "@lapis-notes/api/server-host": {
505
505
  readonly entry: "@lapis-notes/api/server-host";
@@ -509,7 +509,7 @@ export declare const pluginHostModuleRegistry: {
509
509
  readonly public: true;
510
510
  readonly source: "package-json-export";
511
511
  readonly specifier: "@lapis-notes/api/server-host";
512
- readonly version: "0.2.6";
512
+ readonly version: "0.2.8";
513
513
  };
514
514
  readonly "@lapis-notes/api/sync-repository": {
515
515
  readonly entry: "@lapis-notes/api/sync-repository";
@@ -519,7 +519,7 @@ export declare const pluginHostModuleRegistry: {
519
519
  readonly public: true;
520
520
  readonly source: "package-json-export";
521
521
  readonly specifier: "@lapis-notes/api/sync-repository";
522
- readonly version: "0.2.6";
522
+ readonly version: "0.2.8";
523
523
  };
524
524
  readonly "@lapis-notes/api/sync-security-host": {
525
525
  readonly entry: "@lapis-notes/api/sync-security-host";
@@ -529,7 +529,7 @@ export declare const pluginHostModuleRegistry: {
529
529
  readonly public: true;
530
530
  readonly source: "package-json-export";
531
531
  readonly specifier: "@lapis-notes/api/sync-security-host";
532
- readonly version: "0.2.6";
532
+ readonly version: "0.2.8";
533
533
  };
534
534
  readonly "@lapis-notes/api/telemetry": {
535
535
  readonly entry: "@lapis-notes/api/telemetry";
@@ -539,7 +539,7 @@ export declare const pluginHostModuleRegistry: {
539
539
  readonly public: true;
540
540
  readonly source: "package-json-export";
541
541
  readonly specifier: "@lapis-notes/api/telemetry";
542
- readonly version: "0.2.6";
542
+ readonly version: "0.2.8";
543
543
  };
544
544
  readonly "@lapis-notes/api/vault": {
545
545
  readonly entry: "@lapis-notes/api/vault";
@@ -549,7 +549,7 @@ export declare const pluginHostModuleRegistry: {
549
549
  readonly public: true;
550
550
  readonly source: "package-json-export";
551
551
  readonly specifier: "@lapis-notes/api/vault";
552
- readonly version: "0.2.6";
552
+ readonly version: "0.2.8";
553
553
  };
554
554
  readonly "@lapis-notes/api/workspace-host": {
555
555
  readonly entry: "@lapis-notes/api/workspace-host";
@@ -559,7 +559,7 @@ export declare const pluginHostModuleRegistry: {
559
559
  readonly public: true;
560
560
  readonly source: "package-json-export";
561
561
  readonly specifier: "@lapis-notes/api/workspace-host";
562
- readonly version: "0.2.6";
562
+ readonly version: "0.2.8";
563
563
  };
564
564
  readonly "@lapis-notes/markdown": {
565
565
  readonly entry: "@lapis-notes/markdown";
@@ -194,7 +194,7 @@ export const pluginHostModuleRegistry = {
194
194
  "public": true,
195
195
  "source": "package-json-export",
196
196
  "specifier": "@lapis-notes/api",
197
- "version": "0.2.6"
197
+ "version": "0.2.8"
198
198
  },
199
199
  "@lapis-notes/api/agent-skills": {
200
200
  "entry": "@lapis-notes/api/agent-skills",
@@ -207,7 +207,7 @@ export const pluginHostModuleRegistry = {
207
207
  "public": true,
208
208
  "source": "package-json-export",
209
209
  "specifier": "@lapis-notes/api/agent-skills",
210
- "version": "0.2.6"
210
+ "version": "0.2.8"
211
211
  },
212
212
  "@lapis-notes/api/agent-tools": {
213
213
  "entry": "@lapis-notes/api/agent-tools",
@@ -220,7 +220,7 @@ export const pluginHostModuleRegistry = {
220
220
  "public": true,
221
221
  "source": "package-json-export",
222
222
  "specifier": "@lapis-notes/api/agent-tools",
223
- "version": "0.2.6"
223
+ "version": "0.2.8"
224
224
  },
225
225
  "@lapis-notes/api/app-database": {
226
226
  "entry": "@lapis-notes/api/app-database",
@@ -233,7 +233,7 @@ export const pluginHostModuleRegistry = {
233
233
  "public": true,
234
234
  "source": "package-json-export",
235
235
  "specifier": "@lapis-notes/api/app-database",
236
- "version": "0.2.6"
236
+ "version": "0.2.8"
237
237
  },
238
238
  "@lapis-notes/api/build/vite": {
239
239
  "entry": "@lapis-notes/api/build/vite",
@@ -243,7 +243,7 @@ export const pluginHostModuleRegistry = {
243
243
  "public": true,
244
244
  "source": "package-json-export",
245
245
  "specifier": "@lapis-notes/api/build/vite",
246
- "version": "0.2.6"
246
+ "version": "0.2.8"
247
247
  },
248
248
  "@lapis-notes/api/cache": {
249
249
  "entry": "@lapis-notes/api/cache",
@@ -256,7 +256,7 @@ export const pluginHostModuleRegistry = {
256
256
  "public": true,
257
257
  "source": "package-json-export",
258
258
  "specifier": "@lapis-notes/api/cache",
259
- "version": "0.2.6"
259
+ "version": "0.2.8"
260
260
  },
261
261
  "@lapis-notes/api/copy-button": {
262
262
  "entry": "@lapis-notes/api/copy-button",
@@ -269,7 +269,7 @@ export const pluginHostModuleRegistry = {
269
269
  "public": true,
270
270
  "source": "package-json-export",
271
271
  "specifier": "@lapis-notes/api/copy-button",
272
- "version": "0.2.6"
272
+ "version": "0.2.8"
273
273
  },
274
274
  "@lapis-notes/api/desktop-native": {
275
275
  "entry": "@lapis-notes/api/desktop-native",
@@ -282,7 +282,7 @@ export const pluginHostModuleRegistry = {
282
282
  "public": true,
283
283
  "source": "package-json-export",
284
284
  "specifier": "@lapis-notes/api/desktop-native",
285
- "version": "0.2.6"
285
+ "version": "0.2.8"
286
286
  },
287
287
  "@lapis-notes/api/editor": {
288
288
  "defaultExport": true,
@@ -296,7 +296,7 @@ export const pluginHostModuleRegistry = {
296
296
  "public": true,
297
297
  "source": "package-json-export",
298
298
  "specifier": "@lapis-notes/api/editor",
299
- "version": "0.2.6"
299
+ "version": "0.2.8"
300
300
  },
301
301
  "@lapis-notes/api/editor/core": {
302
302
  "entry": "@lapis-notes/api/editor/core",
@@ -309,7 +309,7 @@ export const pluginHostModuleRegistry = {
309
309
  "public": true,
310
310
  "source": "package-json-export",
311
311
  "specifier": "@lapis-notes/api/editor/core",
312
- "version": "0.2.6"
312
+ "version": "0.2.8"
313
313
  },
314
314
  "@lapis-notes/api/editor/extensions/autocomplete": {
315
315
  "entry": "@lapis-notes/api/editor/extensions/autocomplete",
@@ -322,7 +322,7 @@ export const pluginHostModuleRegistry = {
322
322
  "public": true,
323
323
  "source": "package-json-export",
324
324
  "specifier": "@lapis-notes/api/editor/extensions/autocomplete",
325
- "version": "0.2.6"
325
+ "version": "0.2.8"
326
326
  },
327
327
  "@lapis-notes/api/editor/extensions/class-highlighter": {
328
328
  "entry": "@lapis-notes/api/editor/extensions/class-highlighter",
@@ -335,7 +335,7 @@ export const pluginHostModuleRegistry = {
335
335
  "public": true,
336
336
  "source": "package-json-export",
337
337
  "specifier": "@lapis-notes/api/editor/extensions/class-highlighter",
338
- "version": "0.2.6"
338
+ "version": "0.2.8"
339
339
  },
340
340
  "@lapis-notes/api/editor/extensions/fold-gutter": {
341
341
  "entry": "@lapis-notes/api/editor/extensions/fold-gutter",
@@ -348,7 +348,7 @@ export const pluginHostModuleRegistry = {
348
348
  "public": true,
349
349
  "source": "package-json-export",
350
350
  "specifier": "@lapis-notes/api/editor/extensions/fold-gutter",
351
- "version": "0.2.6"
351
+ "version": "0.2.8"
352
352
  },
353
353
  "@lapis-notes/api/editor/extensions/gutter-line-style-sync": {
354
354
  "entry": "@lapis-notes/api/editor/extensions/gutter-line-style-sync",
@@ -361,7 +361,7 @@ export const pluginHostModuleRegistry = {
361
361
  "public": true,
362
362
  "source": "package-json-export",
363
363
  "specifier": "@lapis-notes/api/editor/extensions/gutter-line-style-sync",
364
- "version": "0.2.6"
364
+ "version": "0.2.8"
365
365
  },
366
366
  "@lapis-notes/api/editor/extensions/lint": {
367
367
  "entry": "@lapis-notes/api/editor/extensions/lint",
@@ -374,7 +374,7 @@ export const pluginHostModuleRegistry = {
374
374
  "public": true,
375
375
  "source": "package-json-export",
376
376
  "specifier": "@lapis-notes/api/editor/extensions/lint",
377
- "version": "0.2.6"
377
+ "version": "0.2.8"
378
378
  },
379
379
  "@lapis-notes/api/editor/extensions/search": {
380
380
  "entry": "@lapis-notes/api/editor/extensions/search",
@@ -387,7 +387,7 @@ export const pluginHostModuleRegistry = {
387
387
  "public": true,
388
388
  "source": "package-json-export",
389
389
  "specifier": "@lapis-notes/api/editor/extensions/search",
390
- "version": "0.2.6"
390
+ "version": "0.2.8"
391
391
  },
392
392
  "@lapis-notes/api/editor/language-service": {
393
393
  "entry": "@lapis-notes/api/editor/language-service",
@@ -400,7 +400,7 @@ export const pluginHostModuleRegistry = {
400
400
  "public": true,
401
401
  "source": "package-json-export",
402
402
  "specifier": "@lapis-notes/api/editor/language-service",
403
- "version": "0.2.6"
403
+ "version": "0.2.8"
404
404
  },
405
405
  "@lapis-notes/api/empty-view": {
406
406
  "entry": "@lapis-notes/api/empty-view",
@@ -413,7 +413,7 @@ export const pluginHostModuleRegistry = {
413
413
  "public": true,
414
414
  "source": "package-json-export",
415
415
  "specifier": "@lapis-notes/api/empty-view",
416
- "version": "0.2.6"
416
+ "version": "0.2.8"
417
417
  },
418
418
  "@lapis-notes/api/icon": {
419
419
  "entry": "@lapis-notes/api/icon",
@@ -426,7 +426,7 @@ export const pluginHostModuleRegistry = {
426
426
  "public": true,
427
427
  "source": "package-json-export",
428
428
  "specifier": "@lapis-notes/api/icon",
429
- "version": "0.2.6"
429
+ "version": "0.2.8"
430
430
  },
431
431
  "@lapis-notes/api/language-service": {
432
432
  "entry": "@lapis-notes/api/language-service",
@@ -439,7 +439,7 @@ export const pluginHostModuleRegistry = {
439
439
  "public": true,
440
440
  "source": "package-json-export",
441
441
  "specifier": "@lapis-notes/api/language-service",
442
- "version": "0.2.6"
442
+ "version": "0.2.8"
443
443
  },
444
444
  "@lapis-notes/api/language-service/worker": {
445
445
  "entry": "@lapis-notes/api/language-service/worker",
@@ -452,7 +452,7 @@ export const pluginHostModuleRegistry = {
452
452
  "public": true,
453
453
  "source": "package-json-export",
454
454
  "specifier": "@lapis-notes/api/language-service/worker",
455
- "version": "0.2.6"
455
+ "version": "0.2.8"
456
456
  },
457
457
  "@lapis-notes/api/menu": {
458
458
  "defaultExport": true,
@@ -466,7 +466,7 @@ export const pluginHostModuleRegistry = {
466
466
  "public": true,
467
467
  "source": "package-json-export",
468
468
  "specifier": "@lapis-notes/api/menu",
469
- "version": "0.2.6"
469
+ "version": "0.2.8"
470
470
  },
471
471
  "@lapis-notes/api/metadata-store": {
472
472
  "entry": "@lapis-notes/api/metadata-store",
@@ -476,7 +476,7 @@ export const pluginHostModuleRegistry = {
476
476
  "public": true,
477
477
  "source": "package-json-export",
478
478
  "specifier": "@lapis-notes/api/metadata-store",
479
- "version": "0.2.6"
479
+ "version": "0.2.8"
480
480
  },
481
481
  "@lapis-notes/api/metadata-value": {
482
482
  "entry": "@lapis-notes/api/metadata-value",
@@ -489,7 +489,7 @@ export const pluginHostModuleRegistry = {
489
489
  "public": true,
490
490
  "source": "package-json-export",
491
491
  "specifier": "@lapis-notes/api/metadata-value",
492
- "version": "0.2.6"
492
+ "version": "0.2.8"
493
493
  },
494
494
  "@lapis-notes/api/native-editing-intents": {
495
495
  "entry": "@lapis-notes/api/native-editing-intents",
@@ -502,7 +502,7 @@ export const pluginHostModuleRegistry = {
502
502
  "public": true,
503
503
  "source": "package-json-export",
504
504
  "specifier": "@lapis-notes/api/native-editing-intents",
505
- "version": "0.2.6"
505
+ "version": "0.2.8"
506
506
  },
507
507
  "@lapis-notes/api/native-history-index": {
508
508
  "entry": "@lapis-notes/api/native-history-index",
@@ -515,7 +515,7 @@ export const pluginHostModuleRegistry = {
515
515
  "public": true,
516
516
  "source": "package-json-export",
517
517
  "specifier": "@lapis-notes/api/native-history-index",
518
- "version": "0.2.6"
518
+ "version": "0.2.8"
519
519
  },
520
520
  "@lapis-notes/api/native-tasks": {
521
521
  "entry": "@lapis-notes/api/native-tasks",
@@ -528,7 +528,7 @@ export const pluginHostModuleRegistry = {
528
528
  "public": true,
529
529
  "source": "package-json-export",
530
530
  "specifier": "@lapis-notes/api/native-tasks",
531
- "version": "0.2.6"
531
+ "version": "0.2.8"
532
532
  },
533
533
  "@lapis-notes/api/native-turns": {
534
534
  "entry": "@lapis-notes/api/native-turns",
@@ -541,7 +541,7 @@ export const pluginHostModuleRegistry = {
541
541
  "public": true,
542
542
  "source": "package-json-export",
543
543
  "specifier": "@lapis-notes/api/native-turns",
544
- "version": "0.2.6"
544
+ "version": "0.2.8"
545
545
  },
546
546
  "@lapis-notes/api/path": {
547
547
  "entry": "@lapis-notes/api/path",
@@ -554,7 +554,7 @@ export const pluginHostModuleRegistry = {
554
554
  "public": true,
555
555
  "source": "package-json-export",
556
556
  "specifier": "@lapis-notes/api/path",
557
- "version": "0.2.6"
557
+ "version": "0.2.8"
558
558
  },
559
559
  "@lapis-notes/api/plugin-assets": {
560
560
  "entry": "@lapis-notes/api/plugin-assets",
@@ -567,7 +567,7 @@ export const pluginHostModuleRegistry = {
567
567
  "public": true,
568
568
  "source": "package-json-export",
569
569
  "specifier": "@lapis-notes/api/plugin-assets",
570
- "version": "0.2.6"
570
+ "version": "0.2.8"
571
571
  },
572
572
  "@lapis-notes/api/plugin-distribution-host": {
573
573
  "entry": "@lapis-notes/api/plugin-distribution-host",
@@ -580,7 +580,7 @@ export const pluginHostModuleRegistry = {
580
580
  "public": true,
581
581
  "source": "package-json-export",
582
582
  "specifier": "@lapis-notes/api/plugin-distribution-host",
583
- "version": "0.2.6"
583
+ "version": "0.2.8"
584
584
  },
585
585
  "@lapis-notes/api/plugin-host-modules": {
586
586
  "entry": "@lapis-notes/api/plugin-host-modules",
@@ -593,7 +593,7 @@ export const pluginHostModuleRegistry = {
593
593
  "public": true,
594
594
  "source": "package-json-export",
595
595
  "specifier": "@lapis-notes/api/plugin-host-modules",
596
- "version": "0.2.6"
596
+ "version": "0.2.8"
597
597
  },
598
598
  "@lapis-notes/api/registry/schema": {
599
599
  "entry": "@lapis-notes/api/registry/schema",
@@ -606,7 +606,7 @@ export const pluginHostModuleRegistry = {
606
606
  "public": true,
607
607
  "source": "package-json-export",
608
608
  "specifier": "@lapis-notes/api/registry/schema",
609
- "version": "0.2.6"
609
+ "version": "0.2.8"
610
610
  },
611
611
  "@lapis-notes/api/runtime": {
612
612
  "entry": "@lapis-notes/api/runtime",
@@ -619,7 +619,7 @@ export const pluginHostModuleRegistry = {
619
619
  "public": true,
620
620
  "source": "package-json-export",
621
621
  "specifier": "@lapis-notes/api/runtime",
622
- "version": "0.2.6"
622
+ "version": "0.2.8"
623
623
  },
624
624
  "@lapis-notes/api/search-embedding-worker": {
625
625
  "entry": "@lapis-notes/api/search-embedding-worker",
@@ -632,7 +632,7 @@ export const pluginHostModuleRegistry = {
632
632
  "public": true,
633
633
  "source": "package-json-export",
634
634
  "specifier": "@lapis-notes/api/search-embedding-worker",
635
- "version": "0.2.6"
635
+ "version": "0.2.8"
636
636
  },
637
637
  "@lapis-notes/api/select": {
638
638
  "entry": "@lapis-notes/api/select",
@@ -645,7 +645,7 @@ export const pluginHostModuleRegistry = {
645
645
  "public": true,
646
646
  "source": "package-json-export",
647
647
  "specifier": "@lapis-notes/api/select",
648
- "version": "0.2.6"
648
+ "version": "0.2.8"
649
649
  },
650
650
  "@lapis-notes/api/server-host": {
651
651
  "entry": "@lapis-notes/api/server-host",
@@ -658,7 +658,7 @@ export const pluginHostModuleRegistry = {
658
658
  "public": true,
659
659
  "source": "package-json-export",
660
660
  "specifier": "@lapis-notes/api/server-host",
661
- "version": "0.2.6"
661
+ "version": "0.2.8"
662
662
  },
663
663
  "@lapis-notes/api/sync-repository": {
664
664
  "entry": "@lapis-notes/api/sync-repository",
@@ -671,7 +671,7 @@ export const pluginHostModuleRegistry = {
671
671
  "public": true,
672
672
  "source": "package-json-export",
673
673
  "specifier": "@lapis-notes/api/sync-repository",
674
- "version": "0.2.6"
674
+ "version": "0.2.8"
675
675
  },
676
676
  "@lapis-notes/api/sync-security-host": {
677
677
  "entry": "@lapis-notes/api/sync-security-host",
@@ -681,7 +681,7 @@ export const pluginHostModuleRegistry = {
681
681
  "public": true,
682
682
  "source": "package-json-export",
683
683
  "specifier": "@lapis-notes/api/sync-security-host",
684
- "version": "0.2.6"
684
+ "version": "0.2.8"
685
685
  },
686
686
  "@lapis-notes/api/telemetry": {
687
687
  "entry": "@lapis-notes/api/telemetry",
@@ -694,7 +694,7 @@ export const pluginHostModuleRegistry = {
694
694
  "public": true,
695
695
  "source": "package-json-export",
696
696
  "specifier": "@lapis-notes/api/telemetry",
697
- "version": "0.2.6"
697
+ "version": "0.2.8"
698
698
  },
699
699
  "@lapis-notes/api/vault": {
700
700
  "entry": "@lapis-notes/api/vault",
@@ -707,7 +707,7 @@ export const pluginHostModuleRegistry = {
707
707
  "public": true,
708
708
  "source": "package-json-export",
709
709
  "specifier": "@lapis-notes/api/vault",
710
- "version": "0.2.6"
710
+ "version": "0.2.8"
711
711
  },
712
712
  "@lapis-notes/api/workspace-host": {
713
713
  "entry": "@lapis-notes/api/workspace-host",
@@ -720,7 +720,7 @@ export const pluginHostModuleRegistry = {
720
720
  "public": true,
721
721
  "source": "package-json-export",
722
722
  "specifier": "@lapis-notes/api/workspace-host",
723
- "version": "0.2.6"
723
+ "version": "0.2.8"
724
724
  },
725
725
  "@lapis-notes/markdown": {
726
726
  "entry": "@lapis-notes/markdown",
@@ -0,0 +1,3 @@
1
+ import type { DataAdapter } from "./storage/fs";
2
+ /** Startup diagnostics follow eager ESM imports without preloading lazy assets. */
3
+ export declare function readPluginEntrySources(adapter: Pick<DataAdapter, "read">, pluginPath: string, entry: string): Promise<Map<string, string>>;
@@ -0,0 +1,29 @@
1
+ import { dirname, joinPath, normalizePath } from "./storage/path";
2
+ import { scanPluginDependencySpecifiers } from "./plugin-dependency-scanner";
3
+ /** Startup diagnostics follow eager ESM imports without preloading lazy assets. */
4
+ export async function readPluginEntrySources(adapter, pluginPath, entry) {
5
+ const root = normalizePath(pluginPath).replace(/\/$/u, "");
6
+ const sources = new Map();
7
+ const pending = [normalizePath(joinPath(root, entry))];
8
+ let bytes = 0;
9
+ while (pending.length) {
10
+ const path = pending.pop();
11
+ if (sources.has(path))
12
+ continue;
13
+ if (!path.startsWith(`${root}/`))
14
+ throw Error("Plugin import escapes its root");
15
+ if (sources.size >= 256)
16
+ throw Error("Plugin eager module graph exceeds limit");
17
+ const source = await adapter.read(path);
18
+ bytes += new TextEncoder().encode(source).byteLength;
19
+ if (bytes > 16 * 1024 * 1024)
20
+ throw Error("Plugin eager source bytes exceed limit");
21
+ sources.set(path, source);
22
+ for (const { kind, specifier } of scanPluginDependencySpecifiers(source)) {
23
+ if ((kind === "static-import" || kind === "export") &&
24
+ specifier.startsWith("."))
25
+ pending.push(normalizePath(joinPath(dirname(path), specifier.split(/[?#]/u)[0])));
26
+ }
27
+ }
28
+ return sources;
29
+ }
@@ -61,26 +61,46 @@ function formatByteSize(bytes) {
61
61
  }
62
62
  return `${bytes} B`;
63
63
  }
64
+ const installQueues = new WeakMap();
64
65
  export async function withPluginInstallProgress(app, options, action) {
65
- return app.notifications.withProgress({
66
- title: options.title,
67
- source: options.source ?? "Plugin registry",
68
- location: options.location ?? "status",
69
- cancellable: true,
70
- persistOnError: options.persistOnError ?? true,
71
- }, async (progressHandle, token) => {
72
- const removeProgressListener = app.pluginDistribution.addProgressListener((event) => {
73
- if (event.pluginId !== options.pluginId) {
74
- return;
66
+ const predecessor = installQueues.get(app);
67
+ let release;
68
+ const turn = new Promise((resolve) => {
69
+ release = resolve;
70
+ });
71
+ const tail = (predecessor ?? Promise.resolve()).then(() => turn);
72
+ installQueues.set(app, tail);
73
+ void tail.then(() => {
74
+ if (installQueues.get(app) === tail)
75
+ installQueues.delete(app);
76
+ });
77
+ try {
78
+ return await app.notifications.withProgress({
79
+ title: options.title,
80
+ source: options.source ?? "Plugin registry",
81
+ location: options.location ?? "status",
82
+ cancellable: true,
83
+ persistOnError: options.persistOnError ?? true,
84
+ }, async (progressHandle, token) => {
85
+ if (predecessor) {
86
+ progressHandle.report({ message: "Queued", indeterminate: true });
87
+ await predecessor;
88
+ }
89
+ token.signal.throwIfAborted();
90
+ const removeProgressListener = app.pluginDistribution.addProgressListener((event) => {
91
+ if (event.pluginId === options.pluginId)
92
+ reportPluginInstallProgress(progressHandle, event);
93
+ });
94
+ try {
95
+ progressHandle.report({ message: "Starting", indeterminate: true });
96
+ return await action(token.signal);
97
+ }
98
+ finally {
99
+ removeProgressListener();
75
100
  }
76
- reportPluginInstallProgress(progressHandle, event);
77
101
  });
78
- try {
79
- progressHandle.report({ message: "Starting", indeterminate: true });
80
- return await action(token.signal);
81
- }
82
- finally {
83
- removeProgressListener();
84
- }
85
- });
102
+ }
103
+ finally {
104
+ release();
105
+ }
86
106
  }
@@ -1,3 +1,4 @@
1
+ import { readPluginEntrySources } from "./plugin-entry-sources";
1
2
  import { Platform } from "./platform";
2
3
  import { getNativeDesktopBridge, } from "./storage/desktop-native";
3
4
  import { activationEventForContribution, buildLapisContributionIndex, classifyLapisPlugin, commandContributionToCommand, isLapisManifest, normalizeManifestCommandId, permissionsToCapabilities, validateLapisManifest, } from "./lapis-extension";
@@ -438,7 +439,8 @@ export class PluginManager extends EventDispatcher {
438
439
  })
439
440
  : commonJsHost;
440
441
  this.app.configuration.on("plugin-data-updated", (event) => {
441
- if (event.origin === "plugin-save") {
442
+ if (event.origin === "plugin-save" ||
443
+ event.origin === "external-reload") {
442
444
  return;
443
445
  }
444
446
  void this.syncLegacyPluginData(event.pluginId, event.value === undefined && event.prev !== undefined);
@@ -2042,7 +2044,9 @@ export class PluginManager extends EventDispatcher {
2042
2044
  classification,
2043
2045
  hasMainJs,
2044
2046
  });
2045
- const moduleSources = await this.readCommunityPluginModuleSources(pluginPath);
2047
+ const moduleSources = selectedRuntime?.format === "esm"
2048
+ ? await readPluginEntrySources(this.adapter, pluginPath, selectedRuntime.path)
2049
+ : await this.readCommunityPluginModuleSources(pluginPath);
2046
2050
  const usedSharedDependencies = getBareDependencySpecifiersFromSources(moduleSources);
2047
2051
  const declaredSharedDependencies = selectedRuntime?.sharedDependencies ?? [];
2048
2052
  const declarationsAreExplicit = selectedRuntime?.source === "lapis-runtime-entry" ||
@@ -0,0 +1,8 @@
1
+ import type { DataAdapter } from "./fs";
2
+ /**
3
+ * Installed plugin assets are not user content; direct adapter access is
4
+ * unchanged.
5
+ */
6
+ export declare function isVaultContent(path: string, configDir: string, scope?: "discovery" | "watch"): boolean;
7
+ /** Retain native capabilities while constraining fallback polling discovery. */
8
+ export declare function vaultContentAdapter(adapter: DataAdapter, configDir: () => string, scope?: "discovery" | "watch"): DataAdapter;
@@ -0,0 +1,67 @@
1
+ import { joinPath, normalizePath } from "./path";
2
+ /**
3
+ * Installed plugin assets are not user content; direct adapter access is
4
+ * unchanged.
5
+ */
6
+ export function isVaultContent(path, configDir, scope = "discovery") {
7
+ const relative = normalizePath(path).replace(/^\/+|\/+$/gu, "");
8
+ const state = normalizePath(configDir).replace(/^\/+|\/+$/gu, "");
9
+ const excluded = !state
10
+ ? []
11
+ : scope === "watch"
12
+ ? [state]
13
+ : [`${state}/plugins`, `${state}/plugin-registry-cache`];
14
+ return excluded.every((config) => relative !== config && !relative.startsWith(`${config}/`));
15
+ }
16
+ /** Retain native capabilities while constraining fallback polling discovery. */
17
+ export function vaultContentAdapter(adapter, configDir, scope = "discovery") {
18
+ return new Proxy(adapter, {
19
+ get(target, property) {
20
+ if (property === "watch" && scope === "watch") {
21
+ const native = target;
22
+ if (!native.watch)
23
+ return undefined;
24
+ return (path, options, accept) => {
25
+ const roots = (Array.isArray(path) ? path : [path]).map((p) => normalizePath(p).replace(/^\/+|\/+$/gu, ""));
26
+ const included = (p) => isVaultContent(p, configDir(), scope) ||
27
+ (!options.recursive &&
28
+ roots.includes(normalizePath(p).replace(/^\/+|\/+$/gu, "")));
29
+ return native.watch(path, options, (event) => {
30
+ if (event.type === "error") {
31
+ accept(event);
32
+ return;
33
+ }
34
+ const current = included(event.path);
35
+ const previous = event.previousPath !== undefined && included(event.previousPath);
36
+ if (current && (!event.previousPath || previous))
37
+ accept(event);
38
+ else if (current)
39
+ accept({ type: "create", path: event.path });
40
+ else if (previous)
41
+ accept({ type: "delete", path: event.previousPath });
42
+ });
43
+ };
44
+ }
45
+ if (property === "list")
46
+ return async (path) => {
47
+ if (!isVaultContent(path, configDir(), scope))
48
+ return { files: [], folders: [] };
49
+ const listing = await target.list(path);
50
+ const include = (entry) => {
51
+ if (!entry ||
52
+ entry === "." ||
53
+ entry === ".." ||
54
+ /[/\\\0]/u.test(entry))
55
+ throw Error("Invalid vault snapshot child path");
56
+ return isVaultContent(joinPath(path, entry), configDir(), scope);
57
+ };
58
+ return {
59
+ files: listing.files.filter(include),
60
+ folders: listing.folders.filter(include),
61
+ };
62
+ };
63
+ const value = Reflect.get(target, property, target);
64
+ return typeof value === "function" ? value.bind(target) : value;
65
+ },
66
+ });
67
+ }
@@ -1,3 +1,4 @@
1
+ import { vaultContentAdapter } from "./vault-content-adapter";
1
2
  import { projectVaultTree, scanVaultTree } from "./vault-reconciliation";
2
3
  import { DEFAULT_APP_STATE_DIRECTORY } from "./path";
3
4
  import { EventDispatcher } from "../events";
@@ -113,7 +114,7 @@ export class Vault extends EventDispatcher {
113
114
  }
114
115
  async reconcileNow(hints = [], current = () => true, context = {}) {
115
116
  await this.load();
116
- const snapshot = await scanVaultTree(this.adapter, current);
117
+ const snapshot = await scanVaultTree(vaultContentAdapter(this.adapter, () => this.configDir), current);
117
118
  if (!snapshot || !current())
118
119
  return;
119
120
  const projected = projectVaultTree(this, this.files, snapshot, hints);
@@ -176,7 +177,9 @@ export class Vault extends EventDispatcher {
176
177
  .forEach((k) => {
177
178
  delete sourceFiles[k];
178
179
  });
179
- return this.adapter.list(basePath).then(({ files, folders }) => {
180
+ return vaultContentAdapter(this.adapter, () => this.configDir)
181
+ .list(basePath)
182
+ .then(({ files, folders }) => {
180
183
  sourceFiles[basePath] ||= new TFolder(basePath, [], null, this);
181
184
  const folder = sourceFiles[basePath];
182
185
  folder.parent =
package/dist/sync-host.js CHANGED
@@ -513,6 +513,7 @@ export class SyncHostService {
513
513
  }
514
514
  // Tombstone missing paths first so a later unmatched file can recover one
515
515
  // unique strong-fingerprint identity after an out-of-process rename.
516
+ const presentIdentities = new Map();
516
517
  let after;
517
518
  do {
518
519
  const page = await this.database.scanMeta({
@@ -521,6 +522,8 @@ export class SyncHostService {
521
522
  limit: MAX_PAGE_SIZE,
522
523
  });
523
524
  for (const { value } of page.entries) {
525
+ if (value.state === "present")
526
+ presentIdentities.set(value.currentPath, value);
524
527
  if (value.state === "present" &&
525
528
  !this.vault.getFileByPath(value.currentPath)) {
526
529
  const synthetic = new TFile(value.currentPath, {
@@ -534,7 +537,7 @@ export class SyncHostService {
534
537
  after = page.nextCursor;
535
538
  } while (after);
536
539
  for (const file of this.vault.iterateFiles()) {
537
- const identity = await this.#getIdentityByPath(file.path);
540
+ const identity = presentIdentities.get(file.path);
538
541
  if (!identity) {
539
542
  await this.#recordFileChange("create", file, undefined, undefined, true);
540
543
  continue;
@@ -1,3 +1,4 @@
1
+ import { isVaultContent, vaultContentAdapter, } from "./storage/vault-content-adapter";
1
2
  import { DirectoryWatcher, TFile, } from "./storage/fs";
2
3
  import { projectVaultChange } from "./vault-change-views";
3
4
  /** One App owns watching, reconciliation and retirement for its live Vault. */
@@ -34,7 +35,7 @@ export class VaultChangeService {
34
35
  const generation = ++this.generation;
35
36
  this.active = true;
36
37
  this.dirty = true;
37
- const watcher = new DirectoryWatcher(this.app.vault.adapter);
38
+ const watcher = new DirectoryWatcher(vaultContentAdapter(this.app.vault.adapter, () => this.app.vault.configDir, "watch"));
38
39
  this.watcher = watcher;
39
40
  const projection = this.app.vault.on("all", (event, file, context) => {
40
41
  if (!this.live(generation) || !(file instanceof TFile))
@@ -52,7 +53,13 @@ export class VaultChangeService {
52
53
  this.changed(event, generation);
53
54
  });
54
55
  const subscription = watcher.watch("/", { recursive: true });
55
- await subscription.ready;
56
+ // App configuration is an explicit leaf observer, never a recursive
57
+ // traversal of caches, workspaces, plugin payloads or generated state.
58
+ const configPath = this.app.configuration?.basePath;
59
+ const configuration = configPath
60
+ ? watcher.watch(configPath, { recursive: false })
61
+ : undefined;
62
+ await Promise.all([subscription.ready, configuration?.ready]);
56
63
  if (!this.live(generation))
57
64
  return;
58
65
  this.registered = true;
@@ -158,6 +165,28 @@ export class VaultChangeService {
158
165
  }, delay);
159
166
  }
160
167
  changed(event, generation) {
168
+ if (event.type !== "error" &&
169
+ event.path === this.app.configuration?.basePath) {
170
+ if (event.type !== "delete") {
171
+ const pending = this.app.fileEditingSessions.track(() => this.app.fileEditingSessions.afterMutations(() => this.live(generation)
172
+ ? this.app.configuration.reloadFromDisk({
173
+ emitPluginDataEvents: true,
174
+ materializeDefaults: false,
175
+ origin: "external-reload",
176
+ })
177
+ : Promise.resolve()));
178
+ this.projections.add(pending);
179
+ void pending
180
+ .catch((error) => this.report(error))
181
+ .finally(() => this.projections.delete(pending));
182
+ }
183
+ return;
184
+ }
185
+ if (event.type !== "error" &&
186
+ isVaultContent(event.path, this.app.vault.configDir, "watch") === false &&
187
+ (!event.previousPath ||
188
+ !isVaultContent(event.previousPath, this.app.vault.configDir, "watch")))
189
+ return;
161
190
  this.dirty = true;
162
191
  if (event.type === "error") {
163
192
  this.uncertain = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lapis-notes/api",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Lapis Notes API",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -22,7 +22,7 @@
22
22
  "@iconify/types": "^2.0.0",
23
23
  "@iconify/utils": "^2.3.0",
24
24
  "@lapismd/ai-host": "^0.3.0",
25
- "@lapismd/design-core": "^0.10.1",
25
+ "@lapismd/design-core": "^0.12.1",
26
26
  "@lapismd/mira": "~0.1.4",
27
27
  "@lezer/common": "^1.2.3",
28
28
  "@lezer/lr": "^1.4.2",
@@ -108,8 +108,8 @@
108
108
  "@codemirror/view": "^6.35.0",
109
109
  "@dnd-kit/dom": "^0.4.0",
110
110
  "@dnd-kit/svelte": "^0.4.0",
111
- "@lapis-notes/ui": "^0.1.7",
112
- "@lapismd/design-core": "^0.8.0 || ^0.9.0 || ^0.10.0",
111
+ "@lapis-notes/ui": "^0.1.8",
112
+ "@lapismd/design-core": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.12.0",
113
113
  "@lapismd/mira": "~0.1.3",
114
114
  "@lezer/highlight": "^1.2.1",
115
115
  "@lezer/markdown": "^1.4.3",