@undefineds.co/xpod 0.3.75 → 0.4.0-rc.139

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/bin/xpod.js +43 -8
  2. package/config/bun.json +45 -48
  3. package/config/cloud.json +13 -90
  4. package/config/components-ignore.json +0 -1
  5. package/config/local.json +111 -63
  6. package/config/resolver.json +4 -2
  7. package/config/terminal.json +4 -1
  8. package/config/xpod.base.json +16 -8
  9. package/config/xpod.json +51 -54
  10. package/dist/acceptance/PublicCloudSemanticConformance.d.ts +4 -0
  11. package/dist/acceptance/PublicCloudSemanticConformance.js +214 -0
  12. package/dist/acceptance/QleverSearchConformance.d.ts +39 -0
  13. package/dist/acceptance/QleverSearchConformance.js +686 -0
  14. package/dist/acceptance/QleverSemanticConformance.d.ts +3 -0
  15. package/dist/acceptance/QleverSemanticConformance.js +178 -0
  16. package/dist/acceptance/RdfSemanticConformance.d.ts +114 -0
  17. package/dist/acceptance/RdfSemanticConformance.js +307 -0
  18. package/dist/acceptance/run-installed-qlever-conformance.d.ts +12 -0
  19. package/dist/acceptance/run-installed-qlever-conformance.js +87 -0
  20. package/dist/acceptance/run-installed-rdf-conformance.d.ts +12 -0
  21. package/dist/acceptance/run-installed-rdf-conformance.js +88 -0
  22. package/dist/ai/service/EmbeddingProviderError.d.ts +7 -0
  23. package/dist/ai/service/EmbeddingProviderError.js +42 -0
  24. package/dist/api/ai-gateway/connect/index.js +5 -2
  25. package/dist/api/auth/AuthContext.d.ts +5 -0
  26. package/dist/api/auth/AuthContext.js +10 -0
  27. package/dist/api/container/common.js +20 -1
  28. package/dist/api/container/rdf.d.ts +1 -0
  29. package/dist/api/container/rdf.js +43 -4
  30. package/dist/api/container/types.d.ts +4 -0
  31. package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
  32. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +2 -0
  33. package/dist/api/runs/PiAgentRuntimeDriver.js +1 -0
  34. package/dist/api/runs/RdfRunContextRetriever.d.ts +8 -0
  35. package/dist/api/runs/RdfRunContextRetriever.js +23 -1
  36. package/dist/api/runtime.js +20 -6
  37. package/dist/api/service/RdfSearchIndexingService.d.ts +37 -3
  38. package/dist/api/service/RdfSearchIndexingService.js +130 -18
  39. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +8 -0
  40. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +102 -15
  41. package/dist/api/service/RdfSearchReconciliationWorker.d.ts +76 -0
  42. package/dist/api/service/RdfSearchReconciliationWorker.js +294 -0
  43. package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
  44. package/dist/components/components.jsonld +9 -12
  45. package/dist/components/context.jsonld +227 -348
  46. package/dist/document/MarkdownRetrievalPointProjector.d.ts +33 -0
  47. package/dist/document/MarkdownRetrievalPointProjector.js +196 -0
  48. package/dist/document/MarkdownRetrievalPointProjector.jsonld +135 -0
  49. package/dist/document/ReaderMaterialization.d.ts +34 -0
  50. package/dist/document/ReaderMaterialization.js +3 -0
  51. package/dist/document/ReaderMaterialization.jsonld +151 -0
  52. package/dist/document/ReaderMaterializationRepository.d.ts +27 -0
  53. package/dist/document/ReaderMaterializationRepository.js +400 -0
  54. package/dist/document/ReaderMaterializationRepository.jsonld +84 -0
  55. package/dist/document/index.d.ts +3 -1
  56. package/dist/document/index.js +3 -1
  57. package/dist/http/SubgraphSparqlHttpHandler.js +34 -54
  58. package/dist/http/search/SearchHttpHandler.js +14 -12
  59. package/dist/http/terminal/TerminalHttpHandler.d.ts +3 -0
  60. package/dist/http/terminal/TerminalHttpHandler.js +1 -0
  61. package/dist/http/terminal/TerminalHttpHandler.jsonld +11 -0
  62. package/dist/identity/drizzle/DrizzleIndexedStorage.js +19 -39
  63. package/dist/identity/drizzle/db.d.ts +1 -0
  64. package/dist/identity/drizzle/db.js +35 -0
  65. package/dist/index.d.ts +9 -17
  66. package/dist/index.js +14 -22
  67. package/dist/provision/ProvisionPodCreator.d.ts +1 -1
  68. package/dist/provision/ProvisionPodCreator.js +4 -3
  69. package/dist/search/RdfSearchIntentSink.d.ts +17 -0
  70. package/dist/search/RdfSearchIntentSink.js +46 -0
  71. package/dist/search/RdfSearchIntentSink.jsonld +47 -0
  72. package/dist/search/RdfSearchReconciliationRepository.d.ts +81 -0
  73. package/dist/search/RdfSearchReconciliationRepository.js +771 -0
  74. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.d.ts +15 -0
  75. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.js +48 -0
  76. package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.jsonld +99 -0
  77. package/dist/solidfs/RdfIndexSolidFsSyncer.js +22 -4
  78. package/dist/solidfs/SolidFsSyncJournal.d.ts +7 -1
  79. package/dist/solidfs/SolidFsSyncJournal.js +20 -5
  80. package/dist/solidfs/SolidFsSyncJournal.jsonld +43 -0
  81. package/dist/solidfs/index.d.ts +1 -0
  82. package/dist/solidfs/index.js +1 -0
  83. package/dist/storage/SparqlUpdateResourceStore.js +3 -3
  84. package/dist/storage/accessors/MixDataAccessor.d.ts +21 -29
  85. package/dist/storage/accessors/MixDataAccessor.js +182 -399
  86. package/dist/storage/accessors/MixDataAccessor.jsonld +109 -87
  87. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +12 -8
  88. package/dist/storage/accessors/SolidRdfDataAccessor.js +189 -59
  89. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +14 -29
  90. package/dist/storage/rdf/LocalQleverNativeSparqlClient.d.ts +55 -0
  91. package/dist/storage/rdf/LocalQleverNativeSparqlClient.js +519 -0
  92. package/dist/storage/rdf/LocalQleverNativeSparqlClient.jsonld +314 -0
  93. package/dist/storage/rdf/PostgresRdfEngine.d.ts +3 -1
  94. package/dist/storage/rdf/PostgresRdfEngine.js +111 -74
  95. package/dist/storage/rdf/PostgresRdfEngine.jsonld +12 -22
  96. package/dist/storage/rdf/PostgresRdfSchemaValidation.d.ts +8 -0
  97. package/dist/storage/rdf/PostgresRdfSchemaValidation.js +82 -0
  98. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +6 -3
  99. package/dist/storage/rdf/PostgresRdfTextIndex.js +158 -80
  100. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +16 -4
  101. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +4 -5
  102. package/dist/storage/rdf/PostgresRdfVectorIndex.js +124 -120
  103. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +14 -18
  104. package/dist/storage/rdf/QleverSparqlEngine.d.ts +35 -0
  105. package/dist/storage/rdf/QleverSparqlEngine.js +185 -0
  106. package/dist/storage/rdf/QleverSparqlEngine.jsonld +70 -0
  107. package/dist/storage/rdf/Rdf3xIndex.js +20 -16
  108. package/dist/storage/rdf/RdfAccessScope.d.ts +4 -0
  109. package/dist/storage/rdf/RdfAccessScope.js +74 -9
  110. package/dist/storage/rdf/RdfAccessScope.jsonld +16 -0
  111. package/dist/storage/rdf/RdfEngineRdfJsSource.d.ts +14 -0
  112. package/dist/storage/rdf/RdfEngineRdfJsSource.js +179 -0
  113. package/dist/storage/rdf/RdfQuadIndex.d.ts +13 -14
  114. package/dist/storage/rdf/RdfQuadIndex.js +286 -99
  115. package/dist/storage/rdf/RdfQuadIndex.jsonld +10 -22
  116. package/dist/storage/rdf/RdfQueryExecutor.js +10 -4
  117. package/dist/storage/rdf/RdfQuerySparqlEngine.d.ts +33 -0
  118. package/dist/storage/rdf/RdfQuerySparqlEngine.js +215 -0
  119. package/dist/storage/rdf/RdfQuerySparqlEngine.jsonld +78 -0
  120. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +0 -4
  121. package/dist/storage/rdf/RdfSparqlAdapter.js +75 -173
  122. package/dist/storage/rdf/RdfSparqlBoundary.d.ts +37 -0
  123. package/dist/storage/rdf/RdfSparqlBoundary.js +247 -0
  124. package/dist/storage/rdf/RdfSparqlSerialization.d.ts +3 -0
  125. package/dist/storage/rdf/RdfSparqlSerialization.js +19 -0
  126. package/dist/storage/rdf/RdfSqliteConnection.d.ts +7 -0
  127. package/dist/storage/rdf/RdfSqliteConnection.js +23 -0
  128. package/dist/storage/rdf/RdfTermDictionary.d.ts +0 -8
  129. package/dist/storage/rdf/RdfTermDictionary.js +0 -136
  130. package/dist/storage/rdf/RdfTermDictionary.jsonld +0 -32
  131. package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
  132. package/dist/storage/rdf/RdfTermSemantics.js +29 -0
  133. package/dist/storage/rdf/RdfTextIndex.d.ts +5 -6
  134. package/dist/storage/rdf/RdfTextIndex.js +187 -115
  135. package/dist/storage/rdf/RdfTextIndex.jsonld +10 -14
  136. package/dist/storage/rdf/RdfVectorIndex.d.ts +4 -4
  137. package/dist/storage/rdf/RdfVectorIndex.js +156 -233
  138. package/dist/storage/rdf/RdfVectorIndex.jsonld +10 -14
  139. package/dist/storage/rdf/SolidRdfEngine.d.ts +16 -21
  140. package/dist/storage/rdf/SolidRdfEngine.js +28 -308
  141. package/dist/storage/rdf/SolidRdfEngine.jsonld +26 -148
  142. package/dist/storage/rdf/XpodComunicaQueryEngine.d.ts +10 -0
  143. package/dist/storage/rdf/XpodComunicaQueryEngine.js +72 -0
  144. package/dist/storage/rdf/index.d.ts +7 -6
  145. package/dist/storage/rdf/index.js +17 -12
  146. package/dist/storage/rdf/models-benchmark.d.ts +5 -1
  147. package/dist/storage/rdf/models-benchmark.js +17 -19
  148. package/dist/storage/rdf/types.d.ts +68 -6
  149. package/dist/storage/rdf/types.jsonld +69 -0
  150. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +13 -7
  151. package/dist/storage/sparql/SubgraphQueryEngine.js +6 -6
  152. package/dist/storage/vector/index.d.ts +0 -1
  153. package/dist/storage/vector/index.js +0 -1
  154. package/dist/terminal/AclPermissionService.d.ts +4 -5
  155. package/dist/terminal/AclPermissionService.js +55 -75
  156. package/dist/terminal/TerminalSessionManager.d.ts +3 -2
  157. package/dist/terminal/TerminalSessionManager.js +3 -3
  158. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
  159. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
  160. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +29 -26
  161. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
  162. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  163. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +9 -4
  164. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
  165. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts +1 -0
  166. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts.map +1 -1
  167. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js +6 -3
  168. package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js.map +1 -1
  169. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +3 -3
  170. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
  171. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +6 -0
  172. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  173. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +13 -3
  174. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
  175. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts +1 -0
  176. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts.map +1 -1
  177. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +31 -0
  178. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
  179. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
  180. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js +5 -0
  181. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js.map +1 -1
  182. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts +1 -0
  183. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts.map +1 -1
  184. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js +45 -0
  185. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js.map +1 -1
  186. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
  187. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  188. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +29 -26
  189. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
  190. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  191. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +9 -4
  192. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  193. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts +1 -0
  194. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts.map +1 -1
  195. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js +6 -3
  196. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js.map +1 -1
  197. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +3 -3
  198. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
  199. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +6 -0
  200. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  201. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +14 -4
  202. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  203. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts +1 -0
  204. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts.map +1 -1
  205. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +30 -0
  206. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
  207. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
  208. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js +5 -0
  209. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
  210. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts +1 -0
  211. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts.map +1 -1
  212. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js +45 -0
  213. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js.map +1 -1
  214. package/node_modules/@undefineds.co/drizzle-solid/package.json +5 -4
  215. package/package.json +19 -8
  216. package/static/app/assets/{index-36TJKN-3.js → index-BikOyGPu.js} +34 -34
  217. package/static/app/assets/inrupt-smoke.js +2 -2
  218. package/static/app/assets/main.css +1 -1
  219. package/static/app/assets/main.js +11 -11
  220. package/static/auth-callback/assets/{AiConfigContext-BvBdu_A3.js → AiConfigContext-iQ74JmRZ.js} +1 -1
  221. package/static/auth-callback/assets/{AiConfigPage-BpDw4jco.js → AiConfigPage-BBDKE1gJ.js} +1 -1
  222. package/static/auth-callback/assets/{DocumentProcessingPanel-BmZ_jzRr.js → DocumentProcessingPanel-D9NntIEK.js} +1 -1
  223. package/static/auth-callback/assets/{IndexLifecyclePanel-BfQBjN4z.js → IndexLifecyclePanel-BG07yBdA.js} +1 -1
  224. package/static/auth-callback/assets/{IndexSubjectPanel-BlsnatPt.js → IndexSubjectPanel-B-bUnU3G.js} +1 -1
  225. package/static/auth-callback/assets/{ModelAssignmentsPanel-KA6Mdndz.js → ModelAssignmentsPanel-C7I-Nqy-.js} +1 -1
  226. package/static/auth-callback/assets/{ModelsPage-C7jymyIY.js → ModelsPage-C2hxyrmI.js} +1 -1
  227. package/static/auth-callback/assets/{NetworkPage-k2ShktNm.js → NetworkPage-IGIc2q1Y.js} +1 -1
  228. package/static/auth-callback/assets/{PaneListHeader-mLMe_dvU.js → PaneListHeader-CebuPl_g.js} +1 -1
  229. package/static/auth-callback/assets/{SearchIndexingPanel-CqV9um_t.js → SearchIndexingPanel-6HnZSg00.js} +1 -1
  230. package/static/auth-callback/assets/{StatusSubjectPanel-BgMBTbr2.js → StatusSubjectPanel-votxBkr5.js} +1 -1
  231. package/static/auth-callback/assets/{StatusWorkspace-zbSyhdG2.js → StatusWorkspace-Cksl61zX.js} +1 -1
  232. package/static/auth-callback/assets/{SystemSettingsPage-CtW79nW6.js → SystemSettingsPage-CKZFUaZT.js} +1 -1
  233. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-ZOPKYUtZ.js → SystemSettingsSubjectPanel-pzfUcCf4.js} +1 -1
  234. package/static/auth-callback/assets/{activity-BQ-CQE3O.js → activity-DQL6kZHZ.js} +1 -1
  235. package/static/auth-callback/assets/auth-callback-B_s8Ye5Z.css +1 -0
  236. package/static/auth-callback/assets/{auth-callback-Htr_CB_g.js → auth-callback-BxQMd_Mc.js} +39 -39
  237. package/static/auth-callback/assets/{badge-D5SGTJeO.js → badge-DvW4LUHH.js} +1 -1
  238. package/static/auth-callback/assets/{download-DK183Ldo.js → download-Cx_uaCR1.js} +1 -1
  239. package/static/auth-callback/assets/{external-link-LDHy_4bn.js → external-link-D6L6ExH1.js} +1 -1
  240. package/static/auth-callback/assets/{index-BWrvgHqK.js → index-BAS_hxGu.js} +1 -1
  241. package/static/auth-callback/assets/{index-2WmlePQ9.js → index-BmBjpCoD.js} +1 -1
  242. package/static/auth-callback/assets/{index-browser-DUd4E4-x.js → index-browser-pdn4D3M4.js} +1 -1
  243. package/static/auth-callback/assets/{key-round-ibX79Kr-.js → key-round-BTBzOggq.js} +1 -1
  244. package/static/auth-callback/assets/{rotate-ccw-B2_VMaiX.js → rotate-ccw-eV7Cx8sB.js} +1 -1
  245. package/static/auth-callback/assets/{skeleton-F4nrpycc.js → skeleton-Bg4GYgBM.js} +1 -1
  246. package/static/auth-callback/assets/{waypoints-DImIq93f.js → waypoints-CJbydf0B.js} +1 -1
  247. package/static/auth-callback/assets/{workspace-layout-IVCSYU21.js → workspace-layout-C6Hh8Xf-.js} +1 -1
  248. package/static/auth-callback/auth-callback.html +2 -2
  249. package/static/dashboard/assets/{AiConfigContext-cjjfYTo9.js → AiConfigContext-BkJj28vK.js} +1 -1
  250. package/static/dashboard/assets/{AiConfigPage-CO0DSD_j.js → AiConfigPage-Cs9B4uyp.js} +1 -1
  251. package/static/dashboard/assets/{DocumentProcessingPanel-DMGnH8Oj.js → DocumentProcessingPanel-BBWmM7mS.js} +1 -1
  252. package/static/dashboard/assets/{IndexLifecyclePanel-DSkIOCL5.js → IndexLifecyclePanel-D5xGTT_i.js} +1 -1
  253. package/static/dashboard/assets/{IndexSubjectPanel-qWN_DbAp.js → IndexSubjectPanel-d-mjDthn.js} +1 -1
  254. package/static/dashboard/assets/{ModelAssignmentsPanel-DCf83uM3.js → ModelAssignmentsPanel-C-OLNbqf.js} +1 -1
  255. package/static/dashboard/assets/{ModelsPage-CMnvSrl5.js → ModelsPage-CBrLjuUn.js} +1 -1
  256. package/static/dashboard/assets/{NetworkPage-C8Gkwclb.js → NetworkPage-BlYk8L1z.js} +1 -1
  257. package/static/dashboard/assets/{PaneListHeader-BtU_8cDK.js → PaneListHeader-A5oZJQC0.js} +1 -1
  258. package/static/dashboard/assets/{SearchIndexingPanel-DEn12pNU.js → SearchIndexingPanel-Bs1j8ZP2.js} +1 -1
  259. package/static/dashboard/assets/{StatusSubjectPanel-B1_ILg2d.js → StatusSubjectPanel-Qao3orvi.js} +1 -1
  260. package/static/dashboard/assets/{StatusWorkspace-BG6nMNCo.js → StatusWorkspace-rDM0yDtk.js} +1 -1
  261. package/static/dashboard/assets/{SystemSettingsPage-BnWYIXaM.js → SystemSettingsPage-FPRPkKaR.js} +1 -1
  262. package/static/dashboard/assets/{SystemSettingsSubjectPanel-C_mYVPWb.js → SystemSettingsSubjectPanel-CjlJAxnX.js} +1 -1
  263. package/static/dashboard/assets/{activity-DYJ7PdRl.js → activity-CJ5K6hYC.js} +1 -1
  264. package/static/dashboard/assets/{badge-BIaZco1P.js → badge-L-NMOi1P.js} +1 -1
  265. package/static/dashboard/assets/dashboard-B_s8Ye5Z.css +1 -0
  266. package/static/dashboard/assets/{dashboard-Dl40_MEa.js → dashboard-DyjAyYxx.js} +34 -34
  267. package/static/dashboard/assets/{download-By16k9VK.js → download-Bi4u5K5B.js} +1 -1
  268. package/static/dashboard/assets/{external-link-B92xOG_d.js → external-link-jmhLDfvT.js} +1 -1
  269. package/static/dashboard/assets/{index-BajZpJ48.js → index-BoaGJBxf.js} +1 -1
  270. package/static/dashboard/assets/{index-wsVPom_x.js → index-C22TAEi4.js} +1 -1
  271. package/static/dashboard/assets/{key-round-Clo5FOwA.js → key-round-Dk1VmMrn.js} +1 -1
  272. package/static/dashboard/assets/{rotate-ccw-smWSfi1L.js → rotate-ccw-DIfLsSwi.js} +1 -1
  273. package/static/dashboard/assets/{skeleton-BrTaGeJw.js → skeleton-BGPJMHb-.js} +1 -1
  274. package/static/dashboard/assets/{waypoints-DGPQInE7.js → waypoints-CY53egpu.js} +1 -1
  275. package/static/dashboard/assets/{workspace-layout-CPU4XRmb.js → workspace-layout-CoHkcx70.js} +1 -1
  276. package/static/dashboard/dashboard.html +2 -2
  277. package/static/settings/assets/{AiConfigContext-CT29_OyW.js → AiConfigContext-BcEPlEJe.js} +1 -1
  278. package/static/settings/assets/{AiConfigPage-WIE95S28.js → AiConfigPage-D-t3ZUhg.js} +1 -1
  279. package/static/settings/assets/{DocumentProcessingPanel-KG8Sq999.js → DocumentProcessingPanel-m2SasiMO.js} +1 -1
  280. package/static/settings/assets/{IndexLifecyclePanel-iKvtHDXY.js → IndexLifecyclePanel-BNmAvx8V.js} +1 -1
  281. package/static/settings/assets/{IndexSubjectPanel-BQdSCkk4.js → IndexSubjectPanel-C5-L2AcW.js} +1 -1
  282. package/static/settings/assets/{ModelAssignmentsPanel-P8QcVB0F.js → ModelAssignmentsPanel-Cfpkf02Y.js} +1 -1
  283. package/static/settings/assets/{ModelsPage-UZkZGqor.js → ModelsPage-DZrACwVN.js} +1 -1
  284. package/static/settings/assets/{NetworkPage-Dcpcvg15.js → NetworkPage-BlrGGfqL.js} +1 -1
  285. package/static/settings/assets/{PaneListHeader--gHtZws5.js → PaneListHeader-C3TCs1RI.js} +1 -1
  286. package/static/settings/assets/{SearchIndexingPanel-DdgJSJYQ.js → SearchIndexingPanel-Cyp3CUzX.js} +1 -1
  287. package/static/settings/assets/{StatusSubjectPanel-UOxp_XVL.js → StatusSubjectPanel-gRkb8WEX.js} +1 -1
  288. package/static/settings/assets/{StatusWorkspace-CPNXuD12.js → StatusWorkspace-Dptx4Ec2.js} +1 -1
  289. package/static/settings/assets/{SystemSettingsPage-B6ySeVPw.js → SystemSettingsPage-BWgGUQbs.js} +1 -1
  290. package/static/settings/assets/{SystemSettingsSubjectPanel-I7zWmpiI.js → SystemSettingsSubjectPanel-VflUvpgC.js} +1 -1
  291. package/static/settings/assets/{activity-CFhmzahP.js → activity-D7iNhTkQ.js} +1 -1
  292. package/static/settings/assets/{badge-BBdUc5B-.js → badge-DO0r_RT4.js} +1 -1
  293. package/static/settings/assets/{download-WJE9-yxQ.js → download-CsJlNSbd.js} +1 -1
  294. package/static/settings/assets/{external-link-RKoYyCp_.js → external-link-BCR7SHme.js} +1 -1
  295. package/static/settings/assets/{index-Bq2o0Bif.js → index-Cgq16ekN.js} +1 -1
  296. package/static/settings/assets/{index-DvxneI5O.js → index-SrhQvcrU.js} +1 -1
  297. package/static/settings/assets/{index-browser-Qmo6EsFT.js → index-browser-THpcMCnz.js} +1 -1
  298. package/static/settings/assets/{key-round-r-D9sQUK.js → key-round-Dd3jk1BT.js} +1 -1
  299. package/static/settings/assets/{rotate-ccw-D3IIhbPH.js → rotate-ccw-tiL14i1d.js} +1 -1
  300. package/static/settings/assets/settings-B_s8Ye5Z.css +1 -0
  301. package/static/settings/assets/{settings-D8oDBXWg.js → settings-CVLDPejo.js} +34 -34
  302. package/static/settings/assets/{skeleton-DrL4RQuw.js → skeleton-DBxLuNgU.js} +1 -1
  303. package/static/settings/assets/{waypoints-C5sRhpJw.js → waypoints-DS3e3hv7.js} +1 -1
  304. package/static/settings/assets/{workspace-layout-B4ALmWsM.js → workspace-layout-mucrxyTK.js} +1 -1
  305. package/static/settings/settings.html +2 -2
  306. package/config/search.json +0 -66
  307. package/dist/document/HeadingChunker.jsonld +0 -41
  308. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +0 -124
  309. package/dist/security/secret-cell/SecretCellVault.jsonld +0 -207
  310. package/dist/storage/PostgresDerivedIndexJournal.d.ts +0 -47
  311. package/dist/storage/PostgresDerivedIndexJournal.js +0 -408
  312. package/dist/storage/PostgresDerivedIndexJournal.jsonld +0 -303
  313. package/dist/storage/RdfDerivedIndexingListener.d.ts +0 -32
  314. package/dist/storage/RdfDerivedIndexingListener.js +0 -135
  315. package/dist/storage/RdfDerivedIndexingListener.jsonld +0 -228
  316. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.d.ts +0 -148
  317. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +0 -436
  318. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.jsonld +0 -172
  319. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +0 -102
  320. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +0 -474
  321. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +0 -192
  322. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +0 -486
  323. package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +0 -59
  324. package/dist/storage/rdf/ShadowRdfQuintStore.js +0 -216
  325. package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +0 -312
  326. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +0 -107
  327. package/dist/storage/rdf/SolidRdfSparqlEngine.js +0 -1117
  328. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +0 -312
  329. package/dist/storage/sparql/AlgebraUtils.d.ts +0 -48
  330. package/dist/storage/sparql/AlgebraUtils.js +0 -118
  331. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +0 -37
  332. package/dist/storage/sparql/CompatibilitySparqlEngine.js +0 -96
  333. package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +0 -123
  334. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +0 -36
  335. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +0 -124
  336. package/dist/storage/sparql/ComunicaOptimizedEngine.d.ts +0 -59
  337. package/dist/storage/sparql/ComunicaOptimizedEngine.js +0 -254
  338. package/dist/storage/sparql/ComunicaQuintEngine.d.ts +0 -143
  339. package/dist/storage/sparql/ComunicaQuintEngine.js +0 -781
  340. package/dist/storage/sparql/ExpressionEvaluator.d.ts +0 -54
  341. package/dist/storage/sparql/ExpressionEvaluator.js +0 -340
  342. package/dist/storage/sparql/FilterPushdownExtractor.d.ts +0 -74
  343. package/dist/storage/sparql/FilterPushdownExtractor.js +0 -421
  344. package/dist/storage/sparql/OptimizedQuadstoreEngine.d.ts +0 -65
  345. package/dist/storage/sparql/OptimizedQuadstoreEngine.js +0 -327
  346. package/dist/storage/sparql/OptimizedQuadstoreSource.d.ts +0 -46
  347. package/dist/storage/sparql/OptimizedQuadstoreSource.js +0 -118
  348. package/dist/storage/sparql/PatternBuilder.d.ts +0 -41
  349. package/dist/storage/sparql/PatternBuilder.js +0 -118
  350. package/dist/storage/sparql/QueryOptimizer.d.ts +0 -125
  351. package/dist/storage/sparql/QueryOptimizer.js +0 -375
  352. package/dist/storage/sparql/QuintEngine.d.ts +0 -92
  353. package/dist/storage/sparql/QuintEngine.js +0 -150
  354. package/dist/storage/sparql/QuintQuerySource.d.ts +0 -241
  355. package/dist/storage/sparql/QuintQuerySource.js +0 -1069
  356. package/dist/storage/sparql/SimpleSparqlExecutor.d.ts +0 -40
  357. package/dist/storage/sparql/SimpleSparqlExecutor.js +0 -131
  358. package/dist/storage/vector/VectorIndexingListener.d.ts +0 -114
  359. package/dist/storage/vector/VectorIndexingListener.js +0 -346
  360. package/static/auth-callback/assets/auth-callback-rWdEQY5f.css +0 -1
  361. package/static/dashboard/assets/dashboard-rWdEQY5f.css +0 -1
  362. package/static/settings/assets/settings-rWdEQY5f.css +0 -1
