wiki-graph-core 0.4.0 → 0.4.1
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/data/help/commands/library-predicate.jinja +2 -2
- package/data/help/commands/library.jinja +12 -10
- package/data/help/commands/predicate.jinja +1 -1
- package/data/help/topics/library.jinja +8 -5
- package/data/help/topics/uri.jinja +2 -0
- package/dist/gc.cjs.map +1 -1
- package/dist/index.cjs +114 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/library/index.d.ts +2 -2
- package/dist/library/membership.js +18 -5
- package/dist/library/membership.js.map +1 -1
- package/dist/library/query.d.ts +4 -2
- package/dist/library/query.js +44 -0
- package/dist/library/query.js.map +1 -1
- package/dist/library/registry.d.ts +2 -1
- package/dist/library/registry.js +10 -0
- package/dist/library/registry.js.map +1 -1
- package/dist/maintenance/upgrade.js +15 -19
- package/dist/maintenance/upgrade.js.map +1 -1
- package/dist/retrieval/query/archive-view/helper/sort.js +1 -1
- package/dist/retrieval/query/archive-view/helper/sort.js.map +1 -1
- package/dist/storage/schema-upgrade/index.d.ts +7 -2
- package/dist/storage/schema-upgrade/index.js +26 -14
- package/dist/storage/schema-upgrade/index.js.map +1 -1
- package/dist/worker.cjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1667,7 +1667,9 @@ declare function listArchiveEvidence(document: ReadonlyDocument, uri: string, op
|
|
|
1667
1667
|
declare function packArchiveContext(document: ReadonlyDocument, id: string, budget: number): Promise<ArchivePack>;
|
|
1668
1668
|
|
|
1669
1669
|
declare function findWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, query: string, options?: ArchiveFindOptions): Promise<ArchiveFindResult>;
|
|
1670
|
+
declare function findWikiGraphLibraryArchiveMembers(target: ParsedWikiGraphLibraryUri, query: string, options?: ArchiveFindOptions): Promise<ArchiveFindResult>;
|
|
1670
1671
|
declare function listWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, options?: ArchiveCollectionOptions): Promise<ArchiveCollectionResult>;
|
|
1672
|
+
declare function listWikiGraphLibraryArchiveMembers(target: ParsedWikiGraphLibraryUri, options?: ArchiveCollectionOptions): Promise<ArchiveCollectionResult>;
|
|
1671
1673
|
declare function readWikiGraphLibraryPage(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: Parameters<typeof readArchivePage>[2]): Promise<ArchivePage>;
|
|
1672
1674
|
declare function listWikiGraphLibraryEvidence(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: ArchiveEvidenceOptions): Promise<ArchiveEvidence>;
|
|
1673
1675
|
declare function listRelatedWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: ArchiveRelatedOptions): Promise<ArchiveRelatedResult>;
|
|
@@ -2496,9 +2498,14 @@ declare class WikiGraphArchiveFile {
|
|
|
2496
2498
|
declare function ensureWikiGraphHomeSchemaCurrent(): Promise<void>;
|
|
2497
2499
|
declare function readWikiGraphHomeSchemaVersion(coreDatabasePath?: string): Promise<number>;
|
|
2498
2500
|
|
|
2501
|
+
interface WikiGraphArchiveSchemaUpgradeResult {
|
|
2502
|
+
readonly changed: boolean;
|
|
2503
|
+
readonly repairedToc: boolean;
|
|
2504
|
+
readonly schemaChanged: boolean;
|
|
2505
|
+
}
|
|
2499
2506
|
declare function ensureWikiGraphArchiveSchemaCurrent(archivePath: string): Promise<void>;
|
|
2500
2507
|
declare function readWikiGraphArchiveSchemaVersion(archivePath: string): Promise<number>;
|
|
2501
|
-
declare function upgradeWikiGraphArchiveSchema(archivePath: string): Promise<
|
|
2508
|
+
declare function upgradeWikiGraphArchiveSchema(archivePath: string): Promise<WikiGraphArchiveSchemaUpgradeResult>;
|
|
2502
2509
|
|
|
2503
2510
|
type WikiGraphMaintenanceUpgradeResult = {
|
|
2504
2511
|
readonly kind: "home";
|
|
@@ -2695,4 +2702,4 @@ declare function collectReadingGraphObjects(chapterId: number, objects: AsyncIte
|
|
|
2695
2702
|
}>;
|
|
2696
2703
|
declare function createSummaryInputSnapshotFromReadingGraphObjects(chapterId: number, objects: AsyncIterable<WikgObject> | Iterable<WikgObject>): Promise<SummaryInputSnapshotData>;
|
|
2697
2704
|
|
|
2698
|
-
export { AddBuildJobOptions, type AddChapterOptions, type AdvanceChapterStagesOptions, type AdvanceChapterStagesProgressCallback, type AdvanceChapterStagesProgressEvent, type AdvanceChapterStagesResult, type ArchiveBacklinkBucket, type ArchiveBacklinks, type ArchiveCollectionOptions, type ArchiveCollectionResult, type ArchiveCollectionType, type ArchiveEvidence, type ArchiveEvidenceItem, type ArchiveFindEvidencePreview, type ArchiveFindField, type ArchiveFindFilterType, type ArchiveFindHit, type ArchiveFindObjectType, type ArchiveFindOptions, type ArchiveFindOrder, type ArchiveFindPosition, type ArchiveFindResult, type ArchiveIndex, type ArchiveLibrarySource, type ArchiveListItem, type ArchiveListKind, type ArchiveNodeLabel, type ArchiveNodeSourceFragment, type ArchiveObjectType, type ArchivePack, type ArchivePage, type ArchiveRelatedResult, type ArchiveTriplePattern, type BookMeta, type BuildChapterGraphArtifactOptions, type BuildChapterKnowledgeGraphArtifactOptions, type BuildChapterSummaryArtifactOptions, BuildJob, BuildJobConflictScope, BuildJobEvent, BuildJobListOptions, BuildJobProgressReporter, BuildJobState, BuildJobTarget, type BuildWikimatchWindowsOptions, CHAPTER_STAGES, CLI_FULL_COMMAND, CLI_PRIMARY_COMMAND, type CachedDisambiguationRecord, type CachedPageRecord, type CachedQidRecord, type ChapterDetails, type ChapterEntry, type ChapterGraphBuildArtifact, type ChapterKnowledgeGraphBuildArtifact, type ChapterKnowledgeGraphInputSnapshot, type ChapterStage, type ChapterTree, type ChapterTreeApplyResult, type ChapterTreeInput, type ChapterTreeInputNode, type ChapterTreeMoveChange, type ChapterTreeNode, type ChapterTreeTitleChange, type ContinuationCursor, DEFAULT_EXTRACTION_PROMPT, DEFAULT_KNOWLEDGE_GRAPH_RECALL_PROMPT, DEFAULT_WIKISPINE_FETCH_ENDPOINT, Database, type DigestProgressEvent, DirectoryDocument, type DisambiguationExpansion, type DisambiguationLinkedQid, type DisambiguationMeaningPriority, type DisambiguationPageText, type DisambiguationProfile, type DisambiguationProfileError, type DisambiguationProfileMeaning, type DisambiguationProfileNormalizer, type DisambiguationProfileNormalizerInput, type Document, EVIDENCE_SELECTION_JSON_SHAPE, EVIDENCE_SELECTION_PROMPT_FRAGMENT, type EnrichmentStore, type EvidenceQuoteMatchStrategy, type EvidenceQuoteScore, type EvidenceSelection, type EvidenceSelectionCandidate, type EvidenceSelectionFailure, type EvidenceSelectionList, type EvidenceSelectionResolution, type EvidenceSelectionSentence, type EvidenceSentenceId, type GenerateChapterGraphOptions, type GenerateChapterSummaryOptions, type GuaranteedRequest, type GuaranteedRequestController, type JudgeWikimatchPolicyOptions, LLM, type LLMOptions, LLMPaymentRequiredError, type LLMRequestOptions, type LLMStreamProgressCallback, type LLMTokenUsage, type LLMTokenUsageCallback, type LLMessage, Language, LanguageCode, type LocatedWikiGraphUri, type MoveChapterOptions, ObjectMetadataKind, type ObjectMetadataTarget, type ParsedWikiGraphLibraryUri, type ParsedWikiGraphUri, type QidResolution, type QueryIndexScope, type QueryScope, RateLimiter, type ReadonlyDocument, type SerialDiscoveryItem, type SerialProgressEvent, type SerialsDiscoveredEvent, TOC_FILE_VERSION, WIKG_OBJECT_SCHEMA_VERSION, WIKI_GRAPH_CONTEXT_VERSION, WIKI_GRAPH_EDITOR_SCOPES, WIKI_GRAPH_JOB_URI_PREFIX, WIKI_GRAPH_READER_SCOPES, WIKI_GRAPH_SCOPES, WIKI_GRAPH_URI_PREFIX, type WikgObject, type WikiClient, WikiGraph, WikiGraphArchive, WikiGraphArchiveFile, type WikiGraphLLMOptions, type WikiGraphLibraryArchiveRecord, type WikiGraphLibraryIndexObjectHit, type WikiGraphLibraryIndexQueryResult, type WikiGraphLibraryIndexSource, type WikiGraphLibraryIndexState, type WikiGraphLibraryIndexStatus, type WikiGraphLibraryIndexTextHit, type WikiGraphLibraryRecord, type WikiGraphLibraryScanResult, type WikiGraphLibraryUpgradeResult, type WikiGraphMaintenanceUpgradeResult, type WikiGraphOpenSessionOptions, type WikiGraphOperation, type WikiGraphOptions, type WikiGraphProgressCallback, type WikiGraphProgressEvent, type WikiGraphProgressEventType, WikiGraphScope, type WikiGraphSerialEntry, type WikiGraphSourceSessionOptions, WikiGraphTask, WikiGraphTaskContext, type WikiGraphTaskContextOptions, type WikiGraphTaskIdentity, type WikiGraphTaskType, type WikiGraphTextStreamSessionOptions, type WikimatchAcceptedMention, type WikimatchCandidate, type WikimatchConflictGroup, type WikimatchPolicyDecision, type WikimatchPolicyDecisionOutput, type WikimatchPolicyFallback, type WikimatchPolicyJudgeInput, type WikimatchPolicyJudgeResult, type WikimatchPolicyResponse, type WikimatchPolicyUpdate, type WikimatchQidOption, type WikimatchTextRange, type WikimatchWindow, WikimediaClient, WikipageCache, WikipageResolver, type WikipageResolverOptions, type WikipageSitelink, type WikispineProvider, addBuildJob, addChapter, addWikiGraphLibraryArchive, advanceChapterStages, applyChapterTree, assertBuildJobInputRevision, assertNoActiveBuildJobConflicts, assertNoActiveBuildJobs, assertWikiGraphLibrarySchemaCurrent, boostBuildJob, buildChapterGraphArtifact, buildChapterKnowledgeGraphArtifact, buildChapterSummaryArtifact, buildChapterSummaryArtifactFromReadingGraphObjects, buildChapterSummaryArtifactFromSnapshot, buildWikimatchWindows, cancelBuildJob, cleanBuildJobs, clearChapterKnowledgeGraph, clearWikiGraphLibraryMetadata, collectChapterKnowledgeGraphObjects, collectReadingGraphObjects, commitChapterGraphArtifact, commitChapterKnowledgeGraphArtifact, commitChapterSummaryArtifact, createChapterKnowledgeGraphObjectStream, createChapterReadingGraphObjectStream, createContinuationCursor, createDefaultWikiGraphSampling, createDisambiguationProfileNormalizer, createEnrichmentProgressReporter, createEnv, createSummaryInputSnapshotFromReadingGraphObjects, createWikiGraphLibrary, createWikiGraphTaskId, createWikiGraphTempDirectory, deleteArchiveSearchSessions, deleteWikiGraphLibraryMetadataKey, disableWikiGraphLibraryIndex, ensureDefaultWikiGraphLibrary, ensureLibraryManagedArchiveHasNoSearchIndex, ensureWikiGraphArchiveSchemaCurrent, ensureWikiGraphHomeSchemaCurrent, finalizeWikiGraphLibraryArchiveWrite, findArchiveObjects, findWikiGraphLibraryObjects, formatChapterId, formatChapterUri, formatEdgeId, formatError, formatEvidenceSelectionChoicePrompt, formatLanguageForPrompt, formatLocatedChapterResourceUri, formatLocatedChapterSourceCollectionUri, formatLocatedChapterUri, formatLocatedWikiGraphUri, formatNodeId, formatSummaryId, formatWikiGraphCommandUri, formatWikiGraphLibraryUri, generateChapterGraph, generateChapterKnowledgeGraphArtifact, generateChapterKnowledgeGraphArtifactFromSnapshot, generateChapterSummary, getArchiveIndex, getBuildJob, getChapterDetails, getChapterTree, getLanguageCode, getWikiGraphLibraryArchive, getWikiGraphLibraryArchiveById, getWikiGraphLibraryMetadata, getWikipageLanguageCode, grepArchiveObjects, groundWikimatchCandidates, isArchiveSearchIndexCurrent, isWikiGraphJobUri, isWikiGraphLibraryUri, isWikiGraphUri, judgeWikimatchPolicy, listAllArchiveLinks, listArchiveCollection, listArchiveEvidence, listArchiveLinks, listArchiveObjects, listBuildJobs, listChapters, listRelatedArchiveObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraries, listWikiGraphLibraryArchives, listWikiGraphLibraryEvidence, listWikiGraphLibraryIndexArchiveIdsForObject, listWikiGraphLibraryObjects, listWikiGraphLibraryScope, markWikiGraphLibraryIndexDirty, migrateLegacySdpubToWikg, moveChapter, moveWikiGraphLibraryArchive, normalizeEvidenceDisplayText, normalizeEvidenceText, normalizeLanguageCode, openSharedStateDatabase, packArchiveContext, packWikiGraphLibraryContext, parseChapterPath, parseChapterTreeInput, parseChapterUriPath, parseLocatedWikiGraphUri, parsePolicyResponse, parseRetryAfterMs, parseWikgObject, parseWikiGraphLibraryUri, parseWikiGraphUriSyntax, pauseBuildJob, putWikiGraphLibraryMetadata, queryWikiGraphLibrarySearchIndex, rankEvidenceQuote, readArchiveIndexSettings, readArchivePage, readArchiveText, readBuildJobEvents, readChapterBuildInput, readContinuationCursor, readWikgArchiveFormatVersion, readWikgObjectsFromJsonl, readWikiGraphArchiveSchemaVersion, readWikiGraphHomeSchemaVersion, readWikiGraphLibraryIndexState, readWikiGraphLibraryPage, rebindWikiGraphLibrary, rebuildArchiveSearchIndex, rebuildWikiGraphLibraryIndex, recordBuildJobInputRevision, removeChapter, removeWikiGraphLibrary, removeWikiGraphLibraryArchive, replaceWikiGraphLibraryMetadata, requireArchiveUri, requireLocatedObjectOrArchiveUri, requireLocatedObjectUri, resetChapter, resolveBuildJobId, resolveChapterPath, resolveChapterPathReadonly, resolveDataDirPath, resolveDefaultWikiGraphLibraryDirectoryPath, resolveEvidenceSelection, resolveEvidenceSelectionList, resolveExtractionPrompt, resolveKnowledgeGraphRecallPrompt, resolveWikiGraphCoreDatabasePath, resolveWikiGraphHomeDirectoryPath, resolveWikiGraphLibrary, resolveWikiGraphLibraryArchivePath, resolveWikiGraphLibraryById, resolveWikiGraphLibraryQueryTargetById, resolveWikiGraphLibraryStagingDirectoryPath, resolveWikiGraphStateRootPath, resumeBuildJob, scanWikiGraphLibrary, scoreEvidenceQuote, setChapterSource, setChapterSummary, setChapterTitle, setFtsIndexEmbedded, snapshotChapterKnowledgeGraphInput, snapshotChapterSummaryInput, testWikispineRuntime, updateBuildJobTarget, upgradeWikiGraphArchiveSchema, upgradeWikiGraphLibrarySchema, upgradeWikiGraphMaintenanceTarget, validatePolicyResponse, withLoggingContext, withWikiGraphRuntimeEnvironment, withWikiGraphRuntimeStateDirectoryPath, writeWikgArchive, writeWikgObjectsToJsonl };
|
|
2705
|
+
export { AddBuildJobOptions, type AddChapterOptions, type AdvanceChapterStagesOptions, type AdvanceChapterStagesProgressCallback, type AdvanceChapterStagesProgressEvent, type AdvanceChapterStagesResult, type ArchiveBacklinkBucket, type ArchiveBacklinks, type ArchiveCollectionOptions, type ArchiveCollectionResult, type ArchiveCollectionType, type ArchiveEvidence, type ArchiveEvidenceItem, type ArchiveFindEvidencePreview, type ArchiveFindField, type ArchiveFindFilterType, type ArchiveFindHit, type ArchiveFindObjectType, type ArchiveFindOptions, type ArchiveFindOrder, type ArchiveFindPosition, type ArchiveFindResult, type ArchiveIndex, type ArchiveLibrarySource, type ArchiveListItem, type ArchiveListKind, type ArchiveNodeLabel, type ArchiveNodeSourceFragment, type ArchiveObjectType, type ArchivePack, type ArchivePage, type ArchiveRelatedResult, type ArchiveTriplePattern, type BookMeta, type BuildChapterGraphArtifactOptions, type BuildChapterKnowledgeGraphArtifactOptions, type BuildChapterSummaryArtifactOptions, BuildJob, BuildJobConflictScope, BuildJobEvent, BuildJobListOptions, BuildJobProgressReporter, BuildJobState, BuildJobTarget, type BuildWikimatchWindowsOptions, CHAPTER_STAGES, CLI_FULL_COMMAND, CLI_PRIMARY_COMMAND, type CachedDisambiguationRecord, type CachedPageRecord, type CachedQidRecord, type ChapterDetails, type ChapterEntry, type ChapterGraphBuildArtifact, type ChapterKnowledgeGraphBuildArtifact, type ChapterKnowledgeGraphInputSnapshot, type ChapterStage, type ChapterTree, type ChapterTreeApplyResult, type ChapterTreeInput, type ChapterTreeInputNode, type ChapterTreeMoveChange, type ChapterTreeNode, type ChapterTreeTitleChange, type ContinuationCursor, DEFAULT_EXTRACTION_PROMPT, DEFAULT_KNOWLEDGE_GRAPH_RECALL_PROMPT, DEFAULT_WIKISPINE_FETCH_ENDPOINT, Database, type DigestProgressEvent, DirectoryDocument, type DisambiguationExpansion, type DisambiguationLinkedQid, type DisambiguationMeaningPriority, type DisambiguationPageText, type DisambiguationProfile, type DisambiguationProfileError, type DisambiguationProfileMeaning, type DisambiguationProfileNormalizer, type DisambiguationProfileNormalizerInput, type Document, EVIDENCE_SELECTION_JSON_SHAPE, EVIDENCE_SELECTION_PROMPT_FRAGMENT, type EnrichmentStore, type EvidenceQuoteMatchStrategy, type EvidenceQuoteScore, type EvidenceSelection, type EvidenceSelectionCandidate, type EvidenceSelectionFailure, type EvidenceSelectionList, type EvidenceSelectionResolution, type EvidenceSelectionSentence, type EvidenceSentenceId, type GenerateChapterGraphOptions, type GenerateChapterSummaryOptions, type GuaranteedRequest, type GuaranteedRequestController, type JudgeWikimatchPolicyOptions, LLM, type LLMOptions, LLMPaymentRequiredError, type LLMRequestOptions, type LLMStreamProgressCallback, type LLMTokenUsage, type LLMTokenUsageCallback, type LLMessage, Language, LanguageCode, type LocatedWikiGraphUri, type MoveChapterOptions, ObjectMetadataKind, type ObjectMetadataTarget, type ParsedWikiGraphLibraryUri, type ParsedWikiGraphUri, type QidResolution, type QueryIndexScope, type QueryScope, RateLimiter, type ReadonlyDocument, type SerialDiscoveryItem, type SerialProgressEvent, type SerialsDiscoveredEvent, TOC_FILE_VERSION, WIKG_OBJECT_SCHEMA_VERSION, WIKI_GRAPH_CONTEXT_VERSION, WIKI_GRAPH_EDITOR_SCOPES, WIKI_GRAPH_JOB_URI_PREFIX, WIKI_GRAPH_READER_SCOPES, WIKI_GRAPH_SCOPES, WIKI_GRAPH_URI_PREFIX, type WikgObject, type WikiClient, WikiGraph, WikiGraphArchive, WikiGraphArchiveFile, type WikiGraphLLMOptions, type WikiGraphLibraryArchiveRecord, type WikiGraphLibraryIndexObjectHit, type WikiGraphLibraryIndexQueryResult, type WikiGraphLibraryIndexSource, type WikiGraphLibraryIndexState, type WikiGraphLibraryIndexStatus, type WikiGraphLibraryIndexTextHit, type WikiGraphLibraryRecord, type WikiGraphLibraryScanResult, type WikiGraphLibraryUpgradeResult, type WikiGraphMaintenanceUpgradeResult, type WikiGraphOpenSessionOptions, type WikiGraphOperation, type WikiGraphOptions, type WikiGraphProgressCallback, type WikiGraphProgressEvent, type WikiGraphProgressEventType, WikiGraphScope, type WikiGraphSerialEntry, type WikiGraphSourceSessionOptions, WikiGraphTask, WikiGraphTaskContext, type WikiGraphTaskContextOptions, type WikiGraphTaskIdentity, type WikiGraphTaskType, type WikiGraphTextStreamSessionOptions, type WikimatchAcceptedMention, type WikimatchCandidate, type WikimatchConflictGroup, type WikimatchPolicyDecision, type WikimatchPolicyDecisionOutput, type WikimatchPolicyFallback, type WikimatchPolicyJudgeInput, type WikimatchPolicyJudgeResult, type WikimatchPolicyResponse, type WikimatchPolicyUpdate, type WikimatchQidOption, type WikimatchTextRange, type WikimatchWindow, WikimediaClient, WikipageCache, WikipageResolver, type WikipageResolverOptions, type WikipageSitelink, type WikispineProvider, addBuildJob, addChapter, addWikiGraphLibraryArchive, advanceChapterStages, applyChapterTree, assertBuildJobInputRevision, assertNoActiveBuildJobConflicts, assertNoActiveBuildJobs, assertWikiGraphLibrarySchemaCurrent, boostBuildJob, buildChapterGraphArtifact, buildChapterKnowledgeGraphArtifact, buildChapterSummaryArtifact, buildChapterSummaryArtifactFromReadingGraphObjects, buildChapterSummaryArtifactFromSnapshot, buildWikimatchWindows, cancelBuildJob, cleanBuildJobs, clearChapterKnowledgeGraph, clearWikiGraphLibraryMetadata, collectChapterKnowledgeGraphObjects, collectReadingGraphObjects, commitChapterGraphArtifact, commitChapterKnowledgeGraphArtifact, commitChapterSummaryArtifact, createChapterKnowledgeGraphObjectStream, createChapterReadingGraphObjectStream, createContinuationCursor, createDefaultWikiGraphSampling, createDisambiguationProfileNormalizer, createEnrichmentProgressReporter, createEnv, createSummaryInputSnapshotFromReadingGraphObjects, createWikiGraphLibrary, createWikiGraphTaskId, createWikiGraphTempDirectory, deleteArchiveSearchSessions, deleteWikiGraphLibraryMetadataKey, disableWikiGraphLibraryIndex, ensureDefaultWikiGraphLibrary, ensureLibraryManagedArchiveHasNoSearchIndex, ensureWikiGraphArchiveSchemaCurrent, ensureWikiGraphHomeSchemaCurrent, finalizeWikiGraphLibraryArchiveWrite, findArchiveObjects, findWikiGraphLibraryArchiveMembers, findWikiGraphLibraryObjects, formatChapterId, formatChapterUri, formatEdgeId, formatError, formatEvidenceSelectionChoicePrompt, formatLanguageForPrompt, formatLocatedChapterResourceUri, formatLocatedChapterSourceCollectionUri, formatLocatedChapterUri, formatLocatedWikiGraphUri, formatNodeId, formatSummaryId, formatWikiGraphCommandUri, formatWikiGraphLibraryUri, generateChapterGraph, generateChapterKnowledgeGraphArtifact, generateChapterKnowledgeGraphArtifactFromSnapshot, generateChapterSummary, getArchiveIndex, getBuildJob, getChapterDetails, getChapterTree, getLanguageCode, getWikiGraphLibraryArchive, getWikiGraphLibraryArchiveById, getWikiGraphLibraryMetadata, getWikipageLanguageCode, grepArchiveObjects, groundWikimatchCandidates, isArchiveSearchIndexCurrent, isWikiGraphJobUri, isWikiGraphLibraryUri, isWikiGraphUri, judgeWikimatchPolicy, listAllArchiveLinks, listArchiveCollection, listArchiveEvidence, listArchiveLinks, listArchiveObjects, listBuildJobs, listChapters, listRelatedArchiveObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraries, listWikiGraphLibraryArchiveMembers, listWikiGraphLibraryArchives, listWikiGraphLibraryEvidence, listWikiGraphLibraryIndexArchiveIdsForObject, listWikiGraphLibraryObjects, listWikiGraphLibraryScope, markWikiGraphLibraryIndexDirty, migrateLegacySdpubToWikg, moveChapter, moveWikiGraphLibraryArchive, normalizeEvidenceDisplayText, normalizeEvidenceText, normalizeLanguageCode, openSharedStateDatabase, packArchiveContext, packWikiGraphLibraryContext, parseChapterPath, parseChapterTreeInput, parseChapterUriPath, parseLocatedWikiGraphUri, parsePolicyResponse, parseRetryAfterMs, parseWikgObject, parseWikiGraphLibraryUri, parseWikiGraphUriSyntax, pauseBuildJob, putWikiGraphLibraryMetadata, queryWikiGraphLibrarySearchIndex, rankEvidenceQuote, readArchiveIndexSettings, readArchivePage, readArchiveText, readBuildJobEvents, readChapterBuildInput, readContinuationCursor, readWikgArchiveFormatVersion, readWikgObjectsFromJsonl, readWikiGraphArchiveSchemaVersion, readWikiGraphHomeSchemaVersion, readWikiGraphLibraryIndexState, readWikiGraphLibraryPage, rebindWikiGraphLibrary, rebuildArchiveSearchIndex, rebuildWikiGraphLibraryIndex, recordBuildJobInputRevision, removeChapter, removeWikiGraphLibrary, removeWikiGraphLibraryArchive, replaceWikiGraphLibraryMetadata, requireArchiveUri, requireLocatedObjectOrArchiveUri, requireLocatedObjectUri, resetChapter, resolveBuildJobId, resolveChapterPath, resolveChapterPathReadonly, resolveDataDirPath, resolveDefaultWikiGraphLibraryDirectoryPath, resolveEvidenceSelection, resolveEvidenceSelectionList, resolveExtractionPrompt, resolveKnowledgeGraphRecallPrompt, resolveWikiGraphCoreDatabasePath, resolveWikiGraphHomeDirectoryPath, resolveWikiGraphLibrary, resolveWikiGraphLibraryArchivePath, resolveWikiGraphLibraryById, resolveWikiGraphLibraryQueryTargetById, resolveWikiGraphLibraryStagingDirectoryPath, resolveWikiGraphStateRootPath, resumeBuildJob, scanWikiGraphLibrary, scoreEvidenceQuote, setChapterSource, setChapterSummary, setChapterTitle, setFtsIndexEmbedded, snapshotChapterKnowledgeGraphInput, snapshotChapterSummaryInput, testWikispineRuntime, updateBuildJobTarget, upgradeWikiGraphArchiveSchema, upgradeWikiGraphLibrarySchema, upgradeWikiGraphMaintenanceTarget, validatePolicyResponse, withLoggingContext, withWikiGraphRuntimeEnvironment, withWikiGraphRuntimeStateDirectoryPath, writeWikgArchive, writeWikgObjectsToJsonl };
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export { resolveDataDirPath } from './runtime/common/data-dir.js';
|
|
|
10
10
|
export { createEnv } from './runtime/common/template.js';
|
|
11
11
|
export { ParsedWikiGraphLibraryUri, WikiGraphLibraryRecord, clearWikiGraphLibraryMetadata, createWikiGraphLibrary, deleteWikiGraphLibraryMetadataKey, ensureDefaultWikiGraphLibrary, formatWikiGraphLibraryUri, getWikiGraphLibraryMetadata, isWikiGraphLibraryUri, listWikiGraphLibraries, listWikiGraphLibraryScope, parseWikiGraphLibraryUri, putWikiGraphLibraryMetadata, removeWikiGraphLibrary, replaceWikiGraphLibraryMetadata, resolveDefaultWikiGraphLibraryDirectoryPath, resolveWikiGraphLibrary, resolveWikiGraphLibraryById, resolveWikiGraphLibraryStagingDirectoryPath } from './library/registry.js';
|
|
12
12
|
export { WikiGraphLibraryArchiveRecord, WikiGraphLibraryScanResult, addWikiGraphLibraryArchive, ensureLibraryManagedArchiveHasNoSearchIndex, finalizeWikiGraphLibraryArchiveWrite, getWikiGraphLibraryArchive, getWikiGraphLibraryArchiveById, listWikiGraphLibraryArchives, moveWikiGraphLibraryArchive, rebindWikiGraphLibrary, removeWikiGraphLibraryArchive, resolveWikiGraphLibraryArchivePath, scanWikiGraphLibrary } from './library/membership.js';
|
|
13
|
-
export { findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById } from './library/query.js';
|
|
13
|
+
export { findWikiGraphLibraryArchiveMembers, findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryArchiveMembers, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById } from './library/query.js';
|
|
14
14
|
export { WikiGraphLibraryIndexObjectHit, WikiGraphLibraryIndexQueryResult, WikiGraphLibraryIndexSource, WikiGraphLibraryIndexState, WikiGraphLibraryIndexStatus, WikiGraphLibraryIndexTextHit, disableWikiGraphLibraryIndex, listWikiGraphLibraryIndexArchiveIdsForObject, markWikiGraphLibraryIndexDirty, queryWikiGraphLibrarySearchIndex, readWikiGraphLibraryIndexState, rebuildWikiGraphLibraryIndex } from './library/search-index.js';
|
|
15
15
|
export { resolveWikiGraphCoreDatabasePath, resolveWikiGraphHomeDirectoryPath, withWikiGraphRuntimeEnvironment, withWikiGraphRuntimeStateDirectoryPath } from './runtime/common/wiki-graph/dir.js';
|
|
16
16
|
export { createWikiGraphTempDirectory, resolveWikiGraphStateRootPath } from './runtime/common/wiki-graph/temp.js';
|
package/dist/index.js
CHANGED
|
@@ -42,11 +42,13 @@ import {
|
|
|
42
42
|
isWikiGraphLibraryUri,
|
|
43
43
|
findWikiGraphLibraryObjects,
|
|
44
44
|
listRelatedWikiGraphLibraryObjects,
|
|
45
|
+
listWikiGraphLibraryArchiveMembers,
|
|
45
46
|
listWikiGraphLibraryArchives,
|
|
46
47
|
listWikiGraphLibraryEvidence,
|
|
47
48
|
listWikiGraphLibraryIndexArchiveIdsForObject,
|
|
48
49
|
listWikiGraphLibraryObjects,
|
|
49
50
|
listWikiGraphLibraryScope,
|
|
51
|
+
findWikiGraphLibraryArchiveMembers,
|
|
50
52
|
moveWikiGraphLibraryArchive,
|
|
51
53
|
parseWikiGraphLibraryUri,
|
|
52
54
|
putWikiGraphLibraryMetadata,
|
|
@@ -335,6 +337,7 @@ export {
|
|
|
335
337
|
ensureWikiGraphHomeSchemaCurrent,
|
|
336
338
|
finalizeWikiGraphLibraryArchiveWrite,
|
|
337
339
|
findArchiveObjects,
|
|
340
|
+
findWikiGraphLibraryArchiveMembers,
|
|
338
341
|
findWikiGraphLibraryObjects,
|
|
339
342
|
formatChapterId,
|
|
340
343
|
formatChapterUri,
|
|
@@ -380,6 +383,7 @@ export {
|
|
|
380
383
|
listRelatedArchiveObjects,
|
|
381
384
|
listRelatedWikiGraphLibraryObjects,
|
|
382
385
|
listWikiGraphLibraries,
|
|
386
|
+
listWikiGraphLibraryArchiveMembers,
|
|
383
387
|
listWikiGraphLibraryArchives,
|
|
384
388
|
listWikiGraphLibraryEvidence,
|
|
385
389
|
listWikiGraphLibraryIndexArchiveIdsForObject,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n formatLanguageForPrompt,\n getLanguageCode,\n getWikipageLanguageCode,\n Language,\n LanguageCode,\n normalizeLanguageCode,\n} from \"./runtime/common/language.js\";\nexport {\n createWikiGraphTaskId,\n WikiGraphTask,\n WikiGraphTaskContext,\n WIKI_GRAPH_CONTEXT_VERSION,\n type WikiGraphTaskContextOptions,\n type WikiGraphTaskIdentity,\n type WikiGraphTaskType,\n} from \"./runtime/context/index.js\";\nexport { LLM, LLMPaymentRequiredError } from \"./external/llm/index.js\";\nexport type {\n LLMessage,\n LLMOptions,\n LLMRequestOptions,\n LLMStreamProgressCallback,\n LLMTokenUsage,\n LLMTokenUsageCallback,\n} from \"./external/llm/index.js\";\nexport {\n WikiGraphScope,\n WIKI_GRAPH_EDITOR_SCOPES,\n WIKI_GRAPH_READER_SCOPES,\n WIKI_GRAPH_SCOPES,\n} from \"./runtime/common/llm-scope.js\";\nexport { withLoggingContext } from \"./runtime/common/logging.js\";\nexport {\n CLI_FULL_COMMAND,\n CLI_PRIMARY_COMMAND,\n} from \"./runtime/common/cli-command.js\";\nexport { resolveDataDirPath } from \"./runtime/common/data-dir.js\";\nexport { createEnv } from \"./runtime/common/template.js\";\nexport {\n clearWikiGraphLibraryMetadata,\n addWikiGraphLibraryArchive,\n createWikiGraphLibrary,\n deleteWikiGraphLibraryMetadataKey,\n ensureDefaultWikiGraphLibrary,\n ensureLibraryManagedArchiveHasNoSearchIndex,\n finalizeWikiGraphLibraryArchiveWrite,\n formatWikiGraphLibraryUri,\n getWikiGraphLibraryArchive,\n getWikiGraphLibraryArchiveById,\n getWikiGraphLibraryMetadata,\n listWikiGraphLibraries,\n isWikiGraphLibraryUri,\n findWikiGraphLibraryObjects,\n listRelatedWikiGraphLibraryObjects,\n listWikiGraphLibraryArchives,\n listWikiGraphLibraryEvidence,\n listWikiGraphLibraryIndexArchiveIdsForObject,\n listWikiGraphLibraryObjects,\n listWikiGraphLibraryScope,\n moveWikiGraphLibraryArchive,\n parseWikiGraphLibraryUri,\n putWikiGraphLibraryMetadata,\n packWikiGraphLibraryContext,\n queryWikiGraphLibrarySearchIndex,\n readWikiGraphLibraryIndexState,\n readWikiGraphLibraryPage,\n rebuildWikiGraphLibraryIndex,\n rebindWikiGraphLibrary,\n removeWikiGraphLibraryArchive,\n removeWikiGraphLibrary,\n replaceWikiGraphLibraryMetadata,\n resolveWikiGraphLibraryById,\n resolveWikiGraphLibraryQueryTargetById,\n resolveDefaultWikiGraphLibraryDirectoryPath,\n resolveWikiGraphLibraryArchivePath,\n resolveWikiGraphLibrary,\n resolveWikiGraphLibraryStagingDirectoryPath,\n scanWikiGraphLibrary,\n disableWikiGraphLibraryIndex,\n markWikiGraphLibraryIndexDirty,\n} from \"./library/index.js\";\nexport type {\n ParsedWikiGraphLibraryUri,\n WikiGraphLibraryArchiveRecord,\n WikiGraphLibraryIndexObjectHit,\n WikiGraphLibraryIndexQueryResult,\n WikiGraphLibraryIndexSource,\n WikiGraphLibraryIndexState,\n WikiGraphLibraryIndexStatus,\n WikiGraphLibraryIndexTextHit,\n WikiGraphLibraryRecord,\n WikiGraphLibraryScanResult,\n} from \"./library/index.js\";\nexport {\n resolveWikiGraphCoreDatabasePath,\n resolveWikiGraphHomeDirectoryPath,\n withWikiGraphRuntimeEnvironment,\n withWikiGraphRuntimeStateDirectoryPath,\n} from \"./runtime/common/wiki-graph/dir.js\";\nexport {\n createWikiGraphTempDirectory,\n resolveWikiGraphStateRootPath,\n} from \"./runtime/common/wiki-graph/temp.js\";\nexport {\n EVIDENCE_SELECTION_JSON_SHAPE,\n EVIDENCE_SELECTION_PROMPT_FRAGMENT,\n formatEvidenceSelectionChoicePrompt,\n normalizeEvidenceDisplayText,\n normalizeEvidenceText,\n rankEvidenceQuote,\n resolveEvidenceSelection,\n resolveEvidenceSelectionList,\n scoreEvidenceQuote,\n type EvidenceQuoteMatchStrategy,\n type EvidenceQuoteScore,\n type EvidenceSelection,\n type EvidenceSelectionCandidate,\n type EvidenceSelectionFailure,\n type EvidenceSelectionList,\n type EvidenceSelectionResolution,\n type EvidenceSelectionSentence,\n type EvidenceSentenceId,\n} from \"./graph/evidence-selection/index.js\";\nexport {\n RateLimiter,\n parseRetryAfterMs,\n WikimediaClient,\n WikipageCache,\n WikipageResolver,\n createDisambiguationProfileNormalizer,\n type CachedDisambiguationRecord,\n type CachedPageRecord,\n type CachedQidRecord,\n type DisambiguationExpansion,\n type DisambiguationLinkedQid,\n type DisambiguationMeaningPriority,\n type DisambiguationPageText,\n type DisambiguationProfile,\n type DisambiguationProfileError,\n type DisambiguationProfileMeaning,\n type DisambiguationProfileNormalizer,\n type DisambiguationProfileNormalizerInput,\n type EnrichmentStore,\n type QidResolution,\n type WikiClient,\n type WikipageResolverOptions,\n type WikipageSitelink,\n} from \"./external/wikipage/index.js\";\nexport {\n buildWikimatchWindows,\n judgeWikimatchPolicy,\n parsePolicyResponse,\n validatePolicyResponse,\n type BuildWikimatchWindowsOptions,\n type JudgeWikimatchPolicyOptions,\n type WikimatchAcceptedMention,\n type WikimatchCandidate,\n type WikimatchConflictGroup,\n type WikimatchPolicyDecision,\n type WikimatchPolicyDecisionOutput,\n type WikimatchPolicyFallback,\n type WikimatchPolicyJudgeInput,\n type WikimatchPolicyJudgeResult,\n type WikimatchPolicyResponse,\n type WikimatchPolicyUpdate,\n type WikimatchQidOption,\n type WikimatchTextRange,\n type WikimatchWindow,\n} from \"./external/wikimatch/index.js\";\nexport { createDefaultWikiGraphSampling } from \"./api/llm-sampling.js\";\nexport {\n type DigestProgressEvent,\n type SerialDiscoveryItem,\n WikiGraphArchive,\n WikiGraph,\n type WikiGraphOptions,\n type WikiGraphLLMOptions,\n type WikiGraphOpenSessionOptions,\n type WikiGraphProgressCallback,\n type WikiGraphProgressEvent,\n type WikiGraphProgressEventType,\n type WikiGraphOperation,\n type SerialsDiscoveredEvent,\n type SerialProgressEvent,\n type WikiGraphSourceSessionOptions,\n type WikiGraphTextStreamSessionOptions,\n} from \"./api/index.js\";\nexport type { WikiGraphSerialEntry } from \"./api/index.js\";\nexport {\n formatChapterUri,\n parseChapterPath,\n parseChapterUriPath,\n} from \"./document/chapter/path.js\";\nexport {\n formatLocatedChapterResourceUri,\n formatLocatedChapterSourceCollectionUri,\n formatLocatedChapterUri,\n isWikiGraphJobUri,\n isWikiGraphUri,\n readWikgArchiveFormatVersion,\n formatWikiGraphCommandUri,\n formatLocatedWikiGraphUri,\n parseLocatedWikiGraphUri,\n parseWikiGraphUriSyntax,\n requireArchiveUri,\n requireLocatedObjectOrArchiveUri,\n requireLocatedObjectUri,\n WikiGraphArchiveFile,\n WIKI_GRAPH_JOB_URI_PREFIX,\n WIKI_GRAPH_URI_PREFIX,\n writeWikgArchive,\n} from \"./storage/wikg/index.js\";\nexport type {\n LocatedWikiGraphUri,\n ParsedWikiGraphUri,\n} from \"./storage/wikg/index.js\";\nexport {\n DirectoryDocument,\n openSharedStateDatabase,\n} from \"./document/index.js\";\nexport type { Database, Document, ReadonlyDocument } from \"./document/index.js\";\nexport { TOC_FILE_VERSION } from \"./text/source/index.js\";\nexport type { BookMeta } from \"./text/source/index.js\";\nexport { isArchiveSearchIndexCurrent } from \"./retrieval/query/index.js\";\nexport {\n ensureWikiGraphArchiveSchemaCurrent,\n ensureWikiGraphHomeSchemaCurrent,\n readWikiGraphArchiveSchemaVersion,\n readWikiGraphHomeSchemaVersion,\n upgradeWikiGraphArchiveSchema,\n} from \"./storage/schema-upgrade/index.js\";\nexport {\n assertWikiGraphLibrarySchemaCurrent,\n upgradeWikiGraphLibrarySchema,\n upgradeWikiGraphMaintenanceTarget,\n type WikiGraphLibraryUpgradeResult,\n type WikiGraphMaintenanceUpgradeResult,\n} from \"./maintenance/upgrade.js\";\nexport { readArchiveIndexSettings } from \"./retrieval/search-index/index.js\";\nexport { migrateLegacySdpubToWikg } from \"./storage/migration/legacy-sdpub/upgrade/index.js\";\nexport type {\n GuaranteedRequest,\n GuaranteedRequestController,\n} from \"./external/guaranteed/index.js\";\nexport { formatError } from \"./utils/node-error.js\";\nexport {\n createContinuationCursor,\n deleteArchiveSearchSessions,\n findArchiveObjects,\n formatChapterId,\n formatEdgeId,\n formatNodeId,\n formatSummaryId,\n getArchiveIndex,\n grepArchiveObjects,\n listAllArchiveLinks,\n listArchiveCollection,\n listArchiveEvidence,\n listArchiveLinks,\n listArchiveObjects,\n listRelatedArchiveObjects,\n packArchiveContext,\n readArchivePage,\n readArchiveText,\n readContinuationCursor,\n rebuildArchiveSearchIndex,\n} from \"./api/index.js\";\nexport type {\n ArchiveBacklinkBucket,\n ArchiveBacklinks,\n ArchiveCollectionOptions,\n ArchiveCollectionResult,\n ArchiveCollectionType,\n ArchiveEvidence,\n ArchiveEvidenceItem,\n ArchiveFindEvidencePreview,\n ArchiveFindField,\n ArchiveFindFilterType,\n ArchiveFindHit,\n ArchiveFindObjectType,\n ArchiveFindOptions,\n ArchiveFindOrder,\n ArchiveFindPosition,\n ArchiveFindResult,\n ArchiveIndex,\n ArchiveLibrarySource,\n ArchiveListItem,\n ArchiveListKind,\n ArchiveNodeLabel,\n ArchiveNodeSourceFragment,\n ArchiveObjectType,\n ArchivePack,\n ArchivePage,\n ArchiveRelatedResult,\n ArchiveTriplePattern,\n ContinuationCursor,\n QueryIndexScope,\n QueryScope,\n} from \"./api/index.js\";\nexport { setFtsIndexEmbedded } from \"./retrieval/search-index/index.js\";\nexport {\n addBuildJob,\n assertBuildJobInputRevision,\n assertNoActiveBuildJobConflicts,\n assertNoActiveBuildJobs,\n boostBuildJob,\n cancelBuildJob,\n cleanBuildJobs,\n getBuildJob,\n listBuildJobs,\n pauseBuildJob,\n readBuildJobEvents,\n recordBuildJobInputRevision,\n resolveBuildJobId,\n resumeBuildJob,\n runBuildJobWorker,\n updateBuildJobTarget,\n} from \"./api/index.js\";\nexport type {\n AddBuildJobOptions,\n BuildJob,\n BuildJobConflictScope,\n BuildJobEvent,\n BuildJobExecutionContext,\n BuildJobListOptions,\n BuildJobProgressCounter,\n BuildJobProgressReporter,\n BuildJobState,\n BuildJobTarget,\n BuildJobWorkerOptions,\n} from \"./api/index.js\";\nexport {\n addChapter,\n advanceChapterStages,\n applyChapterTree,\n CHAPTER_STAGES,\n generateChapterGraph,\n generateChapterSummary,\n getChapterDetails,\n getChapterTree,\n listChapters,\n moveChapter,\n parseChapterTreeInput,\n removeChapter,\n resetChapter,\n resolveChapterPath,\n resolveChapterPathReadonly,\n setChapterSource,\n setChapterSummary,\n setChapterTitle,\n} from \"./api/index.js\";\nexport type {\n AddChapterOptions,\n AdvanceChapterStagesOptions,\n AdvanceChapterStagesProgressCallback,\n AdvanceChapterStagesProgressEvent,\n AdvanceChapterStagesResult,\n ChapterDetails,\n ChapterEntry,\n ChapterStage,\n ChapterTree,\n ChapterTreeApplyResult,\n ChapterTreeInput,\n ChapterTreeInputNode,\n ChapterTreeMoveChange,\n ChapterTreeNode,\n ChapterTreeTitleChange,\n GenerateChapterGraphOptions,\n GenerateChapterSummaryOptions,\n MoveChapterOptions,\n} from \"./api/index.js\";\nexport {\n buildChapterGraphArtifact,\n buildChapterSummaryArtifact,\n buildChapterSummaryArtifactFromReadingGraphObjects,\n buildChapterSummaryArtifactFromSnapshot,\n commitChapterGraphArtifact,\n commitChapterSummaryArtifact,\n readChapterBuildInput,\n snapshotChapterSummaryInput,\n} from \"./api/index.js\";\nexport type {\n BuildChapterGraphArtifactOptions,\n BuildChapterSummaryArtifactOptions,\n ChapterGraphBuildArtifact,\n} from \"./api/index.js\";\nexport {\n buildChapterKnowledgeGraphArtifact,\n clearChapterKnowledgeGraph,\n commitChapterKnowledgeGraphArtifact,\n createEnrichmentProgressReporter,\n generateChapterKnowledgeGraphArtifact,\n generateChapterKnowledgeGraphArtifactFromSnapshot,\n groundWikimatchCandidates,\n snapshotChapterKnowledgeGraphInput,\n} from \"./api/index.js\";\nexport type {\n BuildChapterKnowledgeGraphArtifactOptions,\n ChapterKnowledgeGraphBuildArtifact,\n ChapterKnowledgeGraphInputSnapshot,\n} from \"./api/index.js\";\nexport {\n DEFAULT_EXTRACTION_PROMPT,\n DEFAULT_KNOWLEDGE_GRAPH_RECALL_PROMPT,\n resolveExtractionPrompt,\n resolveKnowledgeGraphRecallPrompt,\n} from \"./runtime/common/prompts.js\";\nexport {\n DEFAULT_WIKISPINE_FETCH_ENDPOINT,\n testWikispineRuntime,\n} from \"./external/wikimatch/index.js\";\nexport type { WikispineProvider } from \"./external/wikimatch/index.js\";\nexport { ObjectMetadataKind } from \"./document/index.js\";\nexport type { ObjectMetadataTarget } from \"./document/index.js\";\nexport {\n collectChapterKnowledgeGraphObjects,\n collectReadingGraphObjects,\n createChapterKnowledgeGraphObjectStream,\n createChapterReadingGraphObjectStream,\n createSummaryInputSnapshotFromReadingGraphObjects,\n parseWikgObject,\n readWikgObjectsFromJsonl,\n WIKG_OBJECT_SCHEMA_VERSION,\n writeWikgObjectsToJsonl,\n} from \"./object-stream.js\";\nexport type { WikgObject } from \"./object-stream.js\";\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n formatLanguageForPrompt,\n getLanguageCode,\n getWikipageLanguageCode,\n Language,\n LanguageCode,\n normalizeLanguageCode,\n} from \"./runtime/common/language.js\";\nexport {\n createWikiGraphTaskId,\n WikiGraphTask,\n WikiGraphTaskContext,\n WIKI_GRAPH_CONTEXT_VERSION,\n type WikiGraphTaskContextOptions,\n type WikiGraphTaskIdentity,\n type WikiGraphTaskType,\n} from \"./runtime/context/index.js\";\nexport { LLM, LLMPaymentRequiredError } from \"./external/llm/index.js\";\nexport type {\n LLMessage,\n LLMOptions,\n LLMRequestOptions,\n LLMStreamProgressCallback,\n LLMTokenUsage,\n LLMTokenUsageCallback,\n} from \"./external/llm/index.js\";\nexport {\n WikiGraphScope,\n WIKI_GRAPH_EDITOR_SCOPES,\n WIKI_GRAPH_READER_SCOPES,\n WIKI_GRAPH_SCOPES,\n} from \"./runtime/common/llm-scope.js\";\nexport { withLoggingContext } from \"./runtime/common/logging.js\";\nexport {\n CLI_FULL_COMMAND,\n CLI_PRIMARY_COMMAND,\n} from \"./runtime/common/cli-command.js\";\nexport { resolveDataDirPath } from \"./runtime/common/data-dir.js\";\nexport { createEnv } from \"./runtime/common/template.js\";\nexport {\n clearWikiGraphLibraryMetadata,\n addWikiGraphLibraryArchive,\n createWikiGraphLibrary,\n deleteWikiGraphLibraryMetadataKey,\n ensureDefaultWikiGraphLibrary,\n ensureLibraryManagedArchiveHasNoSearchIndex,\n finalizeWikiGraphLibraryArchiveWrite,\n formatWikiGraphLibraryUri,\n getWikiGraphLibraryArchive,\n getWikiGraphLibraryArchiveById,\n getWikiGraphLibraryMetadata,\n listWikiGraphLibraries,\n isWikiGraphLibraryUri,\n findWikiGraphLibraryObjects,\n listRelatedWikiGraphLibraryObjects,\n listWikiGraphLibraryArchiveMembers,\n listWikiGraphLibraryArchives,\n listWikiGraphLibraryEvidence,\n listWikiGraphLibraryIndexArchiveIdsForObject,\n listWikiGraphLibraryObjects,\n listWikiGraphLibraryScope,\n findWikiGraphLibraryArchiveMembers,\n moveWikiGraphLibraryArchive,\n parseWikiGraphLibraryUri,\n putWikiGraphLibraryMetadata,\n packWikiGraphLibraryContext,\n queryWikiGraphLibrarySearchIndex,\n readWikiGraphLibraryIndexState,\n readWikiGraphLibraryPage,\n rebuildWikiGraphLibraryIndex,\n rebindWikiGraphLibrary,\n removeWikiGraphLibraryArchive,\n removeWikiGraphLibrary,\n replaceWikiGraphLibraryMetadata,\n resolveWikiGraphLibraryById,\n resolveWikiGraphLibraryQueryTargetById,\n resolveDefaultWikiGraphLibraryDirectoryPath,\n resolveWikiGraphLibraryArchivePath,\n resolveWikiGraphLibrary,\n resolveWikiGraphLibraryStagingDirectoryPath,\n scanWikiGraphLibrary,\n disableWikiGraphLibraryIndex,\n markWikiGraphLibraryIndexDirty,\n} from \"./library/index.js\";\nexport type {\n ParsedWikiGraphLibraryUri,\n WikiGraphLibraryArchiveRecord,\n WikiGraphLibraryIndexObjectHit,\n WikiGraphLibraryIndexQueryResult,\n WikiGraphLibraryIndexSource,\n WikiGraphLibraryIndexState,\n WikiGraphLibraryIndexStatus,\n WikiGraphLibraryIndexTextHit,\n WikiGraphLibraryRecord,\n WikiGraphLibraryScanResult,\n} from \"./library/index.js\";\nexport {\n resolveWikiGraphCoreDatabasePath,\n resolveWikiGraphHomeDirectoryPath,\n withWikiGraphRuntimeEnvironment,\n withWikiGraphRuntimeStateDirectoryPath,\n} from \"./runtime/common/wiki-graph/dir.js\";\nexport {\n createWikiGraphTempDirectory,\n resolveWikiGraphStateRootPath,\n} from \"./runtime/common/wiki-graph/temp.js\";\nexport {\n EVIDENCE_SELECTION_JSON_SHAPE,\n EVIDENCE_SELECTION_PROMPT_FRAGMENT,\n formatEvidenceSelectionChoicePrompt,\n normalizeEvidenceDisplayText,\n normalizeEvidenceText,\n rankEvidenceQuote,\n resolveEvidenceSelection,\n resolveEvidenceSelectionList,\n scoreEvidenceQuote,\n type EvidenceQuoteMatchStrategy,\n type EvidenceQuoteScore,\n type EvidenceSelection,\n type EvidenceSelectionCandidate,\n type EvidenceSelectionFailure,\n type EvidenceSelectionList,\n type EvidenceSelectionResolution,\n type EvidenceSelectionSentence,\n type EvidenceSentenceId,\n} from \"./graph/evidence-selection/index.js\";\nexport {\n RateLimiter,\n parseRetryAfterMs,\n WikimediaClient,\n WikipageCache,\n WikipageResolver,\n createDisambiguationProfileNormalizer,\n type CachedDisambiguationRecord,\n type CachedPageRecord,\n type CachedQidRecord,\n type DisambiguationExpansion,\n type DisambiguationLinkedQid,\n type DisambiguationMeaningPriority,\n type DisambiguationPageText,\n type DisambiguationProfile,\n type DisambiguationProfileError,\n type DisambiguationProfileMeaning,\n type DisambiguationProfileNormalizer,\n type DisambiguationProfileNormalizerInput,\n type EnrichmentStore,\n type QidResolution,\n type WikiClient,\n type WikipageResolverOptions,\n type WikipageSitelink,\n} from \"./external/wikipage/index.js\";\nexport {\n buildWikimatchWindows,\n judgeWikimatchPolicy,\n parsePolicyResponse,\n validatePolicyResponse,\n type BuildWikimatchWindowsOptions,\n type JudgeWikimatchPolicyOptions,\n type WikimatchAcceptedMention,\n type WikimatchCandidate,\n type WikimatchConflictGroup,\n type WikimatchPolicyDecision,\n type WikimatchPolicyDecisionOutput,\n type WikimatchPolicyFallback,\n type WikimatchPolicyJudgeInput,\n type WikimatchPolicyJudgeResult,\n type WikimatchPolicyResponse,\n type WikimatchPolicyUpdate,\n type WikimatchQidOption,\n type WikimatchTextRange,\n type WikimatchWindow,\n} from \"./external/wikimatch/index.js\";\nexport { createDefaultWikiGraphSampling } from \"./api/llm-sampling.js\";\nexport {\n type DigestProgressEvent,\n type SerialDiscoveryItem,\n WikiGraphArchive,\n WikiGraph,\n type WikiGraphOptions,\n type WikiGraphLLMOptions,\n type WikiGraphOpenSessionOptions,\n type WikiGraphProgressCallback,\n type WikiGraphProgressEvent,\n type WikiGraphProgressEventType,\n type WikiGraphOperation,\n type SerialsDiscoveredEvent,\n type SerialProgressEvent,\n type WikiGraphSourceSessionOptions,\n type WikiGraphTextStreamSessionOptions,\n} from \"./api/index.js\";\nexport type { WikiGraphSerialEntry } from \"./api/index.js\";\nexport {\n formatChapterUri,\n parseChapterPath,\n parseChapterUriPath,\n} from \"./document/chapter/path.js\";\nexport {\n formatLocatedChapterResourceUri,\n formatLocatedChapterSourceCollectionUri,\n formatLocatedChapterUri,\n isWikiGraphJobUri,\n isWikiGraphUri,\n readWikgArchiveFormatVersion,\n formatWikiGraphCommandUri,\n formatLocatedWikiGraphUri,\n parseLocatedWikiGraphUri,\n parseWikiGraphUriSyntax,\n requireArchiveUri,\n requireLocatedObjectOrArchiveUri,\n requireLocatedObjectUri,\n WikiGraphArchiveFile,\n WIKI_GRAPH_JOB_URI_PREFIX,\n WIKI_GRAPH_URI_PREFIX,\n writeWikgArchive,\n} from \"./storage/wikg/index.js\";\nexport type {\n LocatedWikiGraphUri,\n ParsedWikiGraphUri,\n} from \"./storage/wikg/index.js\";\nexport {\n DirectoryDocument,\n openSharedStateDatabase,\n} from \"./document/index.js\";\nexport type { Database, Document, ReadonlyDocument } from \"./document/index.js\";\nexport { TOC_FILE_VERSION } from \"./text/source/index.js\";\nexport type { BookMeta } from \"./text/source/index.js\";\nexport { isArchiveSearchIndexCurrent } from \"./retrieval/query/index.js\";\nexport {\n ensureWikiGraphArchiveSchemaCurrent,\n ensureWikiGraphHomeSchemaCurrent,\n readWikiGraphArchiveSchemaVersion,\n readWikiGraphHomeSchemaVersion,\n upgradeWikiGraphArchiveSchema,\n} from \"./storage/schema-upgrade/index.js\";\nexport {\n assertWikiGraphLibrarySchemaCurrent,\n upgradeWikiGraphLibrarySchema,\n upgradeWikiGraphMaintenanceTarget,\n type WikiGraphLibraryUpgradeResult,\n type WikiGraphMaintenanceUpgradeResult,\n} from \"./maintenance/upgrade.js\";\nexport { readArchiveIndexSettings } from \"./retrieval/search-index/index.js\";\nexport { migrateLegacySdpubToWikg } from \"./storage/migration/legacy-sdpub/upgrade/index.js\";\nexport type {\n GuaranteedRequest,\n GuaranteedRequestController,\n} from \"./external/guaranteed/index.js\";\nexport { formatError } from \"./utils/node-error.js\";\nexport {\n createContinuationCursor,\n deleteArchiveSearchSessions,\n findArchiveObjects,\n formatChapterId,\n formatEdgeId,\n formatNodeId,\n formatSummaryId,\n getArchiveIndex,\n grepArchiveObjects,\n listAllArchiveLinks,\n listArchiveCollection,\n listArchiveEvidence,\n listArchiveLinks,\n listArchiveObjects,\n listRelatedArchiveObjects,\n packArchiveContext,\n readArchivePage,\n readArchiveText,\n readContinuationCursor,\n rebuildArchiveSearchIndex,\n} from \"./api/index.js\";\nexport type {\n ArchiveBacklinkBucket,\n ArchiveBacklinks,\n ArchiveCollectionOptions,\n ArchiveCollectionResult,\n ArchiveCollectionType,\n ArchiveEvidence,\n ArchiveEvidenceItem,\n ArchiveFindEvidencePreview,\n ArchiveFindField,\n ArchiveFindFilterType,\n ArchiveFindHit,\n ArchiveFindObjectType,\n ArchiveFindOptions,\n ArchiveFindOrder,\n ArchiveFindPosition,\n ArchiveFindResult,\n ArchiveIndex,\n ArchiveLibrarySource,\n ArchiveListItem,\n ArchiveListKind,\n ArchiveNodeLabel,\n ArchiveNodeSourceFragment,\n ArchiveObjectType,\n ArchivePack,\n ArchivePage,\n ArchiveRelatedResult,\n ArchiveTriplePattern,\n ContinuationCursor,\n QueryIndexScope,\n QueryScope,\n} from \"./api/index.js\";\nexport { setFtsIndexEmbedded } from \"./retrieval/search-index/index.js\";\nexport {\n addBuildJob,\n assertBuildJobInputRevision,\n assertNoActiveBuildJobConflicts,\n assertNoActiveBuildJobs,\n boostBuildJob,\n cancelBuildJob,\n cleanBuildJobs,\n getBuildJob,\n listBuildJobs,\n pauseBuildJob,\n readBuildJobEvents,\n recordBuildJobInputRevision,\n resolveBuildJobId,\n resumeBuildJob,\n runBuildJobWorker,\n updateBuildJobTarget,\n} from \"./api/index.js\";\nexport type {\n AddBuildJobOptions,\n BuildJob,\n BuildJobConflictScope,\n BuildJobEvent,\n BuildJobExecutionContext,\n BuildJobListOptions,\n BuildJobProgressCounter,\n BuildJobProgressReporter,\n BuildJobState,\n BuildJobTarget,\n BuildJobWorkerOptions,\n} from \"./api/index.js\";\nexport {\n addChapter,\n advanceChapterStages,\n applyChapterTree,\n CHAPTER_STAGES,\n generateChapterGraph,\n generateChapterSummary,\n getChapterDetails,\n getChapterTree,\n listChapters,\n moveChapter,\n parseChapterTreeInput,\n removeChapter,\n resetChapter,\n resolveChapterPath,\n resolveChapterPathReadonly,\n setChapterSource,\n setChapterSummary,\n setChapterTitle,\n} from \"./api/index.js\";\nexport type {\n AddChapterOptions,\n AdvanceChapterStagesOptions,\n AdvanceChapterStagesProgressCallback,\n AdvanceChapterStagesProgressEvent,\n AdvanceChapterStagesResult,\n ChapterDetails,\n ChapterEntry,\n ChapterStage,\n ChapterTree,\n ChapterTreeApplyResult,\n ChapterTreeInput,\n ChapterTreeInputNode,\n ChapterTreeMoveChange,\n ChapterTreeNode,\n ChapterTreeTitleChange,\n GenerateChapterGraphOptions,\n GenerateChapterSummaryOptions,\n MoveChapterOptions,\n} from \"./api/index.js\";\nexport {\n buildChapterGraphArtifact,\n buildChapterSummaryArtifact,\n buildChapterSummaryArtifactFromReadingGraphObjects,\n buildChapterSummaryArtifactFromSnapshot,\n commitChapterGraphArtifact,\n commitChapterSummaryArtifact,\n readChapterBuildInput,\n snapshotChapterSummaryInput,\n} from \"./api/index.js\";\nexport type {\n BuildChapterGraphArtifactOptions,\n BuildChapterSummaryArtifactOptions,\n ChapterGraphBuildArtifact,\n} from \"./api/index.js\";\nexport {\n buildChapterKnowledgeGraphArtifact,\n clearChapterKnowledgeGraph,\n commitChapterKnowledgeGraphArtifact,\n createEnrichmentProgressReporter,\n generateChapterKnowledgeGraphArtifact,\n generateChapterKnowledgeGraphArtifactFromSnapshot,\n groundWikimatchCandidates,\n snapshotChapterKnowledgeGraphInput,\n} from \"./api/index.js\";\nexport type {\n BuildChapterKnowledgeGraphArtifactOptions,\n ChapterKnowledgeGraphBuildArtifact,\n ChapterKnowledgeGraphInputSnapshot,\n} from \"./api/index.js\";\nexport {\n DEFAULT_EXTRACTION_PROMPT,\n DEFAULT_KNOWLEDGE_GRAPH_RECALL_PROMPT,\n resolveExtractionPrompt,\n resolveKnowledgeGraphRecallPrompt,\n} from \"./runtime/common/prompts.js\";\nexport {\n DEFAULT_WIKISPINE_FETCH_ENDPOINT,\n testWikispineRuntime,\n} from \"./external/wikimatch/index.js\";\nexport type { WikispineProvider } from \"./external/wikimatch/index.js\";\nexport { ObjectMetadataKind } from \"./document/index.js\";\nexport type { ObjectMetadataTarget } from \"./document/index.js\";\nexport {\n collectChapterKnowledgeGraphObjects,\n collectReadingGraphObjects,\n createChapterKnowledgeGraphObjectStream,\n createChapterReadingGraphObjectStream,\n createSummaryInputSnapshotFromReadingGraphObjects,\n parseWikgObject,\n readWikgObjectsFromJsonl,\n WIKG_OBJECT_SCHEMA_VERSION,\n writeWikgObjectsToJsonl,\n} from \"./object-stream.js\";\nexport type { WikgObject } from \"./object-stream.js\";\n"],"mappings":"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","names":[]}
|
package/dist/library/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ParsedWikiGraphLibraryUri, WikiGraphLibraryRecord, clearWikiGraphLibraryMetadata, createWikiGraphLibrary, deleteWikiGraphLibraryMetadataKey, ensureDefaultWikiGraphLibrary, formatWikiGraphLibraryUri, getWikiGraphLibraryMetadata, isWikiGraphLibraryUri, listWikiGraphLibraries, listWikiGraphLibraryScope, parseWikiGraphLibraryUri, putWikiGraphLibraryMetadata, removeWikiGraphLibrary, replaceWikiGraphLibraryMetadata, resolveDefaultWikiGraphLibraryDirectoryPath, resolveWikiGraphLibrary, resolveWikiGraphLibraryById, resolveWikiGraphLibraryStagingDirectoryPath, updateWikiGraphLibraryFolderPathForRebind } from './registry.js';
|
|
1
|
+
export { ParsedWikiGraphLibraryUri, WikiGraphLibraryRecord, clearWikiGraphLibraryMetadata, createWikiGraphLibrary, deleteWikiGraphLibraryMetadataKey, ensureDefaultWikiGraphLibrary, formatWikiGraphLibraryUri, getWikiGraphLibraryMetadata, isWikiGraphLibraryUri, listWikiGraphLibraries, listWikiGraphLibraryScope, parseWikiGraphLibraryUri, putWikiGraphLibraryMetadata, removeWikiGraphLibrary, replaceWikiGraphLibraryMetadata, resolveDefaultWikiGraphLibraryDirectoryPath, resolveWikiGraphLibrary, resolveWikiGraphLibraryById, resolveWikiGraphLibraryForScan, resolveWikiGraphLibraryStagingDirectoryPath, updateWikiGraphLibraryFolderPathForRebind } from './registry.js';
|
|
2
2
|
export { WikiGraphLibraryArchiveRecord, WikiGraphLibraryScanResult, addWikiGraphLibraryArchive, ensureLibraryManagedArchiveHasNoSearchIndex, finalizeWikiGraphLibraryArchiveWrite, getWikiGraphLibraryArchive, getWikiGraphLibraryArchiveById, listWikiGraphLibraryArchives, moveWikiGraphLibraryArchive, rebindWikiGraphLibrary, removeWikiGraphLibraryArchive, resolveWikiGraphLibraryArchivePath, scanWikiGraphLibrary } from './membership.js';
|
|
3
|
-
export { createLibrarySources, findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById } from './query.js';
|
|
3
|
+
export { createLibrarySources, findWikiGraphLibraryArchiveMembers, findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryArchiveMembers, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById } from './query.js';
|
|
4
4
|
export { WikiGraphLibraryIndexListOptions, WikiGraphLibraryIndexObjectHit, WikiGraphLibraryIndexQueryOptions, WikiGraphLibraryIndexQueryResult, WikiGraphLibraryIndexSource, WikiGraphLibraryIndexState, WikiGraphLibraryIndexStatus, WikiGraphLibraryIndexTextHit, assertWikiGraphLibraryIndexReady, disableWikiGraphLibraryIndex, listWikiGraphLibraryIndexArchiveIdsForObject, listWikiGraphLibrarySearchIndex, markWikiGraphLibraryIndexDirty, queryWikiGraphLibrarySearchIndex, readWikiGraphLibraryIndexState, rebuildWikiGraphLibraryIndex, runLibraryIndexGc } from './search-index.js';
|
|
5
5
|
export { LibraryLockMode, acquireWikiGraphLibraryLock, isWikiGraphLibraryLocked, tryAcquireWikiGraphLibraryLock, withWikiGraphLibraryLock } from './lock.js';
|
|
6
6
|
import '../retrieval/query/archive-view/types.js';
|
|
@@ -27,6 +27,7 @@ import { isNodeError } from "../utils/node-error.js";
|
|
|
27
27
|
import {
|
|
28
28
|
parseWikiGraphLibraryUri,
|
|
29
29
|
resolveWikiGraphLibrary,
|
|
30
|
+
resolveWikiGraphLibraryForScan,
|
|
30
31
|
updateWikiGraphLibraryFolderPathForRebind
|
|
31
32
|
} from "./registry.js";
|
|
32
33
|
import { markWikiGraphLibraryIndexDirty } from "./search-index.js";
|
|
@@ -59,7 +60,7 @@ ${LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL}
|
|
|
59
60
|
ON library_archives(library_id, relative_path);
|
|
60
61
|
`;
|
|
61
62
|
async function scanWikiGraphLibrary(target) {
|
|
62
|
-
const library = await
|
|
63
|
+
const library = await resolveWikiGraphLibraryForScan(target);
|
|
63
64
|
return await withWikiGraphLibraryLock(library.id, "write", async () => {
|
|
64
65
|
const result = await scanWikiGraphLibraryUnlocked(target, library, {
|
|
65
66
|
pathIdentity: "trusted"
|
|
@@ -127,18 +128,16 @@ async function scanWikiGraphLibraryUnlocked(target, library, options) {
|
|
|
127
128
|
status: matchingTokenArchives.length === 0 || file.mutationToken === void 0 ? "present" : "conflict"
|
|
128
129
|
});
|
|
129
130
|
}
|
|
130
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
131
131
|
for (const archive of existing) {
|
|
132
132
|
if (seenArchiveIds.has(archive.id) || options.pathIdentity === "trusted" && currentPaths.has(archive.relativePath)) {
|
|
133
133
|
continue;
|
|
134
134
|
}
|
|
135
135
|
await database.run(
|
|
136
136
|
`
|
|
137
|
-
|
|
138
|
-
SET status = 'missing', updated_at = ?, last_scanned_at = ?
|
|
137
|
+
DELETE FROM library_archives
|
|
139
138
|
WHERE id = ?
|
|
140
139
|
`,
|
|
141
|
-
[
|
|
140
|
+
[archive.id]
|
|
142
141
|
);
|
|
143
142
|
}
|
|
144
143
|
});
|
|
@@ -572,6 +571,7 @@ function archivePathMatchRank(archive) {
|
|
|
572
571
|
return 2;
|
|
573
572
|
}
|
|
574
573
|
async function listWikgFiles(root) {
|
|
574
|
+
await assertLibraryFolderExists(root);
|
|
575
575
|
const relativePaths = [];
|
|
576
576
|
await walkLibraryDirectory(root, root, relativePaths);
|
|
577
577
|
const files = [];
|
|
@@ -585,6 +585,19 @@ async function listWikgFiles(root) {
|
|
|
585
585
|
}
|
|
586
586
|
return files;
|
|
587
587
|
}
|
|
588
|
+
async function assertLibraryFolderExists(root) {
|
|
589
|
+
try {
|
|
590
|
+
const rootStat = await stat(root);
|
|
591
|
+
if (!rootStat.isDirectory()) {
|
|
592
|
+
throw new Error(`Wiki Graph library folder is not a directory: ${root}`);
|
|
593
|
+
}
|
|
594
|
+
} catch (error) {
|
|
595
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
596
|
+
throw new Error(`Wiki Graph library folder is missing: ${root}`);
|
|
597
|
+
}
|
|
598
|
+
throw error;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
588
601
|
async function ensureLibraryArchiveFileHasNoSearchIndexAndInspect(root, relativePath) {
|
|
589
602
|
await ensureLibraryManagedArchiveHasNoSearchIndex(join(root, relativePath));
|
|
590
603
|
return await inspectLibraryArchiveFile(root, relativePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/library/membership.ts"],"sourcesContent":["import { randomBytes } from \"crypto\";\nimport {\n constants,\n copyFile,\n mkdir,\n opendir,\n realpath,\n rename,\n rm,\n stat,\n} from \"fs/promises\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"path\";\n\nimport {\n getNumber,\n getOptionalString,\n getString,\n type Database,\n type SqlRow,\n} from \"../document/database.js\";\nimport { openSharedStateDatabase } from \"../document/index.js\";\nimport { resolveWikiGraphCoreDatabasePath } from \"../runtime/common/wiki-graph/dir.js\";\nimport { WIKI_GRAPH_ARCHIVE_EXTENSION } from \"../runtime/common/wiki-graph/uri.js\";\nimport {\n readWikgArchiveEntry,\n readWikgArchiveMutationToken,\n WikiGraphArchiveFile,\n} from \"../storage/wikg/index.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\nimport {\n parseWikiGraphLibraryUri,\n resolveWikiGraphLibrary,\n updateWikiGraphLibraryFolderPathForRebind,\n type ParsedWikiGraphLibraryUri,\n type WikiGraphLibraryRecord,\n} from \"./registry.js\";\nimport { markWikiGraphLibraryIndexDirty } from \"./search-index.js\";\nimport { withWikiGraphLibraryLock } from \"./lock.js\";\n\nconst PUBLIC_ID_BYTES = 6;\nconst SEARCH_INDEX_ARCHIVE_ENTRY_PATH = \"fts.db\";\nconst LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL = `\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n library_id INTEGER NOT NULL,\n public_id TEXT NOT NULL,\n relative_path TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'present',\n last_seen_mutation_token TEXT,\n last_seen_size INTEGER,\n last_seen_mtime_ms INTEGER,\n last_scanned_at TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n UNIQUE(library_id, public_id)\n`;\nconst LIBRARY_ARCHIVE_MEMBERSHIP_SCHEMA_SQL = `\n CREATE TABLE IF NOT EXISTS library_archives (\n${LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL}\n );\n\n CREATE INDEX IF NOT EXISTS idx_library_archives_library\n ON library_archives(library_id);\n\n CREATE INDEX IF NOT EXISTS idx_library_archives_library_path\n ON library_archives(library_id, relative_path);\n`;\n\ntype LibraryPathIdentityMode = \"trusted\" | \"untrusted\";\n\ntype WikiGraphLibraryArchiveStatus = \"conflict\" | \"missing\" | \"present\";\n\nexport interface WikiGraphLibraryArchiveRecord {\n readonly id: number;\n readonly publicId: string;\n readonly uri: string;\n readonly libraryId: number;\n readonly libraryUri: string;\n readonly relativePath: string;\n readonly path: string;\n readonly exists: boolean;\n readonly status: WikiGraphLibraryArchiveStatus;\n readonly lastSeenMutationToken?: string;\n readonly lastSeenSize?: number;\n readonly lastSeenMtimeMs?: number;\n readonly lastScannedAt?: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport interface WikiGraphLibraryScanResult {\n readonly library: WikiGraphLibraryRecord;\n readonly archives: readonly WikiGraphLibraryArchiveRecord[];\n}\n\ninterface DiscoveredLibraryArchiveFile {\n readonly relativePath: string;\n readonly path: string;\n readonly mutationToken?: string;\n readonly size: number;\n readonly mtimeMs: number;\n}\n\nexport async function scanWikiGraphLibrary(\n target: ParsedWikiGraphLibraryUri,\n): Promise<WikiGraphLibraryScanResult> {\n const library = await resolveWikiGraphLibrary(target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const result = await scanWikiGraphLibraryUnlocked(target, library, {\n pathIdentity: \"trusted\",\n });\n\n await markWikiGraphLibraryIndexDirty(library);\n return result;\n });\n}\n\nexport async function rebindWikiGraphLibrary(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly folderPath: string;\n}): Promise<WikiGraphLibraryScanResult> {\n if (input.target.kind !== \"scope\" || input.target.objectUri !== undefined) {\n throw new Error(\"Library rebind requires a library scope URI.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const rebound = await updateWikiGraphLibraryFolderPathForRebind(\n library,\n input.folderPath,\n );\n const result = await scanWikiGraphLibraryUnlocked(input.target, rebound, {\n pathIdentity: \"untrusted\",\n });\n\n await markWikiGraphLibraryIndexDirty(rebound);\n return result;\n });\n}\n\nasync function scanWikiGraphLibraryUnlocked(\n target: ParsedWikiGraphLibraryUri,\n library: WikiGraphLibraryRecord,\n options: { readonly pathIdentity: LibraryPathIdentityMode },\n): Promise<WikiGraphLibraryScanResult> {\n const files = await listWikgFiles(library.folderPath);\n\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await database.transaction(async () => {\n const existing = await listLibraryArchiveRows(database, library);\n const currentPaths = new Set(files.map((file) => file.relativePath));\n const seenArchiveIds = new Set<number>();\n\n for (const file of files) {\n const existingAtPath = findExistingArchiveAtPath(existing, file);\n if (\n options.pathIdentity === \"trusted\" &&\n existingAtPath !== undefined\n ) {\n await updateLibraryArchiveSeen(database, existingAtPath.id, file, {\n status: \"present\",\n });\n seenArchiveIds.add(existingAtPath.id);\n continue;\n }\n\n const matchingTokenArchives =\n file.mutationToken === undefined\n ? []\n : existing.filter(\n (archive) =>\n archive.lastSeenMutationToken === file.mutationToken &&\n !seenArchiveIds.has(archive.id),\n );\n const adoptable = matchingTokenArchives.filter(\n (archive) =>\n archive.relativePath === file.relativePath ||\n !currentPaths.has(archive.relativePath),\n );\n\n if (\n matchingTokenArchives.length === 1 &&\n adoptable.length === 1 &&\n file.mutationToken !== undefined\n ) {\n const archive = adoptable[0]!;\n await database.run(\n `\n UPDATE library_archives\n SET relative_path = ?\n WHERE id = ?\n `,\n [file.relativePath, archive.id],\n );\n await updateLibraryArchiveSeen(database, archive.id, file, {\n status: \"present\",\n });\n seenArchiveIds.add(archive.id);\n continue;\n }\n\n await insertLibraryArchive(database, library.id, file, {\n status:\n matchingTokenArchives.length === 0 ||\n file.mutationToken === undefined\n ? \"present\"\n : \"conflict\",\n });\n }\n\n const now = new Date().toISOString();\n for (const archive of existing) {\n if (\n seenArchiveIds.has(archive.id) ||\n (options.pathIdentity === \"trusted\" &&\n currentPaths.has(archive.relativePath))\n ) {\n continue;\n }\n await database.run(\n `\n UPDATE library_archives\n SET status = 'missing', updated_at = ?, last_scanned_at = ?\n WHERE id = ?\n `,\n [now, now, archive.id],\n );\n }\n });\n });\n\n return { library, archives: await listWikiGraphLibraryArchives(target) };\n}\n\nexport async function listWikiGraphLibraryArchives(\n target: ParsedWikiGraphLibraryUri,\n): Promise<readonly WikiGraphLibraryArchiveRecord[]> {\n const library = await resolveWikiGraphLibrary(target);\n return await withLibraryArchiveMembershipDatabase(\n async (database) => await listLibraryArchives(database, library),\n );\n}\n\nexport async function getWikiGraphLibraryArchive(\n target: ParsedWikiGraphLibraryUri,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(target);\n return await resolveLibraryArchiveTarget(target, library);\n}\n\nexport async function getWikiGraphLibraryArchiveById(\n library: WikiGraphLibraryRecord,\n archiveId: number,\n): Promise<WikiGraphLibraryArchiveRecord> {\n return await withLibraryArchiveMembershipDatabase(\n async (database) =>\n await requireLibraryArchiveById(database, library, archiveId),\n );\n}\n\nexport async function resolveWikiGraphLibraryArchivePath(\n archiveLocator: string,\n): Promise<string> {\n const target = parseWikiGraphLibraryUri(archiveLocator);\n if (target === undefined || target.kind !== \"archive\") {\n throw new Error(\n `Expected a Wiki Graph library archive locator: ${archiveLocator}`,\n );\n }\n\n const archive = await getWikiGraphLibraryArchive(target);\n if (!archive.exists || archive.status === \"missing\") {\n throw new Error(`Wiki Graph library archive is missing: ${archiveLocator}`);\n }\n if (archive.status === \"conflict\") {\n throw new Error(\n `Wiki Graph library archive has a conflict and cannot be resolved: ${archiveLocator}`,\n );\n }\n\n return archive.path;\n}\n\nexport async function addWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly inputPath: string;\n readonly to?: string;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n if (input.inputPath.startsWith(\"wikg://\")) {\n throw new Error(\n \"Library add --input accepts a file path, not a Wiki Graph URI.\",\n );\n }\n if (/^[a-z][a-z0-9+.-]*:\\/\\//iu.test(input.inputPath)) {\n throw new Error(\"Library add does not support URL inputs yet.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n await mkdir(library.folderPath, { recursive: true });\n const sourcePath = resolve(input.inputPath);\n const sourceStats = await stat(sourcePath);\n if (!sourceStats.isFile()) {\n throw new Error(`Library add --input must be a file: ${input.inputPath}`);\n }\n const sourceBasename = sourcePath.split(/[\\\\/]/u).at(-1) ?? \"\";\n const targetRelativePath = validateLibraryArchiveRelativePath(\n input.to ?? sourceBasename,\n );\n const targetPath = resolveLibraryRelativePath(\n library.folderPath,\n targetRelativePath,\n );\n\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await mkdir(dirname(targetPath), { recursive: true });\n await assertInsideLibrary(\n await realpath(dirname(targetPath)),\n library.folderPath,\n );\n await copyFile(sourcePath, targetPath, constants.COPYFILE_EXCL);\n await assertInsideLibrary(await realpath(targetPath), library.folderPath);\n const targetFile = await ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n library.folderPath,\n targetRelativePath,\n );\n const archive = await withLibraryArchiveMembershipDatabase(\n async (database) => {\n await database.transaction(async () => {\n await ensureLibraryArchiveByRelativePath(\n database,\n library.id,\n targetFile,\n );\n });\n return await requireLibraryArchiveByRelativePath(\n database,\n library,\n targetRelativePath,\n );\n },\n );\n\n await markWikiGraphLibraryIndexDirty(library);\n return archive;\n });\n}\n\nexport async function finalizeWikiGraphLibraryArchiveWrite(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n}): Promise<boolean> {\n if (input.target.kind !== \"archive\") {\n throw new Error(\"Expected a Wiki Graph library archive URI.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n const removed = await ensureLibraryManagedArchiveHasNoSearchIndex(\n archive.path,\n );\n const refreshedFile = await inspectLibraryArchiveFile(\n library.folderPath,\n archive.relativePath,\n );\n\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await updateLibraryArchiveSeen(database, archive.id, refreshedFile, {\n status: \"present\",\n });\n });\n\n return removed;\n });\n}\n\nexport async function ensureLibraryManagedArchiveHasNoSearchIndex(\n archivePath: string,\n): Promise<boolean> {\n if ((await readOptionalWikgMutationToken(archivePath)) === undefined) {\n return false;\n }\n\n const searchIndex = await readWikgArchiveEntry(\n archivePath,\n SEARCH_INDEX_ARCHIVE_ENTRY_PATH,\n );\n if (searchIndex === undefined) {\n return false;\n }\n\n await new WikiGraphArchiveFile(archivePath).write(\n async (document) => {\n await document.deleteSearchIndexDatabase();\n },\n { searchIndexWritebackPolicy: \"archive\" },\n );\n return true;\n}\n\nexport async function removeWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(input.target);\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n\n await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await rm(archive.path, { force: true });\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await database.run(\"DELETE FROM library_archives WHERE id = ?\", [\n archive.id,\n ]);\n });\n await markWikiGraphLibraryIndexDirty(library);\n });\n\n return { ...archive, exists: false, status: \"missing\" };\n}\n\nexport async function moveWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly to: string;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(input.target);\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n const targetRelativePath = validateLibraryArchiveRelativePath(input.to);\n const targetPath = resolveLibraryRelativePath(\n library.folderPath,\n targetRelativePath,\n );\n\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await mkdir(dirname(targetPath), { recursive: true });\n await assertInsideLibrary(\n await realpath(dirname(targetPath)),\n library.folderPath,\n );\n if (await pathExists(targetPath)) {\n throw new Error(\n `Library archive target already exists: ${targetRelativePath}`,\n );\n }\n await rename(archive.path, targetPath);\n await assertInsideLibrary(await realpath(targetPath), library.folderPath);\n const targetFile = await inspectLibraryArchiveFile(\n library.folderPath,\n targetRelativePath,\n );\n const moved = await withLibraryArchiveMembershipDatabase(\n async (database) => {\n await database.run(\n \"UPDATE library_archives SET relative_path = ? WHERE id = ?\",\n [targetRelativePath, archive.id],\n );\n await updateLibraryArchiveSeen(database, archive.id, targetFile, {\n status: \"present\",\n });\n return await requireLibraryArchiveByPublicId(\n database,\n library,\n archive.publicId,\n );\n },\n );\n\n await markWikiGraphLibraryIndexDirty(library);\n return moved;\n });\n}\n\nasync function withLibraryArchiveMembershipDatabase<T>(\n operation: (database: Database) => Promise<T>,\n): Promise<T> {\n const database = await openSharedStateDatabase(\n resolveWikiGraphCoreDatabasePath(),\n LIBRARY_ARCHIVE_MEMBERSHIP_SCHEMA_SQL,\n );\n\n try {\n await ensureLibraryArchiveMembershipColumns(database);\n await ensureLibraryArchiveMembershipPathIndex(database);\n return await operation(database);\n } finally {\n await database.close();\n }\n}\n\nasync function listLibraryArchives(\n database: Database,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord[]> {\n const rows = await queryLibraryArchiveRows(database, library.id);\n const archives: WikiGraphLibraryArchiveRecord[] = [];\n for (const row of rows) {\n const relativePath = getString(row, \"relative_path\");\n archives.push(\n mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n ),\n );\n }\n return archives;\n}\n\nasync function listLibraryArchiveRows(\n database: Database,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord[]> {\n const rows = await queryLibraryArchiveRows(database, library.id);\n return rows.map((row) => mapLibraryArchiveRecord(library, row, false));\n}\n\nasync function queryLibraryArchiveRows(\n database: Database,\n libraryId: number,\n): Promise<SqlRow[]> {\n return await database.queryAll(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ?\n ORDER BY relative_path\n `,\n [libraryId],\n (row) => row,\n );\n}\n\nasync function ensureLibraryArchiveByRelativePath(\n database: Database,\n libraryId: number,\n file: DiscoveredLibraryArchiveFile,\n): Promise<void> {\n const existing = await database.queryOne(\n `\n SELECT id\n FROM library_archives\n WHERE library_id = ? AND relative_path = ?\n ORDER BY CASE status\n WHEN 'present' THEN 0\n WHEN 'conflict' THEN 1\n ELSE 2\n END, id DESC\n `,\n [libraryId, file.relativePath],\n (row) => getNumber(row, \"id\"),\n );\n if (existing !== undefined) {\n await updateLibraryArchiveSeen(database, existing, file, {\n status: \"present\",\n });\n return;\n }\n\n await insertLibraryArchive(database, libraryId, file, { status: \"present\" });\n}\n\nasync function insertLibraryArchive(\n database: Database,\n libraryId: number,\n file: DiscoveredLibraryArchiveFile,\n options: { readonly status: WikiGraphLibraryArchiveStatus },\n): Promise<void> {\n const now = new Date().toISOString();\n await database.run(\n `\n INSERT INTO library_archives (\n library_id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at, created_at, updated_at\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `,\n [\n libraryId,\n await createUniqueLibraryArchivePublicId(database, libraryId),\n file.relativePath,\n options.status,\n file.mutationToken ?? null,\n file.size,\n Math.round(file.mtimeMs),\n now,\n now,\n now,\n ],\n );\n}\n\nasync function updateLibraryArchiveSeen(\n database: Database,\n archiveId: number,\n file: DiscoveredLibraryArchiveFile,\n options: { readonly status: WikiGraphLibraryArchiveStatus },\n): Promise<void> {\n const now = new Date().toISOString();\n await database.run(\n `\n UPDATE library_archives\n SET status = ?,\n last_seen_mutation_token = ?,\n last_seen_size = ?,\n last_seen_mtime_ms = ?,\n last_scanned_at = ?,\n updated_at = ?\n WHERE id = ?\n `,\n [\n options.status,\n file.mutationToken ?? null,\n file.size,\n Math.round(file.mtimeMs),\n now,\n now,\n archiveId,\n ],\n );\n}\n\nasync function requireLibraryArchiveByRelativePath(\n database: Database,\n library: WikiGraphLibraryRecord,\n relativePath: string,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const archive = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND relative_path = ?\n ORDER BY CASE status\n WHEN 'present' THEN 0\n WHEN 'conflict' THEN 1\n ELSE 2\n END, id DESC\n `,\n [library.id, relativePath],\n (row) => mapLibraryArchiveRecord(library, row, true),\n );\n if (archive === undefined) {\n throw new Error(\n `Library archive registry record is missing: ${relativePath}`,\n );\n }\n return archive;\n}\n\nasync function requireLibraryArchiveByPublicId(\n database: Database,\n library: WikiGraphLibraryRecord,\n publicId: string,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const row = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND public_id = ?\n `,\n [library.id, publicId],\n (row) => row,\n );\n if (row === undefined) {\n throw new Error(`Unknown Wiki Graph library archive: ${publicId}`);\n }\n const relativePath = getString(row, \"relative_path\");\n return mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n );\n}\n\nasync function requireLibraryArchiveById(\n database: Database,\n library: WikiGraphLibraryRecord,\n archiveId: number,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const row = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND id = ?\n `,\n [library.id, archiveId],\n (row) => row,\n );\n if (row === undefined) {\n throw new Error(`Unknown Wiki Graph library archive: ${archiveId}`);\n }\n const relativePath = getString(row, \"relative_path\");\n return mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n );\n}\n\nasync function resolveLibraryArchiveTarget(\n target: ParsedWikiGraphLibraryUri,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord> {\n if (target.kind !== \"archive\" || target.archivePublicId === undefined) {\n throw new Error(\"Expected a Wiki Graph library archive URI.\");\n }\n return await withLibraryArchiveMembershipDatabase(\n async (database) =>\n await requireLibraryArchiveByPublicId(\n database,\n library,\n target.archivePublicId!,\n ),\n );\n}\n\nfunction mapLibraryArchiveRecord(\n library: WikiGraphLibraryRecord,\n row: SqlRow,\n exists: boolean,\n): WikiGraphLibraryArchiveRecord {\n const publicId = getString(row, \"public_id\");\n const relativePath = getString(row, \"relative_path\");\n const databaseStatus = normalizeArchiveStatus(\n getOptionalString(row, \"status\") ?? \"present\",\n );\n return {\n createdAt: getString(row, \"created_at\"),\n exists,\n id: getNumber(row, \"id\"),\n libraryId: library.id,\n libraryUri: library.uri,\n ...optionalStringField(\n row,\n \"last_seen_mutation_token\",\n \"lastSeenMutationToken\",\n ),\n ...optionalNumberField(row, \"last_seen_mtime_ms\", \"lastSeenMtimeMs\"),\n ...optionalNumberField(row, \"last_seen_size\", \"lastSeenSize\"),\n ...optionalStringField(row, \"last_scanned_at\", \"lastScannedAt\"),\n path: join(library.folderPath, relativePath),\n publicId,\n relativePath,\n status: exists ? databaseStatus : \"missing\",\n updatedAt: getString(row, \"updated_at\"),\n uri: `${library.uri}/arc/${publicId}`,\n };\n}\n\nfunction findExistingArchiveAtPath(\n archives: readonly WikiGraphLibraryArchiveRecord[],\n file: DiscoveredLibraryArchiveFile,\n): WikiGraphLibraryArchiveRecord | undefined {\n return archives\n .filter((archive) => archive.relativePath === file.relativePath)\n .sort((a, b) => archivePathMatchRank(a) - archivePathMatchRank(b))[0];\n}\n\nfunction archivePathMatchRank(archive: WikiGraphLibraryArchiveRecord): number {\n if (archive.status === \"present\") {\n return 0;\n }\n if (archive.status === \"conflict\") {\n return 1;\n }\n return 2;\n}\n\nasync function listWikgFiles(\n root: string,\n): Promise<DiscoveredLibraryArchiveFile[]> {\n const relativePaths: string[] = [];\n await walkLibraryDirectory(root, root, relativePaths);\n const files: DiscoveredLibraryArchiveFile[] = [];\n for (const relativePath of relativePaths.sort((a, b) => a.localeCompare(b))) {\n files.push(\n await ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n root,\n relativePath,\n ),\n );\n }\n return files;\n}\n\nasync function ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n root: string,\n relativePath: string,\n): Promise<DiscoveredLibraryArchiveFile> {\n await ensureLibraryManagedArchiveHasNoSearchIndex(join(root, relativePath));\n return await inspectLibraryArchiveFile(root, relativePath);\n}\n\nasync function walkLibraryDirectory(\n root: string,\n directory: string,\n files: string[],\n): Promise<void> {\n let entries;\n try {\n entries = await opendir(directory);\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n for await (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) {\n await walkLibraryDirectory(root, path, files);\n } else if (\n entry.isFile() &&\n entry.name.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION)\n ) {\n files.push(relative(root, path).replace(/\\\\/gu, \"/\"));\n }\n }\n}\n\nasync function inspectLibraryArchiveFile(\n root: string,\n relativePath: string,\n): Promise<DiscoveredLibraryArchiveFile> {\n const path = join(root, relativePath);\n const fileStat = await stat(path);\n const mutationToken = await readOptionalWikgMutationToken(path);\n return {\n mtimeMs: fileStat.mtimeMs,\n ...(mutationToken === undefined ? {} : { mutationToken }),\n path,\n relativePath,\n size: fileStat.size,\n };\n}\n\nasync function readOptionalWikgMutationToken(\n path: string,\n): Promise<string | undefined> {\n try {\n return await readWikgArchiveMutationToken(path);\n } catch {\n return undefined;\n }\n}\n\nfunction validateLibraryArchiveRelativePath(relativePath: string): string {\n const normalized = relativePath\n .replace(/\\\\/gu, \"/\")\n .replace(/^\\/+|\\/+$/gu, \"\");\n if (\n normalized === \"\" ||\n isAbsolute(relativePath) ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n throw new Error(\n \"Library archive target must be a relative path inside the library folder.\",\n );\n }\n if (!normalized.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION)) {\n throw new Error(\"Library archive target must end with .wikg.\");\n }\n return normalized;\n}\n\nfunction resolveLibraryRelativePath(\n root: string,\n relativePath: string,\n): string {\n const path = resolve(root, relativePath);\n const rel = relative(resolve(root), path);\n if (rel === \"\" || rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(\"Library archive target escapes the library folder.\");\n }\n return path;\n}\n\nasync function assertInsideLibrary(path: string, root: string): Promise<void> {\n const rootRealPath = await realpath(root);\n const rel = relative(rootRealPath, path);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(\"Library archive path escapes the library folder.\");\n }\n}\n\nasync function ensureLibraryArchiveMembershipColumns(\n database: Database,\n): Promise<void> {\n const columns = await database.queryAll(\n \"PRAGMA table_info(library_archives)\",\n undefined,\n (row) => getString(row, \"name\"),\n );\n const columnSet = new Set(columns);\n const additions: Array<readonly [string, string]> = [\n [\"status\", \"TEXT NOT NULL DEFAULT 'present'\"],\n [\"last_seen_mutation_token\", \"TEXT\"],\n [\"last_seen_size\", \"INTEGER\"],\n [\"last_seen_mtime_ms\", \"INTEGER\"],\n [\"last_scanned_at\", \"TEXT\"],\n ];\n for (const [name, definition] of additions) {\n if (!columnSet.has(name)) {\n await database.run(\n `ALTER TABLE library_archives ADD COLUMN ${name} ${definition}`,\n );\n }\n }\n}\n\nasync function ensureLibraryArchiveMembershipPathIndex(\n database: Database,\n): Promise<void> {\n if (await hasUniqueLibraryArchiveRelativePathIndex(database)) {\n await rebuildLibraryArchiveMembershipTable(database);\n }\n await database.run(\n `\n CREATE INDEX IF NOT EXISTS idx_library_archives_library_path\n ON library_archives(library_id, relative_path)\n `,\n );\n}\n\nasync function hasUniqueLibraryArchiveRelativePathIndex(\n database: Database,\n): Promise<boolean> {\n const indexes = await database.queryAll(\n \"PRAGMA index_list(library_archives)\",\n undefined,\n (row) => ({\n name: getString(row, \"name\"),\n unique: getNumber(row, \"unique\") === 1,\n }),\n );\n for (const index of indexes) {\n if (!index.unique) {\n continue;\n }\n const columns = await database.queryAll(\n `PRAGMA index_info(${sqlStringLiteral(index.name)})`,\n undefined,\n (row) => getString(row, \"name\"),\n );\n if (\n columns.length === 2 &&\n columns[0] === \"library_id\" &&\n columns[1] === \"relative_path\"\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function rebuildLibraryArchiveMembershipTable(\n database: Database,\n): Promise<void> {\n await database.transaction(async () => {\n await database.run(\n \"ALTER TABLE library_archives RENAME TO library_archives_unique_path_legacy\",\n );\n await database.run(`\n CREATE TABLE library_archives (\n${LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL}\n )\n `);\n await database.run(`\n INSERT INTO library_archives (\n id, library_id, public_id, relative_path, status,\n last_seen_mutation_token, last_seen_size, last_seen_mtime_ms,\n last_scanned_at, created_at, updated_at\n )\n SELECT id, library_id, public_id, relative_path, status,\n last_seen_mutation_token, last_seen_size, last_seen_mtime_ms,\n last_scanned_at, created_at, updated_at\n FROM library_archives_unique_path_legacy\n `);\n await database.run(\"DROP TABLE library_archives_unique_path_legacy\");\n });\n}\n\nfunction sqlStringLiteral(value: string): string {\n return `'${value.replace(/'/gu, \"''\")}'`;\n}\n\nasync function createUniqueLibraryArchivePublicId(\n database: Database,\n libraryId: number,\n): Promise<string> {\n for (let attempt = 0; attempt < 20; attempt += 1) {\n const publicId = randomBytes(PUBLIC_ID_BYTES).toString(\"hex\");\n const existing = await database.queryOne(\n \"SELECT public_id FROM library_archives WHERE library_id = ? AND public_id = ?\",\n [libraryId, publicId],\n (row) => getString(row, \"public_id\"),\n );\n if (existing === undefined) {\n return publicId;\n }\n }\n throw new Error(\"Could not generate a unique library archive id.\");\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nfunction normalizeArchiveStatus(value: string): WikiGraphLibraryArchiveStatus {\n if (value === \"conflict\" || value === \"missing\" || value === \"present\") {\n return value;\n }\n return \"present\";\n}\n\nfunction optionalNumberField<K extends string>(\n row: SqlRow,\n dbKey: string,\n outputKey: K,\n): Partial<Record<K, number>> {\n const value = row[dbKey];\n if (typeof value !== \"number\") {\n return {};\n }\n return { [outputKey]: value } as Partial<Record<K, number>>;\n}\n\nfunction optionalStringField<K extends string>(\n row: SqlRow,\n dbKey: string,\n outputKey: K,\n): Partial<Record<K, string>> {\n const value = getOptionalString(row, dbKey);\n if (value === undefined) {\n return {};\n }\n return { [outputKey]: value } as Partial<Record<K, string>>;\n}\n"],"mappings":"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","names":["row"]}
|
|
1
|
+
{"version":3,"sources":["../../src/library/membership.ts"],"sourcesContent":["import { randomBytes } from \"crypto\";\nimport {\n constants,\n copyFile,\n mkdir,\n opendir,\n realpath,\n rename,\n rm,\n stat,\n} from \"fs/promises\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"path\";\n\nimport {\n getNumber,\n getOptionalString,\n getString,\n type Database,\n type SqlRow,\n} from \"../document/database.js\";\nimport { openSharedStateDatabase } from \"../document/index.js\";\nimport { resolveWikiGraphCoreDatabasePath } from \"../runtime/common/wiki-graph/dir.js\";\nimport { WIKI_GRAPH_ARCHIVE_EXTENSION } from \"../runtime/common/wiki-graph/uri.js\";\nimport {\n readWikgArchiveEntry,\n readWikgArchiveMutationToken,\n WikiGraphArchiveFile,\n} from \"../storage/wikg/index.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\nimport {\n parseWikiGraphLibraryUri,\n resolveWikiGraphLibrary,\n resolveWikiGraphLibraryForScan,\n updateWikiGraphLibraryFolderPathForRebind,\n type ParsedWikiGraphLibraryUri,\n type WikiGraphLibraryRecord,\n} from \"./registry.js\";\nimport { markWikiGraphLibraryIndexDirty } from \"./search-index.js\";\nimport { withWikiGraphLibraryLock } from \"./lock.js\";\n\nconst PUBLIC_ID_BYTES = 6;\nconst SEARCH_INDEX_ARCHIVE_ENTRY_PATH = \"fts.db\";\nconst LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL = `\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n library_id INTEGER NOT NULL,\n public_id TEXT NOT NULL,\n relative_path TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'present',\n last_seen_mutation_token TEXT,\n last_seen_size INTEGER,\n last_seen_mtime_ms INTEGER,\n last_scanned_at TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n UNIQUE(library_id, public_id)\n`;\nconst LIBRARY_ARCHIVE_MEMBERSHIP_SCHEMA_SQL = `\n CREATE TABLE IF NOT EXISTS library_archives (\n${LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL}\n );\n\n CREATE INDEX IF NOT EXISTS idx_library_archives_library\n ON library_archives(library_id);\n\n CREATE INDEX IF NOT EXISTS idx_library_archives_library_path\n ON library_archives(library_id, relative_path);\n`;\n\ntype LibraryPathIdentityMode = \"trusted\" | \"untrusted\";\n\ntype WikiGraphLibraryArchiveStatus = \"conflict\" | \"missing\" | \"present\";\n\nexport interface WikiGraphLibraryArchiveRecord {\n readonly id: number;\n readonly publicId: string;\n readonly uri: string;\n readonly libraryId: number;\n readonly libraryUri: string;\n readonly relativePath: string;\n readonly path: string;\n readonly exists: boolean;\n readonly status: WikiGraphLibraryArchiveStatus;\n readonly lastSeenMutationToken?: string;\n readonly lastSeenSize?: number;\n readonly lastSeenMtimeMs?: number;\n readonly lastScannedAt?: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n}\n\nexport interface WikiGraphLibraryScanResult {\n readonly library: WikiGraphLibraryRecord;\n readonly archives: readonly WikiGraphLibraryArchiveRecord[];\n}\n\ninterface DiscoveredLibraryArchiveFile {\n readonly relativePath: string;\n readonly path: string;\n readonly mutationToken?: string;\n readonly size: number;\n readonly mtimeMs: number;\n}\n\nexport async function scanWikiGraphLibrary(\n target: ParsedWikiGraphLibraryUri,\n): Promise<WikiGraphLibraryScanResult> {\n const library = await resolveWikiGraphLibraryForScan(target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const result = await scanWikiGraphLibraryUnlocked(target, library, {\n pathIdentity: \"trusted\",\n });\n\n await markWikiGraphLibraryIndexDirty(library);\n return result;\n });\n}\n\nexport async function rebindWikiGraphLibrary(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly folderPath: string;\n}): Promise<WikiGraphLibraryScanResult> {\n if (input.target.kind !== \"scope\" || input.target.objectUri !== undefined) {\n throw new Error(\"Library rebind requires a library scope URI.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const rebound = await updateWikiGraphLibraryFolderPathForRebind(\n library,\n input.folderPath,\n );\n const result = await scanWikiGraphLibraryUnlocked(input.target, rebound, {\n pathIdentity: \"untrusted\",\n });\n\n await markWikiGraphLibraryIndexDirty(rebound);\n return result;\n });\n}\n\nasync function scanWikiGraphLibraryUnlocked(\n target: ParsedWikiGraphLibraryUri,\n library: WikiGraphLibraryRecord,\n options: { readonly pathIdentity: LibraryPathIdentityMode },\n): Promise<WikiGraphLibraryScanResult> {\n const files = await listWikgFiles(library.folderPath);\n\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await database.transaction(async () => {\n const existing = await listLibraryArchiveRows(database, library);\n const currentPaths = new Set(files.map((file) => file.relativePath));\n const seenArchiveIds = new Set<number>();\n\n for (const file of files) {\n const existingAtPath = findExistingArchiveAtPath(existing, file);\n if (\n options.pathIdentity === \"trusted\" &&\n existingAtPath !== undefined\n ) {\n await updateLibraryArchiveSeen(database, existingAtPath.id, file, {\n status: \"present\",\n });\n seenArchiveIds.add(existingAtPath.id);\n continue;\n }\n\n const matchingTokenArchives =\n file.mutationToken === undefined\n ? []\n : existing.filter(\n (archive) =>\n archive.lastSeenMutationToken === file.mutationToken &&\n !seenArchiveIds.has(archive.id),\n );\n const adoptable = matchingTokenArchives.filter(\n (archive) =>\n archive.relativePath === file.relativePath ||\n !currentPaths.has(archive.relativePath),\n );\n\n if (\n matchingTokenArchives.length === 1 &&\n adoptable.length === 1 &&\n file.mutationToken !== undefined\n ) {\n const archive = adoptable[0]!;\n await database.run(\n `\n UPDATE library_archives\n SET relative_path = ?\n WHERE id = ?\n `,\n [file.relativePath, archive.id],\n );\n await updateLibraryArchiveSeen(database, archive.id, file, {\n status: \"present\",\n });\n seenArchiveIds.add(archive.id);\n continue;\n }\n\n await insertLibraryArchive(database, library.id, file, {\n status:\n matchingTokenArchives.length === 0 ||\n file.mutationToken === undefined\n ? \"present\"\n : \"conflict\",\n });\n }\n\n for (const archive of existing) {\n if (\n seenArchiveIds.has(archive.id) ||\n (options.pathIdentity === \"trusted\" &&\n currentPaths.has(archive.relativePath))\n ) {\n continue;\n }\n await database.run(\n `\n DELETE FROM library_archives\n WHERE id = ?\n `,\n [archive.id],\n );\n }\n });\n });\n\n return { library, archives: await listWikiGraphLibraryArchives(target) };\n}\n\nexport async function listWikiGraphLibraryArchives(\n target: ParsedWikiGraphLibraryUri,\n): Promise<readonly WikiGraphLibraryArchiveRecord[]> {\n const library = await resolveWikiGraphLibrary(target);\n return await withLibraryArchiveMembershipDatabase(\n async (database) => await listLibraryArchives(database, library),\n );\n}\n\nexport async function getWikiGraphLibraryArchive(\n target: ParsedWikiGraphLibraryUri,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(target);\n return await resolveLibraryArchiveTarget(target, library);\n}\n\nexport async function getWikiGraphLibraryArchiveById(\n library: WikiGraphLibraryRecord,\n archiveId: number,\n): Promise<WikiGraphLibraryArchiveRecord> {\n return await withLibraryArchiveMembershipDatabase(\n async (database) =>\n await requireLibraryArchiveById(database, library, archiveId),\n );\n}\n\nexport async function resolveWikiGraphLibraryArchivePath(\n archiveLocator: string,\n): Promise<string> {\n const target = parseWikiGraphLibraryUri(archiveLocator);\n if (target === undefined || target.kind !== \"archive\") {\n throw new Error(\n `Expected a Wiki Graph library archive locator: ${archiveLocator}`,\n );\n }\n\n const archive = await getWikiGraphLibraryArchive(target);\n if (!archive.exists || archive.status === \"missing\") {\n throw new Error(`Wiki Graph library archive is missing: ${archiveLocator}`);\n }\n if (archive.status === \"conflict\") {\n throw new Error(\n `Wiki Graph library archive has a conflict and cannot be resolved: ${archiveLocator}`,\n );\n }\n\n return archive.path;\n}\n\nexport async function addWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly inputPath: string;\n readonly to?: string;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n if (input.inputPath.startsWith(\"wikg://\")) {\n throw new Error(\n \"Library add --input accepts a file path, not a Wiki Graph URI.\",\n );\n }\n if (/^[a-z][a-z0-9+.-]*:\\/\\//iu.test(input.inputPath)) {\n throw new Error(\"Library add does not support URL inputs yet.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n await mkdir(library.folderPath, { recursive: true });\n const sourcePath = resolve(input.inputPath);\n const sourceStats = await stat(sourcePath);\n if (!sourceStats.isFile()) {\n throw new Error(`Library add --input must be a file: ${input.inputPath}`);\n }\n const sourceBasename = sourcePath.split(/[\\\\/]/u).at(-1) ?? \"\";\n const targetRelativePath = validateLibraryArchiveRelativePath(\n input.to ?? sourceBasename,\n );\n const targetPath = resolveLibraryRelativePath(\n library.folderPath,\n targetRelativePath,\n );\n\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await mkdir(dirname(targetPath), { recursive: true });\n await assertInsideLibrary(\n await realpath(dirname(targetPath)),\n library.folderPath,\n );\n await copyFile(sourcePath, targetPath, constants.COPYFILE_EXCL);\n await assertInsideLibrary(await realpath(targetPath), library.folderPath);\n const targetFile = await ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n library.folderPath,\n targetRelativePath,\n );\n const archive = await withLibraryArchiveMembershipDatabase(\n async (database) => {\n await database.transaction(async () => {\n await ensureLibraryArchiveByRelativePath(\n database,\n library.id,\n targetFile,\n );\n });\n return await requireLibraryArchiveByRelativePath(\n database,\n library,\n targetRelativePath,\n );\n },\n );\n\n await markWikiGraphLibraryIndexDirty(library);\n return archive;\n });\n}\n\nexport async function finalizeWikiGraphLibraryArchiveWrite(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n}): Promise<boolean> {\n if (input.target.kind !== \"archive\") {\n throw new Error(\"Expected a Wiki Graph library archive URI.\");\n }\n\n const library = await resolveWikiGraphLibrary(input.target);\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n const removed = await ensureLibraryManagedArchiveHasNoSearchIndex(\n archive.path,\n );\n const refreshedFile = await inspectLibraryArchiveFile(\n library.folderPath,\n archive.relativePath,\n );\n\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await updateLibraryArchiveSeen(database, archive.id, refreshedFile, {\n status: \"present\",\n });\n });\n\n return removed;\n });\n}\n\nexport async function ensureLibraryManagedArchiveHasNoSearchIndex(\n archivePath: string,\n): Promise<boolean> {\n if ((await readOptionalWikgMutationToken(archivePath)) === undefined) {\n return false;\n }\n\n const searchIndex = await readWikgArchiveEntry(\n archivePath,\n SEARCH_INDEX_ARCHIVE_ENTRY_PATH,\n );\n if (searchIndex === undefined) {\n return false;\n }\n\n await new WikiGraphArchiveFile(archivePath).write(\n async (document) => {\n await document.deleteSearchIndexDatabase();\n },\n { searchIndexWritebackPolicy: \"archive\" },\n );\n return true;\n}\n\nexport async function removeWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(input.target);\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n\n await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await rm(archive.path, { force: true });\n await withLibraryArchiveMembershipDatabase(async (database) => {\n await database.run(\"DELETE FROM library_archives WHERE id = ?\", [\n archive.id,\n ]);\n });\n await markWikiGraphLibraryIndexDirty(library);\n });\n\n return { ...archive, exists: false, status: \"missing\" };\n}\n\nexport async function moveWikiGraphLibraryArchive(input: {\n readonly target: ParsedWikiGraphLibraryUri;\n readonly to: string;\n}): Promise<WikiGraphLibraryArchiveRecord> {\n const library = await resolveWikiGraphLibrary(input.target);\n const archive = await resolveLibraryArchiveTarget(input.target, library);\n const targetRelativePath = validateLibraryArchiveRelativePath(input.to);\n const targetPath = resolveLibraryRelativePath(\n library.folderPath,\n targetRelativePath,\n );\n\n return await withWikiGraphLibraryLock(library.id, \"write\", async () => {\n await mkdir(dirname(targetPath), { recursive: true });\n await assertInsideLibrary(\n await realpath(dirname(targetPath)),\n library.folderPath,\n );\n if (await pathExists(targetPath)) {\n throw new Error(\n `Library archive target already exists: ${targetRelativePath}`,\n );\n }\n await rename(archive.path, targetPath);\n await assertInsideLibrary(await realpath(targetPath), library.folderPath);\n const targetFile = await inspectLibraryArchiveFile(\n library.folderPath,\n targetRelativePath,\n );\n const moved = await withLibraryArchiveMembershipDatabase(\n async (database) => {\n await database.run(\n \"UPDATE library_archives SET relative_path = ? WHERE id = ?\",\n [targetRelativePath, archive.id],\n );\n await updateLibraryArchiveSeen(database, archive.id, targetFile, {\n status: \"present\",\n });\n return await requireLibraryArchiveByPublicId(\n database,\n library,\n archive.publicId,\n );\n },\n );\n\n await markWikiGraphLibraryIndexDirty(library);\n return moved;\n });\n}\n\nasync function withLibraryArchiveMembershipDatabase<T>(\n operation: (database: Database) => Promise<T>,\n): Promise<T> {\n const database = await openSharedStateDatabase(\n resolveWikiGraphCoreDatabasePath(),\n LIBRARY_ARCHIVE_MEMBERSHIP_SCHEMA_SQL,\n );\n\n try {\n await ensureLibraryArchiveMembershipColumns(database);\n await ensureLibraryArchiveMembershipPathIndex(database);\n return await operation(database);\n } finally {\n await database.close();\n }\n}\n\nasync function listLibraryArchives(\n database: Database,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord[]> {\n const rows = await queryLibraryArchiveRows(database, library.id);\n const archives: WikiGraphLibraryArchiveRecord[] = [];\n for (const row of rows) {\n const relativePath = getString(row, \"relative_path\");\n archives.push(\n mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n ),\n );\n }\n return archives;\n}\n\nasync function listLibraryArchiveRows(\n database: Database,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord[]> {\n const rows = await queryLibraryArchiveRows(database, library.id);\n return rows.map((row) => mapLibraryArchiveRecord(library, row, false));\n}\n\nasync function queryLibraryArchiveRows(\n database: Database,\n libraryId: number,\n): Promise<SqlRow[]> {\n return await database.queryAll(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ?\n ORDER BY relative_path\n `,\n [libraryId],\n (row) => row,\n );\n}\n\nasync function ensureLibraryArchiveByRelativePath(\n database: Database,\n libraryId: number,\n file: DiscoveredLibraryArchiveFile,\n): Promise<void> {\n const existing = await database.queryOne(\n `\n SELECT id\n FROM library_archives\n WHERE library_id = ? AND relative_path = ?\n ORDER BY CASE status\n WHEN 'present' THEN 0\n WHEN 'conflict' THEN 1\n ELSE 2\n END, id DESC\n `,\n [libraryId, file.relativePath],\n (row) => getNumber(row, \"id\"),\n );\n if (existing !== undefined) {\n await updateLibraryArchiveSeen(database, existing, file, {\n status: \"present\",\n });\n return;\n }\n\n await insertLibraryArchive(database, libraryId, file, { status: \"present\" });\n}\n\nasync function insertLibraryArchive(\n database: Database,\n libraryId: number,\n file: DiscoveredLibraryArchiveFile,\n options: { readonly status: WikiGraphLibraryArchiveStatus },\n): Promise<void> {\n const now = new Date().toISOString();\n await database.run(\n `\n INSERT INTO library_archives (\n library_id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at, created_at, updated_at\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `,\n [\n libraryId,\n await createUniqueLibraryArchivePublicId(database, libraryId),\n file.relativePath,\n options.status,\n file.mutationToken ?? null,\n file.size,\n Math.round(file.mtimeMs),\n now,\n now,\n now,\n ],\n );\n}\n\nasync function updateLibraryArchiveSeen(\n database: Database,\n archiveId: number,\n file: DiscoveredLibraryArchiveFile,\n options: { readonly status: WikiGraphLibraryArchiveStatus },\n): Promise<void> {\n const now = new Date().toISOString();\n await database.run(\n `\n UPDATE library_archives\n SET status = ?,\n last_seen_mutation_token = ?,\n last_seen_size = ?,\n last_seen_mtime_ms = ?,\n last_scanned_at = ?,\n updated_at = ?\n WHERE id = ?\n `,\n [\n options.status,\n file.mutationToken ?? null,\n file.size,\n Math.round(file.mtimeMs),\n now,\n now,\n archiveId,\n ],\n );\n}\n\nasync function requireLibraryArchiveByRelativePath(\n database: Database,\n library: WikiGraphLibraryRecord,\n relativePath: string,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const archive = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND relative_path = ?\n ORDER BY CASE status\n WHEN 'present' THEN 0\n WHEN 'conflict' THEN 1\n ELSE 2\n END, id DESC\n `,\n [library.id, relativePath],\n (row) => mapLibraryArchiveRecord(library, row, true),\n );\n if (archive === undefined) {\n throw new Error(\n `Library archive registry record is missing: ${relativePath}`,\n );\n }\n return archive;\n}\n\nasync function requireLibraryArchiveByPublicId(\n database: Database,\n library: WikiGraphLibraryRecord,\n publicId: string,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const row = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND public_id = ?\n `,\n [library.id, publicId],\n (row) => row,\n );\n if (row === undefined) {\n throw new Error(`Unknown Wiki Graph library archive: ${publicId}`);\n }\n const relativePath = getString(row, \"relative_path\");\n return mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n );\n}\n\nasync function requireLibraryArchiveById(\n database: Database,\n library: WikiGraphLibraryRecord,\n archiveId: number,\n): Promise<WikiGraphLibraryArchiveRecord> {\n const row = await database.queryOne(\n `\n SELECT id, public_id, relative_path, status, last_seen_mutation_token,\n last_seen_size, last_seen_mtime_ms, last_scanned_at,\n created_at, updated_at\n FROM library_archives\n WHERE library_id = ? AND id = ?\n `,\n [library.id, archiveId],\n (row) => row,\n );\n if (row === undefined) {\n throw new Error(`Unknown Wiki Graph library archive: ${archiveId}`);\n }\n const relativePath = getString(row, \"relative_path\");\n return mapLibraryArchiveRecord(\n library,\n row,\n await pathExists(join(library.folderPath, relativePath)),\n );\n}\n\nasync function resolveLibraryArchiveTarget(\n target: ParsedWikiGraphLibraryUri,\n library: WikiGraphLibraryRecord,\n): Promise<WikiGraphLibraryArchiveRecord> {\n if (target.kind !== \"archive\" || target.archivePublicId === undefined) {\n throw new Error(\"Expected a Wiki Graph library archive URI.\");\n }\n return await withLibraryArchiveMembershipDatabase(\n async (database) =>\n await requireLibraryArchiveByPublicId(\n database,\n library,\n target.archivePublicId!,\n ),\n );\n}\n\nfunction mapLibraryArchiveRecord(\n library: WikiGraphLibraryRecord,\n row: SqlRow,\n exists: boolean,\n): WikiGraphLibraryArchiveRecord {\n const publicId = getString(row, \"public_id\");\n const relativePath = getString(row, \"relative_path\");\n const databaseStatus = normalizeArchiveStatus(\n getOptionalString(row, \"status\") ?? \"present\",\n );\n return {\n createdAt: getString(row, \"created_at\"),\n exists,\n id: getNumber(row, \"id\"),\n libraryId: library.id,\n libraryUri: library.uri,\n ...optionalStringField(\n row,\n \"last_seen_mutation_token\",\n \"lastSeenMutationToken\",\n ),\n ...optionalNumberField(row, \"last_seen_mtime_ms\", \"lastSeenMtimeMs\"),\n ...optionalNumberField(row, \"last_seen_size\", \"lastSeenSize\"),\n ...optionalStringField(row, \"last_scanned_at\", \"lastScannedAt\"),\n path: join(library.folderPath, relativePath),\n publicId,\n relativePath,\n status: exists ? databaseStatus : \"missing\",\n updatedAt: getString(row, \"updated_at\"),\n uri: `${library.uri}/arc/${publicId}`,\n };\n}\n\nfunction findExistingArchiveAtPath(\n archives: readonly WikiGraphLibraryArchiveRecord[],\n file: DiscoveredLibraryArchiveFile,\n): WikiGraphLibraryArchiveRecord | undefined {\n return archives\n .filter((archive) => archive.relativePath === file.relativePath)\n .sort((a, b) => archivePathMatchRank(a) - archivePathMatchRank(b))[0];\n}\n\nfunction archivePathMatchRank(archive: WikiGraphLibraryArchiveRecord): number {\n if (archive.status === \"present\") {\n return 0;\n }\n if (archive.status === \"conflict\") {\n return 1;\n }\n return 2;\n}\n\nasync function listWikgFiles(\n root: string,\n): Promise<DiscoveredLibraryArchiveFile[]> {\n await assertLibraryFolderExists(root);\n const relativePaths: string[] = [];\n await walkLibraryDirectory(root, root, relativePaths);\n const files: DiscoveredLibraryArchiveFile[] = [];\n for (const relativePath of relativePaths.sort((a, b) => a.localeCompare(b))) {\n files.push(\n await ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n root,\n relativePath,\n ),\n );\n }\n return files;\n}\n\nasync function assertLibraryFolderExists(root: string): Promise<void> {\n try {\n const rootStat = await stat(root);\n if (!rootStat.isDirectory()) {\n throw new Error(`Wiki Graph library folder is not a directory: ${root}`);\n }\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n throw new Error(`Wiki Graph library folder is missing: ${root}`);\n }\n throw error;\n }\n}\n\nasync function ensureLibraryArchiveFileHasNoSearchIndexAndInspect(\n root: string,\n relativePath: string,\n): Promise<DiscoveredLibraryArchiveFile> {\n await ensureLibraryManagedArchiveHasNoSearchIndex(join(root, relativePath));\n return await inspectLibraryArchiveFile(root, relativePath);\n}\n\nasync function walkLibraryDirectory(\n root: string,\n directory: string,\n files: string[],\n): Promise<void> {\n let entries;\n try {\n entries = await opendir(directory);\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n for await (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) {\n await walkLibraryDirectory(root, path, files);\n } else if (\n entry.isFile() &&\n entry.name.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION)\n ) {\n files.push(relative(root, path).replace(/\\\\/gu, \"/\"));\n }\n }\n}\n\nasync function inspectLibraryArchiveFile(\n root: string,\n relativePath: string,\n): Promise<DiscoveredLibraryArchiveFile> {\n const path = join(root, relativePath);\n const fileStat = await stat(path);\n const mutationToken = await readOptionalWikgMutationToken(path);\n return {\n mtimeMs: fileStat.mtimeMs,\n ...(mutationToken === undefined ? {} : { mutationToken }),\n path,\n relativePath,\n size: fileStat.size,\n };\n}\n\nasync function readOptionalWikgMutationToken(\n path: string,\n): Promise<string | undefined> {\n try {\n return await readWikgArchiveMutationToken(path);\n } catch {\n return undefined;\n }\n}\n\nfunction validateLibraryArchiveRelativePath(relativePath: string): string {\n const normalized = relativePath\n .replace(/\\\\/gu, \"/\")\n .replace(/^\\/+|\\/+$/gu, \"\");\n if (\n normalized === \"\" ||\n isAbsolute(relativePath) ||\n normalized.split(\"/\").includes(\"..\")\n ) {\n throw new Error(\n \"Library archive target must be a relative path inside the library folder.\",\n );\n }\n if (!normalized.endsWith(WIKI_GRAPH_ARCHIVE_EXTENSION)) {\n throw new Error(\"Library archive target must end with .wikg.\");\n }\n return normalized;\n}\n\nfunction resolveLibraryRelativePath(\n root: string,\n relativePath: string,\n): string {\n const path = resolve(root, relativePath);\n const rel = relative(resolve(root), path);\n if (rel === \"\" || rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(\"Library archive target escapes the library folder.\");\n }\n return path;\n}\n\nasync function assertInsideLibrary(path: string, root: string): Promise<void> {\n const rootRealPath = await realpath(root);\n const rel = relative(rootRealPath, path);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw new Error(\"Library archive path escapes the library folder.\");\n }\n}\n\nasync function ensureLibraryArchiveMembershipColumns(\n database: Database,\n): Promise<void> {\n const columns = await database.queryAll(\n \"PRAGMA table_info(library_archives)\",\n undefined,\n (row) => getString(row, \"name\"),\n );\n const columnSet = new Set(columns);\n const additions: Array<readonly [string, string]> = [\n [\"status\", \"TEXT NOT NULL DEFAULT 'present'\"],\n [\"last_seen_mutation_token\", \"TEXT\"],\n [\"last_seen_size\", \"INTEGER\"],\n [\"last_seen_mtime_ms\", \"INTEGER\"],\n [\"last_scanned_at\", \"TEXT\"],\n ];\n for (const [name, definition] of additions) {\n if (!columnSet.has(name)) {\n await database.run(\n `ALTER TABLE library_archives ADD COLUMN ${name} ${definition}`,\n );\n }\n }\n}\n\nasync function ensureLibraryArchiveMembershipPathIndex(\n database: Database,\n): Promise<void> {\n if (await hasUniqueLibraryArchiveRelativePathIndex(database)) {\n await rebuildLibraryArchiveMembershipTable(database);\n }\n await database.run(\n `\n CREATE INDEX IF NOT EXISTS idx_library_archives_library_path\n ON library_archives(library_id, relative_path)\n `,\n );\n}\n\nasync function hasUniqueLibraryArchiveRelativePathIndex(\n database: Database,\n): Promise<boolean> {\n const indexes = await database.queryAll(\n \"PRAGMA index_list(library_archives)\",\n undefined,\n (row) => ({\n name: getString(row, \"name\"),\n unique: getNumber(row, \"unique\") === 1,\n }),\n );\n for (const index of indexes) {\n if (!index.unique) {\n continue;\n }\n const columns = await database.queryAll(\n `PRAGMA index_info(${sqlStringLiteral(index.name)})`,\n undefined,\n (row) => getString(row, \"name\"),\n );\n if (\n columns.length === 2 &&\n columns[0] === \"library_id\" &&\n columns[1] === \"relative_path\"\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function rebuildLibraryArchiveMembershipTable(\n database: Database,\n): Promise<void> {\n await database.transaction(async () => {\n await database.run(\n \"ALTER TABLE library_archives RENAME TO library_archives_unique_path_legacy\",\n );\n await database.run(`\n CREATE TABLE library_archives (\n${LIBRARY_ARCHIVES_TABLE_COLUMNS_SQL}\n )\n `);\n await database.run(`\n INSERT INTO library_archives (\n id, library_id, public_id, relative_path, status,\n last_seen_mutation_token, last_seen_size, last_seen_mtime_ms,\n last_scanned_at, created_at, updated_at\n )\n SELECT id, library_id, public_id, relative_path, status,\n last_seen_mutation_token, last_seen_size, last_seen_mtime_ms,\n last_scanned_at, created_at, updated_at\n FROM library_archives_unique_path_legacy\n `);\n await database.run(\"DROP TABLE library_archives_unique_path_legacy\");\n });\n}\n\nfunction sqlStringLiteral(value: string): string {\n return `'${value.replace(/'/gu, \"''\")}'`;\n}\n\nasync function createUniqueLibraryArchivePublicId(\n database: Database,\n libraryId: number,\n): Promise<string> {\n for (let attempt = 0; attempt < 20; attempt += 1) {\n const publicId = randomBytes(PUBLIC_ID_BYTES).toString(\"hex\");\n const existing = await database.queryOne(\n \"SELECT public_id FROM library_archives WHERE library_id = ? AND public_id = ?\",\n [libraryId, publicId],\n (row) => getString(row, \"public_id\"),\n );\n if (existing === undefined) {\n return publicId;\n }\n }\n throw new Error(\"Could not generate a unique library archive id.\");\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nfunction normalizeArchiveStatus(value: string): WikiGraphLibraryArchiveStatus {\n if (value === \"conflict\" || value === \"missing\" || value === \"present\") {\n return value;\n }\n return \"present\";\n}\n\nfunction optionalNumberField<K extends string>(\n row: SqlRow,\n dbKey: string,\n outputKey: K,\n): Partial<Record<K, number>> {\n const value = row[dbKey];\n if (typeof value !== \"number\") {\n return {};\n }\n return { [outputKey]: value } as Partial<Record<K, number>>;\n}\n\nfunction optionalStringField<K extends string>(\n row: SqlRow,\n dbKey: string,\n outputKey: K,\n): Partial<Record<K, string>> {\n const value = getOptionalString(row, dbKey);\n if (value === undefined) {\n return {};\n }\n return { [outputKey]: value } as Partial<Record<K, string>>;\n}\n"],"mappings":"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","names":["row"]}
|
package/dist/library/query.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArchiveFindOptions, ArchiveFindResult, ArchiveRelatedOptions, ArchiveRelatedResult,
|
|
1
|
+
import { ArchiveFindOptions, ArchiveFindResult, ArchiveRelatedOptions, ArchiveRelatedResult, ArchiveCollectionOptions, ArchiveCollectionResult, ArchiveEvidenceOptions, ArchiveEvidence, ArchivePack, ArchivePage, ArchiveLibrarySource } from '../retrieval/query/archive-view/types.js';
|
|
2
2
|
import { readArchivePage } from '../retrieval/query/archive-view/pages.js';
|
|
3
3
|
import { ParsedWikiGraphLibraryUri } from './registry.js';
|
|
4
4
|
import '../document/types.js';
|
|
@@ -31,7 +31,9 @@ import '../external/wikipage/wikimedia-client/wiki.js';
|
|
|
31
31
|
import '../external/wikipage/fetch-log.js';
|
|
32
32
|
|
|
33
33
|
declare function findWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, query: string, options?: ArchiveFindOptions): Promise<ArchiveFindResult>;
|
|
34
|
+
declare function findWikiGraphLibraryArchiveMembers(target: ParsedWikiGraphLibraryUri, query: string, options?: ArchiveFindOptions): Promise<ArchiveFindResult>;
|
|
34
35
|
declare function listWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, options?: ArchiveCollectionOptions): Promise<ArchiveCollectionResult>;
|
|
36
|
+
declare function listWikiGraphLibraryArchiveMembers(target: ParsedWikiGraphLibraryUri, options?: ArchiveCollectionOptions): Promise<ArchiveCollectionResult>;
|
|
35
37
|
declare function readWikiGraphLibraryPage(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: Parameters<typeof readArchivePage>[2]): Promise<ArchivePage>;
|
|
36
38
|
declare function listWikiGraphLibraryEvidence(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: ArchiveEvidenceOptions): Promise<ArchiveEvidence>;
|
|
37
39
|
declare function listRelatedWikiGraphLibraryObjects(target: ParsedWikiGraphLibraryUri, objectUri: string, options?: ArchiveRelatedOptions): Promise<ArchiveRelatedResult>;
|
|
@@ -42,4 +44,4 @@ declare function createLibrarySources(values: readonly {
|
|
|
42
44
|
readonly libraryArchiveUri?: string;
|
|
43
45
|
}[]): readonly ArchiveLibrarySource[];
|
|
44
46
|
|
|
45
|
-
export { createLibrarySources, findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById };
|
|
47
|
+
export { createLibrarySources, findWikiGraphLibraryArchiveMembers, findWikiGraphLibraryObjects, listRelatedWikiGraphLibraryObjects, listWikiGraphLibraryArchiveMembers, listWikiGraphLibraryEvidence, listWikiGraphLibraryObjects, packWikiGraphLibraryContext, readWikiGraphLibraryPage, resolveWikiGraphLibraryQueryTargetById };
|
package/dist/library/query.js
CHANGED
|
@@ -72,12 +72,46 @@ async function findWikiGraphLibraryObjects(target, query, options = {}) {
|
|
|
72
72
|
}
|
|
73
73
|
return createFindResult(query, hits, options, result.terms);
|
|
74
74
|
}
|
|
75
|
+
async function findWikiGraphLibraryArchiveMembers(target, query, options = {}) {
|
|
76
|
+
const terms = createLibraryArchiveMemberSearchTerms(query);
|
|
77
|
+
const archives = await listWikiGraphLibraryArchives(target);
|
|
78
|
+
const hits = archives.map(formatLibraryArchiveMemberHit).filter((hit) => matchesLibraryArchiveMemberSearch(hit, terms));
|
|
79
|
+
return createFindResult(query, hits, options, terms, "typed");
|
|
80
|
+
}
|
|
75
81
|
function createLibraryQueryIndexHitLimit(options) {
|
|
76
82
|
return Math.max(
|
|
77
83
|
(options.limit ?? DEFAULT_LIBRARY_PAGE_LIMIT) * LIBRARY_QUERY_INDEX_LIMIT_MULTIPLIER,
|
|
78
84
|
LIBRARY_QUERY_INDEX_MIN_LIMIT
|
|
79
85
|
);
|
|
80
86
|
}
|
|
87
|
+
function createLibraryArchiveMemberSearchTerms(query) {
|
|
88
|
+
return query.trim().toLocaleLowerCase().split(/\s+/u).filter((term) => term !== "");
|
|
89
|
+
}
|
|
90
|
+
function matchesLibraryArchiveMemberSearch(hit, terms) {
|
|
91
|
+
if (terms.length === 0) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
const haystack = `${hit.id}
|
|
95
|
+
${hit.title}
|
|
96
|
+
${hit.snippet}`.toLocaleLowerCase();
|
|
97
|
+
return terms.every((term) => haystack.includes(term));
|
|
98
|
+
}
|
|
99
|
+
function formatLibraryArchiveMemberHit(archive) {
|
|
100
|
+
const details = [
|
|
101
|
+
archive.relativePath,
|
|
102
|
+
archive.status,
|
|
103
|
+
archive.exists ? "exists" : "missing-file"
|
|
104
|
+
].join(" ");
|
|
105
|
+
return {
|
|
106
|
+
archiveId: archive.id,
|
|
107
|
+
field: "metadata",
|
|
108
|
+
id: archive.uri,
|
|
109
|
+
libraryArchiveUri: archive.uri,
|
|
110
|
+
snippet: details,
|
|
111
|
+
title: archive.relativePath,
|
|
112
|
+
type: "meta"
|
|
113
|
+
};
|
|
114
|
+
}
|
|
81
115
|
async function listWikiGraphLibraryObjects(target, options = {}) {
|
|
82
116
|
const hits = [];
|
|
83
117
|
const result = await listWikiGraphLibrarySearchIndex(target, {
|
|
@@ -105,6 +139,14 @@ async function listWikiGraphLibraryObjects(target, options = {}) {
|
|
|
105
139
|
}
|
|
106
140
|
return createCollectionResult(hits, options);
|
|
107
141
|
}
|
|
142
|
+
async function listWikiGraphLibraryArchiveMembers(target, options = {}) {
|
|
143
|
+
return createCollectionResult(
|
|
144
|
+
(await listWikiGraphLibraryArchives(target)).map(
|
|
145
|
+
formatLibraryArchiveMemberHit
|
|
146
|
+
),
|
|
147
|
+
options
|
|
148
|
+
);
|
|
149
|
+
}
|
|
108
150
|
async function readWikiGraphLibraryPage(target, objectUri, options = {}) {
|
|
109
151
|
const pages = await readIndexedArchiveResults(
|
|
110
152
|
target,
|
|
@@ -411,8 +453,10 @@ function isTripleObjectUri(objectUri) {
|
|
|
411
453
|
}
|
|
412
454
|
export {
|
|
413
455
|
createLibrarySources,
|
|
456
|
+
findWikiGraphLibraryArchiveMembers,
|
|
414
457
|
findWikiGraphLibraryObjects,
|
|
415
458
|
listRelatedWikiGraphLibraryObjects,
|
|
459
|
+
listWikiGraphLibraryArchiveMembers,
|
|
416
460
|
listWikiGraphLibraryEvidence,
|
|
417
461
|
listWikiGraphLibraryObjects,
|
|
418
462
|
packWikiGraphLibraryContext,
|