@lapis-notes/history 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE.md +3 -7
  3. package/README.md +2 -2
  4. package/dist/history-compare-panel.css +28 -6
  5. package/dist/history-compare-panel.svelte +115 -108
  6. package/dist/repository/NOTICE.md +11 -0
  7. package/dist/repository/components/RepositoryAuthorAvatar.svelte +77 -0
  8. package/dist/repository/components/RepositoryAuthorAvatar.svelte.d.ts +11 -0
  9. package/dist/repository/components/RepositoryBackupStatus.svelte +236 -0
  10. package/dist/repository/components/RepositoryBackupStatus.svelte.d.ts +11 -0
  11. package/dist/repository/components/RepositoryChangedFiles.svelte +104 -0
  12. package/dist/repository/components/RepositoryChangedFiles.svelte.d.ts +13 -0
  13. package/dist/repository/components/RepositoryCommitMessage.svelte +93 -0
  14. package/dist/repository/components/RepositoryCommitMessage.svelte.d.ts +6 -0
  15. package/dist/repository/components/RepositoryCommitPicker.svelte +205 -0
  16. package/dist/repository/components/RepositoryCommitPicker.svelte.d.ts +17 -0
  17. package/dist/repository/components/RepositoryComparisonBar.svelte +71 -0
  18. package/dist/repository/components/RepositoryComparisonBar.svelte.d.ts +9 -0
  19. package/dist/repository/components/RepositoryComparisonTime.svelte +32 -0
  20. package/dist/repository/components/RepositoryComparisonTime.svelte.d.ts +6 -0
  21. package/dist/repository/components/RepositoryDiff.svelte +56 -0
  22. package/dist/repository/components/RepositoryDiff.svelte.d.ts +11 -0
  23. package/dist/repository/components/RepositoryDiffColumn.svelte +78 -0
  24. package/dist/repository/components/RepositoryDiffColumn.svelte.d.ts +14 -0
  25. package/dist/repository/components/RepositoryDiffControls.svelte +117 -0
  26. package/dist/repository/components/RepositoryDiffControls.svelte.d.ts +8 -0
  27. package/dist/repository/components/RepositoryFileHistory.svelte +170 -0
  28. package/dist/repository/components/RepositoryFileHistory.svelte.d.ts +10 -0
  29. package/dist/repository/components/RepositoryFileTitle.svelte +30 -0
  30. package/dist/repository/components/RepositoryFileTitle.svelte.d.ts +6 -0
  31. package/dist/repository/components/RepositoryGraph.svelte +216 -0
  32. package/dist/repository/components/RepositoryGraph.svelte.d.ts +19 -0
  33. package/dist/repository/components/RepositoryGraphSvg.svelte +110 -0
  34. package/dist/repository/components/RepositoryGraphSvg.svelte.d.ts +11 -0
  35. package/dist/repository/components/RepositoryIdentifiers.svelte +221 -0
  36. package/dist/repository/components/RepositoryIdentifiers.svelte.d.ts +15 -0
  37. package/dist/repository/components/RepositoryLogHeader.svelte +90 -0
  38. package/dist/repository/components/RepositoryLogHeader.svelte.d.ts +23 -0
  39. package/dist/repository/components/RepositoryOperationArguments.svelte +52 -0
  40. package/dist/repository/components/RepositoryOperationArguments.svelte.d.ts +6 -0
  41. package/dist/repository/components/RepositoryOperationColumn.svelte +163 -0
  42. package/dist/repository/components/RepositoryOperationColumn.svelte.d.ts +11 -0
  43. package/dist/repository/components/RepositoryOperationFiles.svelte +245 -0
  44. package/dist/repository/components/RepositoryOperationFiles.svelte.d.ts +14 -0
  45. package/dist/repository/components/RepositoryOperationMessage.svelte +169 -0
  46. package/dist/repository/components/RepositoryOperationMessage.svelte.d.ts +10 -0
  47. package/dist/repository/components/RepositoryOperationOption.svelte +183 -0
  48. package/dist/repository/components/RepositoryOperationOption.svelte.d.ts +10 -0
  49. package/dist/repository/components/RepositoryOperationParentPicker.svelte +188 -0
  50. package/dist/repository/components/RepositoryOperationParentPicker.svelte.d.ts +14 -0
  51. package/dist/repository/components/RepositoryOperationPinPicker.svelte +170 -0
  52. package/dist/repository/components/RepositoryOperationPinPicker.svelte.d.ts +13 -0
  53. package/dist/repository/components/RepositoryOperationRail.svelte +136 -0
  54. package/dist/repository/components/RepositoryOperationRail.svelte.d.ts +9 -0
  55. package/dist/repository/components/RepositoryOperationTarget.svelte +99 -0
  56. package/dist/repository/components/RepositoryOperationTarget.svelte.d.ts +8 -0
  57. package/dist/repository/components/RepositoryOperations.svelte +199 -0
  58. package/dist/repository/components/RepositoryOperations.svelte.d.ts +12 -0
  59. package/dist/repository/components/RepositoryPanel.svelte +207 -0
  60. package/dist/repository/components/RepositoryPanel.svelte.d.ts +15 -0
  61. package/dist/repository/components/RepositoryParentSummary.svelte +52 -0
  62. package/dist/repository/components/RepositoryParentSummary.svelte.d.ts +10 -0
  63. package/dist/repository/components/RepositoryPickerSearch.svelte +51 -0
  64. package/dist/repository/components/RepositoryPickerSearch.svelte.d.ts +11 -0
  65. package/dist/repository/components/RepositoryRestoreDialog.svelte +81 -0
  66. package/dist/repository/components/RepositoryRestoreDialog.svelte.d.ts +7 -0
  67. package/dist/repository/components/RepositoryRevisionActions.svelte +53 -0
  68. package/dist/repository/components/RepositoryRevisionActions.svelte.d.ts +9 -0
  69. package/dist/repository/components/RepositoryRevisionFiles.svelte +110 -0
  70. package/dist/repository/components/RepositoryRevisionFiles.svelte.d.ts +14 -0
  71. package/dist/repository/components/RepositoryRevisionOption.svelte +60 -0
  72. package/dist/repository/components/RepositoryRevisionOption.svelte.d.ts +9 -0
  73. package/dist/repository/components/RepositoryRevisionPicker.svelte +165 -0
  74. package/dist/repository/components/RepositoryRevisionPicker.svelte.d.ts +14 -0
  75. package/dist/repository/components/RepositoryRevisions.svelte +115 -0
  76. package/dist/repository/components/RepositoryRevisions.svelte.d.ts +20 -0
  77. package/dist/repository/components/RepositoryShell.svelte +44 -0
  78. package/dist/repository/components/RepositoryShell.svelte.d.ts +11 -0
  79. package/dist/repository/components/RepositorySkeleton.svelte +138 -0
  80. package/dist/repository/components/RepositorySkeleton.svelte.d.ts +7 -0
  81. package/dist/repository/components/RepositorySourcePicker.svelte +114 -0
  82. package/dist/repository/components/RepositorySourcePicker.svelte.d.ts +7 -0
  83. package/dist/repository/components/RepositoryUpstreamActions.svelte +125 -0
  84. package/dist/repository/components/RepositoryUpstreamActions.svelte.d.ts +8 -0
  85. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte +290 -0
  86. package/dist/repository/components/RepositoryWorkingCopyStatus.svelte.d.ts +11 -0
  87. package/dist/repository/components/RepositoryWorkspacePicker.svelte +158 -0
  88. package/dist/repository/components/RepositoryWorkspacePicker.svelte.d.ts +11 -0
  89. package/dist/repository/components/backup/AdoptionSettings.svelte +95 -0
  90. package/dist/repository/components/backup/AdoptionSettings.svelte.d.ts +7 -0
  91. package/dist/repository/components/backup/BackupCard.svelte +79 -0
  92. package/dist/repository/components/backup/BackupCard.svelte.d.ts +14 -0
  93. package/dist/repository/components/backup/BackupField.svelte +45 -0
  94. package/dist/repository/components/backup/BackupField.svelte.d.ts +10 -0
  95. package/dist/repository/components/backup/BackupSelect.svelte +71 -0
  96. package/dist/repository/components/backup/BackupSelect.svelte.d.ts +35 -0
  97. package/dist/repository/components/backup/BackupSettings.svelte +122 -0
  98. package/dist/repository/components/backup/BackupSettings.svelte.d.ts +18 -0
  99. package/dist/repository/components/backup/BackupSettingsField.svelte +13 -0
  100. package/dist/repository/components/backup/BackupSettingsField.svelte.d.ts +4 -0
  101. package/dist/repository/components/backup/ForgeAccounts.svelte +231 -0
  102. package/dist/repository/components/backup/ForgeAccounts.svelte.d.ts +9 -0
  103. package/dist/repository/components/backup/ForgeAuthorization.svelte +267 -0
  104. package/dist/repository/components/backup/ForgeAuthorization.svelte.d.ts +9 -0
  105. package/dist/repository/components/backup/ForgeIcon.svelte +21 -0
  106. package/dist/repository/components/backup/ForgeIcon.svelte.d.ts +7 -0
  107. package/dist/repository/components/backup/PublicationRecovery.svelte +129 -0
  108. package/dist/repository/components/backup/PublicationRecovery.svelte.d.ts +11 -0
  109. package/dist/repository/components/backup/RemoteSettings.svelte +288 -0
  110. package/dist/repository/components/backup/RemoteSettings.svelte.d.ts +11 -0
  111. package/dist/repository/components/backup/RepositorySettingsPage.svelte +51 -0
  112. package/dist/repository/components/backup/RepositorySettingsPage.svelte.d.ts +4 -0
  113. package/dist/repository/components/backup/StorageSettings.svelte +158 -0
  114. package/dist/repository/components/backup/StorageSettings.svelte.d.ts +7 -0
  115. package/dist/repository/components/backup/SyncConflictEditor.svelte +158 -0
  116. package/dist/repository/components/backup/SyncConflictEditor.svelte.d.ts +9 -0
  117. package/dist/repository/components/backup/SyncSettings.svelte +97 -0
  118. package/dist/repository/components/backup/SyncSettings.svelte.d.ts +9 -0
  119. package/dist/repository/components/backup/adoption-settings.d.ts +7 -0
  120. package/dist/repository/components/backup/adoption-settings.js +42 -0
  121. package/dist/repository/components/backup/backup-settings.d.ts +35 -0
  122. package/dist/repository/components/backup/backup-settings.js +96 -0
  123. package/dist/repository/components/backup/forge-icons.d.ts +10 -0
  124. package/dist/repository/components/backup/forge-icons.js +11 -0
  125. package/dist/repository/components/backup/remote-restore.d.ts +3 -0
  126. package/dist/repository/components/backup/remote-restore.js +17 -0
  127. package/dist/repository/components/backup/storage-settings.d.ts +8 -0
  128. package/dist/repository/components/backup/storage-settings.js +23 -0
  129. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte +212 -0
  130. package/dist/repository/components/blame/RepositoryBlameCommitTitle.svelte.d.ts +14 -0
  131. package/dist/repository/components/blame/RepositoryBlameGroup.svelte +189 -0
  132. package/dist/repository/components/blame/RepositoryBlameGroup.svelte.d.ts +20 -0
  133. package/dist/repository/components/blame/RepositoryBlamePanel.svelte +148 -0
  134. package/dist/repository/components/blame/RepositoryBlamePanel.svelte.d.ts +13 -0
  135. package/dist/repository/components/blame/RepositoryBlameRows.svelte +137 -0
  136. package/dist/repository/components/blame/RepositoryBlameRows.svelte.d.ts +32 -0
  137. package/dist/repository/components/blame/RepositoryBlameView.svelte +121 -0
  138. package/dist/repository/components/blame/RepositoryBlameView.svelte.d.ts +16 -0
  139. package/dist/repository/components/blame/blame-view.d.ts +16 -0
  140. package/dist/repository/components/blame/blame-view.js +73 -0
  141. package/dist/repository/components/blame/editor-actions.d.ts +3 -0
  142. package/dist/repository/components/blame/editor-actions.js +53 -0
  143. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte +83 -0
  144. package/dist/repository/components/conflicts/RepositoryConflictActions.svelte.d.ts +13 -0
  145. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte +93 -0
  146. package/dist/repository/components/conflicts/RepositoryConflictBody.svelte.d.ts +16 -0
  147. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte +84 -0
  148. package/dist/repository/components/conflicts/RepositoryConflictFileTree.svelte.d.ts +21 -0
  149. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte +35 -0
  150. package/dist/repository/components/conflicts/RepositoryConflictPath.svelte.d.ts +9 -0
  151. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte +133 -0
  152. package/dist/repository/components/conflicts/RepositoryConflictResolution.svelte.d.ts +12 -0
  153. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte +105 -0
  154. package/dist/repository/components/conflicts/RepositoryConflictSurface.svelte.d.ts +23 -0
  155. package/dist/repository/components/conflicts/RepositoryConflictText.svelte +104 -0
  156. package/dist/repository/components/conflicts/RepositoryConflictText.svelte.d.ts +26 -0
  157. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte +52 -0
  158. package/dist/repository/components/conflicts/RepositorySidebarToggleIcon.svelte.d.ts +7 -0
  159. package/dist/repository/components/conflicts/repository-conflict-file-tree.css +73 -0
  160. package/dist/repository/components/conflicts/repository-conflicts.css +125 -0
  161. package/dist/repository/components/file-history-view.d.ts +15 -0
  162. package/dist/repository/components/file-history-view.js +110 -0
  163. package/dist/repository/components/operation-view.d.ts +16 -0
  164. package/dist/repository/components/operation-view.js +95 -0
  165. package/dist/repository/components/repository-backup.d.ts +22 -0
  166. package/dist/repository/components/repository-backup.js +75 -0
  167. package/dist/repository/components/repository-column-chrome.css +35 -0
  168. package/dist/repository/components/repository-commit-picker.css +55 -0
  169. package/dist/repository/components/repository-feedback.d.ts +7 -0
  170. package/dist/repository/components/repository-feedback.js +40 -0
  171. package/dist/repository/components/repository-identifiers.css +199 -0
  172. package/dist/repository/components/repository-navigation.d.ts +4 -0
  173. package/dist/repository/components/repository-navigation.js +16 -0
  174. package/dist/repository/components/repository-operation-column.css +112 -0
  175. package/dist/repository/components/repository-picker-options.css +11 -0
  176. package/dist/repository/components/repository-plugin.d.ts +33 -0
  177. package/dist/repository/components/repository-plugin.js +191 -0
  178. package/dist/repository/components/repository-review-identifiers.css +50 -0
  179. package/dist/repository/components/repository-status.d.ts +13 -0
  180. package/dist/repository/components/repository-status.js +227 -0
  181. package/dist/repository/components/repository-sync.d.ts +13 -0
  182. package/dist/repository/components/repository-sync.js +93 -0
  183. package/dist/repository/components/repository-tools.d.ts +3 -0
  184. package/dist/repository/components/repository-tools.js +13 -0
  185. package/dist/repository/components/repository-view.d.ts +16 -0
  186. package/dist/repository/components/repository-view.js +140 -0
  187. package/dist/repository/components/restore-controller.d.ts +9 -0
  188. package/dist/repository/components/restore-controller.js +44 -0
  189. package/dist/repository/components/search/search-provider.d.ts +3 -0
  190. package/dist/repository/components/search/search-provider.js +185 -0
  191. package/dist/repository/controllers/adoption-controller.d.ts +29 -0
  192. package/dist/repository/controllers/adoption-controller.js +145 -0
  193. package/dist/repository/controllers/adoption.d.ts +30 -0
  194. package/dist/repository/controllers/adoption.js +21 -0
  195. package/dist/repository/controllers/ai-history.d.ts +57 -0
  196. package/dist/repository/controllers/ai-history.js +51 -0
  197. package/dist/repository/controllers/author.d.ts +2 -0
  198. package/dist/repository/controllers/author.js +11 -0
  199. package/dist/repository/controllers/background-work.d.ts +14 -0
  200. package/dist/repository/controllers/background-work.js +57 -0
  201. package/dist/repository/controllers/backup-follow.d.ts +5 -0
  202. package/dist/repository/controllers/backup-follow.js +29 -0
  203. package/dist/repository/controllers/backup.d.ts +39 -0
  204. package/dist/repository/controllers/backup.js +129 -0
  205. package/dist/repository/controllers/blame-chunks.d.ts +13 -0
  206. package/dist/repository/controllers/blame-chunks.js +51 -0
  207. package/dist/repository/controllers/blame-controller.d.ts +17 -0
  208. package/dist/repository/controllers/blame-controller.js +148 -0
  209. package/dist/repository/controllers/blame-model.d.ts +25 -0
  210. package/dist/repository/controllers/blame-model.js +31 -0
  211. package/dist/repository/controllers/blame-preferences.d.ts +3 -0
  212. package/dist/repository/controllers/blame-preferences.js +18 -0
  213. package/dist/repository/controllers/commit-cards.d.ts +4 -0
  214. package/dist/repository/controllers/commit-cards.js +38 -0
  215. package/dist/repository/controllers/conflict-menu.d.ts +2 -0
  216. package/dist/repository/controllers/conflict-menu.js +1 -0
  217. package/dist/repository/controllers/file-history-controller.d.ts +29 -0
  218. package/dist/repository/controllers/file-history-controller.js +182 -0
  219. package/dist/repository/controllers/forge-accounts.d.ts +48 -0
  220. package/dist/repository/controllers/forge-accounts.js +1 -0
  221. package/dist/repository/controllers/forge-controller.d.ts +24 -0
  222. package/dist/repository/controllers/forge-controller.js +168 -0
  223. package/dist/repository/controllers/graph/model.d.ts +20 -0
  224. package/dist/repository/controllers/graph/model.js +33 -0
  225. package/dist/repository/controllers/graph/repository-log-graph.d.ts +44 -0
  226. package/dist/repository/controllers/graph/repository-log-graph.js +182 -0
  227. package/dist/repository/controllers/graph/repository-log-lanes.d.ts +7 -0
  228. package/dist/repository/controllers/graph/repository-log-lanes.js +19 -0
  229. package/dist/repository/controllers/graph/revision-id.d.ts +3 -0
  230. package/dist/repository/controllers/graph/revision-id.js +10 -0
  231. package/dist/repository/controllers/history-canvas.d.ts +2 -0
  232. package/dist/repository/controllers/history-canvas.js +45 -0
  233. package/dist/repository/controllers/history-controller.d.ts +31 -0
  234. package/dist/repository/controllers/history-controller.js +238 -0
  235. package/dist/repository/controllers/history-files.d.ts +7 -0
  236. package/dist/repository/controllers/history-files.js +18 -0
  237. package/dist/repository/controllers/history-graph.d.ts +20 -0
  238. package/dist/repository/controllers/history-graph.js +89 -0
  239. package/dist/repository/controllers/history-index-controller.d.ts +22 -0
  240. package/dist/repository/controllers/history-index-controller.js +77 -0
  241. package/dist/repository/controllers/history-lifetime.d.ts +13 -0
  242. package/dist/repository/controllers/history-lifetime.js +40 -0
  243. package/dist/repository/controllers/history-reader.d.ts +22 -0
  244. package/dist/repository/controllers/history-reader.js +1 -0
  245. package/dist/repository/controllers/history-search-expression.d.ts +9 -0
  246. package/dist/repository/controllers/history-search-expression.js +86 -0
  247. package/dist/repository/controllers/history-selection.d.ts +5 -0
  248. package/dist/repository/controllers/history-selection.js +32 -0
  249. package/dist/repository/controllers/history-source.d.ts +10 -0
  250. package/dist/repository/controllers/history-source.js +7 -0
  251. package/dist/repository/controllers/history-state.d.ts +34 -0
  252. package/dist/repository/controllers/history-state.js +55 -0
  253. package/dist/repository/controllers/indexed-search-validation.d.ts +4 -0
  254. package/dist/repository/controllers/indexed-search-validation.js +64 -0
  255. package/dist/repository/controllers/indexed-search.d.ts +11 -0
  256. package/dist/repository/controllers/indexed-search.js +1 -0
  257. package/dist/repository/controllers/log-canvas.d.ts +2 -0
  258. package/dist/repository/controllers/log-canvas.js +25 -0
  259. package/dist/repository/controllers/native-indexed-search.d.ts +4 -0
  260. package/dist/repository/controllers/native-indexed-search.js +10 -0
  261. package/dist/repository/controllers/open-history-revision.d.ts +3 -0
  262. package/dist/repository/controllers/open-history-revision.js +8 -0
  263. package/dist/repository/controllers/operation-command.d.ts +2 -0
  264. package/dist/repository/controllers/operation-command.js +55 -0
  265. package/dist/repository/controllers/operation-controller.d.ts +33 -0
  266. package/dist/repository/controllers/operation-controller.js +267 -0
  267. package/dist/repository/controllers/operation-files.d.ts +33 -0
  268. package/dist/repository/controllers/operation-files.js +182 -0
  269. package/dist/repository/controllers/operation-graph.d.ts +17 -0
  270. package/dist/repository/controllers/operation-graph.js +50 -0
  271. package/dist/repository/controllers/operation-message.d.ts +5 -0
  272. package/dist/repository/controllers/operation-message.js +18 -0
  273. package/dist/repository/controllers/operation-metadata.d.ts +5 -0
  274. package/dist/repository/controllers/operation-metadata.js +26 -0
  275. package/dist/repository/controllers/operation-parent.d.ts +5 -0
  276. package/dist/repository/controllers/operation-parent.js +46 -0
  277. package/dist/repository/controllers/operation-state.d.ts +28 -0
  278. package/dist/repository/controllers/operation-state.js +26 -0
  279. package/dist/repository/controllers/parent-candidates.d.ts +4 -0
  280. package/dist/repository/controllers/parent-candidates.js +27 -0
  281. package/dist/repository/controllers/plugin-data.d.ts +9 -0
  282. package/dist/repository/controllers/plugin-data.js +33 -0
  283. package/dist/repository/controllers/preparation-queue.d.ts +9 -0
  284. package/dist/repository/controllers/preparation-queue.js +55 -0
  285. package/dist/repository/controllers/remote-controller.d.ts +23 -0
  286. package/dist/repository/controllers/remote-controller.js +98 -0
  287. package/dist/repository/controllers/remote.d.ts +48 -0
  288. package/dist/repository/controllers/remote.js +13 -0
  289. package/dist/repository/controllers/restore-recovery.d.ts +3 -0
  290. package/dist/repository/controllers/restore-recovery.js +32 -0
  291. package/dist/repository/controllers/restore.d.ts +66 -0
  292. package/dist/repository/controllers/restore.js +201 -0
  293. package/dist/repository/controllers/revision-comparison.d.ts +20 -0
  294. package/dist/repository/controllers/revision-comparison.js +89 -0
  295. package/dist/repository/controllers/search-controller.d.ts +19 -0
  296. package/dist/repository/controllers/search-controller.js +105 -0
  297. package/dist/repository/controllers/search-page.d.ts +2 -0
  298. package/dist/repository/controllers/search-page.js +39 -0
  299. package/dist/repository/controllers/search.d.ts +51 -0
  300. package/dist/repository/controllers/search.js +8 -0
  301. package/dist/repository/controllers/services.d.ts +7 -0
  302. package/dist/repository/controllers/services.js +24 -0
  303. package/dist/repository/controllers/storage-controller.d.ts +30 -0
  304. package/dist/repository/controllers/storage-controller.js +130 -0
  305. package/dist/repository/controllers/storage.d.ts +26 -0
  306. package/dist/repository/controllers/storage.js +1 -0
  307. package/dist/repository/controllers/sync-application.d.ts +17 -0
  308. package/dist/repository/controllers/sync-application.js +45 -0
  309. package/dist/repository/controllers/sync-controller.d.ts +31 -0
  310. package/dist/repository/controllers/sync-controller.js +300 -0
  311. package/dist/repository/controllers/sync-publication.d.ts +7 -0
  312. package/dist/repository/controllers/sync-publication.js +29 -0
  313. package/dist/repository/controllers/sync-recovery.d.ts +7 -0
  314. package/dist/repository/controllers/sync-recovery.js +27 -0
  315. package/dist/repository/controllers/sync.d.ts +62 -0
  316. package/dist/repository/controllers/sync.js +38 -0
  317. package/dist/repository/controllers/tags.d.ts +7 -0
  318. package/dist/repository/controllers/tags.js +71 -0
  319. package/dist/repository/controllers/transcript-paths.d.ts +2 -0
  320. package/dist/repository/controllers/transcript-paths.js +17 -0
  321. package/dist/repository/controllers/transcript-writers.d.ts +9 -0
  322. package/dist/repository/controllers/transcript-writers.js +37 -0
  323. package/dist/repository/controllers/working-copy-controller.d.ts +22 -0
  324. package/dist/repository/controllers/working-copy-controller.js +58 -0
  325. package/dist/repository/controllers/working-copy-status.d.ts +16 -0
  326. package/dist/repository/controllers/working-copy-status.js +57 -0
  327. package/dist/repository/controllers/workspaces.d.ts +7 -0
  328. package/dist/repository/controllers/workspaces.js +4 -0
  329. package/dist/repository/index.d.ts +9 -0
  330. package/dist/repository/index.js +6 -0
  331. package/manifest.json +12 -3
  332. package/package.json +43 -10
  333. package/registry-content/overview.md +10 -0
  334. package/registry.json +131 -2
