@jingyi0605/codingns 0.9.5 → 0.9.6
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/bin/codingns.mjs +75 -0
- package/dist/public/assets/{AdaptiveButlerPage-kkJDsnCO.js → AdaptiveButlerPage-khJQh6a_.js} +1 -1
- package/dist/public/assets/{App-DrNI9lWA.js → App-If9gThKM.js} +6 -6
- package/dist/public/assets/{BootstrapPage-QgVH5Mps.js → BootstrapPage-DcfYtoLC.js} +1 -1
- package/dist/public/assets/{ConversationPage-DVk8VfIj.js → ConversationPage-Bfb7GLTM.js} +1 -1
- package/dist/public/assets/{DesktopDetachPreviewPage-BhfP0TpH.js → DesktopDetachPreviewPage-CXUPMcBz.js} +1 -1
- package/dist/public/assets/{DesktopModal-DRmDrv0S.js → DesktopModal-bMdI1jEe.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-DNbJXnSs.js → DesktopWindowPage-D1xwgS-7.js} +1 -1
- package/dist/public/assets/{FileContextPanel---fLO4ve.js → FileContextPanel-C4syif3B.js} +1 -1
- package/dist/public/assets/{GitSidebar-sXUE0TqT.js → GitSidebar-DduL9aTV.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-BftZ5pvb.js → MobileCreateSessionSheet-DWPBsEx8.js} +1 -1
- package/dist/public/assets/{MobileSheet-nw5SCa3N.js → MobileSheet-BXvQPkxt.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-DH_D02Wy.js → MobileTopHeaderFrame-vdYOyaaB.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-2K406G5p.js → MobileWorkspaceSwitcherHeader-DT330cAx.js} +1 -1
- package/dist/public/assets/{PluginAccessOverview-BVJihw3D.js → PluginAccessOverview-C77TeZTK.js} +1 -1
- package/dist/public/assets/{PluginContainerPage-CR4vStvr.js → PluginContainerPage-DdSwOCw-.js} +1 -1
- package/dist/public/assets/{PluginDetailPage-CrMX0Mnm.js → PluginDetailPage-BK1yTzvO.js} +1 -1
- package/dist/public/assets/{PluginsListPage-FtIL71Yg.js → PluginsListPage-DAAwSc6W.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-Bt1apX53.js → RelayConnectEntryPage-4Yyo2p8b.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-D-guzPrI.js → ServerSettingsModal-C_DEisHs.js} +1 -1
- package/dist/public/assets/{SessionIndexPage-CX2FppcJ.js → SessionIndexPage-DyMikN_x.js} +1 -1
- package/dist/public/assets/SettingsPage-CDAVsPr3.js +2 -0
- package/dist/public/assets/{TerminalManagerPanel-B5MKGPy-.js → TerminalManagerPanel-4OR47vcf.js} +1 -1
- package/dist/public/assets/{TerminalPage-C2dTNGHK.js → TerminalPage-Pvx396YX.js} +1 -1
- package/dist/public/assets/{TerminalRuntimeFallbackModal-DAqOxFD8.js → TerminalRuntimeFallbackModal-KvG6k4AQ.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-IsNwyE6T.js → ToolFilesPage-DrYHk0N-.js} +1 -1
- package/dist/public/assets/{ToolGitPage-BK1JBERN.js → ToolGitPage-Dz1q-Ns_.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-DwTYUQCK.js → ToolProcessesPage-CRhphOmM.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-BLOy7lPg.js → ToolsHomePage-BJSDLR6T.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-CqZKR6EA.js → WorkbenchLandingPage-BlkxdOLC.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-D-U7ghT0.js +1022 -0
- package/dist/public/assets/{WorkbenchModal-BM-OeW-b.js → WorkbenchModal-xbx1o6MO.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-DyWSCHz_.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-htbkGbtW.css +1 -0
- package/dist/public/assets/{WorkspaceDebugDetailPage-BMsEN5iG.js → WorkspaceDebugDetailPage-B4ol2_a5.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-5H9Gosx2.js → WorkspaceDetailPage-DMakfmHR.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-DQiXKgiP.js → WorkspaceHomePage-tmCafatd.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-CgPJq21V.js → client-runtime-manager-Bwau7p1v.js} +1 -1
- package/dist/public/assets/index-DmUJ8tIw.css +1 -0
- package/dist/public/assets/index-_OCkVmfl.js +50 -0
- package/dist/public/assets/{login-direct-candidate-resolver-CGaxAXV8.js → login-direct-candidate-resolver-CKUQ07IA.js} +1 -1
- package/dist/public/assets/{plugin-permission-copy-BR9gWy8b.js → plugin-permission-copy-DIVk5jNp.js} +1 -1
- package/dist/public/assets/{plugins-api-CdCsrG2e.js → plugins-api-DHJVvPZw.js} +1 -1
- package/dist/public/assets/{preferences-service-lOhnlxzP.js → preferences-service-CyxxeBmS.js} +1 -1
- package/dist/public/assets/{relay-entry-CQpxTS8y.js → relay-entry-B5GmiOrR.js} +1 -1
- package/dist/public/assets/{terminal-runtime-meta-oteTx66X.js → terminal-runtime-meta-DBsyT35T.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-Bu2ykZ6s.js → useRegisteredDebugTemplates-wCGD2SLW.js} +1 -1
- package/dist/public/assets/{workbench-navigation-DlgXuFW2.js → workbench-navigation-RyUjchbD.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.d.ts +1 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js +31 -0
- package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js.map +1 -1
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.d.ts +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js +1 -0
- package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js.map +1 -1
- package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js +4 -1
- package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js.map +1 -1
- package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js +140 -16
- package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +8 -7
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +14 -13
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +27 -24
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/auth/auth-controller.d.ts +27 -1
- package/dist/server/modules/auth/auth-controller.js +20 -0
- package/dist/server/modules/auth/auth-controller.js.map +1 -1
- package/dist/server/modules/auth/auth-service.d.ts +32 -1
- package/dist/server/modules/auth/auth-service.js +217 -2
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/bootstrap/bootstrap-service.js +1 -0
- package/dist/server/modules/bootstrap/bootstrap-service.js.map +1 -1
- package/dist/server/modules/butler/assistant-automation-service.d.ts +1 -1
- package/dist/server/modules/butler/assistant-automation-service.js +9 -10
- package/dist/server/modules/butler/assistant-automation-service.js.map +1 -1
- package/dist/server/modules/butler/butler-action-context-service.js +2 -2
- package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-action-service.d.ts +5 -5
- package/dist/server/modules/butler/butler-control-action-service.js +19 -19
- package/dist/server/modules/butler/butler-control-action-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +1 -1
- package/dist/server/modules/butler/butler-control-session-service.js +27 -26
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-timer-service.js +4 -5
- package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -1
- package/dist/server/modules/butler/butler-controller.d.ts +2 -2
- package/dist/server/modules/butler/butler-controller.js +19 -17
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +5 -5
- package/dist/server/modules/butler/butler-profile-service.js +17 -16
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-project-service.d.ts +7 -6
- package/dist/server/modules/butler/butler-project-service.js +35 -21
- package/dist/server/modules/butler/butler-project-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +2 -2
- package/dist/server/modules/butler/butler-session-service.js +33 -27
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.d.ts +2 -2
- package/dist/server/modules/butler/butler-session-summary-service.js +23 -9
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/context-aggregator.js +9 -9
- package/dist/server/modules/butler/context-aggregator.js.map +1 -1
- package/dist/server/modules/butler/patrol-execution-service.d.ts +0 -1
- package/dist/server/modules/butler/patrol-execution-service.js +6 -12
- package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.js +3 -3
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +8 -3
- package/dist/server/modules/sessions/session-history-service.js +126 -11
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.js +25 -15
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.js +28 -15
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.js +9 -9
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workspace/affairs-library-service.d.ts +3 -1
- package/dist/server/modules/workspace/affairs-library-service.js +112 -54
- package/dist/server/modules/workspace/affairs-library-service.js.map +1 -1
- package/dist/server/modules/workspace/affairs-tag-service.d.ts +12 -0
- package/dist/server/modules/workspace/affairs-tag-service.js +527 -2
- package/dist/server/modules/workspace/affairs-tag-service.js.map +1 -1
- package/dist/server/modules/workspace/workspace-controller.d.ts +1 -1
- package/dist/server/modules/workspace/workspace-controller.js +7 -7
- package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
- package/dist/server/modules/workspace/workspace-service.d.ts +7 -0
- package/dist/server/modules/workspace/workspace-service.js +151 -10
- package/dist/server/modules/workspace/workspace-service.js.map +1 -1
- package/dist/server/routes/auth.js +6 -0
- package/dist/server/routes/auth.js.map +1 -1
- package/dist/server/server/create-server.d.ts +4 -0
- package/dist/server/server/create-server.js +26 -0
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/server/start-host.js +20 -0
- package/dist/server/server/start-host.js.map +1 -1
- package/dist/server/shared/http/request-diagnostics.d.ts +56 -0
- package/dist/server/shared/http/request-diagnostics.js +256 -0
- package/dist/server/shared/http/request-diagnostics.js.map +1 -0
- package/dist/server/storage/repositories/auth-token-repository.d.ts +1 -0
- package/dist/server/storage/repositories/auth-token-repository.js +8 -0
- package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
- package/dist/server/storage/repositories/auth-user-repository.d.ts +50 -0
- package/dist/server/storage/repositories/auth-user-repository.js +198 -27
- package/dist/server/storage/repositories/auth-user-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-session-repository.d.ts +4 -1
- package/dist/server/storage/repositories/butler-control-session-repository.js +55 -8
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-profile-repository.d.ts +2 -1
- package/dist/server/storage/repositories/butler-profile-repository.js +35 -6
- package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-project-repository.d.ts +2 -0
- package/dist/server/storage/repositories/butler-project-repository.js +38 -4
- package/dist/server/storage/repositories/butler-project-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-session-repository.d.ts +2 -1
- package/dist/server/storage/repositories/butler-session-repository.js +35 -6
- package/dist/server/storage/repositories/butler-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-binding-repository.d.ts +3 -0
- package/dist/server/storage/repositories/session-binding-repository.js +70 -2
- package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-index-repository.js +7 -5
- package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
- package/dist/server/storage/repositories/workspace-repository.d.ts +3 -1
- package/dist/server/storage/repositories/workspace-repository.js +24 -10
- package/dist/server/storage/repositories/workspace-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +288 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +33 -9
- package/dist/server/types/domain.d.ts +8 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +34 -7
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +3 -7
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/SettingsPage-BI2Olcvr.js +0 -2
- package/dist/public/assets/WorkbenchLayout-CJHQtwuL.js +0 -1022
- package/dist/public/assets/WorkbenchShellRoute-2bKI6Q9k.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-BjuZD101.css +0 -1
- package/dist/public/assets/index-BARqMVSw.css +0 -1
- package/dist/public/assets/index-BUoNjVrY.js +0 -50
|
@@ -400,11 +400,13 @@ export class AffairsLibraryService {
|
|
|
400
400
|
return false;
|
|
401
401
|
}
|
|
402
402
|
if (browseMode === "tag") {
|
|
403
|
-
const tagPaths = selectedFavorite?.kind === "
|
|
404
|
-
?
|
|
405
|
-
:
|
|
406
|
-
?
|
|
407
|
-
:
|
|
403
|
+
const tagPaths = selectedFavorite?.kind === "tag_filter"
|
|
404
|
+
? normalizeSelectedTagPaths(selectedFavorite.tagPaths ?? selectedFavorite.path.split("|"))
|
|
405
|
+
: selectedFavorite?.kind === "tag"
|
|
406
|
+
? [selectedFavorite.path]
|
|
407
|
+
: normalizedSelectedTagPaths.length > 0
|
|
408
|
+
? normalizedSelectedTagPaths
|
|
409
|
+
: (input.selectedTagPath?.trim() ? [input.selectedTagPath.trim()] : []);
|
|
408
410
|
return tagPaths.length === 0 || tagPaths.every((tagPath) => matchesTagPath(document, tagPath));
|
|
409
411
|
}
|
|
410
412
|
const folderPath = selectedFavorite?.kind === "folder"
|
|
@@ -902,13 +904,18 @@ export class AffairsLibraryService {
|
|
|
902
904
|
};
|
|
903
905
|
}
|
|
904
906
|
if (opType === "delete") {
|
|
907
|
+
const refreshTargetPath = source.stats?.isDirectory()
|
|
908
|
+
? source.relativePath
|
|
909
|
+
: getParentFolderPath(source.relativePath);
|
|
910
|
+
const deletedPath = source.relativePath;
|
|
905
911
|
if (source.stats?.isDirectory()) {
|
|
906
912
|
fs.rmSync(source.absolutePath, { recursive: true, force: false });
|
|
907
913
|
}
|
|
908
914
|
else {
|
|
909
915
|
fs.rmSync(source.absolutePath, { force: false });
|
|
910
916
|
}
|
|
911
|
-
this.
|
|
917
|
+
this.removePathFromHotDirectoryCache(workspaceId, source.rootDir, deletedPath);
|
|
918
|
+
this.afterFileMutation(workspaceId, source.rootDir, `library_delete:${source.relativePath}`, source.relativePath, { refreshTargetPath });
|
|
912
919
|
return {
|
|
913
920
|
success: true,
|
|
914
921
|
opType,
|
|
@@ -1044,9 +1051,9 @@ export class AffairsLibraryService {
|
|
|
1044
1051
|
});
|
|
1045
1052
|
}
|
|
1046
1053
|
}
|
|
1047
|
-
afterFileMutation(workspaceId, rootDir, reason, targetPath) {
|
|
1054
|
+
afterFileMutation(workspaceId, rootDir, reason, targetPath, options = {}) {
|
|
1048
1055
|
this.invalidateExportCache(rootDir);
|
|
1049
|
-
this.scheduleAutoRefresh(workspaceId, reason, normalizeMutationRefreshTarget(targetPath) ?? undefined);
|
|
1056
|
+
this.scheduleAutoRefresh(workspaceId, reason, normalizeMutationRefreshTarget(options.refreshTargetPath ?? targetPath) ?? undefined);
|
|
1050
1057
|
}
|
|
1051
1058
|
requestRefresh(workspaceId, userId, reason) {
|
|
1052
1059
|
const binding = this.requireBinding(workspaceId, userId);
|
|
@@ -1156,7 +1163,9 @@ export class AffairsLibraryService {
|
|
|
1156
1163
|
if (relativePath === ".ai-index" || relativePath.startsWith(".ai-index/")) {
|
|
1157
1164
|
return;
|
|
1158
1165
|
}
|
|
1159
|
-
const targetPath = normalizeMutationRefreshTarget(
|
|
1166
|
+
const targetPath = normalizeMutationRefreshTarget(input.kind === "delete"
|
|
1167
|
+
? getParentFolderPath(relativePath)
|
|
1168
|
+
: relativePath);
|
|
1160
1169
|
if (!targetPath) {
|
|
1161
1170
|
return;
|
|
1162
1171
|
}
|
|
@@ -1707,6 +1716,38 @@ export class AffairsLibraryService {
|
|
|
1707
1716
|
entry.staleReason = null;
|
|
1708
1717
|
this.ensureDirectoryWindow(workspaceId, rootDir, directoryPath);
|
|
1709
1718
|
}
|
|
1719
|
+
removePathFromHotDirectoryCache(workspaceId, rootDir, targetPath) {
|
|
1720
|
+
const normalizedTargetPath = normalizeMutationRefreshTarget(targetPath);
|
|
1721
|
+
if (!normalizedTargetPath) {
|
|
1722
|
+
return;
|
|
1723
|
+
}
|
|
1724
|
+
const deletedDirectoryPath = normalizeFolderPath(normalizedTargetPath);
|
|
1725
|
+
const parentDirectoryPath = normalizeFolderPath(getParentFolderPath(normalizedTargetPath));
|
|
1726
|
+
for (const entry of this.hotDirectoryCache.values()) {
|
|
1727
|
+
if (entry.workspaceId !== workspaceId || entry.rootDir !== rootDir) {
|
|
1728
|
+
continue;
|
|
1729
|
+
}
|
|
1730
|
+
const normalizedEntryDirectoryPath = normalizeFolderPath(entry.directoryPath);
|
|
1731
|
+
const beforeCount = entry.items.length;
|
|
1732
|
+
entry.items = entry.items.filter((item) => {
|
|
1733
|
+
const itemPath = normalizeMutationRefreshTarget(item.path);
|
|
1734
|
+
if (!itemPath) {
|
|
1735
|
+
return false;
|
|
1736
|
+
}
|
|
1737
|
+
return itemPath !== normalizedTargetPath && !itemPath.startsWith(`${normalizedTargetPath}/`);
|
|
1738
|
+
});
|
|
1739
|
+
if (beforeCount !== entry.items.length
|
|
1740
|
+
|| normalizedEntryDirectoryPath === parentDirectoryPath
|
|
1741
|
+
|| normalizedEntryDirectoryPath === deletedDirectoryPath
|
|
1742
|
+
|| normalizedEntryDirectoryPath.startsWith(`${deletedDirectoryPath}/`)) {
|
|
1743
|
+
entry.dirty = true;
|
|
1744
|
+
entry.status = entry.status === "running" ? "running" : "idle";
|
|
1745
|
+
entry.pendingHintReasons.add(`library_delete:${normalizedTargetPath}`);
|
|
1746
|
+
entry.lastHintAt = nowIso();
|
|
1747
|
+
entry.staleReason = null;
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1710
1751
|
ensureDirectoryWindow(workspaceId, rootDir, directoryPath) {
|
|
1711
1752
|
const entry = this.getOrCreateHotDirectoryEntry(workspaceId, rootDir, directoryPath);
|
|
1712
1753
|
entry.updatedAtMs = Math.max(entry.updatedAtMs, Date.now());
|
|
@@ -1877,11 +1918,14 @@ export class AffairsLibraryService {
|
|
|
1877
1918
|
}
|
|
1878
1919
|
return parsed
|
|
1879
1920
|
.filter((item) => Boolean(item) && typeof item === "object")
|
|
1880
|
-
.filter((item) => (item.kind
|
|
1921
|
+
.filter((item) => isAffairsLibraryFavoriteKind(item.kind) && typeof item.path === "string" && item.path.trim())
|
|
1881
1922
|
.map((item) => ({
|
|
1882
1923
|
kind: item.kind,
|
|
1883
1924
|
path: item.path.trim(),
|
|
1884
|
-
label: typeof item.label === "string" && item.label.trim() ? item.label.trim() : item.path.trim()
|
|
1925
|
+
label: typeof item.label === "string" && item.label.trim() ? item.label.trim() : item.path.trim(),
|
|
1926
|
+
...(item.kind === "tag_filter"
|
|
1927
|
+
? { tagPaths: normalizeSelectedTagPaths(Array.isArray(item.tagPaths) ? item.tagPaths : item.path.split("|")) }
|
|
1928
|
+
: {})
|
|
1885
1929
|
}));
|
|
1886
1930
|
}
|
|
1887
1931
|
catch {
|
|
@@ -2969,11 +3013,14 @@ export class AffairsLibraryService {
|
|
|
2969
3013
|
}
|
|
2970
3014
|
normalizeFavorites(favorites) {
|
|
2971
3015
|
return favorites
|
|
2972
|
-
.filter((item) => item && (item.kind
|
|
3016
|
+
.filter((item) => item && isAffairsLibraryFavoriteKind(item.kind) && item.path.trim())
|
|
2973
3017
|
.map((item) => ({
|
|
2974
3018
|
kind: item.kind,
|
|
2975
3019
|
path: item.path.trim(),
|
|
2976
|
-
label: item.label.trim() || item.path.trim()
|
|
3020
|
+
label: item.label.trim() || item.path.trim(),
|
|
3021
|
+
...(item.kind === "tag_filter"
|
|
3022
|
+
? { tagPaths: normalizeSelectedTagPaths(item.tagPaths ?? item.path.split("|")) }
|
|
3023
|
+
: {})
|
|
2977
3024
|
}));
|
|
2978
3025
|
}
|
|
2979
3026
|
resolvePreferredWorkspaceId(preferredWorkspaceId) {
|
|
@@ -3198,7 +3245,7 @@ function resolveAffairsLibraryRelativePath(rootDir, absolutePath) {
|
|
|
3198
3245
|
return relativePath;
|
|
3199
3246
|
}
|
|
3200
3247
|
function normalizeMutationRefreshTarget(relativePath) {
|
|
3201
|
-
const normalizedPath = relativePath
|
|
3248
|
+
const normalizedPath = relativePath?.trim().replace(/^\.\/+/, "").replace(/\/+$/, "") ?? "";
|
|
3202
3249
|
return normalizedPath || null;
|
|
3203
3250
|
}
|
|
3204
3251
|
function normalizeHintTargetPath(targetPath) {
|
|
@@ -3314,11 +3361,18 @@ function matchesFavorite(favorite, documentPath, directTags, derivedTags) {
|
|
|
3314
3361
|
const normalizedPath = favorite.path === "." ? "" : favorite.path.replace(/\/+$/g, "");
|
|
3315
3362
|
return !normalizedPath || documentPath === normalizedPath || documentPath.startsWith(`${normalizedPath}/`);
|
|
3316
3363
|
}
|
|
3364
|
+
if (favorite.kind === "tag_filter") {
|
|
3365
|
+
const tagPaths = normalizeSelectedTagPaths(favorite.tagPaths ?? favorite.path.split("|"));
|
|
3366
|
+
return tagPaths.length > 0 && tagPaths.every((tagPath) => ([...directTags, ...derivedTags].some((tag) => tag === tagPath || tag.startsWith(`${tagPath}/`))));
|
|
3367
|
+
}
|
|
3317
3368
|
return [...directTags, ...derivedTags].some((tag) => tag === favorite.path || tag.startsWith(`${favorite.path}/`));
|
|
3318
3369
|
}
|
|
3319
3370
|
function buildFavoriteNodeId(kind, pathValue) {
|
|
3320
3371
|
return `library:favorite:${kind}:${pathValue}`;
|
|
3321
3372
|
}
|
|
3373
|
+
function isAffairsLibraryFavoriteKind(kind) {
|
|
3374
|
+
return kind === "folder" || kind === "tag" || kind === "tag_filter";
|
|
3375
|
+
}
|
|
3322
3376
|
function matchesTagPath(document, tagPath) {
|
|
3323
3377
|
const normalizedTagPath = tagPath.trim();
|
|
3324
3378
|
if (!normalizedTagPath) {
|
|
@@ -3477,6 +3531,16 @@ function buildAffairsFolderDocumentsFromFilesystem(rootDir, normalizedFolderPath
|
|
|
3477
3531
|
const documentMap = new Map();
|
|
3478
3532
|
let hasSnapshotData = false;
|
|
3479
3533
|
let hasLiveData = false;
|
|
3534
|
+
let targetStats = null;
|
|
3535
|
+
if (fs.existsSync(targetDir)) {
|
|
3536
|
+
try {
|
|
3537
|
+
targetStats = fs.statSync(targetDir);
|
|
3538
|
+
}
|
|
3539
|
+
catch {
|
|
3540
|
+
targetStats = null;
|
|
3541
|
+
}
|
|
3542
|
+
}
|
|
3543
|
+
const canVerifyLiveFiles = targetStats?.isDirectory() === true;
|
|
3480
3544
|
for (const document of exportData?.documents ?? []) {
|
|
3481
3545
|
if (!matchesDirectFolder(document.path, normalizedFolderPath)) {
|
|
3482
3546
|
continue;
|
|
@@ -3489,6 +3553,9 @@ function buildAffairsFolderDocumentsFromFilesystem(rootDir, normalizedFolderPath
|
|
|
3489
3553
|
continue;
|
|
3490
3554
|
}
|
|
3491
3555
|
const stat = readAffairsLibraryStatsSafe(rootDir, document.path);
|
|
3556
|
+
if (canVerifyLiveFiles && !stat?.isFile()) {
|
|
3557
|
+
continue;
|
|
3558
|
+
}
|
|
3492
3559
|
documentMap.set(document.path, {
|
|
3493
3560
|
...document,
|
|
3494
3561
|
createdAt: document.createdAt ?? toIsoOrNull(stat?.birthtime),
|
|
@@ -3498,47 +3565,38 @@ function buildAffairsFolderDocumentsFromFilesystem(rootDir, normalizedFolderPath
|
|
|
3498
3565
|
});
|
|
3499
3566
|
hasSnapshotData = true;
|
|
3500
3567
|
}
|
|
3501
|
-
if (
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) {
|
|
3511
|
-
const relativePath = normalizedFolderPath ? `${normalizedFolderPath}/${entry.name}` : entry.name;
|
|
3512
|
-
if ((entry.name.startsWith(".") || hasHiddenPathSegment(relativePath))
|
|
3513
|
-
&& !isIncludedHiddenPath(relativePath, config.includedHiddenPaths)) {
|
|
3514
|
-
continue;
|
|
3515
|
-
}
|
|
3516
|
-
if (!entry.isFile()) {
|
|
3517
|
-
continue;
|
|
3518
|
-
}
|
|
3519
|
-
const extension = path.extname(entry.name).toLowerCase();
|
|
3520
|
-
if (!supportedExtensions.has(extension)) {
|
|
3521
|
-
continue;
|
|
3522
|
-
}
|
|
3523
|
-
if (configuredExtensions.size > 0 && !configuredExtensions.has(extension)) {
|
|
3524
|
-
continue;
|
|
3525
|
-
}
|
|
3526
|
-
const stat = readAffairsLibraryStatsSafe(rootDir, relativePath);
|
|
3527
|
-
const exported = documentMap.get(relativePath);
|
|
3528
|
-
documentMap.set(relativePath, {
|
|
3529
|
-
documentId: exported?.documentId ?? relativePath,
|
|
3530
|
-
path: relativePath,
|
|
3531
|
-
title: exported?.title?.trim() || path.basename(entry.name, extension) || entry.name,
|
|
3532
|
-
summary: exported?.summary ?? "",
|
|
3533
|
-
updatedAt: stat?.mtime.toISOString() ?? exported?.updatedAt ?? "",
|
|
3534
|
-
createdAt: toIsoOrNull(stat?.birthtime) ?? exported?.createdAt ?? null,
|
|
3535
|
-
sizeBytes: stat?.size ?? exported?.sizeBytes ?? null,
|
|
3536
|
-
tags: exported?.tags ?? [],
|
|
3537
|
-
derivedTags: exported?.derivedTags ?? [],
|
|
3538
|
-
isFavorite: false
|
|
3539
|
-
});
|
|
3540
|
-
hasLiveData = true;
|
|
3568
|
+
if (targetStats?.isDirectory()) {
|
|
3569
|
+
for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) {
|
|
3570
|
+
const relativePath = normalizedFolderPath ? `${normalizedFolderPath}/${entry.name}` : entry.name;
|
|
3571
|
+
if ((entry.name.startsWith(".") || hasHiddenPathSegment(relativePath))
|
|
3572
|
+
&& !isIncludedHiddenPath(relativePath, config.includedHiddenPaths)) {
|
|
3573
|
+
continue;
|
|
3574
|
+
}
|
|
3575
|
+
if (!entry.isFile()) {
|
|
3576
|
+
continue;
|
|
3541
3577
|
}
|
|
3578
|
+
const extension = path.extname(entry.name).toLowerCase();
|
|
3579
|
+
if (!supportedExtensions.has(extension)) {
|
|
3580
|
+
continue;
|
|
3581
|
+
}
|
|
3582
|
+
if (configuredExtensions.size > 0 && !configuredExtensions.has(extension)) {
|
|
3583
|
+
continue;
|
|
3584
|
+
}
|
|
3585
|
+
const stat = readAffairsLibraryStatsSafe(rootDir, relativePath);
|
|
3586
|
+
const exported = documentMap.get(relativePath);
|
|
3587
|
+
documentMap.set(relativePath, {
|
|
3588
|
+
documentId: exported?.documentId ?? relativePath,
|
|
3589
|
+
path: relativePath,
|
|
3590
|
+
title: exported?.title?.trim() || path.basename(entry.name, extension) || entry.name,
|
|
3591
|
+
summary: exported?.summary ?? "",
|
|
3592
|
+
updatedAt: stat?.mtime.toISOString() ?? exported?.updatedAt ?? "",
|
|
3593
|
+
createdAt: toIsoOrNull(stat?.birthtime) ?? exported?.createdAt ?? null,
|
|
3594
|
+
sizeBytes: stat?.size ?? exported?.sizeBytes ?? null,
|
|
3595
|
+
tags: exported?.tags ?? [],
|
|
3596
|
+
derivedTags: exported?.derivedTags ?? [],
|
|
3597
|
+
isFavorite: false
|
|
3598
|
+
});
|
|
3599
|
+
hasLiveData = true;
|
|
3542
3600
|
}
|
|
3543
3601
|
}
|
|
3544
3602
|
return {
|