@@ -12,14 +12,11 @@ const arrayify_stream_1 = __importDefault(require("arrayify-stream"));
12
12
  const n3_1 = require("n3");
13
13
  const jsonld_1 = __importDefault(require("jsonld"));
14
14
  const rdf_parse_1 = require("rdf-parse");
15
- const sparqljs_1 = require("sparqljs");
16
15
  const community_server_1 = require("@solid/community-server");
17
- const RdfSparqlAdapter_1 = require("../rdf/RdfSparqlAdapter");
16
+ const RdfSparqlBoundary_1 = require("../rdf/RdfSparqlBoundary");
18
17
  const RdfContentTypes_1 = require("../rdf/RdfContentTypes");
19
18
  const RdfTextProjection_1 = require("../rdf/RdfTextProjection");
20
- const RdfQuadIndex_1 = require("../rdf/RdfQuadIndex");
21
19
  const RdfXmlSerializer_1 = require("../rdf/RdfXmlSerializer");
22
- const SolidRdfEngine_1 = require("../rdf/SolidRdfEngine");
23
20
  const RdfAccessScope_1 = require("../rdf/RdfAccessScope");
24
21
  const MetadataRequestContext_1 = require("../MetadataRequestContext");
25
22
  const ResourceReadContext_1 = require("../ResourceReadContext");