@@ -0,0 +1,62 @@
1
+ import type { BackupCheckpoint } from "./backup.js";
2
+ import type { VaultRestorePreview, VaultRestoreRequest } from "./restore.js";
3
+ export type SyncProposal = {
4
+ local: BackupCheckpoint;
5
+ incoming: BackupCheckpoint;
6
+ candidate: BackupCheckpoint | null;
7
+ conflicts: string[];
8
+ };
9
+ export type SyncConflict = {
10
+ path: string;
11
+ terms: {
12
+ id: number;
13
+ role: string;
14
+ kind: string;
15
+ text: string | null;
16
+ executable?: boolean | null;
17
+ }[];
18
+ };
19
+ export type SyncResolution = {
20
+ kind: "term";
21
+ id: number;
22
+ } | {
23
+ kind: "text";
24
+ text: string;
25
+ executable: boolean;
26
+ } | {
27
+ kind: "delete";
28
+ };
29
+ export interface SyncService {
30
+ prepare(revision: number): Promise<SyncProposal | null>;
31
+ preview(candidate: string, revision: number): Promise<VaultRestorePreview>;
32
+ apply(request: VaultRestoreRequest, revision: number): Promise<unknown>;
33
+ conflict(candidate: string, path: string, revision: number): Promise<SyncConflict>;
34
+ resolve(candidate: string, path: string, resolution: SyncResolution, revision: number): Promise<BackupCheckpoint>;
35
+ publish(revision: number, requestId: string): Promise<"complete" | "unknown" | "stale" | "stopped">;
36
+ }
37
+ export type PendingSync = {
38
+ version: 1;
39
+ revision: number;
40
+ request: VaultRestoreRequest;
41
+ };
42
+ export declare function pendingSync(value: unknown): PendingSync | undefined;
43
+ export type SyncAction = "sync" | "fetch" | "pull" | "push" | "status";
44
+ export type SyncState = {
45
+ upstream?: import("./remote.js").RemoteSnapshot;
46
+ busy: boolean;
47
+ phase: "ready" | "fetching" | "applying" | "publishing" | "conflicts" | "attention" | "paused";
48
+ proposal?: SyncProposal;
49
+ enabled: boolean;
50
+ conflict?: SyncConflict;
51
+ lastSuccess?: number;
52
+ recovery: boolean;
53
+ };
54
+ export declare function idleSyncPhase(state: SyncState): SyncState["phase"];
55
+ /** Keep one notification episode across retries until a successful outcome. */
56
+ export declare function syncFeedback(feedback: {
57
+ report(error: unknown): void;
58
+ recovered(): void;
59
+ }): {
60
+ report(error: unknown): void;
61
+ recovered(): void;
62
+ };
@@ -0,0 +1,38 @@
1
+ export function pendingSync(value) {
2
+ if (!value || typeof value !== "object")
3
+ return;
4
+ const saved = value;
5
+ if (saved.version === 1 &&
6
+ Number.isSafeInteger(saved.revision) &&
7
+ saved.revision >= 0 &&
8
+ typeof saved.request?.checkpoint === "string" &&
9
+ typeof saved.request?.expected === "string" &&
10
+ /^[a-zA-Z0-9-]{1,128}$/.test(saved.request?.request_id))
11
+ return saved;
12
+ }
13
+ export function idleSyncPhase(state) {
14
+ return state.recovery
15
+ ? "attention"
16
+ : state.proposal?.conflicts.length
17
+ ? "conflicts"
18
+ : state.enabled
19
+ ? "ready"
20
+ : "paused";
21
+ }
22
+ /** Keep one notification episode across retries until a successful outcome. */
23
+ export function syncFeedback(feedback) {
24
+ let failure;
25
+ return {
26
+ report(error) {
27
+ const message = error instanceof Error ? error.message : String(error);
28
+ if (failure === message)
29
+ return;
30
+ failure = message;
31
+ feedback.report(error);
32
+ },
33
+ recovered() {
34
+ failure = undefined;
35
+ feedback.recovered();
36
+ },
37
+ };
38
+ }
@@ -0,0 +1,7 @@
1
+ import type { LocalGraphCommit } from "@lapismd/jj-history";
2
+ import type { TagListItem } from "@lapismd/design-core/shadcn/tag-list";
3
+ import type { RepositoryLogRevision } from "./graph/model.js";
4
+ /** Source-style display mapping; native metadata remains the authority. */
5
+ export declare function repositoryCommitTags(commit?: LocalGraphCommit): TagListItem[];
6
+ export declare function repositoryGraphTags(revision: RepositoryLogRevision, commit?: LocalGraphCommit): TagListItem[];
7
+ export declare function repositoryCommitSearch(id: string, commit?: LocalGraphCommit): string;
@@ -0,0 +1,71 @@
1
+ import TriangleAlertIcon from "@lucide/svelte/icons/triangle-alert";
2
+ import { commitCardSearch } from "./commit-cards.js";
3
+ /** Source-style display mapping; native metadata remains the authority. */
4
+ export function repositoryCommitTags(commit) {
5
+ if (!commit)
6
+ return [];
7
+ return [
8
+ ...(commit.parents.length > 1
9
+ ? [{ id: "merge", label: "Merge", variant: "secondary" }]
10
+ : []),
11
+ ...(commit.divergent
12
+ ? [{ id: "divergent", label: "Divergent", tone: "warning" }]
13
+ : []),
14
+ ...(commit.conflicted
15
+ ? [
16
+ {
17
+ id: "conflicted",
18
+ label: "Conflicted",
19
+ tone: "danger",
20
+ icon: TriangleAlertIcon,
21
+ },
22
+ ]
23
+ : []),
24
+ ...commit.bookmarks
25
+ .filter((bookmark) => bookmark.added && !bookmark.removed)
26
+ .map((bookmark) => ({
27
+ id: `bookmark:${JSON.stringify([bookmark.name, bookmark.remote])}`,
28
+ label: `${bookmark.name}${bookmark.remote ? `@${bookmark.remote}` : ""}`,
29
+ // Neutral bookmarks need an opaque chip on selected graph rows.
30
+ variant: "secondary",
31
+ tone: bookmark.conflicted
32
+ ? "danger"
33
+ : bookmark.remote
34
+ ? "neutral"
35
+ : "accent",
36
+ })),
37
+ ...commit.workspaces.map((workspace) => ({
38
+ id: `workspace:${workspace}`,
39
+ label: workspace === "default"
40
+ ? "Working copy"
41
+ : `Working copy · ${workspace}`,
42
+ tone: "success",
43
+ })),
44
+ ];
45
+ }
46
+ export function repositoryGraphTags(revision, commit) {
47
+ if (commit)
48
+ return repositoryCommitTags(commit);
49
+ return [
50
+ ...(revision.reason === "merge" ? [{ id: "merge", label: "Merge" }] : []),
51
+ ...(revision.conflicted
52
+ ? [
53
+ {
54
+ id: "conflicted",
55
+ label: "Conflicted",
56
+ tone: "danger",
57
+ icon: TriangleAlertIcon,
58
+ },
59
+ ]
60
+ : []),
61
+ ...revision.tags.map((label, index) => ({
62
+ id: `operation:${index}:${label}`,
63
+ label,
64
+ })),
65
+ ];
66
+ }
67
+ export function repositoryCommitSearch(id, commit) {
68
+ return `${commitCardSearch(id, commit)} ${repositoryCommitTags(commit)
69
+ .map((tag) => tag.label)
70
+ .join(" ")}`.toLocaleLowerCase();
71
+ }
@@ -0,0 +1,2 @@
1
+ export declare function transcriptFile(path: string): boolean;
2
+ export declare function portableBackupFile(path: string): boolean;
@@ -0,0 +1,17 @@
1
+ // Mirror the native portable-content boundary; native admission stays authoritative.
2
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
3
+ export function transcriptFile(path) {
4
+ const parts = path.split("/");
5
+ const index = parts.indexOf(".lapis");
6
+ const tail = parts.slice(index + 1);
7
+ return (index >= 0 &&
8
+ parts.every((p) => !["", ".", "..", ".git", ".jj"].includes(p)) &&
9
+ tail.length === 4 &&
10
+ tail[0] === "agents" &&
11
+ tail[1] === "sessions" &&
12
+ UUID.test(tail[2]) &&
13
+ ["metadata.yaml", "agents.jsonl", "transcript.jsonl"].includes(tail[3]));
14
+ }
15
+ export function portableBackupFile(path) {
16
+ return !path.split("/").includes(".lapis") || transcriptFile(path);
17
+ }
@@ -0,0 +1,9 @@
1
+ import type { App } from "@lapis-notes/api";
2
+ type Guard = <T>(path: string | undefined, apply: () => Promise<T>) => Promise<T>;
3
+ type GuardObserver = (path: string | undefined) => () => void;
4
+ /** Observe protection already acquired by the shared controller; grants no authority. */
5
+ export declare function bindReplacementGuardObserver(app: App, enter: GuardObserver): () => void;
6
+ /** Optional AI writer admission augments replacement, not ordinary App teardown. */
7
+ export declare function bindTranscriptWriters(app: App, guard: Guard): () => void;
8
+ export declare function guardTranscriptReplacement<T>(app: App, path: string | undefined, apply: () => Promise<T>): Promise<T>;
9
+ export {};
@@ -0,0 +1,37 @@
1
+ const writers = new WeakMap();
2
+ const observers = new WeakMap();
3
+ /** Observe protection already acquired by the shared controller; grants no authority. */
4
+ export function bindReplacementGuardObserver(app, enter) {
5
+ if (observers.has(app))
6
+ throw new Error("Replacement observer is already bound");
7
+ const lease = { enter };
8
+ observers.set(app, lease);
9
+ return () => {
10
+ if (observers.get(app) === lease)
11
+ observers.delete(app);
12
+ };
13
+ }
14
+ /** Optional AI writer admission augments replacement, not ordinary App teardown. */
15
+ export function bindTranscriptWriters(app, guard) {
16
+ if (writers.has(app))
17
+ throw new Error("Transcript writers are already bound");
18
+ const lease = { guard };
19
+ writers.set(app, lease);
20
+ return () => {
21
+ if (writers.get(app) === lease)
22
+ writers.delete(app);
23
+ };
24
+ }
25
+ export function guardTranscriptReplacement(app, path, apply) {
26
+ const guard = writers.get(app)?.guard;
27
+ const run = async () => {
28
+ const leave = observers.get(app)?.enter(path);
29
+ try {
30
+ return await apply();
31
+ }
32
+ finally {
33
+ leave?.();
34
+ }
35
+ };
36
+ return guard ? guard(path, run) : app.fileEditingSessions.guard(path, run);
37
+ }
@@ -0,0 +1,22 @@
1
+ import type { WorkingCopyStatus } from "./working-copy-status.js";
2
+ export type WorkingCopyState = {
3
+ busy: boolean;
4
+ status: "loading" | "ready" | "unavailable";
5
+ value?: WorkingCopyStatus;
6
+ };
7
+ /** Coalesces refresh and fences results immediately on hide/plugin teardown. */
8
+ export declare class WorkingCopyController {
9
+ #private;
10
+ readonly read: () => Promise<WorkingCopyStatus>;
11
+ readonly feedback: {
12
+ report(error: unknown): void;
13
+ recovered(): void;
14
+ };
15
+ constructor(read: () => Promise<WorkingCopyStatus>, feedback: {
16
+ report(error: unknown): void;
17
+ recovered(): void;
18
+ });
19
+ subscribe(listener: (state: WorkingCopyState) => void): () => void;
20
+ refresh(): Promise<void>;
21
+ close(): Promise<void>;
22
+ }
@@ -0,0 +1,58 @@
1
+ /** Coalesces refresh and fences results immediately on hide/plugin teardown. */
2
+ export class WorkingCopyController {
3
+ #state = { busy: false, status: "loading" };
4
+ #listeners = new Set();
5
+ #job;
6
+ #closed = false;
7
+ read;
8
+ feedback;
9
+ constructor(read, feedback) {
10
+ this.read = read;
11
+ this.feedback = feedback;
12
+ }
13
+ subscribe(listener) {
14
+ this.#listeners.add(listener);
15
+ listener(this.#state);
16
+ return () => this.#listeners.delete(listener);
17
+ }
18
+ #set(state) {
19
+ this.#state = state;
20
+ for (const listener of this.#listeners)
21
+ listener(state);
22
+ }
23
+ refresh() {
24
+ if (this.#closed)
25
+ return Promise.resolve();
26
+ if (this.#job)
27
+ return this.#job;
28
+ this.#set({ ...this.#state, busy: true });
29
+ const job = (async () => {
30
+ try {
31
+ const value = await this.read();
32
+ if (this.#closed)
33
+ return;
34
+ this.feedback.recovered();
35
+ this.#set({ busy: false, status: "ready", value });
36
+ }
37
+ catch (error) {
38
+ if (this.#closed)
39
+ return;
40
+ // Never display old counts as current after a failed observation.
41
+ this.#set({ busy: false, status: "unavailable" });
42
+ this.feedback.report(error);
43
+ }
44
+ })();
45
+ this.#job = job;
46
+ void job.finally(() => {
47
+ if (this.#job === job)
48
+ this.#job = undefined;
49
+ });
50
+ return job;
51
+ }
52
+ async close() {
53
+ this.#closed = true;
54
+ await this.#job;
55
+ this.#set({ busy: false, status: "unavailable" });
56
+ this.#listeners.clear();
57
+ }
58
+ }
@@ -0,0 +1,16 @@
1
+ import type { LocalGraphCommit } from "@lapismd/jj-history";
2
+ export type WorkingCopyStatus = {
3
+ operation: string;
4
+ revision: string;
5
+ changeId: string;
6
+ workspace: string;
7
+ description: string;
8
+ author: LocalGraphCommit["author"];
9
+ files: number;
10
+ lines: {
11
+ additions: number;
12
+ deletions: number;
13
+ } | null;
14
+ uncounted: number;
15
+ };
16
+ export declare function parseWorkingCopyStatus(frame: string): WorkingCopyStatus;
@@ -0,0 +1,57 @@
1
+ const record = (value) => {
2
+ if (!value || typeof value !== "object" || Array.isArray(value))
3
+ throw new Error("Invalid working copy status");
4
+ return value;
5
+ };
6
+ const text = (value, limit) => {
7
+ if (typeof value !== "string" || value.length > limit)
8
+ throw new Error("Invalid working copy status text");
9
+ return value;
10
+ };
11
+ const count = (value) => {
12
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)
13
+ throw new Error("Invalid working copy count");
14
+ return value;
15
+ };
16
+ const id = (value, width) => {
17
+ const result = text(value, width);
18
+ if (!new RegExp(`^[a-f0-9]{${width}}$`, "u").test(result))
19
+ throw new Error("Invalid working copy identity");
20
+ return result;
21
+ };
22
+ export function parseWorkingCopyStatus(frame) {
23
+ if (frame.length > 1_048_576)
24
+ throw new Error("Working copy status exceeds limit");
25
+ const value = record(JSON.parse(frame));
26
+ if (value.version !== 1)
27
+ throw new Error("Unsupported working copy status");
28
+ const commit = record(value.commit), author = record(commit.author);
29
+ const timestamp = record(author.timestamp);
30
+ const millis = text(timestamp.millis, 24);
31
+ if (!/^-?\d+$/u.test(millis) || !Number.isFinite(Number(millis)))
32
+ throw new Error("Invalid working copy timestamp");
33
+ const lines = value.lines === null ? null : record(value.lines);
34
+ const files = count(value.files), uncounted = count(value.uncounted);
35
+ if (uncounted > files || uncounted > 0 !== (lines === null))
36
+ throw new Error("Incomplete working copy totals");
37
+ return {
38
+ operation: id(value.operation, 128),
39
+ revision: id(value.working_copy, 40),
40
+ changeId: id(commit.change_id, 32),
41
+ workspace: text(value.workspace, 256),
42
+ description: text(commit.description, 262144),
43
+ author: {
44
+ name: text(author.name, 4096),
45
+ email: text(author.email, 4096),
46
+ timestamp: {
47
+ millis: BigInt(millis),
48
+ offset_minutes: Number(timestamp.offset_minutes),
49
+ },
50
+ },
51
+ files,
52
+ uncounted,
53
+ lines: lines
54
+ ? { additions: count(lines.additions), deletions: count(lines.deletions) }
55
+ : null,
56
+ };
57
+ }
@@ -0,0 +1,7 @@
1
+ import type { LocalGraphCommit } from "@lapismd/jj-history";
2
+ export type RepositoryWorkspace = {
3
+ name: string;
4
+ commit: LocalGraphCommit;
5
+ };
6
+ /** Only explicitly recorded native workspaces are offered. */
7
+ export declare function repositoryWorkspaces(commits: readonly LocalGraphCommit[]): RepositoryWorkspace[];
@@ -0,0 +1,4 @@
1
+ /** Only explicitly recorded native workspaces are offered. */
2
+ export function repositoryWorkspaces(commits) {
3
+ return commits.flatMap((commit) => commit.workspaces.map((name) => ({ name, commit })));
4
+ }
@@ -0,0 +1,9 @@
1
+ export { RepositoryPlugin } from "./components/repository-plugin.js";
2
+ export { bindRepository, prepareRepositoryLeave, } from "./controllers/services.js";
3
+ export type { RepositoryFactory } from "./controllers/services.js";
4
+ export type { RepositoryServices, HistoryReader, RepositoryLeaveMode, } from "./controllers/history-reader.js";
5
+ export { bindTranscriptWriters } from "./controllers/transcript-writers.js";
6
+ export { ownedAiHistory } from "./controllers/ai-history.js";
7
+ export { nativeIndexedHistory } from "./controllers/native-indexed-search.js";
8
+ export { HistoryIndexController } from "./controllers/history-index-controller.js";
9
+ export type { IndexedHistoryService } from "./controllers/indexed-search.js";
@@ -0,0 +1,6 @@
1
+ export { RepositoryPlugin } from "./components/repository-plugin.js";
2
+ export { bindRepository, prepareRepositoryLeave, } from "./controllers/services.js";
3
+ export { bindTranscriptWriters } from "./controllers/transcript-writers.js";
4
+ export { ownedAiHistory } from "./controllers/ai-history.js";
5
+ export { nativeIndexedHistory } from "./controllers/native-indexed-search.js";
6
+ export { HistoryIndexController } from "./controllers/history-index-controller.js";
package/manifest.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "id": "history",
3
3
  "name": "History",
4
- "version": "0.1.2",
4
+ "version": "0.2.0",
5
5
  "minAppVersion": "0.1.0",
6
- "description": "File history",
6
+ "description": "Browse, compare, and restore saved file revisions",
7
7
  "author": "Lapis Notes",
8
+ "authorAvatarUrl": "https://gravatar.com/avatar/f7226d5f9cf07af2a6a60d3ab11413abb9d2e2eb60f2d5cce17356845a166155?size=256&d=initials",
9
+ "isDesktopOnly": false,
8
10
  "lapis": {
9
11
  "manifestVersion": 1,
10
12
  "source": "official",
@@ -17,7 +19,14 @@
17
19
  "format": "esm",
18
20
  "sharedDependencies": [
19
21
  "@lapis-notes/api",
20
- "@lapis-notes/api/workspace-host"
22
+ "@lapis-notes/api/workspace-host",
23
+ "svelte/renderer/5.56.10",
24
+ "svelte/renderer/5.56.10/attachments",
25
+ "svelte/renderer/5.56.10/events",
26
+ "svelte/renderer/5.56.10/internal/client",
27
+ "svelte/renderer/5.56.10/internal/disclose-version",
28
+ "svelte/renderer/5.56.10/reactivity",
29
+ "svelte/renderer/5.56.10/store"
21
30
  ],
22
31
  "requiresReloadOnUpdate": false
23
32
  }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@lapis-notes/history",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Lapis Notes file history plugin",
5
- "license": "AGPL-3.0-or-later",
5
+ "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "files": [
8
8
  "dist",
9
9
  "manifest.json",
10
10
  "registry.json",
11
+ "registry-content",
11
12
  "styles.css",
12
13
  "README.md",
13
14
  "CHANGELOG.md",
@@ -29,26 +30,52 @@
29
30
  },
30
31
  "./manifest.json": "./manifest.json",
31
32
  "./styles.css": "./styles.css",
32
- "./registry.json": "./registry.json"
33
+ "./registry.json": "./registry.json",
34
+ "./repository": {
35
+ "types": "./dist/repository/index.d.ts",
36
+ "svelte": "./dist/repository/index.js",
37
+ "import": "./dist/repository/index.js",
38
+ "default": "./dist/repository/index.js"
39
+ },
40
+ "./repository/controllers/*": {
41
+ "types": "./dist/repository/controllers/*.d.ts",
42
+ "import": "./dist/repository/controllers/*.js",
43
+ "default": "./dist/repository/controllers/*.js"
44
+ },
45
+ "./repository/components/*": {
46
+ "types": "./dist/repository/components/*.d.ts",
47
+ "import": "./dist/repository/components/*.js",
48
+ "default": "./dist/repository/components/*.js"
49
+ },
50
+ "./repository/components/*.svelte": {
51
+ "types": "./dist/repository/components/*.svelte.d.ts",
52
+ "svelte": "./dist/repository/components/*.svelte",
53
+ "default": "./dist/repository/components/*.svelte"
54
+ },
55
+ "./repository/styles/*.css": "./dist/repository/components/*.css"
33
56
  },
34
57
  "dependencies": {
35
- "@lapismd/design-core": "^0.1.0",
36
- "@lucide/svelte": "^0.523.0"
58
+ "@lapismd/design-core": "^0.7.4",
59
+ "@lucide/svelte": "^1.57.0",
60
+ "@tanstack/svelte-virtual": "^3.13.46"
37
61
  },
38
62
  "peerDependencies": {
39
- "@lapis-notes/api": "^0.1.0",
63
+ "@lapis-notes/api": "^0.2.0",
64
+ "@lapismd/jj-history": "^0.1.0",
40
65
  "svelte": "^5.0.0"
41
66
  },
42
67
  "devDependencies": {
68
+ "@lapismd/jj-history": "0.1.0",
43
69
  "@sveltejs/package": "^2.5.0",
44
70
  "@sveltejs/vite-plugin-svelte": "^5.1.1",
45
71
  "@tsconfig/svelte": "^5.0.5",
46
72
  "publint": "^0.3.12",
47
73
  "svelte": "^5.38.2",
48
74
  "svelte-check": "^4.3.1",
75
+ "tsx": "^4.23.1",
49
76
  "typescript": "~5.8.3",
50
- "vite": "^6.4.2",
51
- "vitest": "^4.1.8"
77
+ "vite": "^6.4.4",
78
+ "vitest": "^4.1.12"
52
79
  },
53
80
  "repository": {
54
81
  "type": "git",
@@ -62,13 +89,19 @@
62
89
  "publishConfig": {
63
90
  "access": "public"
64
91
  },
92
+ "peerDependenciesMeta": {
93
+ "@lapismd/jj-history": {
94
+ "optional": true
95
+ }
96
+ },
65
97
  "scripts": {
66
98
  "build": "pnpm run prepack",
67
99
  "check": "pnpm check:svelte && pnpm check:types",
68
100
  "check:svelte": "svelte-check --tsconfig ./tsconfig.app.json --fail-on-warnings --output human",
69
101
  "check:types": "tsc -p tsconfig.node.json --noEmit",
70
- "test": "vitest run --passWithNoTests",
102
+ "test": "vitest run --passWithNoTests && pnpm test:repository",
71
103
  "publint": "publint",
72
- "pack": "pnpm pack --pack-destination ../../.release/npm"
104
+ "pack": "pnpm pack --pack-destination ../../.release/npm",
105
+ "test:repository": "node --import tsx --test test/repository/*.test.mjs"
73
106
  }
74
107
  }
@@ -0,0 +1,10 @@
1
+ # History
2
+
3
+ History keeps a bounded, local timeline of meaningful file revisions as notes
4
+ change. Select the active note to browse timestamped snapshots in the sidebar,
5
+ then open any revision in a clear comparison against the document you have now.
6
+
7
+ When an earlier version contains something worth recovering, restore it through
8
+ the normal vault write path so every other Lapis view observes the update. The
9
+ retention limit and ignored paths remain configurable per vault, and revision
10
+ content never needs to leave the workspace.