@@ -34,9 +31,8 @@ const ResourceReadContext_1 = require("../ResourceReadContext");
34
31
  * to be used as the RDF storage backend.
35
32
  */
36
33
  class MixDataAccessor {
37
- constructor(structuredDataAccessor, unstructuredDataAccessor, presignedRedirectEnabled = false, mirrorContainersToUnstructured = true, rdfFileDataAccessor = unstructuredDataAccessor, textSearchIndexingEnabled = false, rdfFileMapper, localRdfAuthorityJournal) {
34
+ constructor(structuredDataAccessor, unstructuredDataAccessor, presignedRedirectEnabled = false, mirrorContainersToUnstructured = true, rdfFileDataAccessor = unstructuredDataAccessor, textSearchIndexingEnabled = false, rdfFileMapper, localRdfAuthorityJournal, rdfSearchIntentSink) {
38
35
  this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
39
- this.rdfSparqlAdapter = new RdfSparqlAdapter_1.RdfSparqlAdapter();
40
36
  this.structuredDataAccessor = structuredDataAccessor;
41
37
  this.unstructuredDataAccessor = unstructuredDataAccessor;
42
38
  this.rdfFileDataAccessor = rdfFileDataAccessor;
@@ -45,6 +41,7 @@ class MixDataAccessor {
45
41
  this.presignedRedirectEnabled = presignedRedirectEnabled;
46
42
  this.mirrorContainersToUnstructured = mirrorContainersToUnstructured;
47
43
  this.textSearchIndexingEnabled = textSearchIndexingEnabled;
44
+ this.rdfSearchIntentSink = rdfSearchIntentSink;
48
45
  }
49
46
  /**
50
47
  * This accessor supports all types of data.
@@ -180,6 +177,7 @@ class MixDataAccessor {
180
177
  }
181
178
  else if (this.isUnstructured(metadata)) {
182
179
  await this.deleteUnstructuredResourceIfPresent(identifier);
180
+ await this.deleteSearchIndexes(identifier);
183
181
  }
184
182
  // Always delete from structured storage (contains metadata)
185
183
  await this.structuredDataAccessor.deleteResource(identifier);
@@ -188,409 +186,88 @@ class MixDataAccessor {
188
186
  /**
189
187
  * Execute SPARQL UPDATE.
190
188
  *
191
- * Supported embedded deltas patch the local RDF authority file first and then
192
- * rebuild the structured RDF index. The structured accessor decides whether
193
- * unsupported shapes have an explicitly configured compatibility path.
189
+ * Native QLever prepares an exact graph delta. The accessor validates its
190
+ * write scope, patches the local RDF authority files, and rebuilds the index.
194
191
  */
195
- async executeSparqlUpdate(query, baseIri, accessScope) {
196
- if (baseIri) {
197
- const identifier = { path: baseIri };
198
- if (await this.shouldApplyLocalRdfSparqlUpdate(identifier)) {
199
- try {
200
- const writtenIdentifiers = await this.executeLocalRdfSparqlUpdate(query, identifier, new Set([identifier.path]), accessScope);
201
- for (const writtenIdentifier of writtenIdentifiers) {
202
- this.invalidateMetadataCache(writtenIdentifier);
203
- }
204
- return;
205
- }
206
- catch (error) {
207
- if (!(error instanceof RdfSparqlAdapter_1.UnsupportedSparqlQueryError)) {
208
- throw error;
209
- }
210
- }
211
- }
192
+ async executeSparqlUpdate(query, baseIri, accessScope, options) {
193
+ if (!baseIri) {
194
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Pod SPARQL UPDATE requires a server-owned base IRI', { code: 'rdf.sparql.update_authority_required' });
212
195
  }
213
- const accessor = this.structuredDataAccessor;
214
- if (typeof accessor.executeSparqlUpdate !== 'function') {
215
- throw new Error('Structured data accessor does not support SPARQL UPDATE');
216
- }
217
- await accessor.executeSparqlUpdate(query, baseIri);
218
- if (baseIri) {
219
- const identifier = { path: baseIri };
220
- await this.refreshLocalRdfMirror(identifier);
221
- this.invalidateMetadataCache(identifier);
196
+ const prepared = await this.prepareNativeRdfSparqlUpdate(query, baseIri, accessScope, options);
197
+ const writtenIdentifiers = await this.executePreparedRdfSparqlUpdate(prepared, baseIri, accessScope);
198
+ for (const writtenIdentifier of writtenIdentifiers) {
199
+ this.invalidateMetadataCache(writtenIdentifier);
222
200
  }
223
201
  }
224
- async shouldApplyLocalRdfSparqlUpdate(identifier) {
225
- if (this.isByLineRdfIdentifier(identifier)) {
226
- return true;
227
- }
228
- try {
229
- return this.isLocalMirroredRdf(identifier, await this.getMetadata(identifier));
202
+ async prepareNativeRdfSparqlUpdate(query, baseIri, accessScope, options) {
203
+ const accessor = this.structuredDataAccessor;
204
+ if (typeof accessor.prepareSparqlUpdate !== 'function') {
205
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native QLever prepared-update support is required for Pod SPARQL UPDATE', {
206
+ code: 'rdf.sparql.update_authority_required',
207
+ capability: 'sparql.update.authority',
208
+ });
230
209
  }
231
- catch (error) {
232
- if (community_server_1.NotFoundHttpError.isInstance(error)) {
233
- return true;
234
- }
235
- throw error;
210
+ const prepareOptions = options
211
+ ? {
212
+ ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
213
+ ...(options.signal ? { signal: options.signal } : {}),
214
+ }
215
+ : undefined;
216
+ const prepared = await accessor.prepareSparqlUpdate(query, baseIri, accessScope, prepareOptions);
217
+ if (!prepared) {
218
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native QLever did not return a prepared update delta', {
219
+ code: 'rdf.sparql.update_authority_required',
220
+ capability: 'sparql.update.authority',
221
+ });
236
222
  }
223
+ return prepared;
237
224
  }
238
- async executeLocalRdfSparqlUpdate(query, identifier, localRdfAuthorityIris, accessScope) {
239
- const parsed = new sparqljs_1.Parser({ baseIRI: identifier.path }).parse(query);
240
- const delta = this.rdfSparqlAdapter.compileUpdateDelta(parsed, this.parentContainer(identifier).path, {
241
- defaultGraph: identifier.path,
242
- });
243
- const writableGraphIris = this.localRdfDeltaWriteGraphIris(delta.operations, localRdfAuthorityIris);
244
- const graphStates = await this.loadLocalRdfDeltaGraphs(delta.operations, writableGraphIris, localRdfAuthorityIris);
245
- const graphQuads = new Map([...graphStates].map(([graphIri, state]) => [graphIri, state.quads]));
246
- const nextQuadsByGraph = this.applyLocalRdfDelta(graphQuads, delta.operations, writableGraphIris, accessScope);
247
- const patches = writableGraphIris.map((graphIri) => {
248
- const previous = graphStates.get(graphIri);
249
- return {
250
- identifier: { path: graphIri },
251
- previousQuads: previous?.quads ?? [],
252
- previousExists: previous?.existed ?? false,
253
- nextQuads: nextQuadsByGraph.get(graphIri) ?? [],
254
- };
255
- });
256
- await this.writeLocalRdfAuthorityPatches(patches);
257
- return patches.map((patch) => patch.identifier);
258
- }
259
- applyLocalRdfDelta(graphQuads, operations, writableGraphIris, accessScope) {
260
- const writableGraphs = new Set(writableGraphIris);
261
- const byGraph = new Map();
262
- for (const [graphIri, quads] of graphQuads) {
263
- byGraph.set(graphIri, new Map(quads.map((quad) => [this.quadKey(quad), quad])));
264
- }
265
- const currentQuads = () => [...byGraph.entries()]
266
- .filter(([graphIri]) => !accessScope || (0, RdfAccessScope_1.rdfAccessGraphAllowed)(graphIri, accessScope))
267
- .flatMap(([, quads]) => [...quads.values()]);
268
- const writableQuads = (graphIri) => {
269
- let quads = byGraph.get(graphIri);
270
- if (!quads) {
271
- quads = new Map();
272
- byGraph.set(graphIri, quads);
225
+ async executePreparedRdfSparqlUpdate(delta, baseIri, accessScope) {
226
+ const patches = [];
227
+ for (const graphDelta of delta.graphs) {
228
+ if (graphDelta.graphIri !== graphDelta.sourceUri) {
229
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update v1 requires the graph IRI to equal its local RDF source URI');
273
230
  }
274
- return quads;
275
- };
276
- const deleteQuads = (quads) => {
277
- for (const quad of quads) {
278
- const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));
279
- target.delete(this.quadKey(quad));
231
+ const serverOwnedBase = accessScope?.basePath ?? this.parentContainer({ path: baseIri }).path;
232
+ if (!graphDelta.graphIri.startsWith(serverOwnedBase)) {
233
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update cannot write outside the server-owned Pod scope');
280
234
  }
281
- };
282
- const insertQuads = (quads) => {
283
- for (const quad of quads) {
284
- const target = writableQuads(this.localRdfWriteGraphIri(quad.graph, writableGraphs));
285
- target.set(this.quadKey(quad), quad);
286
- }
287
- };
288
- for (const operation of operations) {
289
- if (operation.type === 'insert') {
290
- insertQuads(operation.quads);
291
- continue;
235
+ if (accessScope && !(0, RdfAccessScope_1.rdfAccessGraphAllowed)(graphDelta.graphIri, accessScope)) {
236
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update cannot write an RDF graph denied by the current access scope');
292
237
  }
293
- if (operation.type === 'delete') {
294
- deleteQuads(operation.quads);
295
- continue;
238
+ const identifier = { path: graphDelta.sourceUri };
239
+ if (!this.isByLineRdfIdentifier(identifier)) {
240
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update only supports by-line local RDF graph documents');
296
241
  }
297
- if (operation.type === 'insertDeleteWhere') {
298
- const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);
299
- deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.deletes, rows));
300
- insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));
301
- continue;
302
- }
303
- if (operation.type === 'insertWhere') {
304
- const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);
305
- insertQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.inserts, rows));
306
- continue;
307
- }
308
- const rows = this.queryLocalUpdateBindings(currentQuads(), operation.query);
309
- deleteQuads(this.rdfSparqlAdapter.materializeDeleteWhere(operation.template, rows));
310
- }
311
- return new Map(writableGraphIris.map((graphIri) => [graphIri, [...(byGraph.get(graphIri)?.values() ?? [])]]));
312
- }
313
- async loadLocalRdfDeltaGraphs(operations, writableGraphIris, localRdfAuthorityIris) {
314
- const graphIris = this.localRdfDeltaGraphIris(operations, writableGraphIris);
315
- const graphStates = new Map();
316
- for (const graphIri of graphIris) {
317
- const graphIdentifier = { path: graphIri };
318
- if (!this.isLocalRdfAuthorityIdentifier(graphIdentifier, localRdfAuthorityIris)) {
319
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph documents');
320
- }
321
- const existing = await this.readLocalRdfState(graphIdentifier);
322
- const graph = n3_1.DataFactory.namedNode(graphIri);
323
- const quads = existing.text.length > 0
324
- ? await this.parseLocalRdf(graphIdentifier, existing.text, this.localRdfContentType(graphIdentifier))
325
- .then((items) => items.map((quad) => this.toGraphQuad(quad, graph)))
242
+ const previous = await this.readLocalRdfState(identifier);
243
+ const graph = n3_1.DataFactory.namedNode(graphDelta.graphIri);
244
+ const previousQuads = previous.text.length > 0
245
+ ? await this.parseLocalRdf(identifier, previous.text, this.localRdfContentType(identifier))
246
+ .then((items) => items.map((item) => this.toGraphQuad(item, graph)))
326
247
  : [];
327
- graphStates.set(graphIri, { quads, existed: existing.existed });
328
- }
329
- return graphStates;
330
- }
331
- localRdfDeltaGraphIris(operations, writableGraphIris) {
332
- const graphIris = new Set(writableGraphIris);
333
- for (const operation of operations) {
334
- const graphTerms = operation.type === 'deleteWhere'
335
- ? [
336
- ...operation.template.map((item) => item.graph),
337
- ...this.queryGraphTerms(operation.query),
338
- ]
339
- : operation.type === 'insertDeleteWhere'
340
- ? [
341
- ...operation.deletes.map((item) => item.graph),
342
- ...operation.inserts.map((item) => item.graph),
343
- ...this.queryGraphTerms(operation.query),
344
- ]
345
- : operation.type === 'insertWhere'
346
- ? [
347
- ...operation.inserts.map((item) => item.graph),
348
- ...this.queryGraphTerms(operation.query),
349
- ]
350
- : operation.quads.map((quad) => quad.graph);
351
- for (const graph of graphTerms) {
352
- this.addNamedGraphIris(graph, graphIris);
353
- }
354
- }
355
- return [...graphIris];
356
- }
357
- localRdfDeltaWriteGraphIris(operations, localRdfAuthorityIris) {
358
- const graphIris = new Set();
359
- for (const operation of operations) {
360
- if (operation.type === 'deleteWhere') {
361
- this.addWritableTemplateGraphIris(operation.template.map((item) => item.graph), operation.query, graphIris, localRdfAuthorityIris);
362
- continue;
363
- }
364
- if (operation.type === 'insertDeleteWhere') {
365
- this.addWritableTemplateGraphIris([
366
- ...operation.deletes.map((item) => item.graph),
367
- ...operation.inserts.map((item) => item.graph),
368
- ], operation.query, graphIris, localRdfAuthorityIris);
369
- continue;
370
- }
371
- if (operation.type === 'insertWhere') {
372
- this.addWritableTemplateGraphIris(operation.inserts.map((item) => item.graph), operation.query, graphIris, localRdfAuthorityIris);
373
- continue;
374
- }
375
- const graphTerms = operation.quads.map((quad) => quad.graph);
376
- for (const graph of graphTerms) {
377
- this.addWritableNamedGraphIri(graph, graphIris, localRdfAuthorityIris);
378
- }
379
- }
380
- if (graphIris.size === 0) {
381
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update requires explicit local RDF graph write targets');
382
- }
383
- return [...graphIris];
384
- }
385
- addWritableTemplateGraphIris(graphs, query, graphIris, localRdfAuthorityIris) {
386
- for (const graph of graphs) {
387
- if (this.isQueryVariable(graph)) {
388
- this.addWritableGraphVariableIris(query, graph.variable, graphIris, localRdfAuthorityIris);
389
- continue;
390
- }
391
- this.addWritableNamedGraphIri(graph, graphIris, localRdfAuthorityIris);
392
- }
393
- }
394
- addWritableGraphVariableIris(query, variable, graphIris, localRdfAuthorityIris) {
395
- const values = new Set();
396
- this.collectGraphVariableFilterIris(query, variable, values);
397
- if (values.size === 0) {
398
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports finite GRAPH variable write targets');
399
- }
400
- for (const value of values) {
401
- this.addWritableNamedGraphIri(n3_1.DataFactory.namedNode(value), graphIris, localRdfAuthorityIris);
402
- }
403
- }
404
- localRdfWriteGraphIri(graph, writableGraphs) {
405
- if (graph.termType !== 'NamedNode' || !writableGraphs.has(graph.value)) {
406
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update can only write declared local RDF graph documents');
407
- }
408
- return graph.value;
409
- }
410
- queryLocalUpdateBindings(quads, query) {
411
- const index = new RdfQuadIndex_1.RdfQuadIndex({ path: ':memory:' });
412
- index.open();
413
- try {
414
- const engine = new SolidRdfEngine_1.SolidRdfEngine({ index });
415
- engine.put(quads);
416
- return engine.query(query).bindings;
417
- }
418
- finally {
419
- index.close();
420
- }
421
- }
422
- queryGraphTerms(query) {
423
- const graphTerms = [];
424
- const graphVariables = new Set();
425
- this.collectQueryGraphTerms(query, graphTerms, graphVariables);
426
- this.collectGraphVariableFilterTerms(query, graphVariables, graphTerms);
427
- return graphTerms;
428
- }
429
- collectQueryGraphTerms(query, graphTerms, graphVariables) {
430
- for (const pattern of query.patterns) {
431
- if (!pattern.graph) {
432
- continue;
433
- }
434
- graphTerms.push(pattern.graph);
435
- if (this.isQueryVariable(pattern.graph)) {
436
- graphVariables.add(pattern.graph.variable);
437
- }
438
- }
439
- for (const optional of query.optional ?? []) {
440
- this.collectQueryGraphTerms(Array.isArray(optional) ? { patterns: optional } : optional, graphTerms, graphVariables);
441
- }
442
- for (const union of query.unions ?? []) {
443
- for (const branch of union.branches) {
444
- this.collectQueryGraphTerms(branch, graphTerms, graphVariables);
445
- }
446
- }
447
- for (const minus of query.minus ?? []) {
448
- this.collectQueryGraphTerms(minus, graphTerms, graphVariables);
449
- }
450
- for (const exists of query.exists ?? []) {
451
- this.collectQueryGraphTerms(exists, graphTerms, graphVariables);
452
- }
453
- }
454
- collectGraphVariableFilterTerms(query, graphVariables, graphTerms) {
455
- for (const filter of query.filters ?? []) {
456
- if (!graphVariables.has(filter.variable)) {
457
- continue;
458
- }
459
- if (filter.value && this.isRdfTerm(filter.value)) {
460
- graphTerms.push(filter.value);
461
- }
462
- for (const value of filter.values ?? []) {
463
- if (this.isRdfTerm(value)) {
464
- graphTerms.push(value);
465
- }
466
- }
467
- }
468
- this.collectGraphVariableValueTerms(query.values ?? [], graphVariables, graphTerms);
469
- for (const optional of query.optional ?? []) {
470
- if (!Array.isArray(optional)) {
471
- this.collectGraphVariableFilterTerms(optional, graphVariables, graphTerms);
472
- }
473
- }
474
- for (const union of query.unions ?? []) {
475
- for (const branch of union.branches) {
476
- this.collectGraphVariableFilterTerms(branch, graphVariables, graphTerms);
477
- }
478
- }
479
- for (const minus of query.minus ?? []) {
480
- this.collectGraphVariableFilterTerms(minus, graphVariables, graphTerms);
481
- }
482
- for (const exists of query.exists ?? []) {
483
- this.collectGraphVariableFilterTerms(exists, graphVariables, graphTerms);
484
- }
485
- }
486
- collectGraphVariableFilterIris(query, variable, values) {
487
- for (const filter of query.filters ?? []) {
488
- if (filter.variable !== variable) {
489
- continue;
490
- }
491
- if ((filter.operator === '$eq' || filter.operator === '$sameTerm') && filter.value && this.isRdfTerm(filter.value)) {
492
- this.addGraphFilterValueIri(filter.value, values);
493
- }
494
- if (filter.operator === '$in') {
495
- for (const value of filter.values ?? []) {
496
- if (this.isRdfTerm(value)) {
497
- this.addGraphFilterValueIri(value, values);
498
- }
499
- }
500
- }
501
- }
502
- this.collectGraphVariableValueIris(query.values ?? [], variable, values);
503
- for (const optional of query.optional ?? []) {
504
- if (!Array.isArray(optional)) {
505
- this.collectGraphVariableFilterIris(optional, variable, values);
506
- }
507
- }
508
- for (const union of query.unions ?? []) {
509
- for (const branch of union.branches) {
510
- this.collectGraphVariableFilterIris(branch, variable, values);
511
- }
512
- }
513
- for (const minus of query.minus ?? []) {
514
- this.collectGraphVariableFilterIris(minus, variable, values);
515
- }
516
- for (const exists of query.exists ?? []) {
517
- this.collectGraphVariableFilterIris(exists, variable, values);
518
- }
519
- }
520
- collectGraphVariableValueTerms(sources, graphVariables, graphTerms) {
521
- for (const source of sources) {
522
- for (const variable of source.variables) {
523
- if (!graphVariables.has(variable)) {
524
- continue;
525
- }
526
- for (const row of source.rows) {
527
- const value = row[variable];
528
- if (value) {
529
- graphTerms.push(value);
530
- }
531
- }
532
- }
533
- }
534
- }
535
- collectGraphVariableValueIris(sources, variable, values) {
536
- for (const source of sources) {
537
- if (!source.variables.includes(variable)) {
538
- continue;
539
- }
540
- for (const row of source.rows) {
541
- const value = row[variable];
542
- if (value) {
543
- this.addGraphFilterValueIri(value, values);
544
- }
545
- }
546
- }
547
- }
548
- addGraphFilterValueIri(value, values) {
549
- if (value.termType !== 'NamedNode') {
550
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update GRAPH variable write targets must be named graph documents');
551
- }
552
- values.add(value.value);
553
- }
554
- addNamedGraphIris(graph, graphIris) {
555
- if (this.isRdfTerm(graph)) {
556
- if (graph.termType !== 'NamedNode') {
557
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');
558
- }
559
- graphIris.add(graph.value);
560
- return;
561
- }
562
- const values = graph.$in;
563
- if (Array.isArray(values) && values.every((value) => this.isRdfTerm(value))) {
564
- for (const value of values) {
565
- if (value.termType !== 'NamedNode') {
566
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports named graph documents');
567
- }
568
- graphIris.add(value.value);
569
- }
570
- return;
571
- }
572
- if (this.isQueryVariable(graph)) {
573
- return;
248
+ const next = new Map(previousQuads.map((item) => [this.quadKey(item), item]));
249
+ for (const item of graphDelta.deletes) {
250
+ this.assertPreparedDeltaQuadGraph(item, graphDelta.graphIri);
251
+ next.delete(this.quadKey(item));
252
+ }
253
+ for (const item of graphDelta.inserts) {
254
+ this.assertPreparedDeltaQuadGraph(item, graphDelta.graphIri);
255
+ next.set(this.quadKey(item), item);
256
+ }
257
+ patches.push({
258
+ identifier,
259
+ previousQuads,
260
+ previousExists: previous.existed,
261
+ nextQuads: [...next.values()],
262
+ });
574
263
  }
575
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph documents');
264
+ await this.writeLocalRdfAuthorityPatches(patches);
265
+ return patches.map((patch) => patch.identifier);
576
266
  }
577
- addWritableNamedGraphIri(graph, graphIris, localRdfAuthorityIris) {
578
- if (!this.isRdfTerm(graph) || graph.termType !== 'NamedNode') {
579
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports explicit local RDF graph write targets');
267
+ assertPreparedDeltaQuadGraph(quad, graphIri) {
268
+ if (quad.graph.termType !== 'NamedNode' || quad.graph.value !== graphIri) {
269
+ throw new RdfSparqlBoundary_1.UnsupportedSparqlQueryError('Native prepared update contains a quad outside its declared writable graph');
580
270
  }
581
- if (!this.isLocalRdfAuthorityIdentifier({ path: graph.value }, localRdfAuthorityIris)) {
582
- throw new RdfSparqlAdapter_1.UnsupportedSparqlQueryError('Embedded local RDF update only supports by-line local RDF graph write targets');
583
- }
584
- graphIris.add(graph.value);
585
- }
586
- isLocalRdfAuthorityIdentifier(identifier, localRdfAuthorityIris) {
587
- return this.isByLineRdfIdentifier(identifier) || localRdfAuthorityIris.has(identifier.path);
588
- }
589
- isQueryVariable(value) {
590
- return Boolean(value && typeof value === 'object' && 'variable' in value);
591
- }
592
- isRdfTerm(value) {
593
- return Boolean(value && typeof value === 'object' && 'termType' in value);
594
271
  }
595
272
  async readLocalRdfState(identifier) {
596
273
  try {
@@ -648,7 +325,10 @@ class MixDataAccessor {
648
325
  }
649
326
  catch (error) {
650
327
  await this.markLocalRdfAuthorityJournalFailure(journalPatches, error);
651
- await this.rollbackLocalRdfAuthorityPatches(applied);
328
+ const rollbackFailures = await this.rollbackLocalRdfAuthorityPatches(applied);
329
+ if (rollbackFailures.length === 0) {
330
+ await this.markLocalRdfAuthorityRollbackComplete(journalPatches, error);
331
+ }
652
332
  throw error;
653
333
  }
654
334
  }
@@ -703,6 +383,20 @@ class MixDataAccessor {
703
383
  }
704
384
  }
705
385
  }
386
+ async markLocalRdfAuthorityRollbackComplete(journalPatches, error) {
387
+ if (!this.localRdfAuthorityJournal || journalPatches.length === 0) {
388
+ return;
389
+ }
390
+ const message = `Local RDF authority patch failed and was rolled back: ${error instanceof Error ? error.message : String(error)}`;
391
+ for (const journalPatch of journalPatches) {
392
+ try {
393
+ await this.localRdfAuthorityJournal.markFailedPermanent(journalPatch.operation.id, message);
394
+ }
395
+ catch (journalError) {
396
+ this.logger.warn(`Failed to finalize rolled-back local RDF authority journal for ${journalPatch.patch.identifier.path}: ${journalError instanceof Error ? journalError.message : String(journalError)}`);
397
+ }
398
+ }
399
+ }
706
400
  localRdfPatchWorkspace(resourcePaths, filePaths) {
707
401
  const workspace = commonHttpContainer(resourcePaths) ?? this.parentContainer({ path: resourcePaths[0] }).path;
708
402
  const cwd = commonDirectory(filePaths);
@@ -742,6 +436,7 @@ class MixDataAccessor {
742
436
  if (failures.length > 0) {
743
437
  this.logger.warn(`Failed to fully roll back local RDF authority patch: ${failures.join('; ')}`);
744
438
  }
439
+ return failures;
745
440
  }
746
441
  toDefaultGraphQuad(quad) {
747
442
  return n3_1.DataFactory.quad(quad.subject, quad.predicate, quad.object);
@@ -808,6 +503,7 @@ class MixDataAccessor {
808
503
  }
809
504
  const moved = await sourceScopedAccessor.moveRdfSourceDocument(options.previousSource ?? previousIdentifier.path, this.rdfSourceInput(nextIdentifier, options));
810
505
  if (moved > 0) {
506
+ await this.moveSearchIndexes(previousIdentifier, nextIdentifier, options, sourceScopedAccessor);
811
507
  this.invalidateMetadataCache(previousIdentifier);
812
508
  this.invalidateMetadataCache(nextIdentifier);
813
509
  }
@@ -916,15 +612,72 @@ class MixDataAccessor {
916
612
  if (!accessor?.indexTextSource) {
917
613
  return;
918
614
  }
919
- const source = this.rdfSourceInput(identifier, options);
615
+ await this.deleteVectorIndexIfPresent(accessor, identifier);
616
+ const source = this.rdfTextSourceInput(identifier, text, options);
920
617
  await accessor.indexTextSource(source, text, quads ? (0, RdfTextProjection_1.createRdfEntityTextChunks)(source, quads) : undefined);
618
+ await this.rdfSearchIntentSink?.recordTextCommitted(source);
619
+ }
620
+ async syncUnstructuredTextSearchIndex(identifier, text, metadata) {
621
+ if (!this.textSearchIndexingEnabled || !this.isSearchableUnstructuredText(identifier, metadata)) {
622
+ return;
623
+ }
624
+ const accessor = this.sourceScopedStructuredAccessor();
625
+ if (!accessor?.indexTextSource) {
626
+ return;
627
+ }
628
+ await this.deleteVectorIndexIfPresent(accessor, identifier);
629
+ const source = this.rdfTextSourceInput(identifier, text, { contentType: metadata.contentType });
630
+ await accessor.indexTextSource(source, text);
631
+ await this.rdfSearchIntentSink?.recordTextCommitted(source);
921
632
  }
922
633
  async deleteSearchIndexes(identifier) {
923
- if (!this.textSearchIndexingEnabled || !this.isByLineRdfIdentifier(identifier)) {
634
+ if (!this.textSearchIndexingEnabled) {
924
635
  return;
925
636
  }
926
637
  const accessor = this.sourceScopedStructuredAccessor();
927
638
  await accessor?.deleteTextSource?.(identifier.path);
639
+ if (accessor) {
640
+ await this.deleteVectorIndexIfPresent(accessor, identifier);
641
+ }
642
+ await this.rdfSearchIntentSink?.recordSourceDeleted(identifier.path);
643
+ }
644
+ async moveSearchIndexes(previousIdentifier, nextIdentifier, options, accessor) {
645
+ if (!this.textSearchIndexingEnabled || !this.isByLineRdfIdentifier(nextIdentifier)) {
646
+ return;
647
+ }
648
+ const previousSource = options.previousSource ?? previousIdentifier.path;
649
+ const nextSource = this.rdfSourceInput(nextIdentifier, options);
650
+ let movedText = 0;
651
+ if (accessor.moveTextSource) {
652
+ movedText = await accessor.moveTextSource(previousSource, nextSource);
653
+ }
654
+ await this.moveVectorIndexIfPresent(accessor, previousSource, nextSource);
655
+ if (movedText > 0) {
656
+ await this.rdfSearchIntentSink?.recordTextCommitted(nextSource);
657
+ }
658
+ }
659
+ async moveVectorIndexIfPresent(accessor, previousSource, nextSource) {
660
+ try {
661
+ return await accessor.moveVectorSource?.(previousSource, nextSource) ?? 0;
662
+ }
663
+ catch (error) {
664
+ const message = error instanceof Error ? error.message : String(error);
665
+ if (!/vector index is not configured/i.test(message)) {
666
+ throw error;
667
+ }
668
+ return 0;
669
+ }
670
+ }
671
+ async deleteVectorIndexIfPresent(accessor, identifier) {
672
+ try {
673
+ await accessor.deleteVectorSource?.(identifier.path);
674
+ }
675
+ catch (error) {
676
+ const message = error instanceof Error ? error.message : String(error);
677
+ if (!/vector index is not configured/i.test(message)) {
678
+ throw error;
679
+ }
680
+ }
928
681
  }
929
682
  rdfSourceInput(identifier, options) {
930
683
  const workspace = options.workspace ?? this.parentContainer(identifier).path;
@@ -936,6 +689,12 @@ class MixDataAccessor {
936
689
  sourceVersion: options.sourceVersion,
937
690
  };
938
691
  }
692
+ rdfTextSourceInput(identifier, text, options) {
693
+ return {
694
+ ...this.rdfSourceInput(identifier, options),
695
+ sourceHash: `sha256:${(0, node_crypto_1.createHash)('sha256').update(text).digest('hex')}`,
696
+ };
697
+ }
939
698
  relativePathFromWorkspace(identifierPath, workspaceValue) {
940
699
  try {
941
700
  const resource = new URL(identifierPath);
@@ -955,6 +714,21 @@ class MixDataAccessor {
955
714
  isRdfDocumentIdentifier(identifier) {
956
715
  return (0, RdfContentTypes_1.isRdfDocumentPath)(identifier.path);
957
716
  }
717
+ isSearchableUnstructuredText(identifier, metadata) {
718
+ const contentType = (0, RdfContentTypes_1.normalizeContentType)(metadata.contentType);
719
+ if (contentType === 'text/plain' || contentType === 'text/markdown' || contentType === 'text/x-markdown') {
720
+ return true;
721
+ }
722
+ const pathname = (() => {
723
+ try {
724
+ return new URL(identifier.path).pathname;
725
+ }
726
+ catch {
727
+ return identifier.path;
728
+ }
729
+ })().toLowerCase();
730
+ return pathname.endsWith('.md') || pathname.endsWith('.markdown') || pathname.endsWith('.mdown');
731
+ }
958
732
  isLocalMirroredRdf(identifier, metadata) {
959
733
  return metadata.contentType === community_server_1.INTERNAL_QUADS || this.isRdfDocumentIdentifier(identifier);
960
734
  }
@@ -1010,9 +784,12 @@ class MixDataAccessor {
1010
784
  * then save metadata in structured accessor.
1011
785
  */
1012
786
  async writeUnstructuredDocument(identifier, data, metadata) {
1013
- await this.ensureUnstructuredParentContainers(identifier);
787
+ const indexableText = this.textSearchIndexingEnabled && this.isSearchableUnstructuredText(identifier, metadata)
788
+ ? await this.readStreamText(data)
789
+ : undefined;
790
+ const writeData = indexableText === undefined ? data : (0, community_server_1.guardStream)(stream_1.Readable.from([indexableText]));
1014
791
  // Write the actual data to unstructured storage
1015
- await this.unstructuredDataAccessor.writeDocument(identifier, data, metadata);
792
+ await this.unstructuredDataAccessor.writeDocument(identifier, writeData, metadata);
1016
793
  let updatedMetadata;
1017
794
  if (typeof metadata.contentLength === 'number') {
1018
795
  updatedMetadata = new community_server_1.RepresentationMetadata(metadata);
@@ -1031,11 +808,17 @@ class MixDataAccessor {
1031
808
  // Save metadata to structured storage
1032
809
  try {
1033
810
  await this.structuredDataAccessor.writeMetadata(identifier, updatedMetadata);
811
+ if (indexableText !== undefined) {
812
+ await this.syncUnstructuredTextSearchIndex(identifier, indexableText, updatedMetadata);
813
+ }
1034
814
  }
1035
815
  catch (error) {
1036
816
  this.logger.error(`Error writing metadata for ${identifier.path}: ${error}`);
1037
817
  // Rollback: delete the unstructured data
1038
818
  await this.unstructuredDataAccessor.deleteResource(identifier);
819
+ if (indexableText !== undefined) {
820
+ await this.deleteSearchIndexes(identifier);
821
+ }
1039
822
  throw error;
1040
823
  }
1041
824
  }